Exemplo n.º 1
0
 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
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
    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__()))
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
 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)
Exemplo n.º 6
0
 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
Exemplo n.º 7
0
 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'
Exemplo n.º 8
0
 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
Exemplo n.º 9
0
 def test_load_xml(self):
     """
     通过给定的xml内容, 对xml对象进行初始化
     """
     xml_content = '''
     <root name="hello world"></root>
     '''
     xml = CXml()
     xml.load_xml(xml_content)
     assert True
Exemplo n.º 10
0
 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'
Exemplo n.º 11
0
 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
Exemplo n.º 12
0
 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'
Exemplo n.º 13
0
 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 == '美国'
Exemplo n.º 14
0
 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
Exemplo n.º 15
0
 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"/>'
Exemplo n.º 16
0
 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
Exemplo n.º 17
0
 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
Exemplo n.º 18
0
 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>'
Exemplo n.º 19
0
 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>'
Exemplo n.º 20
0
 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>'
Exemplo n.º 21
0
 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>'
Exemplo n.º 22
0
 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>'
Exemplo n.º 23
0
    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
Exemplo n.º 24
0
 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))
Exemplo n.º 25
0
 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
Exemplo n.º 26
0
    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
Exemplo n.º 27
0
 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
Exemplo n.º 30
0
    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