pipgrip 0.10.15__py2.py3-none-any.whl → 0.11.1__py2.py3-none-any.whl

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.
pipgrip/_repo_version.py CHANGED
@@ -1 +1 @@
1
- version = "0.10.15"
1
+ version = "0.11.1"
pipgrip/cli.py CHANGED
@@ -45,6 +45,8 @@ import click
45
45
  from anytree import AsciiStyle, ContStyle, Node, RenderTree
46
46
  from anytree.exporter import DictExporter
47
47
  from packaging.markers import default_environment
48
+ from packaging.requirements import InvalidRequirement
49
+ from pkg_resources import RequirementParseError
48
50
 
49
51
  from pipgrip import __version__
50
52
  from pipgrip.compat import PIP_VERSION
@@ -56,6 +58,7 @@ from pipgrip.pipper import (
56
58
  BUILD_FAILURE_STR,
57
59
  REPORT_FAILURE_STR,
58
60
  install_packages,
61
+ parse_req,
59
62
  read_requirements,
60
63
  )
61
64
 
@@ -262,7 +265,7 @@ def render_lock(packages, include_dot=True, sort=False):
262
265
 
263
266
  @click.command(
264
267
  context_settings={"help_option_names": ["-h", "--help"], "max_content_width": 84},
265
- help="pipgrip is a lightweight pip dependency resolver with deptree preview functionality based on the PubGrub algorithm, which is also used by poetry. For one or more PEP 508 dependency specifications, pipgrip recursively fetches/builds the Python wheels necessary for version solving, and optionally renders the full resulting dependency tree.",
268
+ help="pipgrip is a lightweight pip dependency resolver with deptree preview functionality based on the PubGrub algorithm, which is also used by poetry. For one or more PEP 508 dependency specifications, pipgrip recursively fetches Python wheel metadata necessary for version solving (with fallback to building the wheel if no metadata is available), and optionally renders the full resulting dependency tree.",
266
269
  )
267
270
  @click.argument("dependencies", nargs=-1)
268
271
  @click.option(
@@ -383,6 +386,12 @@ def render_lock(packages, include_dot=True, sort=False):
383
386
  count=True,
384
387
  help="Control verbosity: -v will print cyclic dependencies (WARNING), -vv will show solving decisions (INFO), -vvv for development (DEBUG).",
385
388
  )
389
+ @click.option(
390
+ "--skip-invalid-input",
391
+ is_flag=True,
392
+ help="Skip invalid requirements (e.g. internal repositories, typos) and continue processing other dependencies.",
393
+ )
394
+ @click.version_option(version=__version__, prog_name="pipgrip")
386
395
  def main(
387
396
  dependencies,
388
397
  requirements_file,
@@ -406,6 +415,7 @@ def main(
406
415
  threads,
407
416
  pre,
408
417
  verbose,
418
+ skip_invalid_input,
409
419
  ):
410
420
  if verbose == 0:
411
421
  logger.setLevel(logging.ERROR)
@@ -476,7 +486,15 @@ def main(
476
486
  pre=pre,
477
487
  )
478
488
  for root_dependency in dependencies:
479
- source.root_dep(root_dependency)
489
+ try:
490
+ source.root_dep(root_dependency)
491
+ except (InvalidRequirement, RequirementParseError) as e:
492
+ if skip_invalid_input:
493
+ logger.warning(
494
+ "Skipping invalid requirement '%s': %s", root_dependency, str(e)
495
+ )
496
+ else:
497
+ raise
480
498
 
481
499
  solver = VersionSolver(source, threads=threads)
482
500
  try:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pipgrip
3
- Version: 0.10.15
3
+ Version: 0.11.1
4
4
  Summary: Lightweight pip dependency resolver with deptree preview functionality based on the PubGrub algorithm
5
5
  Home-page: https://github.com/ddelange/pipgrip
6
6
  Author: ddelange
@@ -64,7 +64,7 @@ Dynamic: summary
64
64
  [![python](https://img.shields.io/pypi/pyversions/pipgrip.svg?logo=python&logoColor=white)](https://pypi.org/project/pipgrip/)
65
65
  [![downloads](https://static.pepy.tech/badge/pipgrip)](https://pypistats.org/packages/pipgrip)
66
66
 
67
- [pipgrip](https://github.com/ddelange/pipgrip) is a lightweight pip dependency resolver with deptree preview functionality based on the [PubGrub algorithm](https://medium.com/@nex3/pubgrub-2fb6470504f), which is also used by [poetry](https://github.com/python-poetry/poetry). For one or more [PEP 508](https://www.python.org/dev/peps/pep-0508/) dependency specifications, pipgrip recursively fetches/builds the Python wheels necessary for version solving, and optionally renders the full resulting dependency tree.
67
+ [pipgrip](https://github.com/ddelange/pipgrip) is a lightweight pip dependency resolver with deptree preview functionality based on the [PubGrub algorithm](https://medium.com/@nex3/pubgrub-2fb6470504f), which is also used by [poetry](https://github.com/python-poetry/poetry). For one or more [PEP 508](https://www.python.org/dev/peps/pep-0508/) dependency specifications, pipgrip recursively fetches Python wheel metadata necessary for version solving (with fallback to building the wheel if no metadata is available), and optionally renders the full resulting dependency tree.
68
68
 
69
69
  ```
70
70
  $ pipgrip --tree fastapi~=0.94
@@ -123,9 +123,10 @@ Usage: pipgrip [OPTIONS] [DEPENDENCIES]...
123
123
 
124
124
  pipgrip is a lightweight pip dependency resolver with deptree preview
125
125
  functionality based on the PubGrub algorithm, which is also used by poetry. For
126
- one or more PEP 508 dependency specifications, pipgrip recursively
127
- fetches/builds the Python wheels necessary for version solving, and optionally
128
- renders the full resulting dependency tree.
126
+ one or more PEP 508 dependency specifications, pipgrip recursively fetches
127
+ Python wheel metadata necessary for version solving (with fallback to building
128
+ the wheel if no metadata is available), and optionally renders the full
129
+ resulting dependency tree.
129
130
 
130
131
  Options:
131
132
  --install Install full dependency tree after resolving.
@@ -169,6 +170,10 @@ Options:
169
170
  -v, --verbose Control verbosity: -v will print cyclic
170
171
  dependencies (WARNING), -vv will show solving
171
172
  decisions (INFO), -vvv for development (DEBUG).
173
+ --skip-invalid-input Skip invalid requirements (e.g. internal
174
+ repositories, typos) and continue processing other
175
+ dependencies.
176
+ --version Show the version and exit.
172
177
  -h, --help Show this message and exit.
173
178
  ```
174
179
 
@@ -179,14 +184,13 @@ Exhaustive dependency trees without the need to install any packages ([at most b
179
184
  ```
180
185
  $ pipgrip --tree pipgrip
181
186
 
182
- pipgrip (0.10.6)
183
- ├── anytree>=2.4.1 (2.9.0)
184
- │ └── six (1.16.0)
185
- ├── click>=7 (8.1.6)
186
- ├── packaging>=17 (23.1)
187
- ├── pip>=22.2 (23.2.1)
188
- ├── setuptools>=38.3 (68.0.0)
189
- └── wheel (0.41.1)
187
+ pipgrip (0.11.0)
188
+ ├── anytree>=2.4.1 (2.13.0)
189
+ ├── click>=7 (8.3.1)
190
+ ├── packaging>=17 (25.0)
191
+ ├── pip>=22.2 (25.3)
192
+ ├── setuptools<81,>=38.3 (80.9.0)
193
+ └── wheel (0.45.1)
190
194
  ```
191
195
 
192
196
  For more details/further processing, combine `--tree` with `--json` for a detailed nested JSON dependency tree. See also `--tree-ascii` (no unicode tree markers), and `--tree-json` & `--tree-json-exact` (simplified JSON dependency trees).
@@ -1,6 +1,6 @@
1
1
  pipgrip/__init__.py,sha256=eF4gP3t6HU78VGDzL3PdQUP6dt_aBGEXLl9Xge9dAu4,1924
2
- pipgrip/_repo_version.py,sha256=KAIs8RKi7S1EDpqFhDeMfvDX8ScTPeEX-_RW3f9yvW0,20
3
- pipgrip/cli.py,sha256=3yf-oOXh_p_U2YuAlSXOhNGBKISEc8j-Shl-H5vn1WM,20295
2
+ pipgrip/_repo_version.py,sha256=SUcnFm7j3J3uMo-4MTj_VQdFouf2G1ZrvcI2NbsXESc,19
3
+ pipgrip/cli.py,sha256=_FOT2bTgc2weECnNO-oLOjhg4mxCH4ZmMtVAS5PXlmc,21068
4
4
  pipgrip/compat.py,sha256=54TukmlLmNW_va39lA8QiQlfGohzbs0kPHTfa2nTRfE,1889
5
5
  pipgrip/package_source.py,sha256=hGGzNyjHDgvDZrUjEGhjilfjxllQa-wkj8ucPXnKfwg,10035
6
6
  pipgrip/pipper.py,sha256=G_FvgYVEDeCq-qf-0-s5vAdzhR4fXQJnfJnooCpNyI8,19582
@@ -29,9 +29,9 @@ pipgrip/libs/semver/version.py,sha256=uNAkxpcQgWj047IJtZB9Fo_UlRFWCSAs8RxQ75ckTO
29
29
  pipgrip/libs/semver/version_constraint.py,sha256=nOFmEpOHCzpfqO1LFnXSqyZGGeN4mjLT228KYqh1qFY,2539
30
30
  pipgrip/libs/semver/version_range.py,sha256=NkmqYueJ_j8kxKd00BEykHFOWI39r31s38Csj8hu4-w,15350
31
31
  pipgrip/libs/semver/version_union.py,sha256=8ngwRmFKaOKmZ10M-ebyeRNB9uVl4HNL7FzoZYmOgDE,9801
32
- pipgrip-0.10.15.dist-info/licenses/LICENSE,sha256=ZoxfsQqxkYOcxTHFEye8YJRUUBAJISfdHej3Di7u_Bs,1587
33
- pipgrip-0.10.15.dist-info/METADATA,sha256=PLZg8ok114oGu2I0VbyOn0fFyXax1O1qha5wHw1SzeM,18336
34
- pipgrip-0.10.15.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
35
- pipgrip-0.10.15.dist-info/entry_points.txt,sha256=VGqby8sWTjfkK20Vj_FqBZ_UxBlgmAOzq4rcJLYlRq0,45
36
- pipgrip-0.10.15.dist-info/top_level.txt,sha256=upoyu3ujOmKRvBUtTrwzk58e-r6zJahuT_8-RDsd2p0,8
37
- pipgrip-0.10.15.dist-info/RECORD,,
32
+ pipgrip-0.11.1.dist-info/licenses/LICENSE,sha256=ZoxfsQqxkYOcxTHFEye8YJRUUBAJISfdHej3Di7u_Bs,1587
33
+ pipgrip-0.11.1.dist-info/METADATA,sha256=IzIQhkrZ1TpXXJc7GV_4dBpA9WxDtWRnFUe6sp5yu2M,18698
34
+ pipgrip-0.11.1.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
35
+ pipgrip-0.11.1.dist-info/entry_points.txt,sha256=VGqby8sWTjfkK20Vj_FqBZ_UxBlgmAOzq4rcJLYlRq0,45
36
+ pipgrip-0.11.1.dist-info/top_level.txt,sha256=upoyu3ujOmKRvBUtTrwzk58e-r6zJahuT_8-RDsd2p0,8
37
+ pipgrip-0.11.1.dist-info/RECORD,,