Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions TestRule/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from cdisc_rules_engine.services.cache.in_memory_cache_service import (
InMemoryCacheService,
)
from cdisc_rules_engine.utilities.utils import normalize_adam_input
from cdisc_rules_engine.utilities.utils import normalize_standard_input
from cdisc_rules_engine.services.cdisc_library_service import CDISCLibraryService
from cdisc_rules_engine.services.cache.cache_populator_service import CachePopulator
from scripts.run_validation import run_single_rule_validation
Expand Down Expand Up @@ -119,7 +119,9 @@ def main(req: func.HttpRequest, context: func.Context) -> func.HttpResponse: #
standard_version = standards_data.get("version")
standard_substandard = standards_data.get("substandard")
use_case = standards_data.get("use_case")
standard, standard_version = normalize_adam_input(standard, standard_version)
standard, standard_version = normalize_standard_input(
standard, standard_version
)
codelists = json_data.get("codelists", [])
cache = InMemoryCacheService()
library_service = CDISCLibraryService(api_key, cache)
Expand Down
5 changes: 4 additions & 1 deletion cdisc_rules_engine/enums/standard_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ class StandardTypes(BaseEnum):

SDTMIG = "sdtmig"
SENDIG = "sendig"
ADAM = "adam"
SENDIG_AR = "sendig-ar"
SENDIG_DART = "sendig-dart"
SENDIG_GENETOX = "sendig-genetox"
ADAMIG = "adamig"
TIG = "tig"
USDM = "usdm"
48 changes: 28 additions & 20 deletions cdisc_rules_engine/utilities/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ def get_execution_status(results):


def get_standard_codelist_cache_key(standard: str, version: str) -> str:
standard, version = normalize_adam_input(standard, version)
standard, version = normalize_standard_input(standard, version)
return f"{standard.lower()}-{version.replace('.', '-')}-codelists"


Expand Down Expand Up @@ -142,7 +142,7 @@ def get_library_variables_metadata_cache_key(
standard_type: str, standard_version: str, standard_substandard: str
) -> str:
if not standard_substandard:
standard_type, standard_version = normalize_adam_input(
standard_type, standard_version = normalize_standard_input(
standard_type, standard_version
)
return f"library_variables_metadata/{standard_type}/{standard_version}"
Expand All @@ -153,7 +153,7 @@ def get_library_variables_metadata_cache_key(
def get_standard_details_cache_key(
standard_type: str, standard_version: str, standard_substandard: str = None
) -> str:
standard_type, standard_version = normalize_adam_input(
standard_type, standard_version = normalize_standard_input(
standard_type, standard_version
)
if not standard_substandard:
Expand All @@ -162,24 +162,32 @@ def get_standard_details_cache_key(
return f"standards/{standard_type}/{standard_version}/{standard_substandard.lower()}"


def normalize_adam_input(standard: str, version: str) -> tuple:
def normalize_standard_input(standard: str, version: str) -> tuple:
"""
Normalizes ADAM user input to the expected internal format.
Args:
standard: User input like 'adamig', 'adam-adae'
version: User input like '1-0'
Returns:
Tuple of (normalized_standard, normalized_version)
Examples:
- ('adamig', '1-0') -> ('adam', 'adamig-1-0')
- ('adam-adae', '1-0') -> ('adam', 'adam-adae-1-0')
- ('sdtm', '3-4') -> ('sdtm', '3-4')
Normalizes user CLI input for standards that have sub-variant prefixes,
translating them into the internal library path format used in the cache.

The CDISC Library API stores sub-variants with the variant name folded
into the version field.

Examples:
('adamig', '1-3') -> ('adam', 'adamig-1-3')
('adam-adae', '1-0') -> ('adam', 'adam-adae-1-0')
('sendig-dart', '1-1') -> ('sendig', 'dart-1-1')
('sendig-ar', '1-0') -> ('sendig', 'ar-1-0')
('sendig-genetox', '1-0') -> ('sendig', 'genetox-1-0')
('sdtmig-ap', '1-0') -> ('sdtmig', 'ap-1-0')
('sdtmig-md', '1-0') -> ('sdtmig', 'md-1-0')
"""
if standard:
standard_lower = standard.lower()
if standard_lower in ADAM_PRODUCTS:
return "adam", f"{standard_lower}-{version}"
# Non-ADAM standard - keep as is
if not standard:
return standard, version
standard_lower = standard.lower()
if standard_lower in ADAM_PRODUCTS:
return "adam", f"{standard_lower}-{version}"
for base in ("sendig", "sdtmig"):
if standard_lower.startswith(f"{base}-"):
sub = standard_lower[len(base) + 1 :]
return base, f"{sub}-{version}"
return standard, version


Expand Down Expand Up @@ -292,7 +300,7 @@ def get_variable_codelist_map_cache_key(standard: str, version: str, subversion)
if subversion:
return f"{standard}-{version}-{subversion}-codelists"
else:
standard, version = normalize_adam_input(standard, version)
standard, version = normalize_standard_input(standard, version)
return f"{standard}-{version}-codelists"


Expand Down
Loading