1
1
#!/usr/bin/env python3
2
- import pandas as pd
3
2
import json
4
3
from datetime import datetime
5
4
from bento .common .sqs import VisibilityExtender
18
17
from common .model_reader import valid_prop_types
19
18
from service .ecs_agent import set_scale_in_protection
20
19
from x_submission_validator import CrossSubmissionValidator
21
- from pv_puller import get_pv_by_code_version
20
+ from pv_puller import get_pv_by_datacommon_version_cde
22
21
23
22
VISIBILITY_TIMEOUT = 20
24
23
BATCH_SIZE = 1000
24
+ CDE_NOT_FOUND = "CDE not available"
25
25
26
26
def metadataValidate (configs , job_queue , mongo_dao ):
27
27
log = get_logger ('Metadata Validation Service' )
@@ -93,12 +93,6 @@ def metadataValidate(configs, job_queue, mongo_dao):
93
93
except KeyboardInterrupt :
94
94
log .info ('Good bye!' )
95
95
return
96
-
97
-
98
- """ Requirement for the ticket crdcdh-343
99
- For metadata: validate data folder contains TSV or TXT files
100
- Compose a list of files to be updated and their sizes (metadata or files)
101
- """
102
96
class MetaDataValidator :
103
97
104
98
def __init__ (self , mongo_dao , model_store , config ):
@@ -112,6 +106,8 @@ def __init__(self, mongo_dao, model_store, config):
112
106
self .submission = None
113
107
self .isError = None
114
108
self .isWarning = None
109
+ self .searched_sts = False
110
+ self .not_found_cde = False
115
111
116
112
117
113
def validate (self , submission_id , scope ):
@@ -487,7 +483,9 @@ def validate_prop_value(self, prop_name, value, prop_def, msg_prefix):
487
483
val = None
488
484
minimum = prop_def .get (MIN )
489
485
maximum = prop_def .get (MAX )
490
- permissive_vals = self .get_permissive_value (prop_def )
486
+ permissive_vals , msg = self .get_permissive_value (prop_def )
487
+ if msg and msg == CDE_NOT_FOUND :
488
+ errors .append (create_error ("M027" , [msg_prefix , prop_name ], prop_name , value ))
491
489
if type == "string" :
492
490
val = str (value )
493
491
result , error = check_permissive (val , permissive_vals , msg_prefix , prop_name , self .mongo_dao )
@@ -520,12 +518,6 @@ def validate_prop_value(self, prop_name, value, prop_def, msg_prefix):
520
518
if len (errs ) > 0 :
521
519
errors .extend (errs )
522
520
523
- # elif type == "datetime":
524
- # try:
525
- # val = datetime.strptime(value, DATETIME_FORMAT)
526
- # except ValueError as e:
527
- # errors.append(create_error("Invalid datetime value", f'{msg_prefix} Property "{prop_name}": "{value}" is not a valid datetime type.'))
528
-
529
521
elif type == "date" or type == "datetime" :
530
522
val = None
531
523
for date_format in DATE_FORMATS :
@@ -562,6 +554,7 @@ def validate_prop_value(self, prop_name, value, prop_def, msg_prefix):
562
554
"""
563
555
def get_permissive_value (self , prop_def ):
564
556
permissive_vals = prop_def .get ("permissible_values" )
557
+ msg = None
565
558
if prop_def .get (CDE_TERM ) and len (prop_def .get (CDE_TERM )) > 0 :
566
559
# retrieve permissible values from DB or cde site
567
560
cde_code = None
@@ -580,19 +573,28 @@ def get_permissive_value(self, prop_def):
580
573
else :
581
574
permissive_vals = None
582
575
else :
583
- # call pv_puller to get permissible values from caDSR
584
- cde , msg = get_pv_by_code_version (self .config , self .log , self .datacommon , prop_def ["name" ], cde_code , cde_version )
585
- if cde :
586
- if cde .get (CDE_PERMISSIVE_VALUES ) is not None :
587
- if len (cde [CDE_PERMISSIVE_VALUES ]) > 0 :
588
- permissive_vals = cde [CDE_PERMISSIVE_VALUES ]
589
- else :
590
- permissive_vals = None #escape validation
591
- self .mongo_dao .insert_cde ([cde ])
576
+ if not self .searched_sts :
577
+ cde = get_pv_by_datacommon_version_cde (self .config [TIER_CONFIG ], self .submission [DATA_COMMON_NAME ],
578
+ self .submission [MODEL_VERSION ], cde_code , cde_version , self .log , self .mongo_dao )
579
+ self .searched_sts = True
580
+ if cde :
581
+ if cde .get (CDE_PERMISSIVE_VALUES ) is not None :
582
+ if len (cde [CDE_PERMISSIVE_VALUES ]) > 0 :
583
+ permissive_vals = cde [CDE_PERMISSIVE_VALUES ]
584
+ else :
585
+ permissive_vals = None #escape validation
586
+ else :
587
+ msg = CDE_NOT_FOUND
588
+ self .not_found_cde = True
589
+ else :
590
+ if self .not_found_cde :
591
+ msg = CDE_NOT_FOUND
592
+
593
+
592
594
# strip white space if the value is string
593
595
if permissive_vals and len (permissive_vals ) > 0 and isinstance (permissive_vals [0 ], str ):
594
596
permissive_vals = [item .strip () for item in permissive_vals ]
595
- return permissive_vals
597
+ return permissive_vals , msg
596
598
597
599
"""util functions"""
598
600
def check_permissive (value , permissive_vals , msg_prefix , prop_name , dao ):
0 commit comments