pydepinject 0.0.1.dev1__tar.gz → 0.0.1.dev2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (18) hide show
  1. {pydepinject-0.0.1.dev1 → pydepinject-0.0.1.dev2}/MANIFEST.in +1 -1
  2. {pydepinject-0.0.1.dev1/src/pydepinject.egg-info → pydepinject-0.0.1.dev2}/PKG-INFO +3 -1
  3. {pydepinject-0.0.1.dev1 → pydepinject-0.0.1.dev2}/pyproject.toml +7 -1
  4. {pydepinject-0.0.1.dev1 → pydepinject-0.0.1.dev2}/src/pydepinject/__init__.py +30 -14
  5. {pydepinject-0.0.1.dev1 → pydepinject-0.0.1.dev2/src/pydepinject.egg-info}/PKG-INFO +3 -1
  6. {pydepinject-0.0.1.dev1 → pydepinject-0.0.1.dev2}/src/pydepinject.egg-info/requires.txt +2 -0
  7. {pydepinject-0.0.1.dev1 → pydepinject-0.0.1.dev2}/LICENSE +0 -0
  8. {pydepinject-0.0.1.dev1 → pydepinject-0.0.1.dev2}/Readme.md +0 -0
  9. {pydepinject-0.0.1.dev1 → pydepinject-0.0.1.dev2}/setup.cfg +0 -0
  10. {pydepinject-0.0.1.dev1 → pydepinject-0.0.1.dev2}/src/pydepinject.egg-info/SOURCES.txt +0 -0
  11. {pydepinject-0.0.1.dev1 → pydepinject-0.0.1.dev2}/src/pydepinject.egg-info/dependency_links.txt +0 -0
  12. {pydepinject-0.0.1.dev1 → pydepinject-0.0.1.dev2}/src/pydepinject.egg-info/top_level.txt +0 -0
  13. {pydepinject-0.0.1.dev1 → pydepinject-0.0.1.dev2}/src/requirementmanager.egg-info/PKG-INFO +0 -0
  14. {pydepinject-0.0.1.dev1 → pydepinject-0.0.1.dev2}/src/requirementmanager.egg-info/SOURCES.txt +0 -0
  15. {pydepinject-0.0.1.dev1 → pydepinject-0.0.1.dev2}/src/requirementmanager.egg-info/dependency_links.txt +0 -0
  16. {pydepinject-0.0.1.dev1 → pydepinject-0.0.1.dev2}/src/requirementmanager.egg-info/requires.txt +0 -0
  17. {pydepinject-0.0.1.dev1 → pydepinject-0.0.1.dev2}/src/requirementmanager.egg-info/top_level.txt +0 -0
  18. {pydepinject-0.0.1.dev1 → pydepinject-0.0.1.dev2}/tests/test_pydepinject.py +0 -0
@@ -1,3 +1,3 @@
1
1
  graft src
2
2
  exclude Dockerfile noxfile.py tasks.py scripts/*
3
- global-exclude *~ *.py[cod] *.so .devcontainer/*
3
+ global-exclude *~ *.py[cod] *.so .devcontainer/* .vscode/*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pydepinject
3
- Version: 0.0.1.dev1
3
+ Version: 0.0.1.dev2
4
4
  Summary: A package to dynamically inject requirements into a virtual environment.
5
5
  Author: pydepinject
6
6
  License: MIT
@@ -21,6 +21,7 @@ Classifier: Typing :: Typed
21
21
  Requires-Python: >=3.9
22
22
  Description-Content-Type: text/markdown
23
23
  License-File: LICENSE
24
+ Requires-Dist: packaging~=22.0
24
25
  Provides-Extra: lint
25
26
  Requires-Dist: ruff==0.4.7; extra == "lint"
26
27
  Requires-Dist: pyright==1.1.365; extra == "lint"
@@ -28,6 +29,7 @@ Requires-Dist: isort==5.13.2; extra == "lint"
28
29
  Provides-Extra: test
29
30
  Requires-Dist: pytest==8.2.1; extra == "test"
30
31
  Requires-Dist: pytest-cov==5.0.0; extra == "test"
32
+ Requires-Dist: pytest-xdist==3.6.1; extra == "test"
31
33
  Provides-Extra: build
32
34
  Requires-Dist: check-manifest==0.49; extra == "build"
33
35
  Requires-Dist: build==1.2.1; extra == "build"
@@ -15,6 +15,9 @@ authors = [
15
15
  license = { text="MIT" }
16
16
  keywords = ["virtualenv", "requirements", "dependency management"]
17
17
  requires-python = ">=3.9"
18
+ dependencies = [
19
+ "packaging~=22.0",
20
+ ]
18
21
  classifiers = [
19
22
  "Development Status :: 4 - Beta",
20
23
  "Intended Audience :: Developers",
@@ -42,6 +45,7 @@ lint = [
42
45
  test = [
43
46
  "pytest==8.2.1",
44
47
  "pytest-cov==5.0.0",
48
+ "pytest-xdist==3.6.1",
45
49
  ]
46
50
  build = [
47
51
  "check-manifest==0.49",
@@ -62,7 +66,8 @@ log_level = "DEBUG"
62
66
 
63
67
  [tool.pytest.ini_options]
64
68
  pythonpath = "src"
65
-
69
+ addopts = "--durations=10 -n auto"
70
+ # Estimated test times: 74s with auto (2), 76s with 6 workers, 113se with no workers.
66
71
 
67
72
  [tool.ruff]
68
73
  preview = true
@@ -130,3 +135,4 @@ twine = {version = "5.1.0"}
130
135
 
131
136
  [tool.custom.ci]
132
137
  python_versions = ["3.9", "3.10", "3.11", "3.12"]
138
+ packaging_versions = ["22", "23", "24"]
@@ -18,7 +18,7 @@ if typing.TYPE_CHECKING:
18
18
  from typing import Any
19
19
 
20
20
 
21
- VERSION = "0.0.1dev1"
21
+ VERSION = "0.0.1dev2"
22
22
 
23
23
  logger = logging.getLogger(__name__)
24
24
  logger.setLevel(logging.DEBUG)
@@ -31,25 +31,41 @@ logger.debug("VENV_ROOT: %s", VENV_ROOT)
31
31
  def is_requirements_satisfied(*packages: str):
32
32
  """Check if the requirements are already satisfied. Return None if it cannot be determined."""
33
33
  try:
34
- if "pkg_resources" in sys.modules:
35
- del sys.modules["pkg_resources"]
36
- import pkg_resources
34
+ from importlib.metadata import PackageNotFoundError, distribution
35
+
36
+ from packaging.requirements import Requirement
37
37
  except ImportError:
38
- logger.debug(
39
- "pkg_resources not found. Cannot check if requirements are satisfied."
40
- )
41
- return None
38
+ try:
39
+ from importlib.metadata import PackageNotFoundError, distribution
40
+
41
+ from packaging.requirements import Requirement
42
+ except ImportError:
43
+ logger.warning(
44
+ "importlib.metadata and packaging not found. Cannot check if requirements are satisfied."
45
+ )
46
+ return None
42
47
 
43
48
  try:
44
49
  for package in packages:
45
50
  logger.debug("Checking package: %s", package)
46
- req = pkg_resources.Requirement.parse(package)
47
- pkg_resources.require(str(req))
48
- logger.debug("Requirement %s is satisfied", package)
51
+ req = Requirement(package)
52
+ try:
53
+ dist = distribution(req.name)
54
+ if dist.version not in req.specifier:
55
+ logger.debug(
56
+ "Requirement %s is not satisfied. Version conflict.", package
57
+ )
58
+ return False
59
+ logger.debug("Requirement %s is satisfied", package)
60
+ except PackageNotFoundError:
61
+ logger.debug(
62
+ "Requirement %s is not satisfied. Distribution not found.", package
63
+ )
64
+ return False
49
65
  return True
50
- except (pkg_resources.DistributionNotFound, pkg_resources.VersionConflict):
51
- logger.debug("Requirements %s are not satisfied. Return False", packages)
52
- return False
66
+ except Exception as e:
67
+ logger.warning("An error occurred while checking requirements: %s", str(e))
68
+ return None
53
69
 
54
70
 
55
71
  class RequirementManager:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pydepinject
3
- Version: 0.0.1.dev1
3
+ Version: 0.0.1.dev2
4
4
  Summary: A package to dynamically inject requirements into a virtual environment.
5
5
  Author: pydepinject
6
6
  License: MIT
@@ -21,6 +21,7 @@ Classifier: Typing :: Typed
21
21
  Requires-Python: >=3.9
22
22
  Description-Content-Type: text/markdown
23
23
  License-File: LICENSE
24
+ Requires-Dist: packaging~=22.0
24
25
  Provides-Extra: lint
25
26
  Requires-Dist: ruff==0.4.7; extra == "lint"
26
27
  Requires-Dist: pyright==1.1.365; extra == "lint"
@@ -28,6 +29,7 @@ Requires-Dist: isort==5.13.2; extra == "lint"
28
29
  Provides-Extra: test
29
30
  Requires-Dist: pytest==8.2.1; extra == "test"
30
31
  Requires-Dist: pytest-cov==5.0.0; extra == "test"
32
+ Requires-Dist: pytest-xdist==3.6.1; extra == "test"
31
33
  Provides-Extra: build
32
34
  Requires-Dist: check-manifest==0.49; extra == "build"
33
35
  Requires-Dist: build==1.2.1; extra == "build"
@@ -1,3 +1,4 @@
1
+ packaging~=22.0
1
2
 
2
3
  [build]
3
4
  check-manifest==0.49
@@ -13,3 +14,4 @@ isort==5.13.2
13
14
  [test]
14
15
  pytest==8.2.1
15
16
  pytest-cov==5.0.0
17
+ pytest-xdist==3.6.1