From f741dbc0a66a04caba24df855b5f72b5f0abf2f3 Mon Sep 17 00:00:00 2001 From: Ben Mares Date: Sun, 11 Feb 2024 14:52:09 +0100 Subject: [PATCH 01/21] Replace Black with ruff format --- .pre-commit-config.yaml | 7 +------ environments/dev-environment.yaml | 1 - 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5f81c738..0bc3a615 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -12,17 +12,12 @@ repos: exclude: "^.*\\.patch$" - id: check-ast -- repo: https://github.com/psf/black - rev: 24.1.1 - hooks: - - id: black - language_version: python3 - - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.2.0 hooks: - id: ruff args: [--fix, --exit-non-zero-on-fix] + - id: ruff-format - repo: https://github.com/pre-commit/mirrors-mypy rev: v1.8.0 diff --git a/environments/dev-environment.yaml b/environments/dev-environment.yaml index 35c67b6c..d4309d07 100644 --- a/environments/dev-environment.yaml +++ b/environments/dev-environment.yaml @@ -9,7 +9,6 @@ channels: - nodefaults dependencies: - mamba -- black - check-manifest - doctr - filelock From 09b1f9860e49cc8d0161647598841dad3ddfbe51 Mon Sep 17 00:00:00 2001 From: Ben Mares Date: Sun, 11 Feb 2024 14:54:32 +0100 Subject: [PATCH 02/21] Fix line length --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index a6eddb90..594db8bb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -177,7 +177,7 @@ ignore = [ "RUF012", "RUF015", ] -line-length = 89 +line-length = 88 select = [ "A", # flake8-builtins # "B", # flake8-bugbear From 4709da36ea18c20c9fdfb2bf05923e7873dd8210 Mon Sep 17 00:00:00 2001 From: Ben Mares Date: Sun, 11 Feb 2024 14:57:44 +0100 Subject: [PATCH 03/21] Migrate ruff to use [tool.ruff.lint] --- pyproject.toml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 594db8bb..693b3a25 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -159,6 +159,9 @@ cachecontrol-with-filecache = ">=0.12.9" [tool.ruff] target-version = "py38" +line-length = 88 + +[tool.ruff.lint] ignore = [ "E501", "F401", @@ -177,7 +180,6 @@ ignore = [ "RUF012", "RUF015", ] -line-length = 88 select = [ "A", # flake8-builtins # "B", # flake8-bugbear @@ -191,10 +193,10 @@ select = [ "W", # pycodestyle warnings ] -[tool.ruff.mccabe] +[tool.ruff.lint.mccabe] max-complexity = 18 -[tool.ruff.isort] +[tool.ruff.lint.isort] lines-after-imports = 2 lines-between-types = 1 known-first-party = ["attr"] From 8076d94eb03152dfb12bafd6f52932877e075078 Mon Sep 17 00:00:00 2001 From: Ben Mares Date: Sun, 11 Feb 2024 14:58:35 +0100 Subject: [PATCH 04/21] Apply new formatting --- conda_lock/lockfile/__init__.py | 2 +- conda_lock/lockfile/v1/models.py | 3 ++- conda_lock/lookup.py | 4 +--- conda_lock/pypi_solver.py | 4 ++-- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/conda_lock/lockfile/__init__.py b/conda_lock/lockfile/__init__.py index 99bb3967..18c30772 100644 --- a/conda_lock/lockfile/__init__.py +++ b/conda_lock/lockfile/__init__.py @@ -63,7 +63,7 @@ def apply_categories( by_category = defaultdict(list) def extract_planned_items( - planned_items: Union[List[LockedDependency], LockedDependency] + planned_items: Union[List[LockedDependency], LockedDependency], ) -> List[LockedDependency]: if not isinstance(planned_items, list): return [planned_items] diff --git a/conda_lock/lockfile/v1/models.py b/conda_lock/lockfile/v1/models.py index 83ba9c44..524fe47e 100644 --- a/conda_lock/lockfile/v1/models.py +++ b/conda_lock/lockfile/v1/models.py @@ -134,7 +134,8 @@ def create( most_recent_datetime: Optional[datetime.datetime] = None for src_file in src_files: relative_src_file_path = relative_path( - pathlib.Path(repo.working_tree_dir), src_file # type: ignore + pathlib.Path(repo.working_tree_dir), # type: ignore + src_file, ) commit = list( repo.iter_commits(paths=relative_src_file_path, max_count=1) diff --git a/conda_lock/lookup.py b/conda_lock/lookup.py index a7f6df11..60fa33d7 100644 --- a/conda_lock/lookup.py +++ b/conda_lock/lookup.py @@ -17,9 +17,7 @@ class MappingEntry(TypedDict): class _LookupLoader: - _mapping_url: str = ( - "https://raw.githubusercontent.com/regro/cf-graph-countyfair/master/mappings/pypi/grayskull_pypi_mapping.yaml" - ) + _mapping_url: str = "https://raw.githubusercontent.com/regro/cf-graph-countyfair/master/mappings/pypi/grayskull_pypi_mapping.yaml" @property def mapping_url(self) -> str: diff --git a/conda_lock/pypi_solver.py b/conda_lock/pypi_solver.py index ba9e4012..a4dc1e2a 100644 --- a/conda_lock/pypi_solver.py +++ b/conda_lock/pypi_solver.py @@ -129,7 +129,7 @@ def get_marker_env(self) -> Dict[str, str]: def _extract_glibc_version_from_virtual_packages( - platform_virtual_packages: Dict[str, dict] + platform_virtual_packages: Dict[str, dict], ) -> Optional[Version]: """Get the glibc version from the "package" repodata of a chosen platform. @@ -189,7 +189,7 @@ def _glibc_version_from_manylinux_tag(tag: str) -> Version: def _compute_compatible_manylinux_tags( - platform_virtual_packages: Optional[Dict[str, dict]] + platform_virtual_packages: Optional[Dict[str, dict]], ) -> List[str]: """Determine the manylinux tags that are compatible with the given platform. From 8c8d68d2a704148129f65c251df418c71fb3b98d Mon Sep 17 00:00:00 2001 From: Ben Mares Date: Sun, 11 Feb 2024 15:07:36 +0100 Subject: [PATCH 05/21] Add more type stubs --- .pre-commit-config.yaml | 2 ++ environments/dev-environment.yaml | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0bc3a615..da45fabb 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -32,4 +32,6 @@ repos: - types-freezegun - types-setuptools - pydantic + - types-pygments + - types-colorama exclude: ^(tests/test-local-pip/setup.py$|tests/test_conda_lock.py) diff --git a/environments/dev-environment.yaml b/environments/dev-environment.yaml index d4309d07..dab5370a 100644 --- a/environments/dev-environment.yaml +++ b/environments/dev-environment.yaml @@ -33,3 +33,9 @@ dependencies: - gitpython - pip - requests-mock +- types-filelock +- types-requests +- types-toml +- types-PyYAML +- types-freezegun +- types-setuptools From 200cce3cb4a2c2da27b451f7e2b824b8cd81d7e4 Mon Sep 17 00:00:00 2001 From: Ben Mares Date: Sun, 11 Feb 2024 16:38:23 +0100 Subject: [PATCH 06/21] Alphabetize dependencies --- .pre-commit-config.yaml | 14 +++++++------- environments/dev-environment.yaml | 30 +++++++++++++++--------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index da45fabb..26a8db68 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -24,14 +24,14 @@ repos: hooks: - id: mypy additional_dependencies: - - types-filelock - - types-requests - - types-toml - - types-PyYAML + - pydantic - pytest + - types-colorama + - types-filelock - types-freezegun - - types-setuptools - - pydantic + - types-requests - types-pygments - - types-colorama + - types-pyyaml + - types-setuptools + - types-toml exclude: ^(tests/test-local-pip/setup.py$|tests/test_conda_lock.py) diff --git a/environments/dev-environment.yaml b/environments/dev-environment.yaml index dab5370a..27dc7526 100644 --- a/environments/dev-environment.yaml +++ b/environments/dev-environment.yaml @@ -8,34 +8,34 @@ channels: - conda-forge - nodefaults dependencies: -- mamba - check-manifest +- docker-py - doctr - filelock -- python-build +- flaky - freezegun -- ruff +- gitpython +- mamba +- mkdocs +- mkdocs-click +- mkdocs-material +- mkdocs-include-markdown-plugin - mypy +- pip - pre-commit - pytest - pytest-cov -- pytest-xdist - pytest-timeout +- pytest-xdist +- python-build +- requests-mock +- ruff - tomli - twine -- wheel -- mkdocs -- mkdocs-material -- mkdocs-click -- mkdocs-include-markdown-plugin -- flaky -- docker-py -- gitpython -- pip -- requests-mock - types-filelock - types-requests - types-toml -- types-PyYAML +- types-pyyaml - types-freezegun - types-setuptools +- wheel From dbce103245c048f39834d72716a8d5d09fbe325a Mon Sep 17 00:00:00 2001 From: Ben Mares Date: Sun, 11 Feb 2024 19:17:31 +0100 Subject: [PATCH 07/21] Remove distutils from test-local-pip test-package --- tests/test-local-pip/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test-local-pip/setup.py b/tests/test-local-pip/setup.py index 00f14f8e..2fc1abf0 100644 --- a/tests/test-local-pip/setup.py +++ b/tests/test-local-pip/setup.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -from distutils.core import setup +from setuptools import setup setup( From bef9b5a9cbbc5b37e48c2a19f9473b1f7ecdff27 Mon Sep 17 00:00:00 2001 From: Ben Mares Date: Sun, 11 Feb 2024 19:26:30 +0100 Subject: [PATCH 08/21] Remove extraneous instances of # type: ignore --- conda_lock/conda_solver.py | 2 +- conda_lock/lockfile/v1/models.py | 9 +++++---- conda_lock/models/channel.py | 2 +- conda_lock/pypi_solver.py | 2 +- conda_lock/src_parser/conda_common.py | 4 ++-- conda_lock/src_parser/meta_yaml.py | 5 +++-- conda_lock/src_parser/pyproject_toml.py | 4 ++-- tests/test_conda_lock.py | 13 ++++++------- 8 files changed, 21 insertions(+), 20 deletions(-) diff --git a/conda_lock/conda_solver.py b/conda_lock/conda_solver.py index bc014cb5..775ca3f4 100644 --- a/conda_lock/conda_solver.py +++ b/conda_lock/conda_solver.py @@ -436,7 +436,7 @@ def update_specs_for_arch( ) ) } - spec_for_name = {MatchSpec(v).name: v for v in specs} # type: ignore + spec_for_name = {MatchSpec(v).name: v for v in specs} # pyright: ignore to_update = [ spec_for_name[name] for name in set(installed).intersection(update) ] diff --git a/conda_lock/lockfile/v1/models.py b/conda_lock/lockfile/v1/models.py index 524fe47e..6c24f03e 100644 --- a/conda_lock/lockfile/v1/models.py +++ b/conda_lock/lockfile/v1/models.py @@ -121,6 +121,7 @@ def create( ) -> "GitMeta | None": try: import git + import git.exc except ImportError: return None @@ -129,7 +130,7 @@ def create( git_user_email: "str | None" = None try: - repo = git.Repo(search_parent_directories=True) # type: ignore + repo = git.Repo(search_parent_directories=True) if MetadataOption.GitSha in metadata_choices: most_recent_datetime: Optional[datetime.datetime] = None for src_file in src_files: @@ -158,7 +159,7 @@ def create( git_user_name = repo.config_reader().get_value("user", "name", None) # type: ignore if MetadataOption.GitUserEmail in metadata_choices: git_user_email = repo.config_reader().get_value("user", "email", None) # type: ignore - except git.exc.InvalidGitRepositoryError: # type: ignore + except git.exc.InvalidGitRepositoryError: pass if any([git_sha, git_user_name, git_user_email]): @@ -283,13 +284,13 @@ def __or__(self, other: "LockMeta") -> "LockMeta": @validator("channels", pre=True, always=True) def ensure_channels(cls, v: List[Union[str, Channel]]) -> List[Channel]: - res = [] + res: List[Channel] = [] for e in v: if isinstance(e, str): res.append(Channel.from_string(e)) else: res.append(e) - return typing.cast(List[Channel], res) + return res class Lockfile(StrictModel): diff --git a/conda_lock/models/channel.py b/conda_lock/models/channel.py index 9434b1d9..aa296c17 100644 --- a/conda_lock/models/channel.py +++ b/conda_lock/models/channel.py @@ -90,7 +90,7 @@ def __repr_args__(self: BaseModel) -> "ReprArgs": class Channel(ZeroValRepr, BaseModel): - model_config = ConfigDict(frozen=True) # type: ignore + model_config = ConfigDict(frozen=True) url: str used_env_vars: FrozenSet[str] = Field(default=frozenset()) diff --git a/conda_lock/pypi_solver.py b/conda_lock/pypi_solver.py index a4dc1e2a..1491230a 100644 --- a/conda_lock/pypi_solver.py +++ b/conda_lock/pypi_solver.py @@ -479,7 +479,7 @@ def solve_pypi( installed=installed, locked=locked, # ConsoleIO type is expected, but NullIO may be given: - io=io, # type: ignore + io=io, # pyright: ignore ) to_update = list( {spec.name for spec in pip_locked.values()}.intersection(use_latest) diff --git a/conda_lock/src_parser/conda_common.py b/conda_lock/src_parser/conda_common.py index a7929373..10b9346d 100644 --- a/conda_lock/src_parser/conda_common.py +++ b/conda_lock/src_parser/conda_common.py @@ -13,7 +13,7 @@ def conda_spec_to_versioned_dep(spec: str, category: str) -> VersionedDependency """ try: - ms = MatchSpec(spec) # type: ignore # This is done in the metaclass for the matchspec + ms = MatchSpec(spec) # pyright: ignore # This is done in the metaclass for the matchspec except Exception as e: raise RuntimeError(f"Failed to turn `{spec}` into a MatchSpec") from e @@ -24,7 +24,7 @@ def conda_spec_to_versioned_dep(spec: str, category: str) -> VersionedDependency channel_str = None return VersionedDependency( name=ms.name, - version=ms.get("version", ""), + version=ms.get("version") or "", manager="conda", category=category, extras=[], diff --git a/conda_lock/src_parser/meta_yaml.py b/conda_lock/src_parser/meta_yaml.py index 95a4bf74..d2db1adf 100644 --- a/conda_lock/src_parser/meta_yaml.py +++ b/conda_lock/src_parser/meta_yaml.py @@ -56,7 +56,8 @@ def __getattr__(self, k: str) -> "UndefinedNeverFail": try: return object.__getattr__(self, k) # type: ignore except AttributeError: - return self._return_undefined(self._undefined_name + "." + k) # type: ignore + assert self._undefined_name is not None + return self._return_undefined(self._undefined_name + "." + k) # Unlike the methods above, Python requires that these # few methods must always return the correct type @@ -66,7 +67,7 @@ def __getattr__(self, k: str) -> "UndefinedNeverFail": __float__ = lambda self: self._return_value(0.0) # type: ignore # noqa: E731 __nonzero__ = lambda self: self._return_value(False) # noqa: E731 - def _return_undefined(self, result_name: str) -> "UndefinedNeverFail": # type: ignore + def _return_undefined(self, result_name: str) -> "UndefinedNeverFail": # Record that this undefined variable was actually used. UndefinedNeverFail.all_undefined_names.append(self._undefined_name) return UndefinedNeverFail( diff --git a/conda_lock/src_parser/pyproject_toml.py b/conda_lock/src_parser/pyproject_toml.py index fcb23e1f..08aca07c 100644 --- a/conda_lock/src_parser/pyproject_toml.py +++ b/conda_lock/src_parser/pyproject_toml.py @@ -442,9 +442,9 @@ def parse_python_requirement( vcs="git", rev=rev, ) - elif parsed_req.url: # type: ignore[attr-defined] + elif parsed_req.url: assert conda_version in {"", "*", None} - url, frag = urldefrag(parsed_req.url) # type: ignore[attr-defined] + url, frag = urldefrag(parsed_req.url) return URLDependency( name=conda_dep_name, manager=manager, diff --git a/tests/test_conda_lock.py b/tests/test_conda_lock.py index 5233e50d..900a6605 100644 --- a/tests/test_conda_lock.py +++ b/tests/test_conda_lock.py @@ -770,9 +770,7 @@ def test_parse_poetry_skip_non_conda_lock( def test_parse_poetry_git(poetry_pyproject_toml_git: Path): res = parse_pyproject_toml(poetry_pyproject_toml_git, ["linux-64"]) - specs = { - dep.name: typing.cast(Dependency, dep) for dep in res.dependencies["linux-64"] - } + specs = {dep.name: dep for dep in res.dependencies["linux-64"]} assert isinstance(specs["pydantic"], VCSDependency) assert specs["pydantic"].vcs == "git" @@ -1167,11 +1165,12 @@ def test_run_lock_with_git_metadata( monkeypatch.setenv("CONDA_FLAGS", "-v") import git + import git.exc try: - repo = git.Repo(search_parent_directories=True) # type: ignore - except git.exc.InvalidGitRepositoryError: # type: ignore - repo = git.Repo.init() # type: ignore + repo = git.Repo(search_parent_directories=True) + except git.exc.InvalidGitRepositoryError: + repo = git.Repo.init() repo.index.add([git_metadata_zlib_environment]) repo.index.commit( "temporary commit for running via github actions without failure" @@ -1661,7 +1660,7 @@ def test_run_with_channel_inversion( lockfile = parse_conda_lock_file(channel_inversion.parent / DEFAULT_LOCKFILE_NAME) for package in lockfile.package: if package.name == "cuda-python": - ms = MatchSpec(package.url) # type: ignore + ms = MatchSpec(package.url) # pyright: ignore assert ms.get("channel") == "conda-forge" break else: From 348e6fd483e5358b79a3c1891b531ee7842c69ba Mon Sep 17 00:00:00 2001 From: Ben Mares Date: Sun, 11 Feb 2024 21:41:29 +0100 Subject: [PATCH 09/21] Clean up pre-commit-config --- .pre-commit-config.yaml | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 26a8db68..be8780d6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -2,15 +2,18 @@ ci: autofix_prs: false -exclude: ^conda_lock/_vendor/.*$ - repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.5.0 hooks: - id: trailing-whitespace - exclude: "^.*\\.patch$" + exclude: | + (?x)^( + .*\.patch$ + | ^conda_lock/_vendor/ + ) - id: check-ast + exclude: ^conda_lock/_vendor/conda/_vendor/appdirs\.py$ - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.2.0 @@ -24,8 +27,13 @@ repos: hooks: - id: mypy additional_dependencies: + - gitpython + - jinja2 - pydantic - pytest + - ruamel.yaml + - types-click + - types-click-default-group - types-colorama - types-filelock - types-freezegun @@ -34,4 +42,14 @@ repos: - types-pyyaml - types-setuptools - types-toml - exclude: ^(tests/test-local-pip/setup.py$|tests/test_conda_lock.py) + # pre-commit provides all the files explicitly so setting exclude in mypy.ini doesn't work. + exclude: | + (?x)^( + ^conda_lock/_vendor/.*\.pyi$ + | ^tests/test-local-pip/setup\.py$ + | ^tests/test-pip-repositories/fake-private-package-1\.0\.0/setup\.py$ + ) + # First exclude is due to: + # conda_lock/_vendor/conda/__init__.py: error: Duplicate module named "conda_lock._vendor.conda" (also at "conda_lock/_vendor/conda.pyi") + # Second two excludes are due to: + # tests/test-pip-repositories/fake-private-package-1.0.0/setup.py: error: Duplicate module named "setup" (also at "tests/test-local-pip/setup.py") From 4318a219c75058ccbcb92aa08dd253867b2925d3 Mon Sep 17 00:00:00 2001 From: Ben Mares Date: Sun, 11 Feb 2024 21:42:28 +0100 Subject: [PATCH 10/21] Ruff exclude conda_lock/_vendor --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 693b3a25..cb3330e2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -160,6 +160,7 @@ cachecontrol-with-filecache = ">=0.12.9" [tool.ruff] target-version = "py38" line-length = 88 +extend-exclude = ["conda_lock/_vendor"] [tool.ruff.lint] ignore = [ From 2e7f1b8b04c81da160d320c3ab73f9fca9ed32f4 Mon Sep 17 00:00:00 2001 From: Ben Mares Date: Sun, 11 Feb 2024 21:42:52 +0100 Subject: [PATCH 11/21] Clean up mypy.ini --- mypy.ini | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/mypy.ini b/mypy.ini index cef8d3b0..99790f2b 100644 --- a/mypy.ini +++ b/mypy.ini @@ -1,16 +1,27 @@ [mypy] plugins = pydantic.mypy -# disallow_untyped_calls = true -# disallow_untyped_decorators = false disallow_untyped_defs = false disallow_untyped_calls = false disallow_untyped_decorators = false disallow_incomplete_defs = false check_untyped_defs = true +strict_equality = true +warn_redundant_casts = true +warn_unused_ignores = true + +# First two excludes are due to: +# tests/test-pip-repositories/fake-private-package-1.0.0/setup.py: error: Duplicate module named "setup" (also at "tests/test-local-pip/setup.py") +# Third exclude is due to: +# error: Cannot find implementation or library stub for module named "migrate_code" [import-not-found] exclude = (?x)( - tests/test-local-pip/setup.py + ^tests/test-pip-repositories/fake-private-package-1.0.0/setup\.py$ + | ^tests/test-local-pip/setup\.py$ + | ^conda_lock/scripts/vendor_poetry/ ) +# https://github.com/python/mypy/issues/12664 +incremental = false + [mypy-conda_lock.*] disallow_untyped_defs = true # disallow_untyped_calls = true @@ -18,6 +29,7 @@ disallow_untyped_defs = true disallow_incomplete_defs = true [pydantic-mypy] +# init_forbid_extra = True init_typed = True warn_required_dynamic_aliases = True @@ -26,22 +38,11 @@ warn_untyped_fields = True [mypy-conda_lock._vendor.*] ignore_errors = True -[mypy-poetry.*] -ignore_missing_imports = True - [mypy-clikit.*] ignore_missing_imports = True [mypy-docker.*] ignore_missing_imports = True -[mypy-ensureconda.*] -ignore_missing_imports = True - [mypy-flaky.*] ignore_missing_imports = True - -[mypy-click_default_group.*] -ignore_missing_imports = True - -[mypy-tests.*] From a6b32bd6052501f37e97cb10c35479bccd996ac6 Mon Sep 17 00:00:00 2001 From: Ben Mares Date: Sun, 11 Feb 2024 21:43:40 +0100 Subject: [PATCH 12/21] Add more type stubs to dev environment --- environments/dev-environment.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/environments/dev-environment.yaml b/environments/dev-environment.yaml index 27dc7526..e6f6b26f 100644 --- a/environments/dev-environment.yaml +++ b/environments/dev-environment.yaml @@ -32,6 +32,7 @@ dependencies: - ruff - tomli - twine +- types-click - types-filelock - types-requests - types-toml @@ -39,3 +40,5 @@ dependencies: - types-freezegun - types-setuptools - wheel +- pip: + - types-click-default-group From af0180266b1d0b97e53b664c74ac10beddab9ebb Mon Sep 17 00:00:00 2001 From: Ben Mares Date: Sun, 11 Feb 2024 21:44:16 +0100 Subject: [PATCH 13/21] Add a few more typing fixes --- conda_lock/click_helpers.py | 6 +++--- conda_lock/conda_lock.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/conda_lock/click_helpers.py b/conda_lock/click_helpers.py index b0562f74..b066c27a 100644 --- a/conda_lock/click_helpers.py +++ b/conda_lock/click_helpers.py @@ -1,5 +1,5 @@ from collections import OrderedDict -from typing import Any, Mapping, Optional +from typing import Any, Dict, Optional import click @@ -10,12 +10,12 @@ class OrderedGroup(DefaultGroup): def __init__( self, name: Optional[str] = None, - commands: Optional[Mapping[str, click.Command]] = None, + commands: Optional[Dict[str, click.Command]] = None, **kwargs: Any, ): super(OrderedGroup, self).__init__(name, commands, **kwargs) #: the registered subcommands by their exported names. self.commands = commands or OrderedDict() - def list_commands(self, ctx: click.Context) -> Mapping[str, click.Command]: + def list_commands(self, ctx: click.Context) -> Dict[str, click.Command]: return self.commands diff --git a/conda_lock/conda_lock.py b/conda_lock/conda_lock.py index 14f603e1..a7659d3f 100644 --- a/conda_lock/conda_lock.py +++ b/conda_lock/conda_lock.py @@ -1341,7 +1341,7 @@ def lock( metadata_yamls = [pathlib.Path(path) for path in metadata_yamls] # bail out if we do not encounter the default file if no files were passed - if ctx.get_parameter_source("files") == click.core.ParameterSource.DEFAULT: + if ctx.get_parameter_source("files") == click.core.ParameterSource.DEFAULT: # type: ignore candidates = list(files) candidates += [f.with_name(f.name.replace(".yml", ".yaml")) for f in candidates] for f in candidates: From c97e09464cfe313fc980b82b5880b75682b853a1 Mon Sep 17 00:00:00 2001 From: maresb <15216687+maresb@users.noreply.github.com> Date: Sun, 11 Feb 2024 20:49:01 +0000 Subject: [PATCH 14/21] Relock dependencies --- environments/conda-lock.yml | 1005 ++++++++++++++++++++++++++--------- 1 file changed, 760 insertions(+), 245 deletions(-) diff --git a/environments/conda-lock.yml b/environments/conda-lock.yml index 843e98fd..271205f0 100644 --- a/environments/conda-lock.yml +++ b/environments/conda-lock.yml @@ -15,11 +15,11 @@ version: 1 metadata: content_hash: - linux-64: a9ef6a1afb270e9781dca69476136b3d34cf66323fb35323a464e617f4a7b71f - osx-64: 82b3f1259b1768af921d5a16ecb7ac8ad3cfceabb054e8b5c80bb6fe179a2d9f - osx-arm64: 9d089c852169c8c19dd4c6abc87e1479d1a26ed36dd2d07fbcbf1638568c50d9 - win-64: 265c0d8215dc0c9067499ebb7f208f77b4fa47e0fac50458bb53b232c31dfdcd - linux-aarch64: 20e7a5549a4b43a25943863de04dc75083fa898279c1fb1159bd9af3ca94efd5 + linux-64: 2b8776c95868b453757fbca8c305c68112386953c8302c1590ce3b9bbca6943e + osx-64: 04df1360c878b729067374d9ae4e47c9aae2c95e7dc7527df372f0a71d20592b + osx-arm64: b1463b6da18a89f4eebb0a5747763714a814c75aaebcd82e4a4228abde4109a0 + win-64: 3468f916966cf13667e7edfc551a078370580c56e086590faad09bf505d1607e + linux-aarch64: 7e091eda2f5bcfa5943409c6aa81d805c9cd4e7195a2d90e1363190400d9cc97 channels: - url: conda-forge used_env_vars: [] @@ -394,96 +394,6 @@ package: sha256: 947c111c587ae7604fdae4161a770f6ad60727e8b2127304f01362c8e856469c category: dev optional: true -- name: black - version: 24.1.1 - manager: conda - platform: linux-64 - dependencies: - click: '>=8.0.0' - mypy_extensions: '>=0.4.3' - packaging: '>=22.0' - pathspec: '>=0.9' - platformdirs: '>=2' - python: '>=3.12,<3.13.0a0' - python_abi: 3.12.* - url: https://conda.anaconda.org/conda-forge/linux-64/black-24.1.1-py312h7900ff3_0.conda - hash: - md5: b078eb1f3cd36f2688a4db7b5f6539c1 - sha256: 64b845c51ad998508351f777f6cf307c9801040a6e4811980f318d6c8106a78f - category: dev - optional: true -- name: black - version: 24.1.1 - manager: conda - platform: linux-aarch64 - dependencies: - click: '>=8.0.0' - mypy_extensions: '>=0.4.3' - packaging: '>=22.0' - pathspec: '>=0.9' - platformdirs: '>=2' - python: '>=3.12,<3.13.0a0' - python_abi: 3.12.* - url: https://conda.anaconda.org/conda-forge/linux-aarch64/black-24.1.1-py312h996f985_0.conda - hash: - md5: c7cc32ecf54f56a241f678d946362303 - sha256: f60074882b7ab1483a8ab350a6d6686e370bfbc5e77ae72e363863afb959fc11 - category: dev - optional: true -- name: black - version: 24.1.1 - manager: conda - platform: osx-64 - dependencies: - click: '>=8.0.0' - mypy_extensions: '>=0.4.3' - packaging: '>=22.0' - pathspec: '>=0.9' - platformdirs: '>=2' - python: '>=3.12,<3.13.0a0' - python_abi: 3.12.* - url: https://conda.anaconda.org/conda-forge/osx-64/black-24.1.1-py312hb401068_0.conda - hash: - md5: 5393c657c48f437597884ac806416dc0 - sha256: 77a388c7d4c7368e2865b61da750ded99e15f457bb1a9f181971089c08daf338 - category: dev - optional: true -- name: black - version: 24.1.1 - manager: conda - platform: osx-arm64 - dependencies: - click: '>=8.0.0' - mypy_extensions: '>=0.4.3' - packaging: '>=22.0' - pathspec: '>=0.9' - platformdirs: '>=2' - python: '>=3.12,<3.13.0a0' - python_abi: 3.12.* - url: https://conda.anaconda.org/conda-forge/osx-arm64/black-24.1.1-py312h81bd7bf_0.conda - hash: - md5: 7a11df7103310e310b566230806e04be - sha256: 0c906419d67c52756cf8a364bf8295dadddf14436737742f428da6771670cb4f - category: dev - optional: true -- name: black - version: 24.1.1 - manager: conda - platform: win-64 - dependencies: - click: '>=8.0.0' - mypy_extensions: '>=0.4.3' - packaging: '>=22.0' - pathspec: '>=0.9' - platformdirs: '>=2' - python: '>=3.12,<3.13.0a0' - python_abi: 3.12.* - url: https://conda.anaconda.org/conda-forge/win-64/black-24.1.1-py312h2e8e312_0.conda - hash: - md5: d313ace019e84125cb614941f8dd6037 - sha256: ddcea1f9daea9238de8ebc16776ce6b1139ca02d0ce7f70842a742311efa6cd2 - category: dev - optional: true - name: bleach version: 6.1.0 manager: conda @@ -1400,8 +1310,8 @@ package: hash: md5: f3ad426304898027fc619827ff428eca sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec - category: main - optional: false + category: dev + optional: true - name: click version: 8.1.7 manager: conda @@ -1413,8 +1323,8 @@ package: hash: md5: f3ad426304898027fc619827ff428eca sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec - category: main - optional: false + category: dev + optional: true - name: click version: 8.1.7 manager: conda @@ -1426,8 +1336,8 @@ package: hash: md5: f3ad426304898027fc619827ff428eca sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec - category: main - optional: false + category: dev + optional: true - name: click version: 8.1.7 manager: conda @@ -1439,8 +1349,8 @@ package: hash: md5: f3ad426304898027fc619827ff428eca sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec - category: main - optional: false + category: dev + optional: true - name: click version: 8.1.7 manager: conda @@ -1453,8 +1363,8 @@ package: hash: md5: 3549ecbceb6cd77b91a105511b7d0786 sha256: 90236b113b9a20041736e80b80ee965167f9aac0468315c55e2bad902d673fb0 - category: main - optional: false + category: dev + optional: true - name: click-default-group version: 1.2.4 manager: conda @@ -3502,68 +3412,68 @@ package: category: dev optional: true - name: identify - version: 2.5.33 + version: 2.5.34 manager: conda platform: linux-64 dependencies: python: '>=3.6' ukkonen: '' - url: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.33-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.34-pyhd8ed1ab_0.conda hash: - md5: 93c8f8ceb83827d88deeba796f07fba7 - sha256: ce2a64c18221af96226be23278d81f22ff9f64b3c047d8865590f6718915303f + md5: 048ba98aa7b16ef0d8866f8c87d7c5b8 + sha256: af9bd3b97d17c75d429737dc65bbb01dd6ee183452590bdaecf1f1871b8f00a1 category: dev optional: true - name: identify - version: 2.5.33 + version: 2.5.34 manager: conda platform: linux-aarch64 dependencies: python: '>=3.6' ukkonen: '' - url: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.33-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.34-pyhd8ed1ab_0.conda hash: - md5: 93c8f8ceb83827d88deeba796f07fba7 - sha256: ce2a64c18221af96226be23278d81f22ff9f64b3c047d8865590f6718915303f + md5: 048ba98aa7b16ef0d8866f8c87d7c5b8 + sha256: af9bd3b97d17c75d429737dc65bbb01dd6ee183452590bdaecf1f1871b8f00a1 category: dev optional: true - name: identify - version: 2.5.33 + version: 2.5.34 manager: conda platform: osx-64 dependencies: python: '>=3.6' ukkonen: '' - url: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.33-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.34-pyhd8ed1ab_0.conda hash: - md5: 93c8f8ceb83827d88deeba796f07fba7 - sha256: ce2a64c18221af96226be23278d81f22ff9f64b3c047d8865590f6718915303f + md5: 048ba98aa7b16ef0d8866f8c87d7c5b8 + sha256: af9bd3b97d17c75d429737dc65bbb01dd6ee183452590bdaecf1f1871b8f00a1 category: dev optional: true - name: identify - version: 2.5.33 + version: 2.5.34 manager: conda platform: osx-arm64 dependencies: python: '>=3.6' ukkonen: '' - url: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.33-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.34-pyhd8ed1ab_0.conda hash: - md5: 93c8f8ceb83827d88deeba796f07fba7 - sha256: ce2a64c18221af96226be23278d81f22ff9f64b3c047d8865590f6718915303f + md5: 048ba98aa7b16ef0d8866f8c87d7c5b8 + sha256: af9bd3b97d17c75d429737dc65bbb01dd6ee183452590bdaecf1f1871b8f00a1 category: dev optional: true - name: identify - version: 2.5.33 + version: 2.5.34 manager: conda platform: win-64 dependencies: python: '>=3.6' ukkonen: '' - url: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.33-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/identify-2.5.34-pyhd8ed1ab_0.conda hash: - md5: 93c8f8ceb83827d88deeba796f07fba7 - sha256: ce2a64c18221af96226be23278d81f22ff9f64b3c047d8865590f6718915303f + md5: 048ba98aa7b16ef0d8866f8c87d7c5b8 + sha256: af9bd3b97d17c75d429737dc65bbb01dd6ee183452590bdaecf1f1871b8f00a1 category: dev optional: true - name: idna @@ -3812,68 +3722,68 @@ package: category: dev optional: true - name: jaraco.classes - version: 3.3.0 + version: 3.3.1 manager: conda platform: linux-64 dependencies: more-itertools: '' python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.3.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.3.1-pyhd8ed1ab_0.conda hash: - md5: e9f79248d30e942f7c358ff21a1790f5 - sha256: 14f5240c3834e1b784dd41a5a14392d9150dff62a74ae851f73e65d2e2bbd891 + md5: c541ae264c9f1f21d83fc30dffb908ee + sha256: 232b40de8176fa7fb66a893653f8ae03c29616e04a83dae5a47df94b74e256ca category: main optional: false - name: jaraco.classes - version: 3.3.0 + version: 3.3.1 manager: conda platform: linux-aarch64 dependencies: more-itertools: '' python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.3.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.3.1-pyhd8ed1ab_0.conda hash: - md5: e9f79248d30e942f7c358ff21a1790f5 - sha256: 14f5240c3834e1b784dd41a5a14392d9150dff62a74ae851f73e65d2e2bbd891 + md5: c541ae264c9f1f21d83fc30dffb908ee + sha256: 232b40de8176fa7fb66a893653f8ae03c29616e04a83dae5a47df94b74e256ca category: main optional: false - name: jaraco.classes - version: 3.3.0 + version: 3.3.1 manager: conda platform: osx-64 dependencies: more-itertools: '' python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.3.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.3.1-pyhd8ed1ab_0.conda hash: - md5: e9f79248d30e942f7c358ff21a1790f5 - sha256: 14f5240c3834e1b784dd41a5a14392d9150dff62a74ae851f73e65d2e2bbd891 + md5: c541ae264c9f1f21d83fc30dffb908ee + sha256: 232b40de8176fa7fb66a893653f8ae03c29616e04a83dae5a47df94b74e256ca category: main optional: false - name: jaraco.classes - version: 3.3.0 + version: 3.3.1 manager: conda platform: osx-arm64 dependencies: more-itertools: '' python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.3.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.3.1-pyhd8ed1ab_0.conda hash: - md5: e9f79248d30e942f7c358ff21a1790f5 - sha256: 14f5240c3834e1b784dd41a5a14392d9150dff62a74ae851f73e65d2e2bbd891 + md5: c541ae264c9f1f21d83fc30dffb908ee + sha256: 232b40de8176fa7fb66a893653f8ae03c29616e04a83dae5a47df94b74e256ca category: main optional: false - name: jaraco.classes - version: 3.3.0 + version: 3.3.1 manager: conda platform: win-64 dependencies: more-itertools: '' python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.3.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.3.1-pyhd8ed1ab_0.conda hash: - md5: e9f79248d30e942f7c358ff21a1790f5 - sha256: 14f5240c3834e1b784dd41a5a14392d9150dff62a74ae851f73e65d2e2bbd891 + md5: c541ae264c9f1f21d83fc30dffb908ee + sha256: 232b40de8176fa7fb66a893653f8ae03c29616e04a83dae5a47df94b74e256ca category: main optional: false - name: jeepney @@ -5274,67 +5184,67 @@ package: category: dev optional: true - name: libsqlite - version: 3.44.2 + version: 3.45.1 manager: conda platform: linux-64 dependencies: libgcc-ng: '>=12' libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.44.2-h2797004_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.45.1-h2797004_0.conda hash: - md5: 3b6a9f225c3dbe0d24f4fedd4625c5bf - sha256: ee2c4d724a3ed60d5b458864d66122fb84c6ce1df62f735f90d8db17b66cd88a + md5: fc4ccadfbf6d4784de88c41704792562 + sha256: 1b379d1c652b25d0540251d422ef767472e768fd36b77261045e97f9ba6d3faa category: main optional: false - name: libsqlite - version: 3.44.2 + version: 3.45.1 manager: conda platform: linux-aarch64 dependencies: libgcc-ng: '>=12' libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.44.2-h194ca79_0.conda + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.45.1-h194ca79_0.conda hash: - md5: 464a0dedd1131669324946ee1c13c1a5 - sha256: 1849ebe6cbc471cd5c35fad68658edaf91bb10dd95913a10ebc61e6a81cbc0c4 + md5: 4190198deb1ed253eb938f6a6d92ff4f + sha256: 2aeb33230d074c9c91605def8296475dc0c064c23bd50ccfacb8336ec4bfc422 category: main optional: false - name: libsqlite - version: 3.44.2 + version: 3.45.1 manager: conda platform: osx-64 dependencies: libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.44.2-h92b6c6a_0.conda + url: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.45.1-h92b6c6a_0.conda hash: - md5: d4419f90019e6a2b152cd4d32f73a82f - sha256: 8a317d2aa6352feba951ca09d5bf34f565f9dd10bb14ff842b8650baa321d781 + md5: e451d14a5412cdc68be50493df251f55 + sha256: d65ce7093ecf5884b241a5ca8d26f80d21eaebf14ca67923b50c249f47a84cf9 category: main optional: false - name: libsqlite - version: 3.44.2 + version: 3.45.1 manager: conda platform: osx-arm64 dependencies: libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.44.2-h091b4b1_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.45.1-h091b4b1_0.conda hash: - md5: d7e1af696cfadec251a0abdd7b79ed77 - sha256: f0dc2fe69eddb4bab72ff6bb0da51d689294f466ee1b01e80ced1e7878a21aa5 + md5: a153a40a253962373b5330eb9d182da9 + sha256: 64befc456a38907d1334fb58eb604a96625d3a23a2f34fbd203e0b307a4a141e category: main optional: false - name: libsqlite - version: 3.44.2 + version: 3.45.1 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.2,<15' vc14_runtime: '>=14.29.30139' - url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.44.2-hcfcfb64_0.conda + url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.45.1-hcfcfb64_0.conda hash: - md5: 4a5f5ab56cbf3ccd08d71a1168061213 - sha256: 25bfcf79ec863c2c0f0b3599981e2eac57efc5302faf2bb84f68c3f0faa55d1c + md5: c583c1d6999b7aa148eff3089e13c44b + sha256: e1010f4ac7b056d85d91e6cb6137ef118f920eba88059261689e543780b230df category: main optional: false - name: libssh2 @@ -6482,7 +6392,7 @@ package: category: dev optional: true - name: mkdocs-material - version: 9.5.8 + version: 9.5.9 manager: conda platform: linux-64 dependencies: @@ -6498,14 +6408,14 @@ package: python: '>=3.8' regex: '>=2022.4' requests: ~=2.26 - url: https://conda.anaconda.org/conda-forge/noarch/mkdocs-material-9.5.8-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/mkdocs-material-9.5.9-pyhd8ed1ab_0.conda hash: - md5: 643645b928492aadedde35cb674e2293 - sha256: 2b4c2adffe7289cee89b8d27dd1ab1974b11b3b650ca2f683a5e752fcd421be7 + md5: f9ff7a88677e048c78e51b5342c49036 + sha256: 6e1e0cabfea99b31e8afca3eb6379d21945b2fba1ca09da63b5bbaf6dee9473a category: dev optional: true - name: mkdocs-material - version: 9.5.8 + version: 9.5.9 manager: conda platform: linux-aarch64 dependencies: @@ -6521,14 +6431,14 @@ package: python: '>=3.8' regex: '>=2022.4' requests: ~=2.26 - url: https://conda.anaconda.org/conda-forge/noarch/mkdocs-material-9.5.8-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/mkdocs-material-9.5.9-pyhd8ed1ab_0.conda hash: - md5: 643645b928492aadedde35cb674e2293 - sha256: 2b4c2adffe7289cee89b8d27dd1ab1974b11b3b650ca2f683a5e752fcd421be7 + md5: f9ff7a88677e048c78e51b5342c49036 + sha256: 6e1e0cabfea99b31e8afca3eb6379d21945b2fba1ca09da63b5bbaf6dee9473a category: dev optional: true - name: mkdocs-material - version: 9.5.8 + version: 9.5.9 manager: conda platform: osx-64 dependencies: @@ -6544,14 +6454,14 @@ package: python: '>=3.8' regex: '>=2022.4' requests: ~=2.26 - url: https://conda.anaconda.org/conda-forge/noarch/mkdocs-material-9.5.8-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/mkdocs-material-9.5.9-pyhd8ed1ab_0.conda hash: - md5: 643645b928492aadedde35cb674e2293 - sha256: 2b4c2adffe7289cee89b8d27dd1ab1974b11b3b650ca2f683a5e752fcd421be7 + md5: f9ff7a88677e048c78e51b5342c49036 + sha256: 6e1e0cabfea99b31e8afca3eb6379d21945b2fba1ca09da63b5bbaf6dee9473a category: dev optional: true - name: mkdocs-material - version: 9.5.8 + version: 9.5.9 manager: conda platform: osx-arm64 dependencies: @@ -6567,14 +6477,14 @@ package: python: '>=3.8' regex: '>=2022.4' requests: ~=2.26 - url: https://conda.anaconda.org/conda-forge/noarch/mkdocs-material-9.5.8-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/mkdocs-material-9.5.9-pyhd8ed1ab_0.conda hash: - md5: 643645b928492aadedde35cb674e2293 - sha256: 2b4c2adffe7289cee89b8d27dd1ab1974b11b3b650ca2f683a5e752fcd421be7 + md5: f9ff7a88677e048c78e51b5342c49036 + sha256: 6e1e0cabfea99b31e8afca3eb6379d21945b2fba1ca09da63b5bbaf6dee9473a category: dev optional: true - name: mkdocs-material - version: 9.5.8 + version: 9.5.9 manager: conda platform: win-64 dependencies: @@ -6590,10 +6500,10 @@ package: python: '>=3.8' regex: '>=2022.4' requests: ~=2.26 - url: https://conda.anaconda.org/conda-forge/noarch/mkdocs-material-9.5.8-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/mkdocs-material-9.5.9-pyhd8ed1ab_0.conda hash: - md5: 643645b928492aadedde35cb674e2293 - sha256: 2b4c2adffe7289cee89b8d27dd1ab1974b11b3b650ca2f683a5e752fcd421be7 + md5: f9ff7a88677e048c78e51b5342c49036 + sha256: 6e1e0cabfea99b31e8afca3eb6379d21945b2fba1ca09da63b5bbaf6dee9473a category: dev optional: true - name: mkdocs-material-extensions @@ -7523,8 +7433,8 @@ package: hash: md5: f586ac1e56c8638b64f9c8122a7b8a67 sha256: b7c1c5d8f13e8cb491c4bd1d0d1896a4cf80fc47de01059ad77509112b664a4a - category: dev - optional: true + category: main + optional: false - name: pip version: '24.0' manager: conda @@ -7537,8 +7447,8 @@ package: hash: md5: f586ac1e56c8638b64f9c8122a7b8a67 sha256: b7c1c5d8f13e8cb491c4bd1d0d1896a4cf80fc47de01059ad77509112b664a4a - category: dev - optional: true + category: main + optional: false - name: pip version: '24.0' manager: conda @@ -7551,8 +7461,8 @@ package: hash: md5: f586ac1e56c8638b64f9c8122a7b8a67 sha256: b7c1c5d8f13e8cb491c4bd1d0d1896a4cf80fc47de01059ad77509112b664a4a - category: dev - optional: true + category: main + optional: false - name: pip version: '24.0' manager: conda @@ -7565,8 +7475,8 @@ package: hash: md5: f586ac1e56c8638b64f9c8122a7b8a67 sha256: b7c1c5d8f13e8cb491c4bd1d0d1896a4cf80fc47de01059ad77509112b664a4a - category: dev - optional: true + category: main + optional: false - name: pip version: '24.0' manager: conda @@ -7579,8 +7489,8 @@ package: hash: md5: f586ac1e56c8638b64f9c8122a7b8a67 sha256: b7c1c5d8f13e8cb491c4bd1d0d1896a4cf80fc47de01059ad77509112b664a4a - category: dev - optional: true + category: main + optional: false - name: pkginfo version: 1.9.6 manager: conda @@ -7762,7 +7672,7 @@ package: category: dev optional: true - name: pre-commit - version: 3.6.0 + version: 3.6.1 manager: conda platform: linux-64 dependencies: @@ -7772,14 +7682,14 @@ package: python: '>=3.9' pyyaml: '>=5.1' virtualenv: '>=20.10.0' - url: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.6.0-pyha770c72_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.6.1-pyha770c72_0.conda hash: - md5: 473a7cfca197da0a10cff3f6dded7d4b - sha256: 7d1f4b4a2eb4946b5808769642c5f643788c3a9e090f1c02a6c63f8794fb3d54 + md5: 4efd2c755bf2079e5651e57e1999db6c + sha256: 6d3c83ae83273bf458fd4e810f068e7c1603b6b6265787678ce2c58f789e886b category: dev optional: true - name: pre-commit - version: 3.6.0 + version: 3.6.1 manager: conda platform: linux-aarch64 dependencies: @@ -7789,14 +7699,14 @@ package: python: '>=3.9' pyyaml: '>=5.1' virtualenv: '>=20.10.0' - url: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.6.0-pyha770c72_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.6.1-pyha770c72_0.conda hash: - md5: 473a7cfca197da0a10cff3f6dded7d4b - sha256: 7d1f4b4a2eb4946b5808769642c5f643788c3a9e090f1c02a6c63f8794fb3d54 + md5: 4efd2c755bf2079e5651e57e1999db6c + sha256: 6d3c83ae83273bf458fd4e810f068e7c1603b6b6265787678ce2c58f789e886b category: dev optional: true - name: pre-commit - version: 3.6.0 + version: 3.6.1 manager: conda platform: osx-64 dependencies: @@ -7806,14 +7716,14 @@ package: python: '>=3.9' pyyaml: '>=5.1' virtualenv: '>=20.10.0' - url: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.6.0-pyha770c72_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.6.1-pyha770c72_0.conda hash: - md5: 473a7cfca197da0a10cff3f6dded7d4b - sha256: 7d1f4b4a2eb4946b5808769642c5f643788c3a9e090f1c02a6c63f8794fb3d54 + md5: 4efd2c755bf2079e5651e57e1999db6c + sha256: 6d3c83ae83273bf458fd4e810f068e7c1603b6b6265787678ce2c58f789e886b category: dev optional: true - name: pre-commit - version: 3.6.0 + version: 3.6.1 manager: conda platform: osx-arm64 dependencies: @@ -7823,14 +7733,14 @@ package: python: '>=3.9' pyyaml: '>=5.1' virtualenv: '>=20.10.0' - url: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.6.0-pyha770c72_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.6.1-pyha770c72_0.conda hash: - md5: 473a7cfca197da0a10cff3f6dded7d4b - sha256: 7d1f4b4a2eb4946b5808769642c5f643788c3a9e090f1c02a6c63f8794fb3d54 + md5: 4efd2c755bf2079e5651e57e1999db6c + sha256: 6d3c83ae83273bf458fd4e810f068e7c1603b6b6265787678ce2c58f789e886b category: dev optional: true - name: pre-commit - version: 3.6.0 + version: 3.6.1 manager: conda platform: win-64 dependencies: @@ -7840,10 +7750,10 @@ package: python: '>=3.9' pyyaml: '>=5.1' virtualenv: '>=20.10.0' - url: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.6.0-pyha770c72_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.6.1-pyha770c72_0.conda hash: - md5: 473a7cfca197da0a10cff3f6dded7d4b - sha256: 7d1f4b4a2eb4946b5808769642c5f643788c3a9e090f1c02a6c63f8794fb3d54 + md5: 4efd2c755bf2079e5651e57e1999db6c + sha256: 6d3c83ae83273bf458fd4e810f068e7c1603b6b6265787678ce2c58f789e886b category: dev optional: true - name: psutil @@ -10518,8 +10428,8 @@ package: hash: md5: 40695fdfd15a92121ed2922900d0308b sha256: 0fe2a0473ad03dac6c7f5c42ef36a8e90673c88a0350dfefdea4b08d43803db2 - category: dev - optional: true + category: main + optional: false - name: setuptools version: 69.0.3 manager: conda @@ -10530,8 +10440,8 @@ package: hash: md5: 40695fdfd15a92121ed2922900d0308b sha256: 0fe2a0473ad03dac6c7f5c42ef36a8e90673c88a0350dfefdea4b08d43803db2 - category: dev - optional: true + category: main + optional: false - name: setuptools version: 69.0.3 manager: conda @@ -10542,8 +10452,8 @@ package: hash: md5: 40695fdfd15a92121ed2922900d0308b sha256: 0fe2a0473ad03dac6c7f5c42ef36a8e90673c88a0350dfefdea4b08d43803db2 - category: dev - optional: true + category: main + optional: false - name: setuptools version: 69.0.3 manager: conda @@ -10554,8 +10464,8 @@ package: hash: md5: 40695fdfd15a92121ed2922900d0308b sha256: 0fe2a0473ad03dac6c7f5c42ef36a8e90673c88a0350dfefdea4b08d43803db2 - category: dev - optional: true + category: main + optional: false - name: setuptools version: 69.0.3 manager: conda @@ -10566,8 +10476,8 @@ package: hash: md5: 40695fdfd15a92121ed2922900d0308b sha256: 0fe2a0473ad03dac6c7f5c42ef36a8e90673c88a0350dfefdea4b08d43803db2 - category: dev - optional: true + category: main + optional: false - name: six version: 1.16.0 manager: conda @@ -10993,68 +10903,68 @@ package: category: main optional: false - name: tqdm - version: 4.66.1 + version: 4.66.2 manager: conda platform: linux-64 dependencies: colorama: '' python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.2-pyhd8ed1ab_0.conda hash: - md5: 03c97908b976498dcae97eb4e4f3149c - sha256: b61c9222af05e8c5ff27e4a4d2eb81870c21ffd7478346be3ef644b7a3759cc4 + md5: 2b8dfb969f984497f3f98409a9545776 + sha256: 416d1d9318f3267325ad7e2b8a575df20ff9031197b30c0222c3d3b023877260 category: dev optional: true - name: tqdm - version: 4.66.1 + version: 4.66.2 manager: conda platform: linux-aarch64 dependencies: colorama: '' python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.2-pyhd8ed1ab_0.conda hash: - md5: 03c97908b976498dcae97eb4e4f3149c - sha256: b61c9222af05e8c5ff27e4a4d2eb81870c21ffd7478346be3ef644b7a3759cc4 + md5: 2b8dfb969f984497f3f98409a9545776 + sha256: 416d1d9318f3267325ad7e2b8a575df20ff9031197b30c0222c3d3b023877260 category: dev optional: true - name: tqdm - version: 4.66.1 + version: 4.66.2 manager: conda platform: osx-64 dependencies: colorama: '' python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.2-pyhd8ed1ab_0.conda hash: - md5: 03c97908b976498dcae97eb4e4f3149c - sha256: b61c9222af05e8c5ff27e4a4d2eb81870c21ffd7478346be3ef644b7a3759cc4 + md5: 2b8dfb969f984497f3f98409a9545776 + sha256: 416d1d9318f3267325ad7e2b8a575df20ff9031197b30c0222c3d3b023877260 category: dev optional: true - name: tqdm - version: 4.66.1 + version: 4.66.2 manager: conda platform: osx-arm64 dependencies: colorama: '' python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.2-pyhd8ed1ab_0.conda hash: - md5: 03c97908b976498dcae97eb4e4f3149c - sha256: b61c9222af05e8c5ff27e4a4d2eb81870c21ffd7478346be3ef644b7a3759cc4 + md5: 2b8dfb969f984497f3f98409a9545776 + sha256: 416d1d9318f3267325ad7e2b8a575df20ff9031197b30c0222c3d3b023877260 category: dev optional: true - name: tqdm - version: 4.66.1 + version: 4.66.2 manager: conda platform: win-64 dependencies: colorama: '' python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.2-pyhd8ed1ab_0.conda hash: - md5: 03c97908b976498dcae97eb4e4f3149c - sha256: b61c9222af05e8c5ff27e4a4d2eb81870c21ffd7478346be3ef644b7a3759cc4 + md5: 2b8dfb969f984497f3f98409a9545776 + sha256: 416d1d9318f3267325ad7e2b8a575df20ff9031197b30c0222c3d3b023877260 category: dev optional: true - name: truststore @@ -11222,6 +11132,556 @@ package: sha256: 3e0c4f23d6a7d71783095b715f56c9f5f26feefaa9f30e27793dd12dc28e76c9 category: dev optional: true +- name: types-click + version: 7.1.8 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-click-7.1.8-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 51afcd5676dd626e27262af47b04c0a3 + sha256: ee5507311647e2aec5b19b5acaa0de507a84a4455cae3fa87cd6350b2e0569c3 + category: dev + optional: true +- name: types-click + version: 7.1.8 + manager: conda + platform: linux-aarch64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-click-7.1.8-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 51afcd5676dd626e27262af47b04c0a3 + sha256: ee5507311647e2aec5b19b5acaa0de507a84a4455cae3fa87cd6350b2e0569c3 + category: dev + optional: true +- name: types-click + version: 7.1.8 + manager: conda + platform: osx-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-click-7.1.8-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 51afcd5676dd626e27262af47b04c0a3 + sha256: ee5507311647e2aec5b19b5acaa0de507a84a4455cae3fa87cd6350b2e0569c3 + category: dev + optional: true +- name: types-click + version: 7.1.8 + manager: conda + platform: osx-arm64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-click-7.1.8-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 51afcd5676dd626e27262af47b04c0a3 + sha256: ee5507311647e2aec5b19b5acaa0de507a84a4455cae3fa87cd6350b2e0569c3 + category: dev + optional: true +- name: types-click + version: 7.1.8 + manager: conda + platform: win-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-click-7.1.8-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 51afcd5676dd626e27262af47b04c0a3 + sha256: ee5507311647e2aec5b19b5acaa0de507a84a4455cae3fa87cd6350b2e0569c3 + category: dev + optional: true +- name: types-docutils + version: 0.20.0.20240201 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-docutils-0.20.0.20240201-pyhd8ed1ab_0.conda + hash: + md5: ba3e23ed7c278ff5f7fffed78937e34a + sha256: bb77255fa6fadb4c7bef1ff0748ad8117a6b6d80f00b8f1ffcf11e1794b1f27d + category: dev + optional: true +- name: types-docutils + version: 0.20.0.20240201 + manager: conda + platform: linux-aarch64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-docutils-0.20.0.20240201-pyhd8ed1ab_0.conda + hash: + md5: ba3e23ed7c278ff5f7fffed78937e34a + sha256: bb77255fa6fadb4c7bef1ff0748ad8117a6b6d80f00b8f1ffcf11e1794b1f27d + category: dev + optional: true +- name: types-docutils + version: 0.20.0.20240201 + manager: conda + platform: osx-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-docutils-0.20.0.20240201-pyhd8ed1ab_0.conda + hash: + md5: ba3e23ed7c278ff5f7fffed78937e34a + sha256: bb77255fa6fadb4c7bef1ff0748ad8117a6b6d80f00b8f1ffcf11e1794b1f27d + category: dev + optional: true +- name: types-docutils + version: 0.20.0.20240201 + manager: conda + platform: osx-arm64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-docutils-0.20.0.20240201-pyhd8ed1ab_0.conda + hash: + md5: ba3e23ed7c278ff5f7fffed78937e34a + sha256: bb77255fa6fadb4c7bef1ff0748ad8117a6b6d80f00b8f1ffcf11e1794b1f27d + category: dev + optional: true +- name: types-docutils + version: 0.20.0.20240201 + manager: conda + platform: win-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-docutils-0.20.0.20240201-pyhd8ed1ab_0.conda + hash: + md5: ba3e23ed7c278ff5f7fffed78937e34a + sha256: bb77255fa6fadb4c7bef1ff0748ad8117a6b6d80f00b8f1ffcf11e1794b1f27d + category: dev + optional: true +- name: types-filelock + version: 3.2.7 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-filelock-3.2.7-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 4bd364bec7ce727e293928d87f4f4e88 + sha256: 142ba9e8bfd919674ff40e688472adee2080c682d57a302051106e4c46aa2a79 + category: dev + optional: true +- name: types-filelock + version: 3.2.7 + manager: conda + platform: linux-aarch64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-filelock-3.2.7-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 4bd364bec7ce727e293928d87f4f4e88 + sha256: 142ba9e8bfd919674ff40e688472adee2080c682d57a302051106e4c46aa2a79 + category: dev + optional: true +- name: types-filelock + version: 3.2.7 + manager: conda + platform: osx-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-filelock-3.2.7-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 4bd364bec7ce727e293928d87f4f4e88 + sha256: 142ba9e8bfd919674ff40e688472adee2080c682d57a302051106e4c46aa2a79 + category: dev + optional: true +- name: types-filelock + version: 3.2.7 + manager: conda + platform: osx-arm64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-filelock-3.2.7-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 4bd364bec7ce727e293928d87f4f4e88 + sha256: 142ba9e8bfd919674ff40e688472adee2080c682d57a302051106e4c46aa2a79 + category: dev + optional: true +- name: types-filelock + version: 3.2.7 + manager: conda + platform: win-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-filelock-3.2.7-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 4bd364bec7ce727e293928d87f4f4e88 + sha256: 142ba9e8bfd919674ff40e688472adee2080c682d57a302051106e4c46aa2a79 + category: dev + optional: true +- name: types-freezegun + version: 1.1.10 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-freezegun-1.1.10-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 5493564e068c5500e4c870141fcf6684 + sha256: 7089ee1395bc02ffcf6d6b446e4f61c85ac6b4b90bc5cc0b0e1ee84e13330004 + category: dev + optional: true +- name: types-freezegun + version: 1.1.10 + manager: conda + platform: linux-aarch64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-freezegun-1.1.10-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 5493564e068c5500e4c870141fcf6684 + sha256: 7089ee1395bc02ffcf6d6b446e4f61c85ac6b4b90bc5cc0b0e1ee84e13330004 + category: dev + optional: true +- name: types-freezegun + version: 1.1.10 + manager: conda + platform: osx-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-freezegun-1.1.10-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 5493564e068c5500e4c870141fcf6684 + sha256: 7089ee1395bc02ffcf6d6b446e4f61c85ac6b4b90bc5cc0b0e1ee84e13330004 + category: dev + optional: true +- name: types-freezegun + version: 1.1.10 + manager: conda + platform: osx-arm64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-freezegun-1.1.10-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 5493564e068c5500e4c870141fcf6684 + sha256: 7089ee1395bc02ffcf6d6b446e4f61c85ac6b4b90bc5cc0b0e1ee84e13330004 + category: dev + optional: true +- name: types-freezegun + version: 1.1.10 + manager: conda + platform: win-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-freezegun-1.1.10-pyhd8ed1ab_0.tar.bz2 + hash: + md5: 5493564e068c5500e4c870141fcf6684 + sha256: 7089ee1395bc02ffcf6d6b446e4f61c85ac6b4b90bc5cc0b0e1ee84e13330004 + category: dev + optional: true +- name: types-pyyaml + version: 6.0.12.12 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-pyyaml-6.0.12.12-pyhd8ed1ab_0.conda + hash: + md5: 0cb14c80f66937df894d60626dd1921f + sha256: 91873f91a58337d0573584bcdc540ff5545bc460eda0fdd8bd2f471c808c0e4c + category: dev + optional: true +- name: types-pyyaml + version: 6.0.12.12 + manager: conda + platform: linux-aarch64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-pyyaml-6.0.12.12-pyhd8ed1ab_0.conda + hash: + md5: 0cb14c80f66937df894d60626dd1921f + sha256: 91873f91a58337d0573584bcdc540ff5545bc460eda0fdd8bd2f471c808c0e4c + category: dev + optional: true +- name: types-pyyaml + version: 6.0.12.12 + manager: conda + platform: osx-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-pyyaml-6.0.12.12-pyhd8ed1ab_0.conda + hash: + md5: 0cb14c80f66937df894d60626dd1921f + sha256: 91873f91a58337d0573584bcdc540ff5545bc460eda0fdd8bd2f471c808c0e4c + category: dev + optional: true +- name: types-pyyaml + version: 6.0.12.12 + manager: conda + platform: osx-arm64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-pyyaml-6.0.12.12-pyhd8ed1ab_0.conda + hash: + md5: 0cb14c80f66937df894d60626dd1921f + sha256: 91873f91a58337d0573584bcdc540ff5545bc460eda0fdd8bd2f471c808c0e4c + category: dev + optional: true +- name: types-pyyaml + version: 6.0.12.12 + manager: conda + platform: win-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-pyyaml-6.0.12.12-pyhd8ed1ab_0.conda + hash: + md5: 0cb14c80f66937df894d60626dd1921f + sha256: 91873f91a58337d0573584bcdc540ff5545bc460eda0fdd8bd2f471c808c0e4c + category: dev + optional: true +- name: types-requests + version: 2.31.0.6 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.6' + types-urllib3: <1.27 + url: https://conda.anaconda.org/conda-forge/noarch/types-requests-2.31.0.6-pyhd8ed1ab_0.conda + hash: + md5: 69d8b100b4a9e557e33c06b0d3ba4772 + sha256: 2ec1bfb9ffbcdd880f60139d46df88e60cd8d0a404f4e0e498500671b34c1d5b + category: dev + optional: true +- name: types-requests + version: 2.31.0.6 + manager: conda + platform: linux-aarch64 + dependencies: + python: '>=3.6' + types-urllib3: <1.27 + url: https://conda.anaconda.org/conda-forge/noarch/types-requests-2.31.0.6-pyhd8ed1ab_0.conda + hash: + md5: 69d8b100b4a9e557e33c06b0d3ba4772 + sha256: 2ec1bfb9ffbcdd880f60139d46df88e60cd8d0a404f4e0e498500671b34c1d5b + category: dev + optional: true +- name: types-requests + version: 2.31.0.6 + manager: conda + platform: osx-64 + dependencies: + python: '>=3.6' + types-urllib3: <1.27 + url: https://conda.anaconda.org/conda-forge/noarch/types-requests-2.31.0.6-pyhd8ed1ab_0.conda + hash: + md5: 69d8b100b4a9e557e33c06b0d3ba4772 + sha256: 2ec1bfb9ffbcdd880f60139d46df88e60cd8d0a404f4e0e498500671b34c1d5b + category: dev + optional: true +- name: types-requests + version: 2.31.0.6 + manager: conda + platform: osx-arm64 + dependencies: + python: '>=3.6' + types-urllib3: <1.27 + url: https://conda.anaconda.org/conda-forge/noarch/types-requests-2.31.0.6-pyhd8ed1ab_0.conda + hash: + md5: 69d8b100b4a9e557e33c06b0d3ba4772 + sha256: 2ec1bfb9ffbcdd880f60139d46df88e60cd8d0a404f4e0e498500671b34c1d5b + category: dev + optional: true +- name: types-requests + version: 2.31.0.6 + manager: conda + platform: win-64 + dependencies: + python: '>=3.6' + types-urllib3: <1.27 + url: https://conda.anaconda.org/conda-forge/noarch/types-requests-2.31.0.6-pyhd8ed1ab_0.conda + hash: + md5: 69d8b100b4a9e557e33c06b0d3ba4772 + sha256: 2ec1bfb9ffbcdd880f60139d46df88e60cd8d0a404f4e0e498500671b34c1d5b + category: dev + optional: true +- name: types-setuptools + version: 69.0.0.0 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.6' + types-docutils: '' + url: https://conda.anaconda.org/conda-forge/noarch/types-setuptools-69.0.0.0-pyhd8ed1ab_0.conda + hash: + md5: c361368c23a7bd08fc530435ab4adbd7 + sha256: eeda2980c1f0fc11eaffd4d5ac440ab7133c95a1aa389b19bb2b3ce246971e9c + category: dev + optional: true +- name: types-setuptools + version: 69.0.0.0 + manager: conda + platform: linux-aarch64 + dependencies: + python: '>=3.6' + types-docutils: '' + url: https://conda.anaconda.org/conda-forge/noarch/types-setuptools-69.0.0.0-pyhd8ed1ab_0.conda + hash: + md5: c361368c23a7bd08fc530435ab4adbd7 + sha256: eeda2980c1f0fc11eaffd4d5ac440ab7133c95a1aa389b19bb2b3ce246971e9c + category: dev + optional: true +- name: types-setuptools + version: 69.0.0.0 + manager: conda + platform: osx-64 + dependencies: + python: '>=3.6' + types-docutils: '' + url: https://conda.anaconda.org/conda-forge/noarch/types-setuptools-69.0.0.0-pyhd8ed1ab_0.conda + hash: + md5: c361368c23a7bd08fc530435ab4adbd7 + sha256: eeda2980c1f0fc11eaffd4d5ac440ab7133c95a1aa389b19bb2b3ce246971e9c + category: dev + optional: true +- name: types-setuptools + version: 69.0.0.0 + manager: conda + platform: osx-arm64 + dependencies: + python: '>=3.6' + types-docutils: '' + url: https://conda.anaconda.org/conda-forge/noarch/types-setuptools-69.0.0.0-pyhd8ed1ab_0.conda + hash: + md5: c361368c23a7bd08fc530435ab4adbd7 + sha256: eeda2980c1f0fc11eaffd4d5ac440ab7133c95a1aa389b19bb2b3ce246971e9c + category: dev + optional: true +- name: types-setuptools + version: 69.0.0.0 + manager: conda + platform: win-64 + dependencies: + python: '>=3.6' + types-docutils: '' + url: https://conda.anaconda.org/conda-forge/noarch/types-setuptools-69.0.0.0-pyhd8ed1ab_0.conda + hash: + md5: c361368c23a7bd08fc530435ab4adbd7 + sha256: eeda2980c1f0fc11eaffd4d5ac440ab7133c95a1aa389b19bb2b3ce246971e9c + category: dev + optional: true +- name: types-toml + version: 0.10.8.7 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-toml-0.10.8.7-pyhd8ed1ab_0.conda + hash: + md5: 9ec33ab832b135fb148cbc4e6a721213 + sha256: eea84de0914ba10b69d86bbb57c1809b3ac47558d98aea3e82d0295144eacbab + category: dev + optional: true +- name: types-toml + version: 0.10.8.7 + manager: conda + platform: linux-aarch64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-toml-0.10.8.7-pyhd8ed1ab_0.conda + hash: + md5: 9ec33ab832b135fb148cbc4e6a721213 + sha256: eea84de0914ba10b69d86bbb57c1809b3ac47558d98aea3e82d0295144eacbab + category: dev + optional: true +- name: types-toml + version: 0.10.8.7 + manager: conda + platform: osx-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-toml-0.10.8.7-pyhd8ed1ab_0.conda + hash: + md5: 9ec33ab832b135fb148cbc4e6a721213 + sha256: eea84de0914ba10b69d86bbb57c1809b3ac47558d98aea3e82d0295144eacbab + category: dev + optional: true +- name: types-toml + version: 0.10.8.7 + manager: conda + platform: osx-arm64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-toml-0.10.8.7-pyhd8ed1ab_0.conda + hash: + md5: 9ec33ab832b135fb148cbc4e6a721213 + sha256: eea84de0914ba10b69d86bbb57c1809b3ac47558d98aea3e82d0295144eacbab + category: dev + optional: true +- name: types-toml + version: 0.10.8.7 + manager: conda + platform: win-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-toml-0.10.8.7-pyhd8ed1ab_0.conda + hash: + md5: 9ec33ab832b135fb148cbc4e6a721213 + sha256: eea84de0914ba10b69d86bbb57c1809b3ac47558d98aea3e82d0295144eacbab + category: dev + optional: true +- name: types-urllib3 + version: 1.26.25.14 + manager: conda + platform: linux-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-urllib3-1.26.25.14-pyhd8ed1ab_0.conda + hash: + md5: 06118f39abab2ab953276a50b2775509 + sha256: 43bcd4e976c9b95a0a3d99d500e7ba294f70f713d9808511296a3f450b2f7898 + category: dev + optional: true +- name: types-urllib3 + version: 1.26.25.14 + manager: conda + platform: linux-aarch64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-urllib3-1.26.25.14-pyhd8ed1ab_0.conda + hash: + md5: 06118f39abab2ab953276a50b2775509 + sha256: 43bcd4e976c9b95a0a3d99d500e7ba294f70f713d9808511296a3f450b2f7898 + category: dev + optional: true +- name: types-urllib3 + version: 1.26.25.14 + manager: conda + platform: osx-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-urllib3-1.26.25.14-pyhd8ed1ab_0.conda + hash: + md5: 06118f39abab2ab953276a50b2775509 + sha256: 43bcd4e976c9b95a0a3d99d500e7ba294f70f713d9808511296a3f450b2f7898 + category: dev + optional: true +- name: types-urllib3 + version: 1.26.25.14 + manager: conda + platform: osx-arm64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-urllib3-1.26.25.14-pyhd8ed1ab_0.conda + hash: + md5: 06118f39abab2ab953276a50b2775509 + sha256: 43bcd4e976c9b95a0a3d99d500e7ba294f70f713d9808511296a3f450b2f7898 + category: dev + optional: true +- name: types-urllib3 + version: 1.26.25.14 + manager: conda + platform: win-64 + dependencies: + python: '>=3.6' + url: https://conda.anaconda.org/conda-forge/noarch/types-urllib3-1.26.25.14-pyhd8ed1ab_0.conda + hash: + md5: 06118f39abab2ab953276a50b2775509 + sha256: 43bcd4e976c9b95a0a3d99d500e7ba294f70f713d9808511296a3f450b2f7898 + category: dev + optional: true - name: typing-extensions version: 4.9.0 manager: conda @@ -12385,3 +12845,58 @@ package: sha256: d540dd56c5ec772b60e4ce7d45f67f01c6614942225885911964ea1e70bb99e3 category: dev optional: true +- name: types-click-default-group + version: 1.2.0.0 + manager: pip + platform: linux-64 + dependencies: + click: '>=8.0.0' + url: https://files.pythonhosted.org/packages/4d/c0/365dc9bb50bfde3a735230beaa00d404bdd61103e54180f277c3e6aaf4ec/types_click_default_group-1.2.0.0-py3-none-any.whl + hash: + sha256: 5b13233b552a80859214bac34c6d95c5bc25f8735618f873be892939541c6a93 + category: dev + optional: true +- name: types-click-default-group + version: 1.2.0.0 + manager: pip + platform: linux-aarch64 + dependencies: + click: '>=8.0.0' + url: https://files.pythonhosted.org/packages/4d/c0/365dc9bb50bfde3a735230beaa00d404bdd61103e54180f277c3e6aaf4ec/types_click_default_group-1.2.0.0-py3-none-any.whl + hash: + sha256: 5b13233b552a80859214bac34c6d95c5bc25f8735618f873be892939541c6a93 + category: dev + optional: true +- name: types-click-default-group + version: 1.2.0.0 + manager: pip + platform: osx-64 + dependencies: + click: '>=8.0.0' + url: https://files.pythonhosted.org/packages/4d/c0/365dc9bb50bfde3a735230beaa00d404bdd61103e54180f277c3e6aaf4ec/types_click_default_group-1.2.0.0-py3-none-any.whl + hash: + sha256: 5b13233b552a80859214bac34c6d95c5bc25f8735618f873be892939541c6a93 + category: dev + optional: true +- name: types-click-default-group + version: 1.2.0.0 + manager: pip + platform: osx-arm64 + dependencies: + click: '>=8.0.0' + url: https://files.pythonhosted.org/packages/4d/c0/365dc9bb50bfde3a735230beaa00d404bdd61103e54180f277c3e6aaf4ec/types_click_default_group-1.2.0.0-py3-none-any.whl + hash: + sha256: 5b13233b552a80859214bac34c6d95c5bc25f8735618f873be892939541c6a93 + category: dev + optional: true +- name: types-click-default-group + version: 1.2.0.0 + manager: pip + platform: win-64 + dependencies: + click: '>=8.0.0' + url: https://files.pythonhosted.org/packages/4d/c0/365dc9bb50bfde3a735230beaa00d404bdd61103e54180f277c3e6aaf4ec/types_click_default_group-1.2.0.0-py3-none-any.whl + hash: + sha256: 5b13233b552a80859214bac34c6d95c5bc25f8735618f873be892939541c6a93 + category: dev + optional: true From fb26407ae9c03bbd6526230f827df6592f312268 Mon Sep 17 00:00:00 2001 From: Ben Mares Date: Sun, 11 Feb 2024 22:12:42 +0100 Subject: [PATCH 15/21] Fix invalid syntax warning in appdirs --- conda_lock/_vendor/conda/_vendor/appdirs.py | 2 +- pyproject.toml | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/conda_lock/_vendor/conda/_vendor/appdirs.py b/conda_lock/_vendor/conda/_vendor/appdirs.py index 94c592fc..695abeb1 100644 --- a/conda_lock/_vendor/conda/_vendor/appdirs.py +++ b/conda_lock/_vendor/conda/_vendor/appdirs.py @@ -79,7 +79,7 @@ def user_data_dir(appname, appauthor=None, version=None, roaming=False): def site_data_dir(appname, appauthor=None, version=None): - """Return full path to the user-shared data dir for this application. + r"""Return full path to the user-shared data dir for this application. "appname" is the name of application. "appauthor" (only required and used on Windows) is the name of the diff --git a/pyproject.toml b/pyproject.toml index cb3330e2..5a11c07b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -144,7 +144,10 @@ drop = [ substitute = [ # simple substitution patch to fix conda.exports { match = 'conda\.base\.context', replace = 'conda_lock.vendor.conda.base.context' }, - { match = '"pypoetry"', replace = '"pypoetry-conda-lock"' } + { match = '"pypoetry"', replace = '"pypoetry-conda-lock"' }, + # Patch a syntax warning in conda_lock/_vendor/conda/_vendor/appdirs.py:82 + # (invalid escape sequence '\D') + { match = ' """Return full path to the user-shared data dir', replace = ' r"""Return full path to the user-shared data dir' }, ] [tool.conda-lock] From f78b722efde5e4ea317a0ece422024dc34f848e7 Mon Sep 17 00:00:00 2001 From: Ben Mares Date: Sun, 11 Feb 2024 22:22:09 +0100 Subject: [PATCH 16/21] Fix ruff's complaints about test pyproject.toml --- tests/test-pdm-default-pip/pyproject.toml | 2 +- .../pyproject.toml | 2 +- tests/test-pdm/pyproject.toml | 2 +- tests/test-poetry-ibis/pyproject.toml | 86 ------------------- 4 files changed, 3 insertions(+), 89 deletions(-) diff --git a/tests/test-pdm-default-pip/pyproject.toml b/tests/test-pdm-default-pip/pyproject.toml index 1677e6a6..dce48146 100644 --- a/tests/test-pdm-default-pip/pyproject.toml +++ b/tests/test-pdm-default-pip/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "conda-lock-test-pdm" -authors = ["conda-lock"] +authors = [{ name = "conda-lock", email = "conda-lock@conda-lock" }] description = "" requires-python = ">=3.7" dependencies = [ diff --git a/tests/test-pdm-skip-non-conda-lock/pyproject.toml b/tests/test-pdm-skip-non-conda-lock/pyproject.toml index 77cc3a2d..b0626eab 100644 --- a/tests/test-pdm-skip-non-conda-lock/pyproject.toml +++ b/tests/test-pdm-skip-non-conda-lock/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "conda-lock-test-pdm" -authors = ["conda-lock"] +authors = [{ name = "conda-lock", email = "conda-lock@conda-lock" }] description = "" requires-python = ">=3.7" dependencies = [ diff --git a/tests/test-pdm/pyproject.toml b/tests/test-pdm/pyproject.toml index 3a22f03e..bbc50cd1 100644 --- a/tests/test-pdm/pyproject.toml +++ b/tests/test-pdm/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "conda-lock-test-pdm" -authors = ["conda-lock"] +authors = [{ name = "conda-lock", email = "conda-lock@conda-lock" }] description = "" requires-python = ">=3.7" dependencies = [ diff --git a/tests/test-poetry-ibis/pyproject.toml b/tests/test-poetry-ibis/pyproject.toml index 98f0b128..c4c93326 100644 --- a/tests/test-poetry-ibis/pyproject.toml +++ b/tests/test-poetry-ibis/pyproject.toml @@ -345,92 +345,6 @@ markers = [ "trino: Trino tests", ] -[tool.ruff] -line-length = 88 -select = [ - "B", # flake8-bugbear - "BLE", # flake8-blind-except - "C4", # comprehensions - "D", # pydocstyle - "E", # pycodestyle - "F", # pyflakes - "I", # isort - "ICN", # flake8-import-conventions - "ISC", # flake8-implicit-str-concat - "PGH", # pygrep-hooks - "PLC", # pylint - "PLE", # pylint - "PLR", # pylint import style - "PLW", # pylint - "RET", # flake8-return - "RUF", # ruff-specific rules - "SIM", # flake8-simplify - "T10", # flake8-debugger - "T20", # flake8-print - "TID", # flake8-tidy-imports - "UP", # pyupgrade - "W", # pycodestyle - "YTT", # flake8-2020 -] -respect-gitignore = true -ignore = [ - "B028", # required stacklevel argument to warn - "B904", # raise from e or raise from None in exception handlers - "C408", # dict(...) as literal - "D100", # public module - "D101", # public class - "D102", # public method - "D103", # public function - "D104", # public package - "D105", # magic methods - "D106", # nested class - "D107", # init - "D202", # blank lines after function docstring - "D203", # blank line before class docstring - "D213", # Multi-line docstring summary should start at the second line - "D401", # Imperative mood - "D402", # First line should not be the function's signature - "E501", - "E731", - "PGH003", - "PLR0911", # too many return statements - "PLR0912", # too many branches - "PLR0913", # too many arguments - "PLR0915", # too many statements - "PLR2004", # forces everything to be a constant - "PLW2901", # overwriting loop variable - "RET504", - "RET505", - "RET506", - "RET507", - "RET508", - "RUF005", # splat instead of concat - "SIM102", # nested ifs - "SIM108", # convert everything to ternary operator - "SIM114", # combine `if` branches using logical `or` operator - "SIM116", # dictionary instead of `if` statements - "SIM117", # nested withs - "SIM118", # remove .keys() calls from dictionaries - "SIM300", # yoda conditions - "UP037", # remove quotes from type annotation -] -exclude = ["*_py310.py", "ibis/tests/*/snapshots/*"] -target-version = "py38" -# none of these codes will be automatically fixed by ruff -unfixable = [ - "T201", # print statements - "F401", # unused imports - "RUF100", # unused noqa comments - "F841", # unused variables -] - -[tool.ruff.per-file-ignores] -"*test*.py" = [ - "D", # ignore all docstring lints in tests -] -"ci/release/verify_release.py" = ["T201"] # CLI tool that prints stuff -"ibis/selectors.py" = ["UP007"] - [tool.black] line_length = 88 skip_string_normalization = true From 75fc33ffc828a4074ec6e2e653cd4d26595bb681 Mon Sep 17 00:00:00 2001 From: Ben Mares Date: Sun, 11 Feb 2024 22:32:20 +0100 Subject: [PATCH 17/21] Apply pyupgrade fixes --- conda_lock/click_helpers.py | 2 +- conda_lock/common.py | 4 ++-- conda_lock/conda_solver.py | 4 ++-- conda_lock/src_parser/meta_yaml.py | 2 +- tests/test_conda_lock.py | 31 +++++++++--------------------- tests/test_regression.py | 7 +------ 6 files changed, 16 insertions(+), 34 deletions(-) diff --git a/conda_lock/click_helpers.py b/conda_lock/click_helpers.py index b066c27a..a4b7a1b3 100644 --- a/conda_lock/click_helpers.py +++ b/conda_lock/click_helpers.py @@ -13,7 +13,7 @@ def __init__( commands: Optional[Dict[str, click.Command]] = None, **kwargs: Any, ): - super(OrderedGroup, self).__init__(name, commands, **kwargs) + super().__init__(name, commands, **kwargs) #: the registered subcommands by their exported names. self.commands = commands or OrderedDict() diff --git a/conda_lock/common.py b/conda_lock/common.py index 5d47ce69..c54a1b09 100644 --- a/conda_lock/common.py +++ b/conda_lock/common.py @@ -42,7 +42,7 @@ def get_in( def read_file(filepath: Union[str, pathlib.Path]) -> str: - with open(filepath, mode="r") as fp: + with open(filepath) as fp: return fp.read() @@ -67,7 +67,7 @@ def temporary_file_with_contents(content: str) -> Iterator[pathlib.Path]: def read_json(filepath: Union[str, pathlib.Path]) -> Dict: - with open(filepath, mode="r") as fp: + with open(filepath) as fp: return json.load(fp) diff --git a/conda_lock/conda_solver.py b/conda_lock/conda_solver.py index 775ca3f4..b79906c4 100644 --- a/conda_lock/conda_solver.py +++ b/conda_lock/conda_solver.py @@ -353,7 +353,7 @@ def solve_specs_for_arch( args.extend(["--channel", "msys2"]) args.extend(specs) logger.info("%s using specs %s", platform, specs) - proc = subprocess.run( + proc = subprocess.run( # noqa: UP022 # Poetry monkeypatch breaks capture_output [str(arg) for arg in args], env=conda_env_override(platform), stdout=subprocess.PIPE, @@ -476,7 +476,7 @@ def update_specs_for_arch( "update" if is_micromamba(conda) else "install", *_get_conda_flags(channels=channels, platform=platform), ] - proc = subprocess.run( + proc = subprocess.run( # noqa: UP022 # Poetry monkeypatch breaks capture_output [ str(arg) for arg in [*args, "-p", prefix, "--json", "--dry-run", *to_update] diff --git a/conda_lock/src_parser/meta_yaml.py b/conda_lock/src_parser/meta_yaml.py index d2db1adf..fc6acac6 100644 --- a/conda_lock/src_parser/meta_yaml.py +++ b/conda_lock/src_parser/meta_yaml.py @@ -61,7 +61,7 @@ def __getattr__(self, k: str) -> "UndefinedNeverFail": # Unlike the methods above, Python requires that these # few methods must always return the correct type - __str__ = __repr__ = lambda self: self._return_value(str()) # type: ignore + __str__ = __repr__ = lambda self: self._return_value("") # type: ignore __unicode__ = lambda self: self._return_value("") # noqa: E731 __int__ = lambda self: self._return_value(0) # type: ignore # noqa: E731 __float__ = lambda self: self._return_value(0.0) # type: ignore # noqa: E731 diff --git a/tests/test_conda_lock.py b/tests/test_conda_lock.py index 900a6605..0cd2c218 100644 --- a/tests/test_conda_lock.py +++ b/tests/test_conda_lock.py @@ -122,12 +122,7 @@ def clone_test_dir(name: Union[str, List[str]], tmp_path: Path) -> Path: test_dir = TEST_DIR.joinpath(*name) assert test_dir.exists() assert test_dir.is_dir() - if sys.version_info >= (3, 8): - shutil.copytree(test_dir, tmp_path, dirs_exist_ok=True) - else: - from distutils.dir_util import copy_tree - - copy_tree(str(test_dir), str(tmp_path)) + shutil.copytree(test_dir, tmp_path, dirs_exist_ok=True) return tmp_path @@ -1434,11 +1429,7 @@ def test_run_lock_with_locked_environment_files( make_lock_files = MagicMock() monkeypatch.setattr("conda_lock.conda_lock.make_lock_files", make_lock_files) run_lock(DEFAULT_FILES, conda_exe=conda_exe, update=["pydantic"]) - if sys.version_info < (3, 8): - # backwards compat - src_files = make_lock_files.call_args_list[0][1]["src_files"] - else: - src_files = make_lock_files.call_args.kwargs["src_files"] + src_files = make_lock_files.call_args.kwargs["src_files"] assert [p.resolve() for p in src_files] == [ Path(update_environment.parent / "environment-preupdate.yml") @@ -1467,11 +1458,7 @@ def test_run_lock_relative_source_path( run_lock( DEFAULT_FILES, lockfile_path=lockfile, conda_exe=conda_exe, update=["pydantic"] ) - if sys.version_info < (3, 8): - # backwards compat - src_files = make_lock_files.call_args_list[0][1]["src_files"] - else: - src_files = make_lock_files.call_args.kwargs["src_files"] + src_files = make_lock_files.call_args.kwargs["src_files"] assert [p.resolve() for p in src_files] == [environment.resolve()] @@ -2074,7 +2061,7 @@ def test__extract_domain(line: str, stripped: str): def _read_file(filepath: "str | Path") -> str: - with open(filepath, mode="r") as file_pointer: + with open(filepath) as file_pointer: return file_pointer.read() @@ -2556,7 +2543,7 @@ def test_pip_finds_recent_manylinux_wheels( lightgbm_environment.parent / DEFAULT_LOCKFILE_NAME ) - (lightgbm_dep,) = [p for p in lockfile.package if p.name == "lightgbm"] + (lightgbm_dep,) = (p for p in lockfile.package if p.name == "lightgbm") manylinux_pattern = r"manylinux_(\d+)_(\d+).+\.whl" manylinux_match = re.search(manylinux_pattern, lightgbm_dep.url) assert manylinux_match, "No match found for manylinux version in {lightgbm_dep.url}" @@ -2614,7 +2601,7 @@ def test_pip_respects_glibc_version( lockfile = parse_conda_lock_file(env_file.parent / DEFAULT_LOCKFILE_NAME) - (cryptography_dep,) = [p for p in lockfile.package if p.name == "cryptography"] + (cryptography_dep,) = (p for p in lockfile.package if p.name == "cryptography") manylinux_pattern = r"manylinux_(\d+)_(\d+).+\.whl" # Should return the first match so higher version first. manylinux_match = re.search(manylinux_pattern, cryptography_dep.url) @@ -2730,10 +2717,10 @@ def test_pip_full_whl_url( lockfile = parse_conda_lock_file(env_file.parent / DEFAULT_LOCKFILE_NAME) - (requests_dep,) = [p for p in lockfile.package if p.name == "requests"] - (typing_extensions_dep,) = [ + (requests_dep,) = (p for p in lockfile.package if p.name == "requests") + (typing_extensions_dep,) = ( p for p in lockfile.package if p.name == "typing-extensions" - ] + ) assert ( requests_dep.url == "https://github.com/psf/requests/releases/download/v2.31.0/requests-2.31.0-py3-none-any.whl" diff --git a/tests/test_regression.py b/tests/test_regression.py index 2ef22531..d602e30b 100644 --- a/tests/test_regression.py +++ b/tests/test_regression.py @@ -26,12 +26,7 @@ def clone_test_dir(name: Union[str, List[str]], tmp_path: Path) -> Path: test_dir = TEST_DIR.joinpath(*name) assert test_dir.exists() assert test_dir.is_dir() - if sys.version_info >= (3, 8): - shutil.copytree(test_dir, tmp_path, dirs_exist_ok=True) - else: - from distutils.dir_util import copy_tree - - copy_tree(str(test_dir), str(tmp_path)) + shutil.copytree(test_dir, tmp_path, dirs_exist_ok=True) return tmp_path From aa1691cc4901ad18565195af7c385e30336e8051 Mon Sep 17 00:00:00 2001 From: Ben Mares Date: Sun, 11 Feb 2024 22:35:09 +0100 Subject: [PATCH 18/21] Fix relative imports --- conda_lock/src_parser/conda_common.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/conda_lock/src_parser/conda_common.py b/conda_lock/src_parser/conda_common.py index 10b9346d..2840f57c 100644 --- a/conda_lock/src_parser/conda_common.py +++ b/conda_lock/src_parser/conda_common.py @@ -1,10 +1,9 @@ from typing import Optional +from conda_lock._vendor.conda.models.channel import Channel +from conda_lock._vendor.conda.models.match_spec import MatchSpec from conda_lock.models.lock_spec import VersionedDependency -from .._vendor.conda.models.channel import Channel -from .._vendor.conda.models.match_spec import MatchSpec - def conda_spec_to_versioned_dep(spec: str, category: str) -> VersionedDependency: """Convert a string form conda spec into a versioned dependency for a given category. From 4028f3a1cb9d0d5758eefca2985e1feb02f72227 Mon Sep 17 00:00:00 2001 From: Ben Mares Date: Sun, 11 Feb 2024 22:43:14 +0100 Subject: [PATCH 19/21] Add more ruff rules --- pyproject.toml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 5a11c07b..d32486aa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -195,6 +195,10 @@ select = [ "I", # isort "RUF", # ruff rules "W", # pycodestyle warnings + "UP", # pyupgrade + "TID", # flake8-tidy-imports + "A", # flake8-builtins + "BLE", # flake8-blind-except ] [tool.ruff.lint.mccabe] From 5a728c2c7accf93a0892a4246e42790b02ac607b Mon Sep 17 00:00:00 2001 From: Ben Mares Date: Sun, 11 Feb 2024 22:43:32 +0100 Subject: [PATCH 20/21] Call out blind excepts --- conda_lock/__init__.py | 2 +- conda_lock/src_parser/conda_common.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/conda_lock/__init__.py b/conda_lock/__init__.py index c9048190..51bd2921 100644 --- a/conda_lock/__init__.py +++ b/conda_lock/__init__.py @@ -8,5 +8,5 @@ try: __version__ = distribution("conda_lock").version -except Exception: +except Exception: # noqa: BLE001 __version__ = "unknown" diff --git a/conda_lock/src_parser/conda_common.py b/conda_lock/src_parser/conda_common.py index 2840f57c..de470fb6 100644 --- a/conda_lock/src_parser/conda_common.py +++ b/conda_lock/src_parser/conda_common.py @@ -13,7 +13,7 @@ def conda_spec_to_versioned_dep(spec: str, category: str) -> VersionedDependency try: ms = MatchSpec(spec) # pyright: ignore # This is done in the metaclass for the matchspec - except Exception as e: + except Exception as e: # noqa: BLE001 raise RuntimeError(f"Failed to turn `{spec}` into a MatchSpec") from e package_channel: Optional[Channel] = ms.get("channel") From e6cbb819db59dd89abb6a760d48b5f3c225e815f Mon Sep 17 00:00:00 2001 From: Ben Mares Date: Sun, 11 Feb 2024 22:50:48 +0100 Subject: [PATCH 21/21] Remove extraneous known-first-party="attr" --- pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index d32486aa..f15c67a2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -207,4 +207,3 @@ max-complexity = 18 [tool.ruff.lint.isort] lines-after-imports = 2 lines-between-types = 1 -known-first-party = ["attr"]