diff --git a/_multibuild b/_multibuild new file mode 100644 index 0000000..fcc7b97 --- /dev/null +++ b/_multibuild @@ -0,0 +1,3 @@ + + test + diff --git a/libcst-1.4.0.tar.gz b/libcst-1.4.0.tar.gz deleted file mode 100644 index c9f9b32..0000000 --- a/libcst-1.4.0.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:449e0b16604f054fa7f27c3ffe86ea7ef6c409836fe68fe4e752a1894175db00 -size 771364 diff --git a/libcst-1.8.5.tar.gz b/libcst-1.8.5.tar.gz new file mode 100644 index 0000000..9878f5e --- /dev/null +++ b/libcst-1.8.5.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e72e1816eed63f530668e93a4c22ff1cf8b91ddce0ec53e597d3f6c53e103ec7 +size 884582 diff --git a/pyo3-022.patch b/pyo3-022.patch deleted file mode 100644 index 819aebc..0000000 --- a/pyo3-022.patch +++ /dev/null @@ -1,223 +0,0 @@ -From 03ca79632fe42ff2d4b22ed6d03c2289497e8d6c Mon Sep 17 00:00:00 2001 -From: Jelmer Vernooij -Date: Tue, 30 Jul 2024 15:34:55 +0000 -Subject: [PATCH] Upgrade pyo3 to 0.22 - ---- - .cargo/config.toml | 8 +++++++- - native/libcst/Cargo.toml | 2 +- - native/libcst/src/nodes/expression.rs | 13 +++++++------ - native/libcst/src/nodes/parser_config.rs | 2 +- - native/libcst/src/nodes/traits.rs | 2 +- - native/libcst/src/parser/errors.rs | 13 +++++++------ - native/libcst/src/py.rs | 2 +- - native/libcst_derive/src/into_py.rs | 15 +++++++++------ - 8 files changed, 34 insertions(+), 23 deletions(-) - ---- a/.cargo/config.toml -+++ b/.cargo/config.toml -@@ -8,4 +8,10 @@ rustflags = [ - rustflags = [ - "-C", "link-arg=-undefined", - "-C", "link-arg=dynamic_lookup", --] -\ No newline at end of file -+] -+ -+[source.crates-io] -+replace-with = "vendored-sources" -+ -+[source.vendored-sources] -+directory = "vendor" ---- a/native/libcst/Cargo.toml -+++ b/native/libcst/Cargo.toml -@@ -36,7 +36,7 @@ trace = ["peg/trace"] - - [dependencies] - paste = "1.0.9" --pyo3 = { version = "0.20", optional = true } -+pyo3 = { version = "0.22", optional = true } - thiserror = "1.0.37" - peg = "0.8.1" - chic = "1.2.2" ---- a/native/libcst/src/nodes/expression.rs -+++ b/native/libcst/src/nodes/expression.rs -@@ -2524,6 +2524,7 @@ impl<'r, 'a> Inflate<'a> for DeflatedNam - #[cfg(feature = "py")] - mod py { - -+ use pyo3::types::PyAnyMethods; - use pyo3::types::PyModule; - - use super::*; -@@ -2535,7 +2536,7 @@ mod py { - match self { - Self::Starred(s) => s.try_into_py(py), - Self::Simple { value, comma } => { -- let libcst = PyModule::import(py, "libcst")?; -+ let libcst = PyModule::import_bound(py, "libcst")?; - let kwargs = [ - Some(("value", value.try_into_py(py)?)), - comma -@@ -2547,11 +2548,11 @@ mod py { - .filter(|x| x.is_some()) - .map(|x| x.as_ref().unwrap()) - .collect::>() -- .into_py_dict(py); -+ .into_py_dict_bound(py); - Ok(libcst - .getattr("Element") - .expect("no Element found in libcst") -- .call((), Some(kwargs))? -+ .call((), Some(&kwargs))? - .into()) - } - } -@@ -2571,7 +2572,7 @@ mod py { - whitespace_before_colon, - .. - } => { -- let libcst = PyModule::import(py, "libcst")?; -+ let libcst = PyModule::import_bound(py, "libcst")?; - let kwargs = [ - Some(("key", key.try_into_py(py)?)), - Some(("value", value.try_into_py(py)?)), -@@ -2592,11 +2593,11 @@ mod py { - .filter(|x| x.is_some()) - .map(|x| x.as_ref().unwrap()) - .collect::>() -- .into_py_dict(py); -+ .into_py_dict_bound(py); - Ok(libcst - .getattr("DictElement") - .expect("no Element found in libcst") -- .call((), Some(kwargs))? -+ .call((), Some(&kwargs))? - .into()) - } - } ---- a/native/libcst/src/nodes/parser_config.rs -+++ b/native/libcst/src/nodes/parser_config.rs -@@ -125,7 +125,7 @@ fn parser_config_asdict<'py>(py: Python< - ("version", config.version.clone_ref(py)), - ("future_imports", config.future_imports.clone_ref(py)), - ] -- .into_py_dict(py) -+ .into_py_dict_bound(py) - } - - pub fn init_module(_py: Python, m: &PyModule) -> PyResult<()> { ---- a/native/libcst/src/nodes/traits.rs -+++ b/native/libcst/src/nodes/traits.rs -@@ -170,7 +170,7 @@ pub mod py { - .map(|x| x.try_into_py(py)) - .collect::>>()? - .into_iter(); -- Ok(PyTuple::new(py, converted).into()) -+ Ok(PyTuple::new_bound(py, converted).into()) - } - } - ---- a/native/libcst/src/parser/errors.rs -+++ b/native/libcst/src/parser/errors.rs -@@ -28,7 +28,7 @@ pub enum ParserError<'a> { - #[cfg(feature = "py")] - mod py_error { - -- use pyo3::types::{IntoPyDict, PyModule}; -+ use pyo3::types::{IntoPyDict, PyAnyMethods, PyModule}; - use pyo3::{IntoPy, PyErr, PyErrArguments, Python}; - - use super::ParserError; -@@ -65,13 +65,14 @@ mod py_error { - ("raw_line", (line + 1).into_py(py)), - ("raw_column", col.into_py(py)), - ] -- .into_py_dict(py); -- let libcst = PyModule::import(py, "libcst").expect("libcst cannot be imported"); -- PyErr::from_value( -+ .into_py_dict_bound(py); -+ let libcst = -+ PyModule::import_bound(py, "libcst").expect("libcst cannot be imported"); -+ PyErr::from_value_bound( - libcst - .getattr("ParserSyntaxError") - .expect("ParserSyntaxError not found") -- .call((), Some(kwargs)) -+ .call((), Some(&kwargs)) - .expect("failed to instantiate"), - ) - }) -@@ -86,7 +87,7 @@ mod py_error { - ("raw_line", self.raw_line.into_py(py)), - ("raw_column", self.raw_column.into_py(py)), - ] -- .into_py_dict(py) -+ .into_py_dict_bound(py) - .into_py(py) - } - } ---- a/native/libcst/src/py.rs -+++ b/native/libcst/src/py.rs -@@ -8,7 +8,7 @@ use pyo3::prelude::*; - - #[pymodule] - #[pyo3(name = "native")] --pub fn libcst_native(_py: Python, m: &PyModule) -> PyResult<()> { -+pub fn libcst_native(_py: Python, m: &Bound) -> PyResult<()> { - #[pyfn(m)] - fn parse_module(source: String, encoding: Option<&str>) -> PyResult { - let m = crate::parse_module(source.as_str(), encoding)?; ---- a/native/libcst_derive/src/into_py.rs -+++ b/native/libcst_derive/src/into_py.rs -@@ -38,12 +38,14 @@ fn impl_into_py_enum(ast: &DeriveInput, - let kwargs_toks = fields_to_kwargs(&var.fields, true); - toks.push(quote! { - Self::#varname { #(#fieldnames,)* .. } => { -- let libcst = pyo3::types::PyModule::import(py, "libcst")?; -+ use pyo3::types::PyAnyMethods; -+ -+ let libcst = pyo3::types::PyModule::import_bound(py, "libcst")?; - let kwargs = #kwargs_toks ; - Ok(libcst - .getattr(stringify!(#varname)) - .expect(stringify!(no #varname found in libcst)) -- .call((), Some(kwargs))? -+ .call((), Some(&kwargs))? - .into()) - } - }) -@@ -87,12 +89,13 @@ fn impl_into_py_struct(ast: &DeriveInput - #[automatically_derived] - impl#generics crate::nodes::traits::py::TryIntoPy for #ident #generics { - fn try_into_py(self, py: pyo3::Python) -> pyo3::PyResult { -- let libcst = pyo3::types::PyModule::import(py, "libcst")?; -+ use pyo3::types::PyAnyMethods; -+ let libcst = pyo3::types::PyModule::import_bound(py, "libcst")?; - let kwargs = #kwargs_toks ; - Ok(libcst - .getattr(stringify!(#ident)) - .expect(stringify!(no #ident found in libcst)) -- .call((), Some(kwargs))? -+ .call((), Some(&kwargs))? - .into()) - } - } -@@ -162,7 +165,7 @@ fn fields_to_kwargs(fields: &Fields, is_ - #(#optional_rust_varnames.map(|x| x.try_into_py(py)).transpose()?.map(|x| (stringify!(#optional_py_varnames), x)),)* - }; - if empty_kwargs { -- quote! { pyo3::types::PyDict::new(py) } -+ quote! { pyo3::types::PyDict::new_bound(py) } - } else { - quote! { - [ #kwargs_pairs #optional_pairs ] -@@ -170,7 +173,7 @@ fn fields_to_kwargs(fields: &Fields, is_ - .filter(|x| x.is_some()) - .map(|x| x.as_ref().unwrap()) - .collect::>() -- .into_py_dict(py) -+ .into_py_dict_bound(py) - } - } - } diff --git a/python-libcst.changes b/python-libcst.changes index 0a6a96d..a0ab8f1 100644 --- a/python-libcst.changes +++ b/python-libcst.changes @@ -1,3 +1,36 @@ +------------------------------------------------------------------- +Fri Oct 24 01:47:06 UTC 2025 - Steve Kowalik + +- Update to 1.8.5: + * Added + + Support parsing of t-strings + + add helper to convert nodes to matchers + + Allow configuring empty formatter lists in codemod CLI + + Enable support for free-threaded CPython + + Expose TypeAlias and TypeVar related structs in rust library + + FullyQualifiedNameProvider: Optionally consider pyproject.toml files + when determining a file's module name and package + + Add validation for If node + + include python 3.13 in build + * Fixed + + generate Attribute nodes when applying type annotations + + Avoid raising bare Exception + + fix various Match statement visitation errors + + Mention codemod -x flag in docs + + Clear warnings for each file in codemod cli + + Typo fix in codemods_tutorial.rst (trivial) + + fix certain matchers breaking under multiprocessing by initializing + them late + * Updated + + update pyo3 to 0.25 + + Replace multiprocessing with ProcessPoolExecutor + + Support pipe syntax for Union types in codegen + + Remove dependency on chic and upgrade annotate-snippets + + make libcst_native::tokenizer public +- Drop patch pyo3-022.patch, no longer required. +- Do not build the package when running the testsuite. +- Reinstate running the testsuite. + ------------------------------------------------------------------- Mon Sep 9 11:38:15 UTC 2024 - Matej Cepl diff --git a/python-libcst.spec b/python-libcst.spec index 5b77d6e..671616e 100644 --- a/python-libcst.spec +++ b/python-libcst.spec @@ -1,7 +1,7 @@ # # spec file for package python-libcst # -# Copyright (c) 2024 SUSE LLC +# Copyright (c) 2025 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,26 +17,24 @@ %global flavor @BUILD_FLAVOR@%{nil} -# %%if "%%{flavor}" == "test" -# %%define psuffix -test -# %%bcond_without test -# %%else +%if "%{flavor}" == "test" +%define psuffix -test +%bcond_without test +%else %define psuffix %{nil} %bcond_with test -# %%endif +%endif %define modname libcst %{?sle15_python_module_pythons} Name: python-libcst%{psuffix} -Version: 1.4.0 +Version: 1.8.5 Release: 0 Summary: Python 3.5+ concrete syntax tree with AST-like properties License: MIT URL: https://github.com/Instagram/LibCST Source0: https://files.pythonhosted.org/packages/source/l/libcst/%{modname}-%{version}.tar.gz Source1: vendor.tar.zst -# PATCH-FIX-UPSTREAM pyo3-022.patch gh#Instagram/LibCST!1180 mcepl@suse.com -# updgrade pyo3 to 0.22 version -Patch0: pyo3-022.patch +BuildRequires: %{python_module base >= 3.9} BuildRequires: %{python_module pip} BuildRequires: %{python_module setuptools-rust} BuildRequires: %{python_module setuptools_scm} @@ -48,18 +46,13 @@ BuildRequires: fdupes BuildRequires: python-rpm-macros BuildRequires: zstd Requires: python-PyYAML >= 5.2 -Requires: python-typing-inspect >= 0.4.0 -Requires: python-typing_extensions >= 3.7.4.2 -Requires: (python-dataclasses if python-base < 3.7) %if %{with test} # black and isort needed for tests and the code regeneration BuildRequires: %{python_module PyYAML >= 5.2} BuildRequires: %{python_module black} -BuildRequires: %{python_module dataclasses if %python-base < 3.7} BuildRequires: %{python_module hypothesis >= 4.36.0} BuildRequires: %{python_module hypothesmith >= 0.0.4} -BuildRequires: %{python_module typing-inspect >= 0.4.0} -BuildRequires: %{python_module typing_extensions >= 3.7.4.2} +BuildRequires: %{python_module libcst = %{version}} %endif %python_subpackages @@ -76,23 +69,26 @@ A concrete syntax tree with AST-like properties for Python 3.5+ programs. # libcst/tests/test_pyre_integration.py %build -export CARGO_NET_OFFLINE=true PROFILE=release +%if %{without test} +export CARGO_NET_OFFLINE=true PROFILE=release CARGO_HOME=$PWD/native/.cargo %pyproject_wheel +%endif %install +%if %{without test} export CARGO_NET_OFFLINE=true PROFILE=release %pyproject_install # gh#Instagram/LibCST#818 %{python_expand rm -rf %{buildroot}%{$python_sitearch}/libcst/tests %fdupes %{buildroot}%{$python_sitearch} } - -%clean +%endif %if %{with test} %check -%python_expand find %{buildroot}%{$python_sitearch} -name \*.so\* -%pyunittest_arch discover -v libcst/tests +pushd libcst/tests +%python_exec -m unittest discover -v +popd %endif %if %{without test} @@ -100,7 +96,7 @@ export CARGO_NET_OFFLINE=true PROFILE=release %doc README.rst %license LICENSE %{python_sitearch}/libcst -%{python_sitearch}/libcst-%{version}*-info +%{python_sitearch}/libcst-%{version}.dist-info %endif %changelog diff --git a/vendor.tar.zst b/vendor.tar.zst index f09a60a..170b51b 100644 --- a/vendor.tar.zst +++ b/vendor.tar.zst @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0612f718a0d5f7c7f0a70c6151c9370d6c5d51f9074a11c8c3df5d7bf650b655 -size 30171484 +oid sha256:fc48d77dd68bf12584bc4ae608325d50af1e4a22751797a95ada77963ffd25ee +size 7965759