Skip to content

Commit 7722cf0

Browse files
authored
Merge pull request #8098 from pradyunsg/remove/skip-requirements-regex
2 parents 03d3ae0 + 5e4c356 commit 7722cf0

File tree

8 files changed

+12
-120
lines changed

8 files changed

+12
-120
lines changed

news/7297.removal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Remove deprecated ``--skip-requirements-regex`` option.

src/pip/_internal/cli/base_command.py

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -153,17 +153,6 @@ def _main(self, args):
153153
) + message
154154
deprecated(message, replacement=None, gone_in=None)
155155

156-
if options.skip_requirements_regex:
157-
deprecated(
158-
"--skip-requirements-regex is unsupported and will be removed",
159-
replacement=(
160-
"manage requirements/constraints files explicitly, "
161-
"possibly generating them from metadata"
162-
),
163-
gone_in="20.1",
164-
issue=7297,
165-
)
166-
167156
# TODO: Try to get these passing down from the command?
168157
# without resorting to os.environ to hold these.
169158
# This also affects isolated builds and it should.

src/pip/_internal/cli/cmdoptions.py

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -275,16 +275,6 @@ class PipOption(Option):
275275
help='Set the socket timeout (default %default seconds).',
276276
) # type: Callable[..., Option]
277277

278-
skip_requirements_regex = partial(
279-
Option,
280-
# A regex to be used to skip requirements
281-
'--skip-requirements-regex',
282-
dest='skip_requirements_regex',
283-
type='str',
284-
default='',
285-
help=SUPPRESS_HELP,
286-
) # type: Callable[..., Option]
287-
288278

289279
def exists_action():
290280
# type: () -> Option
@@ -948,7 +938,6 @@ def check_list_path_option(options):
948938
proxy,
949939
retries,
950940
timeout,
951-
skip_requirements_regex,
952941
exists_action,
953942
trusted_host,
954943
cert,

src/pip/_internal/commands/freeze.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ def run(self, options, args):
8989
local_only=options.local,
9090
user_only=options.user,
9191
paths=options.path,
92-
skip_regex=options.skip_requirements_regex,
9392
isolated=options.isolated_mode,
9493
wheel_cache=wheel_cache,
9594
skip=skip,

src/pip/_internal/operations/freeze.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import collections
88
import logging
99
import os
10-
import re
1110

1211
from pip._vendor import six
1312
from pip._vendor.packaging.utils import canonicalize_name
@@ -50,18 +49,13 @@ def freeze(
5049
local_only=None, # type: Optional[bool]
5150
user_only=None, # type: Optional[bool]
5251
paths=None, # type: Optional[List[str]]
53-
skip_regex=None, # type: Optional[str]
5452
isolated=False, # type: bool
5553
wheel_cache=None, # type: Optional[WheelCache]
5654
exclude_editable=False, # type: bool
5755
skip=() # type: Container[str]
5856
):
5957
# type: (...) -> Iterator[str]
6058
find_links = find_links or []
61-
skip_match = None
62-
63-
if skip_regex:
64-
skip_match = re.compile(skip_regex).search
6559

6660
for link in find_links:
6761
yield '-f {}'.format(link)
@@ -100,7 +94,6 @@ def freeze(
10094
for line in req_file:
10195
if (not line.strip() or
10296
line.strip().startswith('#') or
103-
(skip_match and skip_match(line)) or
10497
line.startswith((
10598
'-r', '--requirement',
10699
'-Z', '--always-unzip',

src/pip/_internal/req/req_file.py

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import shlex
1414
import sys
1515

16-
from pip._vendor.six.moves import filterfalse
1716
from pip._vendor.six.moves.urllib import parse as urllib_parse
1817

1918
from pip._internal.cli import cmdoptions
@@ -146,13 +145,8 @@ def parse_requirements(
146145
:param constraint: If true, parsing a constraint file rather than
147146
requirements file.
148147
"""
149-
skip_requirements_regex = (
150-
options.skip_requirements_regex if options else None
151-
)
152148
line_parser = get_line_parser(finder)
153-
parser = RequirementsFileParser(
154-
session, line_parser, comes_from, skip_requirements_regex
155-
)
149+
parser = RequirementsFileParser(session, line_parser, comes_from)
156150

157151
for parsed_line in parser.parse(filename, constraint):
158152
parsed_req = handle_line(
@@ -165,18 +159,15 @@ def parse_requirements(
165159
yield parsed_req
166160

167161

168-
def preprocess(content, skip_requirements_regex):
169-
# type: (Text, Optional[str]) -> ReqFileLines
162+
def preprocess(content):
163+
# type: (Text) -> ReqFileLines
170164
"""Split, filter, and join lines, and return a line iterator
171165
172166
:param content: the content of the requirements file
173-
:param skip_requirements_regex: the pattern to skip lines
174167
"""
175168
lines_enum = enumerate(content.splitlines(), start=1) # type: ReqFileLines
176169
lines_enum = join_lines(lines_enum)
177170
lines_enum = ignore_comments(lines_enum)
178-
if skip_requirements_regex:
179-
lines_enum = skip_regex(lines_enum, skip_requirements_regex)
180171
lines_enum = expand_env_variables(lines_enum)
181172
return lines_enum
182173

@@ -326,13 +317,11 @@ def __init__(
326317
session, # type: PipSession
327318
line_parser, # type: LineParser
328319
comes_from, # type: str
329-
skip_requirements_regex, # type: Optional[str]
330320
):
331321
# type: (...) -> None
332322
self._session = session
333323
self._line_parser = line_parser
334324
self._comes_from = comes_from
335-
self._skip_requirements_regex = skip_requirements_regex
336325

337326
def parse(self, filename, constraint):
338327
# type: (str, bool) -> Iterator[ParsedLine]
@@ -380,7 +369,7 @@ def _parse_file(self, filename, constraint):
380369
filename, self._session, comes_from=self._comes_from
381370
)
382371

383-
lines_enum = preprocess(content, self._skip_requirements_regex)
372+
lines_enum = preprocess(content)
384373

385374
for line_number, line in lines_enum:
386375
try:
@@ -517,18 +506,6 @@ def ignore_comments(lines_enum):
517506
yield line_number, line
518507

519508

520-
def skip_regex(lines_enum, pattern):
521-
# type: (ReqFileLines, str) -> ReqFileLines
522-
"""
523-
Skip lines that match the provided pattern
524-
525-
Note: the regex pattern is only built once
526-
"""
527-
matcher = re.compile(pattern)
528-
lines_enum = filterfalse(lambda e: matcher.search(e[1]), lines_enum)
529-
return lines_enum
530-
531-
532509
def expand_env_variables(lines_enum):
533510
# type: (ReqFileLines) -> ReqFileLines
534511
"""Replace all environment variables that can be retrieved via `os.getenv`.

tests/unit/test_options.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -359,12 +359,6 @@ def test_timeout(self):
359359
options2, args2 = main(['fake', '--timeout', '-1'])
360360
assert options1.timeout == options2.timeout == -1
361361

362-
def test_skip_requirements_regex(self):
363-
options1, args1 = main(['--skip-requirements-regex', 'path', 'fake'])
364-
options2, args2 = main(['fake', '--skip-requirements-regex', 'path'])
365-
assert options1.skip_requirements_regex == 'path'
366-
assert options2.skip_requirements_regex == 'path'
367-
368362
def test_exists_action(self):
369363
options1, args1 = main(['--exists-action', 'w', 'fake'])
370364
options2, args2 = main(['fake', '--exists-action', 'w'])

tests/unit/test_req_file.py

Lines changed: 7 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
join_lines,
2828
parse_requirements,
2929
preprocess,
30-
skip_regex,
3130
)
3231
from tests.lib import make_test_finder, requirements_file
3332

@@ -45,9 +44,10 @@ def finder(session):
4544
@pytest.fixture
4645
def options(session):
4746
return stub(
48-
isolated_mode=False, index_url='default_url',
49-
skip_requirements_regex=False,
50-
format_control=FormatControl(set(), set()))
47+
isolated_mode=False,
48+
index_url='default_url',
49+
format_control=FormatControl(set(), set()),
50+
)
5151

5252

5353
def parse_reqfile(
@@ -79,15 +79,15 @@ def test_comments_and_joins_case1(self):
7979
# comment \\
8080
req2
8181
""")
82-
result = preprocess(content, None)
82+
result = preprocess(content)
8383
assert list(result) == [(1, 'req1'), (3, 'req2')]
8484

8585
def test_comments_and_joins_case2(self):
8686
content = textwrap.dedent("""\
8787
req1\\
8888
# comment
8989
""")
90-
result = preprocess(content, None)
90+
result = preprocess(content)
9191
assert list(result) == [(1, 'req1')]
9292

9393
def test_comments_and_joins_case3(self):
@@ -96,29 +96,9 @@ def test_comments_and_joins_case3(self):
9696
# comment
9797
req2
9898
""")
99-
result = preprocess(content, None)
99+
result = preprocess(content)
100100
assert list(result) == [(1, 'req1'), (3, 'req2')]
101101

102-
def test_skip_regex_after_joining_case1(self, options):
103-
content = textwrap.dedent("""\
104-
patt\\
105-
ern
106-
line2
107-
""")
108-
skip_requirements_regex = 'pattern'
109-
result = preprocess(content, skip_requirements_regex)
110-
assert list(result) == [(3, 'line2')]
111-
112-
def test_skip_regex_after_joining_case2(self, options):
113-
content = textwrap.dedent("""\
114-
pattern \\
115-
line2
116-
line3
117-
""")
118-
skip_requirements_regex = 'pattern'
119-
result = preprocess(content, skip_requirements_regex)
120-
assert list(result) == [(3, 'line3')]
121-
122102

123103
class TestIgnoreComments(object):
124104
"""tests for `ignore_comment`"""
@@ -172,25 +152,6 @@ def test_last_line_with_escape(self):
172152
assert expect == list(join_lines(lines))
173153

174154

175-
class TestSkipRegex(object):
176-
"""tests for `skip_reqex``"""
177-
178-
def test_skip_regex_pattern_match(self):
179-
pattern = '.*Bad.*'
180-
line = '--extra-index-url Bad'
181-
assert [] == list(skip_regex(enumerate([line]), pattern))
182-
183-
def test_skip_regex_pattern_not_match(self):
184-
pattern = '.*Bad.*'
185-
line = '--extra-index-url Good'
186-
assert [(0, line)] == list(skip_regex(enumerate([line]), pattern))
187-
188-
def test_skip_regex_no_options(self):
189-
pattern = None
190-
line = '--extra-index-url Good'
191-
assert [(1, line)] == list(preprocess(line, pattern))
192-
193-
194155
@pytest.fixture
195156
def line_processor(
196157
monkeypatch,
@@ -616,17 +577,6 @@ def test_multiple_appending_options(self, tmpdir, finder, options):
616577

617578
assert finder.index_urls == ['url1', 'url2']
618579

619-
def test_skip_regex(self, tmpdir, finder, options):
620-
options.skip_requirements_regex = '.*Bad.*'
621-
with open(tmpdir.joinpath("req1.txt"), "w") as fp:
622-
fp.write("--extra-index-url Bad \n")
623-
fp.write("--extra-index-url Good ")
624-
625-
list(parse_reqfile(tmpdir.joinpath("req1.txt"), finder=finder,
626-
options=options, session=PipSession()))
627-
628-
assert finder.index_urls == ['Good']
629-
630580
def test_expand_existing_env_variables(self, tmpdir, finder):
631581
template = (
632582
'https://{}:[email protected]/'

0 commit comments

Comments
 (0)