|
3 | 3 | import re |
4 | 4 | import sys |
5 | 5 | from enum import Enum, unique |
6 | | -from typing import Dict, List, Optional, Set |
| 6 | +from typing import Dict, List |
7 | 7 |
|
8 | 8 | from reqstool_python_decorators.decorators.decorators import Requirements |
9 | 9 | from ruamel.yaml import YAML |
10 | 10 |
|
11 | 11 | from reqstool.commands.exit_codes import EXIT_CODE_SYNTAX_VALIDATION_ERROR |
| 12 | +from reqstool.common.filter_parser import parse_filters |
12 | 13 | from reqstool.common.models.lifecycle import LifecycleData |
13 | 14 | from reqstool.common.models.urn_id import UrnId |
14 | 15 | from reqstool.common.utils import Utils |
@@ -233,56 +234,13 @@ def __parse_location_git(self, locations_obj, instance_type, locations): |
233 | 234 |
|
234 | 235 | locations.append(git_location) |
235 | 236 |
|
236 | | - def __parse_requirement_filters(self, data) -> Dict[str, RequirementFilter]: # NOSONAR |
237 | | - r_filters = {} |
238 | | - |
239 | | - self.semantic_validator._validate_req_imports_filter_has_excludes_xor_includes(data) |
240 | | - |
241 | | - if "filters" in data: |
242 | | - for urn in data["filters"].keys(): |
243 | | - urn_filter = data["filters"][urn] |
244 | | - |
245 | | - req_urn_ids_imports: Optional[Set[UrnId]] = None |
246 | | - req_urn_ids_excludes: Optional[Set[UrnId]] = None |
247 | | - custom_includes = None |
248 | | - custom_exclude = None |
249 | | - |
250 | | - if "requirement_ids" in urn_filter: |
251 | | - if "includes" in urn_filter["requirement_ids"]: |
252 | | - filtered_ids = Utils.check_ids_to_filter( |
253 | | - current_urn=urn, ids=urn_filter["requirement_ids"]["includes"] |
254 | | - ) |
255 | | - req_ids_includes = set(filtered_ids) |
256 | | - req_urn_ids_imports: Set[UrnId] = set( |
257 | | - Utils.convert_ids_to_urn_id(urn=urn, ids=req_ids_includes) |
258 | | - ) |
259 | | - |
260 | | - if "excludes" in urn_filter["requirement_ids"]: |
261 | | - filtered_ids = Utils.check_ids_to_filter( |
262 | | - current_urn=urn, ids=urn_filter["requirement_ids"]["excludes"] |
263 | | - ) |
264 | | - req_ids_excludes = set(filtered_ids) |
265 | | - req_urn_ids_excludes: Set[UrnId] = set( |
266 | | - Utils.convert_ids_to_urn_id(urn=urn, ids=req_ids_excludes) |
267 | | - ) |
268 | | - |
269 | | - if "custom" in urn_filter: |
270 | | - if "includes" in urn_filter["custom"]: |
271 | | - custom_includes = urn_filter["custom"]["includes"] |
272 | | - |
273 | | - if "excludes" in urn_filter["custom"]: |
274 | | - custom_exclude = urn_filter["custom"]["excludes"] |
275 | | - |
276 | | - req_filter = RequirementFilter( |
277 | | - urn_ids_imports=req_urn_ids_imports, |
278 | | - urn_ids_excludes=req_urn_ids_excludes, |
279 | | - custom_imports=custom_includes, |
280 | | - custom_exclude=custom_exclude, |
281 | | - ) |
282 | | - |
283 | | - r_filters[urn] = req_filter |
284 | | - |
285 | | - return r_filters |
| 237 | + def __parse_requirement_filters(self, data) -> Dict[str, RequirementFilter]: |
| 238 | + return parse_filters( |
| 239 | + data=data, |
| 240 | + ids_key="requirement_ids", |
| 241 | + filter_cls=RequirementFilter, |
| 242 | + validate_fn=self.semantic_validator._validate_req_imports_filter_has_excludes_xor_includes, |
| 243 | + ) |
286 | 244 |
|
287 | 245 | @Requirements("REQ_004", "REQ_036") |
288 | 246 | def __parse_requirements(self, model, data): # NOSONAR |
|
0 commit comments