def get_sync_dict_list(self, insert_or_updata) -> list: """ insert_or_updata 中 self.DB_True为insert,DB_False为updata 本方法的写法为强规则,调用add_value_to_sync_dict_list配置 第一个参数为list,第二个参数为字段名,第三个参数为字段值,第四个参数为特殊配置 """ sync_dict = self.get_sync_predefined_dict_list(insert_or_updata) object_table_id = self._obj_id object_table_data = self._dataset dsometadataxml = object_table_data.value_by_name( 0, 'dsometadataxml_bus', '') dsometadataxml_xml = CXml() dsometadataxml_xml.load_xml(dsometadataxml) # 加载查询出来的xml self.add_value_to_sync_dict_list(sync_dict, 'aprpwid', object_table_id) self.add_value_to_sync_dict_list( sync_dict, 'dsname', dsometadataxml_xml.get_element_text_by_xpath_one( '/root/DSName')) # 配置字段值 self.add_value_to_sync_dict_list( sync_dict, 'producttypechn', dsometadataxml_xml.get_element_text_by_xpath_one( '/root/ProductType')) self.add_value_to_sync_dict_list( sync_dict, 'dsometadatajson', object_table_data.value_by_name(0, 'dsometadataxml_bus', '')) return sync_dict
def get_sync_dict_list(self, insert_or_updata) -> list: """ insert_or_updata 中 self.DB_True为insert,DB_False为updata 本方法的写法为强规则,调用add_value_to_sync_dict_list配置 第一个参数为list,第二个参数为字段名,第三个参数为字段值,第四个参数为特殊配置 """ sync_dict_list = self.get_sync_predefined_dict_list(insert_or_updata) object_table_id = self._obj_id object_table_data = self._dataset self.add_value_to_sync_dict_list(sync_dict_list, 'aprswid', object_table_id) dsometadataxml = object_table_data.value_by_name( 0, 'dsometadataxml_bus', '') dsometadataxml_xml = CXml() dsometadataxml_xml.load_xml(dsometadataxml) # 加载查询出来的xml self.add_value_to_sync_dict_list( sync_dict_list, 'domname', dsometadataxml_xml.get_element_text_by_xpath_one('/root/DSName')) self.add_value_to_sync_dict_list( sync_dict_list, 'scaletext', dsometadataxml_xml.get_element_text_by_xpath_one( '/root/ScaleDenominator')) self.add_value_to_sync_dict_list( sync_dict_list, 'datatype', object_table_data.value_by_name(0, 'dsodatatype', '')) self.add_value_to_sync_dict_list( sync_dict_list, 'sensors', list([ dsometadataxml_xml.get_element_text_by_xpath_one( '/root/MajorSource') ]), self.DataValueType_Array) self.add_value_to_sync_dict_list(sync_dict_list, 'dsometadatajson', dsometadataxml) return sync_dict_list
def process_metadata_bus_dict(self): dataset = self._dataset class_plugins = self.get_class_plugins() try: dsometadataxml_xml = CXml() dsometadataxml = dataset.value_by_name(0, 'dsometadataxml_bus', '') dsometadataxml_xml.load_xml(dsometadataxml) view_path = settings.application.xpath_one( self.Path_Setting_MetaData_Dir_View, None) browser_path = CFile.file_path( dataset.value_by_name(0, 'dso_browser', None)) multiple_metadata_bus_filename_dict = \ class_plugins.get_multiple_metadata_bus_filename_with_path( CFile.join_file(view_path, browser_path) ) result, metadata_bus_dict = class_plugins.metadata_bus_xml_to_dict( dsometadataxml_xml, multiple_metadata_bus_filename_dict) self.set_metadata_bus_dict(metadata_bus_dict) return result except Exception as error: return CResult.merge_result( self.Failure, '卫星数据的业务元数据的详细内容解析出错!原因为{0}'.format(error.__str__()))
def test_get_element_xml(self): """ 获取一个节点内容 :return: """ xml_content = '''<root name="hello world"><element>hello</element></root>''' xml = CXml() xml.load_xml(xml_content) assert CXml.get_element_xml(xml.root_element()) == xml_content
def test_element_attr_exist(self): """ 设置一个节点的文本 :return: """ xml_content = '''<root name="hello world"><element hello="中国"></element><element hello="美国"></element></root>''' xml = CXml() xml.load_xml(xml_content) element = xml.xpath('/root/element')[1] assert CXml.attr_exist(element, 'hello', False)
def test_is_element_comment(self): """ 判断一个节点是否是备注 """ xml_content = '''<root name="hello world"><element>hello</element></root>''' xml = CXml() xml.load_xml(xml_content) element = xml.xpath('/root/element')[0] flag = xml.is_element_comment(element) assert flag is False
def test_get_tree_root(self): """ 获取树对象的根节点 :return: """ xml_content = '''<root name="hello world"><parent><grandson>hello</grandson></parent></root>''' xml = CXml() xml.load_xml(xml_content) tree = CXml.get_tree_root(xml.tree()) assert CXml.get_element_name(tree) == 'root'
def test_clone(self): """ 根据给定的xml节点, 深度克隆节点的全部内容, 创建一个新的节点 :return: """ xml = CXml() xml_comment = '''<root name="hello world"><element>hello</element></root>''' xml.load_xml(xml_comment) element = CXml.clone(xml.root_element()) assert CXml.get_element_xml(element) == xml_comment
def test_load_xml(self): """ 通过给定的xml内容, 对xml对象进行初始化 """ xml_content = ''' <root name="hello world"></root> ''' xml = CXml() xml.load_xml(xml_content) assert True
def test_get_element_text(self): """ 获取一个节点的文本 :return: """ xml_content = '''<root name="hello world"><element>world</element></root>''' xml = CXml() xml.load_xml(xml_content) element = xml.xpath('/root/element')[0] text = CXml.get_element_text(element) assert text == 'world'
def test_get_tree(self): """ 获取节点所在的树对象 :return: """ xml_content = '''<root name="hello world"><element>hello</element></root>''' xml = CXml() xml.load_xml(xml_content) element = xml.root_element() tree = CXml.get_element_tree(element) assert CXml.get_element_xml(tree) == xml_content
def test_get_element_name(self): """ 获取节点的名称 :return: """ xml_content = '''<root name="hello world"><element>hello</element></root>''' xml = CXml() xml.load_xml(xml_content) element = xml.xpath('/root/element')[0] name = CXml.get_element_name(element) assert name == 'element'
def test_get_attr(self): """ 获取一个属性的值, 如果属性不存在, 则返回默认值 :return: """ xml_content = '''<root name="hello world"><element hello="中国"></element><element hello="美国"></element></root>''' xml = CXml() xml.load_xml(xml_content) element = xml.xpath('/root/element')[1] value = CXml.get_attr(element, 'Hello', "null") assert value == '美国'
def test_get_element_root(self): """ 获取节点的根节点 :return: """ xml_content = '''<root name="hello world"><element>hello</element></root>''' xml = CXml() xml.load_xml(xml_content) element = xml.root_element() rt = CXml.get_element_root(element) assert CXml.get_element_xml(rt) == xml_content
def test_set_attr(self): """ 设置一个节点的属性 :return: """ xml_content = '''<root name="hello world"></root>''' xml = CXml() xml.load_xml(xml_content) element = xml.xpath_one('/root') CXml.set_attr(element, 'name', 'championing') assert CXml.get_element_xml(element) == '<root name="championing"/>'
def test_save_file(self): """ 通过给定的xml文件名, 对xml对象进行初始化 """ xml_content = ''' <root name="hello world">hello</root> ''' xml = CXml() xml.load_xml(xml_content) xml.save_file(self.test_filename, encoding=CXml.Encoding_UTF8) assert True
def rule_id(self, default_value): if self.__rule_content == '': return default_value else: xml_obj = CXml() try: xml_obj.load_xml(self.__rule_content) return CXml.get_element_text( xml_obj.xpath_one(self.Path_21AT_MD_Content_ProductType)) except: return default_value
def test_set_element_text(self): """ 设置一个节点的文本 :return: """ xml_content = '''<root name="hello world"></root>''' xml = CXml() xml.load_xml(xml_content) element = xml.xpath('/root')[0] CXml.set_element_text(element, 'hello') assert CXml.get_element_xml(element) == '<root name="hello world"><![CDATA[hello]]></root>'
def test_xpath(self): """ 根据给定的xpath查询语句, 查询出合适的节点 :return: """ xml = CXml() xml_comment = u'<root name="hello world"><element name="zg">hello</element></root>' xml.load_xml(xml_comment) xmlString = xml.to_xml() result = xml.xpath_one('./element') assert CXml.get_element_xml(result) == '<element name="zg">hello</element>'
def test_append(self): """ 将一个子节点加入到指定节点下 :return: """ xml_content = '''<root name="hello world"></root>''' xml = CXml() xml.load_xml(xml_content) child_element = etree.Element('train', name='wing') element = xml.root_element() CXml.append(element, child_element) assert CXml.get_element_xml(element) == '<root name="hello world"><train name="wing"/></root>'
def test_to_xml(self): """ 通过给定的xml内容, 对xml对象进行初始化 :return: """ xml = CXml() xml_content = ''' <root><element>hello</element></root> ''' xml.load_xml(xml_content) xml_string = xml.to_xml() assert xml_string == '<root><element>hello</element></root>'
def test_creat_element(self): """ 在一个节点下创建一个新节点 :return: """ xml_content = ''' <root name="hello world"><element name="hello"></element></root> ''' xml = CXml() xml.load_xml(xml_content) element = xml.root_element() CXml.create_element(element, "element1") assert CXml.get_element_xml(element) == '<root name="hello world"><element name="hello"/><element1/></root>'
def get_sync_dict_list(self, insert_or_updata) -> list: """ insert_or_updata 中 self.DB_True为insert,DB_False为updata 本方法的写法为强规则,调用add_value_to_sync_dict_list配置 第一个参数为list,第二个参数为字段名,第三个参数为字段值,第四个参数为特殊配置 """ sync_dict = self.get_sync_predefined_dict_list(insert_or_updata) object_table_id = self._obj_id object_table_data = self._dataset # 业务元数据 dsometadataxml_bus = object_table_data.value_by_name( 0, 'dsometadataxml_bus', '') xml = CXml() xml.load_xml(dsometadataxml_bus) # 下列字段名均待修改 self.add_value_to_sync_dict_list(sync_dict, 'aprmwid', object_table_id) self.add_value_to_sync_dict_list( sync_dict, 'mosaiclinefilename', xml.get_element_text_by_xpath_one("//item[@name='ProductName']")) self.add_value_to_sync_dict_list( sync_dict, 'sensors', xml.get_element_text_by_xpath_one("//item[@name='SatelliteID']")) self.add_value_to_sync_dict_list( sync_dict, 'dsometadatajson', object_table_data.value_by_name(0, 'dsometadataxml_bus', '')) self.add_value_to_sync_dict_list( sync_dict, 'resolution', xml.get_element_text_by_xpath_one("//item[@name='Resolution']")) # self.add_value_to_sync_dict_list(sync_dict, 'regionname', xml.get_element_text_by_xpath_one( # "//item[@name='GeographicName']")) dso_prj_project = object_table_data.value_by_name( 0, 'dso_prj_project', '') if CUtils.equal_ignore_case(dso_prj_project, 'tj2000'): dso_prj_project = '2000天津城市坐标系' if CUtils.equal_ignore_case(dso_prj_project, 'tj1990'): dso_prj_project = '1990天津任意直角坐标系' if CUtils.equal_ignore_case(dso_prj_project, 'cgcs2000'): dso_prj_project = '2000国家标准坐标系' else: dataoptions = '其他国家标准坐标系' self.add_value_to_sync_dict_list(sync_dict, 'dataoptions', dso_prj_project) # 备注 self.add_value_to_sync_dict_list( sync_dict, 'remark', xml.get_element_text_by_xpath_one("//item[@name='Description']")) return sync_dict
def access_check_dict(self) -> dict: # 预留的方法,sync写完后再调 object_name = self._obj_name dsometadataxml_bus = self._dataset.value_by_name( 0, 'dsometadataxml_bus', '') xml = CXml() xml.load_xml(dsometadataxml_bus) # 初始化xml dsometadataxml_bus_type = '{0}'.format( xml.xpath_one("/root/@type")) # 查询业务元数据类别 if object_name is not None: if dsometadataxml_bus_type is not None: if CUtils.equal_ignore_case(dsometadataxml_bus_type, 'mdb'): return self.access_check_dict_mdb() elif CUtils.equal_ignore_case(dsometadataxml_bus_type, 'mat'): return self.access_mdb_check_dict_mat() elif CUtils.equal_ignore_case(dsometadataxml_bus_type, 'xls') \ or CUtils.equal_ignore_case(dsometadataxml_bus_type, 'xlsx'): return self.access_mdb_check_dict_xls() raise Exception("数据{0}业务元数据类型为'{1}'出现错误,没有可识别的类型".format( object_name, dsometadataxml_bus_type))
def get_sync_dict_list(self, insert_or_updata) -> list: """ insert_or_updata 中 self.DB_True为insert,DB_False为updata 本方法的写法为强规则,调用add_value_to_sync_dict_list配置 第一个参数为list,第二个参数为字段名,第三个参数为字段值,第四个参数为特殊配置 """ sync_dict_list = self.get_sync_predefined_dict_list(insert_or_updata) object_table_id = self._obj_id object_table_data = self._dataset dsometadataxml = object_table_data.value_by_name( 0, 'dsometadataxml_bus', '') dsometadataxml_xml = CXml() dsometadataxml_xml.load_xml(dsometadataxml) # 加载查询出来的xml self.add_value_to_sync_dict_list(sync_dict_list, 'aprvdid1', object_table_id) self.add_value_to_sync_dict_list( sync_dict_list, 'dsnamed', dsometadataxml_xml.get_element_text_by_xpath_one( '/root/DSName')) # 配置字段值 if insert_or_updata: now_time = CUtils.any_2_str( datetime.datetime.now().strftime('%F %T')) self.add_value_to_sync_dict_list(sync_dict_list, 'adddate', now_time) self.add_value_to_sync_dict_list( sync_dict_list, 'dsdate', CUtils.to_day_format( dsometadataxml_xml.get_element_text_by_xpath_one('/root/Date'), '')) regioncode = dsometadataxml_xml.get_element_text_by_xpath_one( '/root/RegionCode') self.add_value_to_sync_dict_list( # regioncode:行政区码 sync_dict_list, 'dsregionno', regioncode) self.add_value_to_sync_dict_list(sync_dict_list, 'busitype', 'shp') self.add_value_to_sync_dict_list( # regionname:行政区 sync_dict_list, 'dsregionname', dsometadataxml_xml.get_element_text_by_xpath_one( '/root/RegionName')) self.add_value_to_sync_dict_list(sync_dict_list, 'dstype', '1') return sync_dict_list
def get_sync_dict_list(self, insert_or_updata) -> list: """ insert_or_updata 中 self.DB_True为insert,DB_False为updata 本方法的写法为强规则,调用add_value_to_sync_dict_list配置 第一个参数为list,第二个参数为字段名,第三个参数为字段值,第四个参数为特殊配置 """ sync_dict = self.get_sync_predefined_dict_list(insert_or_updata) object_table_id = self._obj_id object_table_data = self._dataset # 业务元数据 dsometadataxml_bus = object_table_data.value_by_name( 0, 'dsometadataxml_bus', '') xml = CXml() xml.load_xml(dsometadataxml_bus) # 下列字段名均待修改 self.add_value_to_sync_dict_list(sync_dict, 'aprmwid', object_table_id) self.add_value_to_sync_dict_list( sync_dict, 'mosaiclinefilename', xml.get_element_text_by_xpath_one("//item[@name='ProductName']")) self.add_value_to_sync_dict_list( sync_dict, 'sensors', xml.get_element_text_by_xpath_one("//item[@name='SatelliteID']")) self.add_value_to_sync_dict_list( sync_dict, 'dsometadatajson', object_table_data.value_by_name(0, 'dsometadataxml_bus', '')) self.add_value_to_sync_dict_list( sync_dict, 'resolution', xml.get_element_text_by_xpath_one("//item[@name='Resolution']")) self.add_value_to_sync_dict_list( sync_dict, 'imagesource', xml.get_element_text_by_xpath_one( "//item[@name='GeographicName']")) # 备注 self.add_value_to_sync_dict_list( sync_dict, 'remark', xml.get_element_text_by_xpath_one("//item[@name='Description']")) return sync_dict
def get_sync_dict_list(self, insert_or_updata) -> list: """ insert_or_updata 中 self.DB_True为insert,DB_False为updata 本方法的写法为强规则,调用add_value_to_sync_dict_list配置 第一个参数为list,第二个参数为字段名,第三个参数为字段值,第四个参数为特殊配置 """ object_name = self._obj_name dsometadataxml_bus = self._dataset.value_by_name( 0, 'dsometadataxml_bus', '') xml = CXml() xml.load_xml(dsometadataxml_bus) # 初始化xml dsometadataxml_bus_type = '{0}'.format( xml.xpath_one("/root/@type")) # 查询业务元数据类别 if object_name is not None: if dsometadataxml_bus_type is not None: if CUtils.equal_ignore_case(dsometadataxml_bus_type, 'mdb'): return self.get_sync_mdb_dict_list(insert_or_updata) elif CUtils.equal_ignore_case(dsometadataxml_bus_type, 'mat'): return self.get_sync_mat_dict_list(insert_or_updata) elif CUtils.equal_ignore_case(dsometadataxml_bus_type, 'xls') \ or CUtils.equal_ignore_case(dsometadataxml_bus_type, 'xlsx'): return self.get_sync_xls_dict_list(insert_or_updata) raise Exception("数据{0}业务元数据类型为'{1}'出现错误,没有可识别的类型".format( object_name, dsometadataxml_bus_type))
def get_sync_dict_list(self, insert_or_updata) -> list: """ insert_or_updata 中 self.DB_True为insert,DB_False为updata 本方法的写法为强规则,调用add_value_to_sync_dict_list配置 第一个参数为list,第二个参数为字段名,第三个参数为字段值,第四个参数为特殊配置 """ sync_dict = self.get_sync_predefined_dict_list(insert_or_updata) object_table_id = self._obj_id object_table_data = self._dataset # 业务元数据 dsometadataxml_bus = object_table_data.value_by_name(0, 'dsometadataxml_bus', '') xml = CXml() xml.load_xml(dsometadataxml_bus) # 后处理流程介绍文档中的字段 self.add_value_to_sync_dict_list(sync_dict, 'aprgdid', object_table_id) self.add_value_to_sync_dict_list(sync_dict, 'aprgwid', object_table_data.value_by_name(0, 'dsoparentobjid', '')) self.add_value_to_sync_dict_list(sync_dict, 'datatype', xml.get_element_text_by_xpath_one( '/Metadatafile/BasicDataContent/DataFormat')) self.add_value_to_sync_dict_list(sync_dict, 'panfilename', object_table_data.value_by_name(0, 'dsoobjectname', '')) self.add_value_to_sync_dict_list(sync_dict, 'pansensorname', xml.get_element_text_by_xpath_one( '//PBandSensorType')) # numeric self.add_value_to_sync_dict_list(sync_dict, 'panresolution', xml.get_element_text_by_xpath_one( '//SateResolution')) self.add_value_to_sync_dict_list(sync_dict, 'pantraceno', xml.get_element_text_by_xpath_one( '//PBandOribitCode')) # self.add_value_to_sync_dict_list(sync_dict, 'panimagedate', xml.get_element_text_by_xpath_one('')) self.add_value_to_sync_dict_list(sync_dict, 'msfilename', object_table_data.value_by_name(0, 'dsoobjectname', '')) self.add_value_to_sync_dict_list(sync_dict, 'satename', xml.get_element_text_by_xpath_one('//SateName')) # int4 self.add_value_to_sync_dict_list(sync_dict, 'mssensorname', xml.get_element_text_by_xpath_one( '//MultiBandSensorType')) self.add_value_to_sync_dict_list(sync_dict, 'msresolution', xml.get_element_text_by_xpath_one( '//MultiBandResolution')) self.add_value_to_sync_dict_list(sync_dict, 'mstraceno', xml.get_element_text_by_xpath_one( '//MultiBandOrbitCode')) # self.add_value_to_sync_dict_list(sync_dict, 'msimagedate', xml.get_element_text_by_xpath_one('')) self.add_value_to_sync_dict_list(sync_dict, 'bandcount', xml.get_element_text_by_xpath_one( '//MultiBandNum')) self.add_value_to_sync_dict_list(sync_dict, 'bandname', xml.get_element_text_by_xpath_one( '//MultiBandName')) # self.add_value_to_sync_dict_list(sync_dict, 'bandide', xml.get_element_text_by_xpath_one('')) # int4 self.add_value_to_sync_dict_list(sync_dict, 'zoneno', xml.get_element_text_by_xpath_one( '/Metadatafile/BasicDataContent/MathFoundation/GaussKrugerZoneNo')) # self.add_value_to_sync_dict_list(sync_dict, 'sensor', xml.get_element_text_by_xpath_one('')) # self.add_value_to_sync_dict_list(sync_dict, 'sensorscode', xml.get_element_text_by_xpath_one('')) # self.add_value_to_sync_dict_list(sync_dict, 'cloudpercent', xml.get_element_text_by_xpath_one('')) # self.add_value_to_sync_dict_list(sync_dict, 'istile', xml.get_element_text_by_xpath_one('')) # self.add_value_to_sync_dict_list(sync_dict, 'tileindex', xml.get_element_text_by_xpath_one('')) self.add_value_to_sync_dict_list(sync_dict, 'metafilename', xml.get_element_text_by_xpath_one( '/Metadatafile/BasicDataContent/MetaDataFileName')) self.add_value_to_sync_dict_list(sync_dict, 'dsometadatajson', object_table_data.value_by_name(0, 'dsometadataxml_bus', '')) # 数据量 self.add_value_to_sync_dict_list(sync_dict, 'datacount', 1) # 密级 self.add_value_to_sync_dict_list(sync_dict, 'secrecylevel', xml.get_element_text_by_xpath_one( '/Metadatafile/BasicDataContent/ConfidentialLevel')) # 行政区码 # self.add_value_to_sync_dict_list(sync_dict, 'regioncode',xml.get_element_text_by_xpath_one() # 行政区 # self.add_value_to_sync_dict_list(sync_dict, 'regionname',xml.get_element_text_by_xpath_one() # 产品时间 # self.add_value_to_sync_dict_list(sync_dict, 'producetime', xml.get_element_text_by_xpath_one('')) # 分辨率 self.add_value_to_sync_dict_list(sync_dict, 'resolution', xml.get_element_text_by_xpath_one( '/Metadatafile/BasicDataContent/GroundResolution')) # 色彩模式 self.add_value_to_sync_dict_list(sync_dict, 'colormodel', xml.get_element_text_by_xpath_one( '/Metadatafile/BasicDataContent/ImgColorModel')) # 像素位数 self.add_value_to_sync_dict_list(sync_dict, 'piexldepth', xml.get_element_text_by_xpath_one('/Metadatafile/BasicDataContent/PixelBits')) # 比例尺分母 # self.add_value_to_sync_dict_list(sync_dict, 'scale', xml.get_element_text_by_xpath_one('')) # 主要星源 self.add_value_to_sync_dict_list(sync_dict, 'mainrssource', xml.get_element_text_by_xpath_one('//SateName')) # 备注 # self.add_value_to_sync_dict_list(sync_dict, 'remark', xml.get_element_text_by_xpath_one('')) return sync_dict
def get_sync_dict_list(self, insert_or_updata) -> list: """ insert_or_updata 中 self.DB_True为insert,DB_False为updata 本方法的写法为强规则,调用add_value_to_sync_dict_list配置 第一个参数为list,第二个参数为字段名,第三个参数为字段值,第四个参数为特殊配置 """ sync_dict = self.get_sync_predefined_dict_list(insert_or_updata) object_table_id = self._obj_id object_table_data = self._dataset # 业务元数据 dsometadataxml_bus = object_table_data.value_by_name( 0, 'dsometadataxml_bus', '') xml = CXml() xml.load_xml(dsometadataxml_bus) # 后处理流程介文档中的字段 self.add_value_to_sync_dict_list(sync_dict, 'aprmwid', object_table_id) # sync_dict['datatype'] = "'{0}'".format() # sync_dict['projinfo'] = "'{0}'".format() # sync_dict['zonetype'] = "'{0}'".format() # sync_dict['centerline'] = "'{0}'".format() # int4 # sync_dict['zoneno'] = "'{0}'".format() # sync_dict['coordinateunit'] = "'{0}'".format() # sync_dict['demname'] = "'{0}'".format() # sync_dict['demstandard'] = "'{0}'".format() self.add_value_to_sync_dict_list( sync_dict, 'mosaiclinefilename', object_table_data.value_by_name(0, 'dsoobjectname', '')) # sync_dict['sensors'] = "'{0}'".format() # sync_dict['iscuted'] = "'{0}'".format() # numeric # sync_dict['productsize'] = "'{0}'".format() self.add_value_to_sync_dict_list( sync_dict, 'imagesource', xml.get_element_text_by_xpath_one( '/Metadatafile/BasicDataContent/ImageSource')) self.add_value_to_sync_dict_list( sync_dict, 'dsometadatajson', object_table_data.value_by_name(0, 'dsometadataxml_bus', '')) # 数据量 self.add_value_to_sync_dict_list(sync_dict, 'datacount', 1) # 密级 # sync_dict['secrecylevel'] = "''" # 行政区码 # sync_dict['regioncode'] = "''" # 行政区 # sync_dict['regionname'] = "''" # 产品时间 # sync_dict['producetime'] = "'{0}'".format( # xml.get_element_text_by_xpath_one('/Metadatafile/BasicDataContent/ProduceDate')) # 分辨率 self.add_value_to_sync_dict_list( sync_dict, 'resolution', xml.get_element_text_by_xpath_one( '/Metadatafile/BasicDataContent/Resolution')) # 色彩模式 # self.add_value_to_sync_dict_list(sync_dict, 'colormodel',xml.get_element_text_by_xpath_one('')) # 像素位数 # self.add_value_to_sync_dict_list(sync_dict, 'piexldepth',xml.get_element_text_by_xpath_one('')) # 比例尺分母 # self.add_value_to_sync_dict_list(sync_dict, 'scale',xml.get_element_text_by_xpath_one('')) # 主要星源 # self.add_value_to_sync_dict_list(sync_dict, 'mainrssource', xml.get_element_text_by_xpath_one('')) # 备注 self.add_value_to_sync_dict_list( sync_dict, 'remark', xml.get_element_text_by_xpath_one( '/Metadatafile/BasicDataContent/Description')) return sync_dict
def __find_module_obj(self, obj_id): sql_query = ''' SELECT dm2_storage_file.dsfid as query_file_id, dm2_storage_file.dsfdirectoryid as query_directory_id, dm2_storage_directory.dsddirlastmodifytime as query_directory_lastmodifytime, dm2_storage_directory.dsdid as query_dataset_directory_id, dm2_storage_object.* FROM dm2_storage_object LEFT JOIN dm2_storage_file on dm2_storage_file.dsf_object_id = dm2_storage_object.dsoid LEFT JOIN dm2_storage_directory on dm2_storage_directory.dsd_object_id = dm2_storage_object.dsoid WHERE dm2_storage_object.dsoid = '{0}' '''.format(obj_id) db_id = self._db_id # 数据库连接标识(查询的dm2的数管库) dataset = CFactory().give_me_db(db_id).one_row(sql_query) object_id = dataset.value_by_name(0, 'dsoid', '') object_name = dataset.value_by_name(0, 'dsoobjectname', '') quality_info = dataset.value_by_name(0, 'dso_quality', '') quality_info_xml = CXml() quality_info_xml.load_xml(quality_info) # 加载查询出来的xml db_id_distribution = self.DB_Server_ID_Distribution # 同步处理的目标数据库标识id # 构建数据对象object对应的识别插件,获取get_information里面的Plugins_Info_Module_Distribute_Engine信息 class_classified_obj = CObject.get_plugins_instance_by_object_id( db_id, object_id) if class_classified_obj is not None: plugins_info = class_classified_obj.get_information() obj_type_code = CUtils.dict_value_by_name( plugins_info, class_classified_obj.Plugins_Info_Type_Code, '') distribution_file_main_name = CUtils.dict_value_by_name( plugins_info, class_classified_obj.Plugins_Info_Module_Distribute_Engine, '') # 对应同步文件的类名称 # 判断同步插件文件是否存在 access_modules_root_dir = CSys.get_metadata_data_access_modules_root_dir( ) distribution_root_dir = CFile.join_file(access_modules_root_dir, self.Name_Distribution) distribution_file = CFile.join_file( distribution_root_dir, '{0}.py'.format(distribution_file_main_name)) if CFile.file_or_path_exist(distribution_file): # 构建同步对象 distribution_obj = CObject.create_module_distribution_instance( '{0}.{1}'.format( CSys.get_metadata_data_access_modules_root_name(), self.Name_Distribution), distribution_file_main_name, db_id_distribution, object_id, object_name, obj_type_code, quality_info_xml, dataset) distribution_obj.set_class_plugins(class_classified_obj) result = CResult.merge_result(self.Success, '数据的信息提取完成') return distribution_obj, result else: result = CResult.merge_result(self.Failure, '同步失败,因为本类数据的同步模块未建立') return None, result else: result = CResult.merge_result(self.Failure, '同步失败,因为本类数据的识别模块缺失') return None, result