Sync from SUSE:SLFO:Main python-libcst revision 36a4adaf11a02ae0c5ba1646e907ad4d

This commit is contained in:
Adrian Schröter 2024-12-13 11:43:24 +01:00
parent f235f8f5d0
commit 2c68d9e19d
12 changed files with 374 additions and 122 deletions

View File

@ -1,3 +0,0 @@
<multibuild>
<package>test</package>
</multibuild>

View File

@ -1,10 +1,7 @@
<services> <services>
<service name="cargo_vendor" mode="disabled"> <service name="cargo_vendor" mode="manual">
<param name="srcdir">libcst-0.4.9/native</param> <param name="srcdir">libcst-*.tar.gz</param>
<param name="compression">xz</param> <param name="cargotoml">native/Cargo.toml</param>
<param name="update">true</param> <param name="update">true</param>
</service> </service>
<service name="cargo_audit" mode="disabled">
<param name="srcdir">libcst-0.4.9/native</param>
</service>
</services> </services>

View File

@ -1,5 +0,0 @@
[source.crates-io]
replace-with = "vendored-sources"
[source.vendored-sources]
directory = "vendor"

BIN
libcst-0.4.9.tar.gz (Stored with Git LFS)

Binary file not shown.

BIN
libcst-1.4.0.tar.gz (Stored with Git LFS) Normal file

Binary file not shown.

223
pyo3-022.patch Normal file
View File

@ -0,0 +1,223 @@
From 03ca79632fe42ff2d4b22ed6d03c2289497e8d6c Mon Sep 17 00:00:00 2001
From: Jelmer Vernooij <jelmer@jelmer.uk>
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::<Vec<_>>()
- .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::<Vec<_>>()
- .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::<PyResult<Vec<_>>>()?
.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<PyModule>) -> PyResult<()> {
#[pyfn(m)]
fn parse_module(source: String, encoding: Option<&str>) -> PyResult<PyObject> {
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<pyo3::PyObject> for #ident #generics {
fn try_into_py(self, py: pyo3::Python) -> pyo3::PyResult<pyo3::PyObject> {
- 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::<Vec<_>>()
- .into_py_dict(py)
+ .into_py_dict_bound(py)
}
}
}

View File

@ -1,3 +1,112 @@
-------------------------------------------------------------------
Mon Sep 9 11:38:15 UTC 2024 - Matej Cepl <mcepl@cepl.eu>
- Add pyo3-022.patch bumping the dependency of pyo3 to 0.22
(gh#Instagram/LibCST!1180).
-------------------------------------------------------------------
Mon Jul 22 10:24:31 UTC 2024 - Matej Cepl <mcepl@cepl.eu>
- Upgrade to 1.4.0:
- Fix Literal parse error in RemoveImportsVisitor
- Don't reset context.scratch between files
- Various documentation fixes
Typo fix FullRepoManager
✏️ Fix tiny typo in docs/source/metadata.rst
✏️ Fix typo in docs/source/scope_tutorial.ipynb
Update CONTRIBUTING.md
- Add helper functions for common ways of filtering nodes
- Dump CST to .dot (graphviz) files
- Implement PEP-696
- Upgrade to 1.3.1:
- ImportError due to missing mypy_extensions dependency
- Upgrade to 1.3.0:
- Removed dependencies on typing_extensions and typing_inspect
- Temporarily switch off running of the test suite (gh#Instagram/LibCST#1176)
-------------------------------------------------------------------
Fri Mar 1 00:29:21 UTC 2024 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
- Update to version 1.2.0
* Upgrade pyo3 to 0.20
* Remove reference to distutil
* Add roundtrip tests from Python
* Fix parsing list matchers without explicit brackets
* Make readme example use python syntax highlighting
* Upgrade rust to version 1.70 in readthedocs config
* Update maturin requirement from <0.16,>=0.8.3 to >=0.8.3,<1.5
* Allow `Element::codegen` to be used by external users
* installing rustc/cargo for mybinder demo
* Update test_fix_pyre_directives.py
* remove 3.8 support
* Update syn to v2
* Set repository metadata entry for Rust crates
* upgrade flake8
* Update pyproject.toml for Python 3.12 support
* fix filepathprovider generic type
* Update README.rst
* Fix link in type_inference_provider.py
* Parse multiline expressions in f-strings
* Upgrade pyre
* eliminate relative paths from Cargo.toml
* Parse arbitrarily nested f-strings
* ScopeProvider: Record Access for Attributes and Decorators
* AddImportsVisitor: add imports before the first non-import statement
* Scope provider changes for type annotations
* add upper bound to pyo3 dependency
* scope_provider: Simplify parent resolution
* parser: remove Regexes from whitespace parser
* Add crate metadata
* Support files with mixed newlines
* PEP 695 - Type Parameter Syntax
* Remove need for regex in TextPosition::matches
* Fix readme's Python version requirement
* Switch to using thread_local regular expressions to avoid regex mutex contention
* Remove criterion-cycles-per-byte dependency and related benchmark measurement
* drop support for Python 3.7
* Don't gather dirs ending .py
* Don't insert duplicate imports
* Don't swallow trailing whitespace
* Allow pyo3 >=0.17
* Do not annotate the same variable multiple times in ApplyTypeAnnotationsVisitor
* Update changelog to 1.0.1
* Codemod CLI: Print diff only when there is a change
* Fix parsing of code without trailing newlines
* Fix whitespace, fstring, walrus related parse errors
* Fix Sentinal typo
* remove quotes around charset in .editorconfig
* Update maturin requirement from <0.14,>=0.8.3 to >=0.8.3,<0.16
* Fix type of `evaluated_value` on string to allow bytes
* Switch default parser implementation to native
* exclude native/target directory from sdist
* update changelog
* relax validation rules on decorators
* Fix crash on escaped backslashes in rf-string
* Fix pyre setup link in metadata.rst
* Support PEP 604 in ApplyTypeAnnotationsVisitor
* Fix spelling and grammar in some comments
* Fix ApplyTypeAnnotationsVisitor behavior on attribute assignments.
* Allow running codemods without configuring in YAML
* Ensure current Python interpreter is used for subprocesses
* Use subprocess.DEVNULL instead of opening os.devnull by hand
* PEP 621 + hatch to run tests/lint/etc
* Fix: relative imports from '' package are not allowed
* Add new FilePathProvider
* Use new setup-python caching actions
* Pass root path to FullyQualifiedNameProvider
* Script to regenerate test fixtures
* Add setuptools-rust to build requirements in setup.py
* Ignore common virtualenv names
* Fix Github issue 855 - fail to parse with statement
* fix PEP 604 union annotations in decorators
* Add py3.11 classifier
- Update _service file
* remove obsoleted mode "disabled" to "manual"
* adopt new obs-service-cargo packaging method
- Remove patches
* remove-ufmt-dep.patch
* replace-python-call.patch
------------------------------------------------------------------- -------------------------------------------------------------------
Fri Apr 21 12:27:55 UTC 2023 - Dirk Müller <dmueller@suse.com> Fri Apr 21 12:27:55 UTC 2023 - Dirk Müller <dmueller@suse.com>

View File

@ -1,7 +1,7 @@
# #
# spec file # spec file for package python-libcst
# #
# Copyright (c) 2023 SUSE LLC # Copyright (c) 2024 SUSE LLC
# #
# All modifications and additions to the file contributed by third parties # All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed # remain the property of their copyright owners, unless otherwise agreed
@ -16,32 +16,28 @@
# #
%define skip_python2 1
%define rustflags '-Clink-arg=-Wl,-z,relro,-z,now'
%global flavor @BUILD_FLAVOR@%{nil} %global flavor @BUILD_FLAVOR@%{nil}
%if "%{flavor}" == "test" # %%if "%%{flavor}" == "test"
%define psuffix -test # %%define psuffix -test
%bcond_without test # %%bcond_without test
%else # %%else
%define psuffix %{nil} %define psuffix %{nil}
%bcond_with test %bcond_with test
%endif # %%endif
%define modname libcst %define modname libcst
%{?sle15_python_module_pythons} %{?sle15_python_module_pythons}
Name: python-libcst%{psuffix} Name: python-libcst%{psuffix}
Version: 0.4.9 Version: 1.4.0
Release: 0 Release: 0
Summary: Python 3.5+ concrete syntax tree with AST-like properties Summary: Python 3.5+ concrete syntax tree with AST-like properties
License: MIT License: MIT
URL: https://github.com/Instagram/LibCST URL: https://github.com/Instagram/LibCST
Source0: https://files.pythonhosted.org/packages/source/l/%{modname}/%{modname}-%{version}.tar.gz Source0: https://files.pythonhosted.org/packages/source/l/libcst/%{modname}-%{version}.tar.gz
Source1: vendor.tar.xz Source1: vendor.tar.zst
Source2: cargo_config # PATCH-FIX-UPSTREAM pyo3-022.patch gh#Instagram/LibCST!1180 mcepl@suse.com
# PATCH-FIX-OPENSUSE remove-ufmt-dep.patch python-ufmt package doesn't exists in Tumbleweed # updgrade pyo3 to 0.22 version
Patch0: remove-ufmt-dep.patch Patch0: pyo3-022.patch
# PATCH-FIX-OPENSUSE replace-python-call.patch BuildRequires: %{python_module pip}
# wrong executable call when outside of venv (gh#Instagram/LibCST#468)
Patch1: replace-python-call.patch
BuildRequires: %{python_module setuptools-rust} BuildRequires: %{python_module setuptools-rust}
BuildRequires: %{python_module setuptools_scm} BuildRequires: %{python_module setuptools_scm}
BuildRequires: %{python_module setuptools} BuildRequires: %{python_module setuptools}
@ -50,7 +46,7 @@ BuildRequires: cargo
BuildRequires: cargo-packaging BuildRequires: cargo-packaging
BuildRequires: fdupes BuildRequires: fdupes
BuildRequires: python-rpm-macros BuildRequires: python-rpm-macros
BuildRequires: rust BuildRequires: zstd
Requires: python-PyYAML >= 5.2 Requires: python-PyYAML >= 5.2
Requires: python-typing-inspect >= 0.4.0 Requires: python-typing-inspect >= 0.4.0
Requires: python-typing_extensions >= 3.7.4.2 Requires: python-typing_extensions >= 3.7.4.2
@ -71,52 +67,40 @@ BuildRequires: %{python_module typing_extensions >= 3.7.4.2}
A concrete syntax tree with AST-like properties for Python 3.5+ programs. A concrete syntax tree with AST-like properties for Python 3.5+ programs.
%prep %prep
%setup -q -n libcst-%{version} %autosetup -a1 -n libcst-%{version} -p1
tar x -C native/ -f %{SOURCE1}
cp -rf native/vendor vendor
mkdir -p .cargo && echo "" >> .cargo/config.toml && cat %{SOURCE2} >>.cargo/config.toml
pushd native # # Depends on optional pyre
mkdir -p .cargo # rm \
cat %{SOURCE2} >>.cargo/config.toml # libcst/metadata/tests/test_type_inference_provider.py \
popd # libcst/metadata/tests/test_full_repo_manager.py \
# libcst/tests/test_pyre_integration.py
%autopatch -p1
# Depends on optional pyre
rm \
libcst/metadata/tests/test_type_inference_provider.py \
libcst/metadata/tests/test_full_repo_manager.py \
libcst/tests/test_pyre_integration.py
# gh#Instagram/LibCST#467
sed -i -e 's/import AbstractBaseMatcherNodeMeta/import Optional, AbstractBaseMatcherNodeMeta/' libcst/codegen/gen_matcher_classes.py
%if !%{with test}
%build %build
export CARGO_NET_OFFLINE=true PROFILE=release export CARGO_NET_OFFLINE=true PROFILE=release
%python_build %pyproject_wheel
%endif
%install %install
%if !%{with test}
export CARGO_NET_OFFLINE=true PROFILE=release export CARGO_NET_OFFLINE=true PROFILE=release
%python_install %pyproject_install
%python_expand %fdupes %{buildroot}%{$python_sitearch} # gh#Instagram/LibCST#818
%endif %{python_expand rm -rf %{buildroot}%{$python_sitearch}/libcst/tests
%fdupes %{buildroot}%{$python_sitearch}
}
%clean
%if %{with test} %if %{with test}
%check %check
%python_exec -m libcst.codegen.generate all %python_expand find %{buildroot}%{$python_sitearch} -name \*.so\*
%pyunittest -v %pyunittest_arch discover -v libcst/tests
%endif %endif
%if !%{with test} %if %{without test}
%files %{python_files} %files %{python_files}
%doc README.rst %doc README.rst
%license LICENSE %license LICENSE
%{python_sitearch}/libcst %{python_sitearch}/libcst
%{python_sitearch}/libcst-%{version}-py*.egg-info %{python_sitearch}/libcst-%{version}*-info
%endif %endif
%changelog %changelog

View File

@ -1,17 +0,0 @@
Index: libcst-0.4.9/libcst/codegen/generate.py
===================================================================
--- libcst-0.4.9.orig/libcst/codegen/generate.py
+++ libcst-0.4.9/libcst/codegen/generate.py
@@ -25,8 +25,10 @@ from libcst.codegen.transforms import (
def format_file(fname: str) -> None:
- with open(os.devnull, "w") as devnull:
- subprocess.check_call(["ufmt", "format", fname], stdout=devnull, stderr=devnull)
+ # Do not format to avoid ufmt dependency that's not yet in opensuse
+ pass
+ # with open(os.devnull, "w") as devnull:
+ # subprocess.check_call(["ufmt", "format", fname], stdout=devnull, stderr=devnull)
def clean_generated_code(code: str) -> str:

View File

@ -1,36 +0,0 @@
---
libcst/codegen/generate.py | 2 +-
libcst/codemod/tests/test_codemod_cli.py | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
--- a/libcst/codegen/generate.py
+++ b/libcst/codegen/generate.py
@@ -69,7 +69,7 @@ def codegen_visitors() -> None:
# by attempting to run codegen again in a new process.
with open(os.devnull, "w") as devnull:
subprocess.check_call(
- ["python3", "-m", "libcst.codegen.gen_visitor_functions"],
+ [sys.executable, "-m", "libcst.codegen.gen_visitor_functions"],
cwd=base,
stdout=devnull,
)
--- a/libcst/codemod/tests/test_codemod_cli.py
+++ b/libcst/codemod/tests/test_codemod_cli.py
@@ -4,7 +4,7 @@
# LICENSE file in the root directory of this source tree.
#
-
+import sys
import subprocess
from pathlib import Path
@@ -16,7 +16,7 @@ class TestCodemodCLI(UnitTest):
def test_codemod_formatter_error_input(self) -> None:
rlt = subprocess.run(
[
- "python",
+ sys.executable,
"-m",
"libcst.tool",
"codemod",

BIN
vendor.tar.xz (Stored with Git LFS)

Binary file not shown.

BIN
vendor.tar.zst (Stored with Git LFS) Normal file

Binary file not shown.