def test_1(self): self.maxDiff = None data_path = os.path.dirname(os.path.realpath(__file__)) votable_path = os.path.join(data_path, "./data/test_globals.xml") json_ref_path = os.path.join(data_path, "./data/test_globals_1.json") table_mapper = TableMapper("Results" , votable_path , json_inst_dict=DictUtils.read_dict_from_file(json_ref_path)) table_mapper.resolve_refs_and_values(resolve_refs=True) #print(DictUtils.get_pretty_json(table_mapper.json["MODEL_INSTANCE"]["TABLE_MAPPING"]["my:other.role"])) self.assertDictEqual(table_mapper.json["MODEL_INSTANCE"]["TABLE_MAPPING"]["Results"]["my:other.role"] ,{ "@ID": "TestParamRef", "@dmtype": "Whatever", "coords:whatever": { "@dmtype": "coords:StdRefLocation", "coords:StdRefLocation.position": { "@dmtype": "ivoa:string", "@ref": "param_ref", "@value": "param_value" } } } , "")
def build_table_mapper_map(self): logger.info("Looking for tables matching TABLE_MAPPING ") votable = parse(self.votable_path) for template_key in self.json_view["MODEL_INSTANCE"][ "TABLE_MAPPING"].keys(): logger.info("Looking for a table matching TABLE_MAPPING %s", template_key) name = None parsed_table = None for table in votable.iter_tables(): if template_key == table.ID: logger.info("Table with ID = %s found", template_key) name = table.ID parsed_table = table break if name == None: for table in votable.iter_tables(): if template_key == table.name: logger.info("Table with name = %s found", template_key) name = table.name parsed_table = table break if name == None: raise Exception("Cannot find table with name or ID = " + name) else: logger.info("Add TableMapper for table %s", name) self.table_mappers[template_key] = TableMapper( template_key, self.votable_path, parsed_table=parsed_table, json_inst_dict=self.json_view)
def connect_votable(self, parsed_table): from client.inst_builder.table_mapper import TableMapper self.parsed_table = parsed_table ack = None acv = None for k in self.json_join_content.keys(): if k.startswith("@") is False: ack = k acv = self.json_join_content[k] break logger.info("Build table_mapper for data joint with table %s", self.foreign_table) self.table_mapper = TableMapper( self.foreign_table, None, parsed_table=self.parsed_table, json_inst_dict={ "MODEL_INSTANCE": { "MODELS":{}, "GLOBALS":{}, "TABLE_MAPPING": { self.foreign_table: { "@tableref": self.foreign_table, "root": [ { "TABLE_ROW_TEMPLATE": { "FILTER": { "@ref": self.foreign_key, "@value": -1 }, ack: acv }, } ] } } } } ) self.table_mapper.resolve_refs_and_values(resolve_refs=False) self.table_mapper.map_columns() for _, table_iterator in self.table_mapper.table_iterators.items(): self.row_filter = table_iterator.row_filter break;
def setUp(self): self.data_path = os.path.dirname(os.path.realpath(__file__)) self.votable_path = os.path.join(self.data_path, "./data/test_inst_fullfeature.xml") self.json_ref_path = "" self.instanceFromVotable = InstanceFromVotable(self.votable_path) self.instanceFromVotable._extract_vodml_block() self.instanceFromVotable._validate_vodml_block() self.builder = JsonMappingBuilder( json_dict=self.instanceFromVotable.json_block) #builder.revert_array() self.builder.revert_compositions("COLLECTION") self.builder.revert_templates() self.builder.revert_elements("INSTANCE") self.builder.revert_elements("ATTRIBUTE") #print(DictUtils.get_pretty_json(builder.json)) self.table_mapper = TableMapper("Results", self.votable_path, json_inst_dict=self.builder.json)
def test_1(self): self.maxDiff = None data_path = os.path.dirname(os.path.realpath(__file__)) votable_path = os.path.join(data_path, "./data/test_array.xml") json_ref_path = os.path.join(data_path, "./data/test_array_1.json") table_mapper = TableMapper("Results" , votable_path , json_inst_dict=DictUtils.read_dict_from_file(json_ref_path)) table_mapper.resolve_refs_and_values() self.assertListEqual([*table_mapper.table_iterators], ['meas:Error.statError'], "") self.assertDictEqual(table_mapper.table_iterators['meas:Error.statError'].column_mapping.column_refs , {'_poserr_148': {'parent_role': 'meas:Symmetrical.radius', 'role': 'ivoa:RealQuantity.value', 'index': None, 'field': None}} , "") table_mapper.map_columns() self.assertDictEqual(table_mapper.table_iterators['meas:Error.statError'].column_mapping.column_ids , {0: {'name': 'oidsaada', 'ref': None, 'id': '_poserr_148'}} , "") self.assertListEqual(table_mapper.get_flatten_data_head() ,['meas:Symmetrical.radius(ivoa:RealQuantity.value) [col#0 _poserr_148]'],""), cpt=1 while True: inst = table_mapper._get_next_flatten_row() if inst != None: self.assertListEqual(inst, [cpt], "") cpt += 1 else: break table_mapper.rewind() cpt=1 while True: inst = table_mapper._get_next_row_instance() if inst != None: self.assertDictEqual(inst , { "@dmtype": "meas:Symmetrical", "meas:Symmetrical.radius": { "@dmtype": "ivoa:RealQuantity", "ivoa:Quantity.unit": { "@dmtype": "ivoa:Unit", "@value": "arcsec" }, "ivoa:RealQuantity.value": { "@dmtype": "ivoa:real", "@ref": "_poserr_148", "@value": cpt } } } , "") cpt+=1 else: break
class JoinIterator(object): ''' classdocs ''' def __init__(self, foreign_table, primary_key, foreign_key, json_join_content): self.foreign_table = foreign_table self.primary_key = primary_key self.foreign_key = foreign_key self.json_join_content = json_join_content self.table_mapper = None self.parsed_table = None self.row_filter = None #print(DictUtils.get_pretty_json(self.json_join_content)) def __repr__(self): return "Join iterator f_table={} p_key={}, f_key={}".format( self.foreign_table, self.primary_key, self.foreign_key) def connect_votable(self, parsed_table): from client.inst_builder.table_mapper import TableMapper self.parsed_table = parsed_table ack = None acv = None for k in self.json_join_content.keys(): if k.startswith("@") is False: ack = k acv = self.json_join_content[k] break logger.info("Build table_mapper for data joint with table %s", self.foreign_table) self.table_mapper = TableMapper( self.foreign_table, None, parsed_table=self.parsed_table, json_inst_dict={ "MODEL_INSTANCE": { "MODELS":{}, "GLOBALS":{}, "TABLE_MAPPING": { self.foreign_table: { "@tableref": self.foreign_table, "root": [ { "TABLE_ROW_TEMPLATE": { "FILTER": { "@ref": self.foreign_key, "@value": -1 }, ack: acv }, } ] } } } } ) self.table_mapper.resolve_refs_and_values(resolve_refs=False) self.table_mapper.map_columns() for _, table_iterator in self.table_mapper.table_iterators.items(): self.row_filter = table_iterator.row_filter break; def set_foreignkey_value(self, value): self.row_filter.value = value self.table_mapper.rewind() def get_subset_instance(self, key_value): self.row_filter = RowFilter({ "@ref": self.foreign_key, "@value": key_value }) self.table_iterator = TableIterator( "join", self.table_votable, self.json_join_content, self.column_mapping, self.row_filter )