@@ -137,6 +137,10 @@ def __init__(self, path: Path, constraint: bool) -> None:
137
137
self ._as_root_args : list [str ] | None = None
138
138
self ._parser_private : ArgumentParser | None = None
139
139
140
+ @property
141
+ def _req_parser (self ) -> RequirementsFile :
142
+ return self
143
+
140
144
def __str__ (self ) -> str :
141
145
return f"{ '-c' if self .is_constraint else '-r' } { self .path } "
142
146
@@ -162,8 +166,12 @@ def requirements(self) -> list[ParsedRequirement]:
162
166
def _parser (self ) -> ArgumentParser :
163
167
if self ._parser_private is None :
164
168
self ._parser_private = build_parser ()
169
+ self ._extend_parser (self ._parser_private )
165
170
return self ._parser_private
166
171
172
+ def _extend_parser (self , parser : ArgumentParser ) -> None : # noqa: U100
173
+ ...
174
+
167
175
def _ensure_requirements_parsed (self ) -> None :
168
176
if self ._requirements is None :
169
177
self ._requirements = self ._parse_requirements (opt = self ._opt , recurse = True )
@@ -204,7 +212,7 @@ def _parse_and_recurse(self, filename: str, constraint: bool, recurse: bool) ->
204
212
# do a join so relative paths work
205
213
req_path = os .path .join (os .path .dirname (filename ), req_path )
206
214
if recurse :
207
- yield from self ._parse_and_recurse (req_path , nested_constraint , recurse )
215
+ yield from self ._req_parser . _parse_and_recurse (req_path , nested_constraint , recurse )
208
216
else :
209
217
line .filename = req_path
210
218
yield line
@@ -278,8 +286,7 @@ def _handle_requirement_line(line: ParsedLine) -> ParsedRequirement:
278
286
req_options ["hash" ] = hash_values
279
287
return ParsedRequirement (line .requirement , req_options , line .filename , line .lineno )
280
288
281
- @staticmethod
282
- def _merge_option_line (base_opt : Namespace , opt : Namespace , filename : str ) -> None : # noqa: C901
289
+ def _merge_option_line (self , base_opt : Namespace , opt : Namespace , filename : str ) -> None : # noqa: C901
283
290
# percolate options upward
284
291
if opt .requirements :
285
292
if not hasattr (base_opt , "requirements" ):
@@ -428,8 +435,7 @@ def as_root_args(self) -> list[str]:
428
435
self ._as_root_args = result
429
436
return self ._as_root_args
430
437
431
- @staticmethod
432
- def _option_to_args (opt : Namespace ) -> list [str ]:
438
+ def _option_to_args (self , opt : Namespace ) -> list [str ]:
433
439
result : list [str ] = []
434
440
for req in getattr (opt , "requirements" , []):
435
441
result .extend (("-r" , req ))
0 commit comments