def get_root_element(self, root_class):
     for template,table_mapper in self.table_mappers.items():
         logger.info("Looking for %s instances in template %s", root_class, template)
         json_block_extract = JsonBlockExtractor(table_mapper.json)
         retour = json_block_extract.search_subelement_by_type(root_class)
         for block in retour:
             if "@dmrole" not in block.keys():
                 logger.info("found (no role)")
                 return table_mapper
             role = block["@dmrole"]
             if role == "" or role == "root":
                 logger.info("found with role=%s", role)
                 return table_mapper
     return None
Beispiel #2
0
    def search_instance_by_id(self, searched_id, root_element=None):
        self.searched_ids = []
        if root_element is not None:
            root = root_element
        else:
            root = self.json['VODML']
        json_block_extractor = JsonBlockExtractor(root)
        return json_block_extractor.search_subelement_by_id(searched_id)
    
     

            
Beispiel #3
0
 def search_instance_by_role(self, searched_role, root_element=None):
     """
     returns a list of element having dmrole = searched_role
     """
     self.searched_elements = []
     if root_element is not None:
         root = root_element
     else:
         root = self.json['VODML']
         
     json_block_extractor = JsonBlockExtractor(root)
     return json_block_extractor.search_subelement_by_role(searched_role)
 def search_instance_by_type(self, searched_type, root_element=None):
     """
     returns a list of element having dmtype = searched_type
     """
     self.searched_elements = []
     if root_element is not None:
         root = root_element
     else:
         root = self.json['MODEL_INSTANCE']
         
     json_block_extractor = JsonBlockExtractor(root)
     return json_block_extractor.search_subelement_by_type(searched_type)
Beispiel #5
0
    def get_full_instance(self, resolve_refs=False):
        if resolve_refs is True:
            logger.info("Replace object references with referenced object copies")
            self.resolve_object_references()
        retour =  deepcopy(self.json['VODML']['TEMPLATES'][self.table_name])

        json_block_extractor = JsonBlockExtractor(retour)
        json_block_extractor.search_array_container()
        if len(json_block_extractor.searched_elements) > 0 :
            json_block_extractor.searched_elements[0][0] = {}
            cpt = 0
            inst = None
            while True:
                inst = self._get_next_row_instance()
                if inst is None:
                    break
                elif cpt == 0:
                    json_block_extractor.searched_elements[0][0] = inst 
                else:
                    json_block_extractor.searched_elements[0].append(inst) 
                cpt += 1
        return retour
Beispiel #6
0
    def _get_next_row_instance(self, data_subset=None):
        if len(self.table_iterators) > 0 :
            # One table_iterator par TABLE_ROW_TEMPLATE block
            # For now, the case with multiple table_iterator has not been tested
            for key, table_iterator in self.table_iterators.items():
                if data_subset is None or data_subset == key:
                    next_row_instance = table_iterator._get_next_row_instance()
                    if next_row_instance is None:
                        return  None
                    
                    for _, join_iterator in self.join_iterators.items():
                        primary_column = self.column_mapping.get_col_index_by_name(join_iterator.primary_key)
                        join_iterator.set_foreignkey_value(table_iterator.last_row[primary_column])
                        
                        json_block_extractor = JsonBlockExtractor(next_row_instance)
                        json_block_extractor.search_join_container()
                        
                        if len(json_block_extractor.searched_elements) > 0 :
                            json_block_extractor.searched_elements[0][0] = {}
                            cpt = 0
                            inst = None
                            while True:
                                inst = join_iterator.table_mapper._get_next_row_instance()
                                if inst is None:
                                    break
                                elif cpt == 0:
                                    json_block_extractor.searched_elements[0][0] = inst 
                                else:
                                    json_block_extractor.searched_elements[0].append(inst) 
                                cpt += 1

                    return next_row_instance
            raise Exception("cannot find data subset " + data_subset)
        else:
            logger.info("No data table")
            return {}