@@ -410,56 +410,42 @@ class Translator:
410410 """
411411
412412 def __init__ (self ):
413- self .rules = pd .DataFrame ()
414- self .extensions = pd .DataFrame ()
413+ self .rules = {}
414+ self .baseRuleIdName = {}
415+ self .extensions = {}
416+ self .baseExtensionIdName = {}
415417
416- def setBaseExtensions (self , extensions : list = None , property_name : str = None ) -> None :
418+ def setBaseExtensions (self , base_property_extensions : list , property_name : str ) :
417419 """
418420 Pass all the extensions from the base property to start building the table.
419421 Arguments:
420- extensions_base : REQUIRED : list of all extensions retrieve through getExtensions method
422+ base_property_extensions : REQUIRED : list of all extensions retrieve through getExtensions method
421423 property_name : REQUIRED : name of your base property.
422424 """
423- if extensions is None or type (extensions )!= list :
424- raise ValueError ("Require a list of extensions to be loaded" )
425- if property_name is None :
426- raise ValueError ("Require the main property name" )
427- df = pd .DataFrame (extensionsInfo (extensions )).T
428- df = pd .DataFrame (df ['id' ])
429- df .columns = [property_name ]
430- self .extensions = df
425+ self .baseExtensionIdName = {ext ['id' ] : ext ['attributes' ]['name' ] for ext in base_property_extensions }
426+ self .extensions = {ext ['attributes' ]['name' ]:{property_name :ext ['id' ]} for ext in base_property_extensions }
431427
432- def extendExtensions (self , extensions : list = None , property_name : str = None )-> None :
428+ def extendExtensions (self , new_property_extensions : list , new_prop_name : str )-> None :
433429 """
434430 Add the extensions id from a target property.
435431 Arguments:
436- extensions : REQUIRED : the extension list from your target property.
437- property_name : REQUIRED : target property name.
432+ new_property_extensions : REQUIRED : the extension list from your target property.
433+ new_prop_name : REQUIRED : target property name.
438434 """
439- if extensions is None or type (extensions )!= list :
440- raise ValueError ("Require a list of extensions to be loaded" )
441- if property_name is None :
442- raise ValueError ("Require the main property name" )
443- df = pd .DataFrame (extensionsInfo (extensions )).T
444- df = pd .DataFrame (df ['id' ])
445- self .extensions [property_name ] = df
435+ for ext in new_property_extensions :
436+ if ext ['attributes' ]['name' ] in list (self .extensions .keys ()):
437+ self .extensions [ext ['attributes' ]['name' ]][new_prop_name ] = ext ['id' ]
446438 return self .extensions
447439
448- def setBaseRules (self , rules : list = None , property_name : str = None ) -> None :
440+ def setBaseRules (self , base_property_rules : list , property_name : str ) :
449441 """
450442 Pass all the rules from the base property to start building the table.
451443 Arguments:
452- rules : REQUIRED : list of all rules retrieve through getExtensions method
444+ base_property : REQUIRED : list of all rules retrieve through getExtensions method
453445 property_name : REQUIRED : name of your base property.
454446 """
455- if rules is None or type (rules )!= list :
456- raise ValueError ("Require a list of rules to be loaded" )
457- if property_name is None :
458- raise ValueError ("Require the main property name" )
459- df = pd .DataFrame (rulesInfo (rules )).T
460- df = pd .DataFrame (df ['id' ])
461- df .columns = [property_name ]
462- self .rules = df
447+ self .baseRuleIdName = {rule ['id' ]:rule ['attributes' ]['name' ] for rule in base_property_rules }
448+ self .rules = {rule ['attributes' ]['name' ]:{property_name :rule ['id' ]} for rule in base_property_rules }
463449
464450 def extendBaseRules (self ,ruleName :str = None ,ruleId :str = None ,property_name : str = None )-> None :
465451 """
@@ -474,20 +460,20 @@ def extendBaseRules(self,ruleName:str=None,ruleId:str=None,property_name: str=No
474460 raise ValueError ("Require a rule name to be loaded" )
475461 if property_name is None :
476462 raise ValueError ("Require the main property name" )
477- temp_df = pd . DataFrame . from_dict ({ property_name :{ ruleName : ruleId }})
478- self .rules = self . rules . append ( temp_df )
463+ self . baseRuleIdName [ ruleId ] = ruleName
464+ self .rules [ ruleName ][ property_name ] = ruleId
479465
480466
481- def extendRules (self , rules : list = None , property_name : str = None ):
467+ def extendRules (self , new_property_rules : list , new_prop_name : str ):
482468 """
483- Add the rule id from a target property.
469+ Add the extensions id from a target property.
484470 Arguments:
485- rules : REQUIRED : the rules list from your target property.
486- property_name : REQUIRED : target property name.
471+ new_property_rules : REQUIRED : the rules list from your target property.
472+ new_prop_name : REQUIRED : target property name.
487473 """
488- df = pd . DataFrame ( rulesInfo ( rules )). T
489- df = pd . DataFrame ( df [ 'id' ])
490- self .rules [property_name ] = df
474+ for rule in new_property_rules :
475+ if rule [ 'attributes' ][ 'name' ] in list ( self . rules . keys ()):
476+ self .rules [rule [ 'attributes' ][ 'name' ]][ new_prop_name ] = rule [ 'id' ]
491477 return self .rules
492478
493479 def extendTargetRules (self ,ruleName :str = None ,ruleId :str = None ,property_name : str = None )-> None :
@@ -504,10 +490,9 @@ def extendTargetRules(self,ruleName:str=None,ruleId:str=None,property_name: str=
504490 raise ValueError ("Require a rule name to be loaded" )
505491 if property_name is None :
506492 raise ValueError ("Require the main property name" )
507- temp_df = pd .DataFrame .from_dict ({property_name :{ruleName :ruleId }})
508- self .rules .update (temp_df )
493+ self .rules [ruleName ][property_name ] = ruleId
509494
510- def translate (self , target_property : str = None , data_element : dict = None , rule_component : dict = None )-> dict :
495+ def translate (self , target_property : str , data_element : dict = None , rule_component : dict = None )-> dict :
511496 """
512497 change the id from the base element to the new property.
513498 Pre checked should be done beforehands (updating Extension & Rules elements)
@@ -516,39 +501,32 @@ def translate(self, target_property: str=None, data_element: dict = None, rule_c
516501 data_element : OPTIONAL : if the elements passed are data elements
517502 rule_component : OPTIONAL : if the elements passed are rule components
518503 """
519- if target_property is None :
520- raise ValueError ("Require the target property name" )
521- if data_element is None and rule_component is None :
522- raise AttributeError ("Require at least data element or rule component to be passed" )
523- if self .extensions .empty == True :
504+ if len (self .extensions ) == 0 :
524505 raise AttributeError (
525506 "You didn't import the base extensions or the target extensions" )
526507 if data_element is not None :
527508 new_de = deepcopy (data_element )
528509 base_id = new_de ['extension' ]['id' ]
529- row = self .extensions [self .extensions .iloc [:, 0 ]
530- == base_id ].index .values [0 ]
531- new_value = self .extensions .loc [row , target_property ]
532- new_de ['extension' ]['id' ] = new_value
510+ based_ext_name = self .baseExtensionIdName [base_id ]
511+ new_extension_id = self .extensions [based_ext_name ][target_property ]
512+ new_de ['extension' ]['id' ] = new_extension_id
533513 return new_de
534514 elif rule_component is not None :
535- if self .rules . empty == True :
515+ if len ( self .rules ) == 0 :
536516 raise AttributeError (
537517 "The rules have not been imported, the rule id needs to be changed" )
538518 new_rc = deepcopy (rule_component )
539519 base_id = new_rc ['extension' ]['id' ]
540- row = self .extensions [self .extensions .eq (
541- base_id ).any (1 )].index .values [0 ]
542- new_value = self .extensions .loc [row , target_property ]
543- new_rc ['extension' ]['id' ] = new_value
544- if self .rules .empty == False :
520+ based_ext_name = self .baseExtensionIdName [base_id ]
521+ new_extension_id = self .extensions [based_ext_name ][target_property ]
522+ new_rc ['extension' ]['id' ] = new_extension_id
523+ if len (self .rules ) > 0 :
545524 new_rc ['rule_setting' ] = {
546525 'data' : [{
547- 'id' : self .rules . loc [rule_component ['rule_name' ], target_property ],
526+ 'id' : self .rules [rule_component ['rule_name' ]][ target_property ],
548527 'type' :'rules' }
549528 ]}
550- new_rc ['rule_id' ] = self .rules .loc [rule_component ['rule_name' ],
551- target_property ]
529+ new_rc ['rule_id' ] = self .rules [rule_component ['rule_name' ]][target_property ]
552530 else :
553531 print (
554532 "You didn't load the rules. Please use setExtensions and setRules, and extendExtensions and extendRules" )
0 commit comments