Skip to content

Commit 15ef3cd

Browse files
committed
Merge pull request #5 from jhesketh/master
Add support for --ignore-reqs
2 parents 4b64b44 + 4ecad94 commit 15ef3cd

File tree

4 files changed

+47
-9
lines changed

4 files changed

+47
-9
lines changed

pip_check_reqs/common.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
import os
66
import re
77

8+
from pip.download import PipSession
9+
from pip.req import parse_requirements
10+
from pip.utils import normalize_name
11+
812
log = logging.getLogger(__name__)
913

1014

@@ -117,6 +121,18 @@ def find_imported_modules(options):
117121
return vis.finalise()
118122

119123

124+
def find_required_modules(options):
125+
explicit = set()
126+
for requirement in parse_requirements('requirements.txt',
127+
session=PipSession()):
128+
if options.ignore_reqs(requirement):
129+
log.debug('ignoring requirement: %s', requirement.name)
130+
else:
131+
log.debug('found requirement: %s', requirement.name)
132+
explicit.add(normalize_name(requirement.name))
133+
return explicit
134+
135+
120136
def is_package_file(path):
121137
'''Determines whether the path points to a Python package sentinel
122138
file - the __init__.py or its compiled variants.

pip_check_reqs/find_extra_reqs.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
import sys
66

77
from pip.commands.show import search_packages_info
8-
from pip.download import PipSession
9-
from pip.req import parse_requirements
108
from pip.utils import get_installed_distributions, normalize_name
119

1210
from pip_check_reqs import common
@@ -50,11 +48,7 @@ def find_extra_reqs(options):
5048
modname, info.filename)
5149

5250
# 4. compare with requirements.txt
53-
explicit = set()
54-
for requirement in parse_requirements('requirements.txt',
55-
session=PipSession()):
56-
log.debug('found requirement: %s', requirement.name)
57-
explicit.add(normalize_name(requirement.name))
51+
explicit = common.find_required_modules(options)
5852

5953
return [name for name in explicit if name not in used]
6054

@@ -70,6 +64,9 @@ def main():
7064
parser.add_option("-m", "--ignore-module", dest="ignore_mods",
7165
action="append", default=[],
7266
help="used module names (globs are ok) to ignore")
67+
parser.add_option("-r", "--ignore-requirement", dest="ignore_reqs",
68+
action="append", default=[],
69+
help="reqs in requirements.txt to ignore")
7370
parser.add_option("-v", "--verbose", dest="verbose",
7471
action="store_true", default=False, help="be more verbose")
7572
parser.add_option("-d", "--debug", dest="debug",
@@ -88,6 +85,7 @@ def main():
8885

8986
options.ignore_files = common.ignorer(options.ignore_files)
9087
options.ignore_mods = common.ignorer(options.ignore_mods)
88+
options.ignore_reqs = common.ignorer(options.ignore_reqs)
9189

9290
options.paths = args
9391

tests/test_common.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import absolute_import
22

33
import ast
4+
import collections
45
import logging
56
import os.path
67
import sys
@@ -159,3 +160,20 @@ def test_ignorer(monkeypatch, ignore_cfg, candidate, result):
159160
monkeypatch.setattr(os.path, 'relpath', lambda s: s.lstrip('/'))
160161
ignorer = common.ignorer(ignore_cfg)
161162
assert ignorer(candidate) == result
163+
164+
165+
def test_find_required_modules(monkeypatch):
166+
class options:
167+
@staticmethod
168+
def ignore_reqs(req):
169+
if req.name == 'barfoo':
170+
return True
171+
return False
172+
173+
FakeReq = collections.namedtuple('FakeReq', ['name'])
174+
requirements = [FakeReq('foobar'), FakeReq('barfoo')]
175+
monkeypatch.setattr(common, 'parse_requirements',
176+
pretend.call_recorder(lambda a, session=None: requirements))
177+
178+
reqs = common.find_required_modules(options)
179+
assert reqs == set(['foobar'])

tests/test_find_extra_reqs.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class options:
2121
version = False
2222
ignore_files = []
2323
ignore_mods = []
24+
ignore_reqs = []
2425
options = options()
2526
args = ['ham.py']
2627

@@ -64,10 +65,14 @@ def test_find_extra_reqs(monkeypatch):
6465

6566
FakeReq = collections.namedtuple('FakeReq', ['name'])
6667
requirements = [FakeReq('foobar')]
67-
monkeypatch.setattr(find_extra_reqs, 'parse_requirements',
68+
monkeypatch.setattr(common, 'parse_requirements',
6869
pretend.call_recorder(lambda a, session=None: requirements))
6970

70-
result = find_extra_reqs.find_extra_reqs(None)
71+
class options:
72+
ignore_reqs = lambda x, y: False
73+
options = options()
74+
75+
result = find_extra_reqs.find_extra_reqs(options)
7176
assert result == ['foobar']
7277

7378

@@ -117,6 +122,7 @@ class options:
117122
version = False
118123
ignore_files = []
119124
ignore_mods = []
125+
ignore_reqs = []
120126
options = options()
121127

122128
class FakeOptParse:

0 commit comments

Comments
 (0)