|
21 | 21 |
|
22 | 22 | import argparse |
23 | 23 | import time |
| 24 | +from typing import Any |
24 | 25 |
|
25 | 26 | from rich.progress import Progress, SpinnerColumn, TextColumn |
26 | 27 | from seed_utils import console, get_session |
|
36 | 37 | from policyengine_api.models.region import RegionType # noqa: E402 |
37 | 38 |
|
38 | 39 |
|
| 40 | +def _region_scoping_strategy(pe_region: Any) -> Any | None: |
| 41 | + return getattr(pe_region, "scoping_strategy", None) |
| 42 | + |
| 43 | + |
| 44 | +def _region_requires_filter(pe_region: Any) -> bool: |
| 45 | + strategy = _region_scoping_strategy(pe_region) |
| 46 | + return bool(getattr(pe_region, "requires_filter", strategy is not None)) |
| 47 | + |
| 48 | + |
| 49 | +def _region_filter_field(pe_region: Any) -> str | None: |
| 50 | + if hasattr(pe_region, "filter_field"): |
| 51 | + return pe_region.filter_field |
| 52 | + strategy = _region_scoping_strategy(pe_region) |
| 53 | + return getattr(strategy, "variable_name", None) |
| 54 | + |
| 55 | + |
| 56 | +def _region_filter_value(pe_region: Any) -> str | None: |
| 57 | + if hasattr(pe_region, "filter_value"): |
| 58 | + return pe_region.filter_value |
| 59 | + strategy = _region_scoping_strategy(pe_region) |
| 60 | + return getattr(strategy, "variable_value", None) |
| 61 | + |
| 62 | + |
| 63 | +def _region_filter_strategy(pe_region: Any) -> str | None: |
| 64 | + strategy = _region_scoping_strategy(pe_region) |
| 65 | + return getattr(strategy, "strategy_type", None) |
| 66 | + |
| 67 | + |
39 | 68 | def _group_us_datasets( |
40 | 69 | session: Session, |
41 | 70 | us_model_id, |
@@ -197,14 +226,10 @@ def seed_us_regions( |
197 | 226 | code=pe_region.code, |
198 | 227 | label=pe_region.label, |
199 | 228 | region_type=RegionType(pe_region.region_type), |
200 | | - requires_filter=pe_region.requires_filter, |
201 | | - filter_field=pe_region.filter_field, |
202 | | - filter_value=pe_region.filter_value, |
203 | | - filter_strategy=( |
204 | | - pe_region.scoping_strategy.strategy_type |
205 | | - if pe_region.scoping_strategy |
206 | | - else None |
207 | | - ), |
| 229 | + requires_filter=_region_requires_filter(pe_region), |
| 230 | + filter_field=_region_filter_field(pe_region), |
| 231 | + filter_value=_region_filter_value(pe_region), |
| 232 | + filter_strategy=_region_filter_strategy(pe_region), |
208 | 233 | parent_code=pe_region.parent_code, |
209 | 234 | state_code=pe_region.state_code, |
210 | 235 | state_name=pe_region.state_name, |
@@ -295,14 +320,10 @@ def seed_uk_regions(session: Session) -> tuple[int, int, int]: |
295 | 320 | code=pe_region.code, |
296 | 321 | label=pe_region.label, |
297 | 322 | region_type=RegionType(pe_region.region_type), |
298 | | - requires_filter=pe_region.requires_filter, |
299 | | - filter_field=pe_region.filter_field, |
300 | | - filter_value=pe_region.filter_value, |
301 | | - filter_strategy=( |
302 | | - pe_region.scoping_strategy.strategy_type |
303 | | - if pe_region.scoping_strategy |
304 | | - else None |
305 | | - ), |
| 323 | + requires_filter=_region_requires_filter(pe_region), |
| 324 | + filter_field=_region_filter_field(pe_region), |
| 325 | + filter_value=_region_filter_value(pe_region), |
| 326 | + filter_strategy=_region_filter_strategy(pe_region), |
306 | 327 | parent_code=pe_region.parent_code, |
307 | 328 | state_code=None, |
308 | 329 | state_name=None, |
|
0 commit comments