コード例 #1
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
コード例 #2
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
コード例 #3
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
コード例 #4
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'
コード例 #5
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>'
コード例 #6
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"/>'
コード例 #7
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 == '美国'
コード例 #8
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'
コード例 #9
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>'
コード例 #10
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>'
コード例 #11
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>'
コード例 #12
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
コード例 #13
0
    def mdb_to_xml(self, file_metadata_name_with_path: str):
        """
         TODO 王学谦 mdb文件转xml,在函数外提前定义xml对象并获取父节点传入,函数会将通过父节点构造xml对象
        :param file_metadata_name_with_path:查询的mdb文件全名,带路径
        :return xml_obj:将文件内容存储好的项目对象
        """
        conn = None  # 预定义连接与游标,方便释放
        cur = None
        try:
            conn = self.get_mdb_connect(file_metadata_name_with_path)
            cur = conn.cursor()  # 游标

            xml_obj = CXml()  # 建立xml对象
            node_root = xml_obj.new_xml('root')
            xml_obj.set_attr(node_root, self.Name_Type, self.transformer_type)  # 设置root节点与属性

            table_name_list = ['mbii', 'mpid', 'mppi', 'mqc1', 'mqc2', 'mdac']
            for table_name in table_name_list:
                try:
                    sql = "SELECT * FROM " + table_name
                    cur.execute(sql)
                    table_data = cur.fetchall()
                    # total_rows = len(alldata)  # 行
                    # total_cols = len(alldata[0])  # 列

                    node_property = xml_obj.create_element(node_root, 'property')
                    xml_obj.set_attr(node_property, 'tablename', table_name)  # 设置property节点与属性与内容
                    for field_index, row_obj in enumerate(cur.description):
                        row_name = row_obj[0]  # 字段名称
                        row_type = row_obj[1]  # 字段类型
                        if row_type is bytearray:  # 跳过长二进制数组
                            continue
                        node_item = xml_obj.create_element(node_property, 'item')
                        xml_obj.set_attr(node_item, self.Name_Name, CUtils.any_2_str(row_name).lower())
                        xml_obj.set_element_text(node_item, table_data[0][field_index])  # 设置item节点与属性与内容
                except:
                    continue
        except Exception as error:
            raise Exception(error.__str__())
        finally:
            if cur is not None:
                cur.close()
            if conn is not None:
                conn.close()
        return xml_obj
コード例 #14
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))
コード例 #15
0
    def txt_to_xml(self, file_metadata_name_with_path: str):
        """
        完成 王学谦 txt文件转xml,在函数外提前定义xml对象并获取父节点传入,函数会将通过父节点构造xml对象 by王学谦
        :param file_metadata_name_with_path:查询的mat文件全名,带路径
        :return xml_obj:将文件内容存储好的项目对象
        """
        text_list = CFile.file_2_list(file_metadata_name_with_path)  # 获取mat文件作为列表
        if (text_list is None) or len(text_list) == 0:
            raise Exception('元数据文件无法读取,请检查')  # 如果获取的文件内容为空,则抛出异常

        xml_obj = CXml()  # 建立xml对象
        node_root = xml_obj.new_xml('root')
        xml_obj.set_attr(node_root, self.Name_Type, self.Transformer_TXT)  # 设置root节点与属性
        # 设置操作的节点
        current_node = node_root
        for row_text in text_list:
            if CUtils.equal_ignore_case('row_text', 'END'):
                break
            # 分割字符
            row_list = re.split(r'=', row_text.strip())
            if len(row_list) >= 2:
                # 为GROUP建立新节点
                if CUtils.equal_ignore_case(row_list[0], 'GROUP'):
                    node_item = xml_obj.create_element(current_node, 'item')
                    # 值设为属性
                    item_value = CUtils.any_2_str(row_list[1].strip())
                    if item_value.startswith('"') and item_value.endswith('"'):
                        item_value = item_value[1:-1]
                    xml_obj.set_attr(node_item, self.Name_Name, item_value)

                    current_node = node_item
                elif CUtils.equal_ignore_case(row_list[0], 'END_GROUP'):
                    current_node = xml_obj.node_xpath_one(current_node, '..')
                else:
                    node_item = xml_obj.create_element(current_node, 'item')
                    xml_obj.set_attr(node_item, self.Name_Name, row_list[0].strip())
                    item_value = CUtils.any_2_str(row_list[1].strip())
                    if item_value.startswith('"') and item_value.endswith('"'):
                        item_value = item_value[1:-1]
                    xml_obj.set_element_text(node_item, item_value)

        return xml_obj
コード例 #16
0
    def __init__(self):
        self.__xml_obj = CXml()
        self.__xml_root_node = self.__xml_obj.new_xml(self.Name_Root)

        self.__node_total = CXml.create_element(self.__xml_root_node,
                                                self.Name_Total)

        self.__node_data = CXml.create_element(self.__xml_root_node,
                                               self.Name_Data)
        self.__node_data_items = CXml.create_element(self.__node_data,
                                                     self.Name_Items)
        self.__node_data_records = CXml.create_element(self.__node_data,
                                                       self.Name_Records)

        self.__node_metadata = CXml.create_element(self.__xml_root_node,
                                                   self.Name_MetaData)
        self.__node_metadata_bus = CXml.create_element(self.__node_metadata,
                                                       self.Name_Business)
        self.__node_metadata_data = CXml.create_element(
            self.__node_metadata, self.Name_Data)
コード例 #17
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
コード例 #18
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, 'aprtwid', object_table_id)
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'datatype', object_table_data.value_by_name(0, 'dsodatatype', ''))

        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, 'dsometadatajson', dsometadataxml)
        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)
        return sync_dict_list
コード例 #19
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
コード例 #20
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, 'scaleD',
            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, 'publishDate',
            CUtils.to_day_format(
                dsometadataxml_xml.get_element_text_by_xpath_one('/root/Date'),
                ''))
        self.add_value_to_sync_dict_list(sync_dict_list, 'dsometadatajson',
                                         dsometadataxml)
        return sync_dict_list
コード例 #21
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))
コード例 #22
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, '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
コード例 #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)
        # 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
コード例 #24
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
コード例 #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 = 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, 'aprtdid', object_table_id)
        self.add_value_to_sync_dict_list(
            sync_dict, 'aprtwid',
            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(
                '/root/property[@tablename="mbii"]/item[@name="sjgs"]'))
        self.add_value_to_sync_dict_list(
            sync_dict, 'demname',
            xml.get_element_text_by_xpath_one(
                '/root/property[@tablename="mbii"]/item[@name="gcjz"]'))
        self.add_value_to_sync_dict_list(
            sync_dict, 'metafilename',
            xml.get_element_text_by_xpath_one(
                '/root/property[@tablename="mbii"]/item[@name="ysjwjm"]'))
        # numeric
        self.add_value_to_sync_dict_list(
            sync_dict, 'isfull',
            xml.get_element_text_by_xpath_one(
                '/root/property[@tablename="mbii"]/item[@name="mfqk"]'))
        self.add_value_to_sync_dict_list(
            sync_dict, 'ellipsoidtype',
            xml.get_element_text_by_xpath_one(
                '/root/property[@tablename="mbii"]/item[@name="tqlx"]'))
        self.add_value_to_sync_dict_list(
            sync_dict, 'projinfo',
            xml.get_element_text_by_xpath_one(
                '/root/property[@tablename="mbii"]/item[@name="dtty"]'))
        self.add_value_to_sync_dict_list(
            sync_dict, 'centerline',
            xml.get_element_text_by_xpath_one(
                '/root/property[@tablename="mbii"]/item[@name="zyjx"]'))
        self.add_value_to_sync_dict_list(
            sync_dict, 'zonetype',
            xml.get_element_text_by_xpath_one(
                '/root/property[@tablename="mbii"]/item[@name="fdfs"]'))
        # int4
        self.add_value_to_sync_dict_list(
            sync_dict, 'zoneno',
            CUtils().to_integer(
                xml.get_element_text_by_xpath_one(
                    '/root/property[@tablename="mbii"]/item[@name="gsklgtydh"]'
                )))
        self.add_value_to_sync_dict_list(
            sync_dict, 'coordinateunit',
            xml.get_element_text_by_xpath_one(
                '/root/property[@tablename="mbii"]/item[@name="zbdw"]'))
        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, 'demstandard',
            xml.get_element_text_by_xpath_one(
                '/root/property[@tablename="mbii"]/item[@name="gcjz"]'))
        self.add_value_to_sync_dict_list(
            sync_dict, 'createrorganize',
            xml.get_element_text_by_xpath_one(
                '/root/property[@tablename="mbii"]/item[@name="sjscdw"]'))
        # self.add_value_to_sync_dict_list(sync_dict, 'bandcount', xml.get_element_text_by_xpath_one(''))
        # self.add_value_to_sync_dict_list(sync_dict, 'bandname', 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, 'datacount',
            CUtils.to_integer(
                xml.get_element_text_by_xpath_one(
                    '/root/property[@tablename="mbii"]/item[@name="sjl"]')))
        # 密级
        self.add_value_to_sync_dict_list(
            sync_dict, 'secrecylevel',
            xml.get_element_text_by_xpath_one(
                '/root/property[@tablename="mbii"]/item[@name="mj"]'))
        # 行政区码
        self.add_value_to_sync_dict_list(
            sync_dict, 'regioncode',
            xml.get_element_text_by_xpath_one(
                '/root/property[@tablename="mbii"]/item[@name="xzqdm"]'))
        # 行政区
        self.add_value_to_sync_dict_list(
            sync_dict, 'regionname',
            xml.get_element_text_by_xpath_one(
                '/root/property[@tablename="mbii"]/item[@name="xmc"]'))
        # 产品时间
        # 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(''), self.DB_True)
        # 色彩模式
        # 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(
                '/root/property[@tablename="mpid"]/item[@name="sjy"]'))
        # 备注
        # self.add_value_to_sync_dict_list(sync_dict, 'remark', xml.get_element_text_by_xpath_one(''))

        return sync_dict
コード例 #26
0
ファイル: job_dm_obj_da.py プロジェクト: ieasysoft/imetadata
    def process_mission(self, dataset):
        dso_id = dataset.value_by_name(0, 'dsoid', '')
        dso_data_type = dataset.value_by_name(0, 'dsodatatype', '')
        dso_object_type = dataset.value_by_name(0, 'dsoobjecttype', '')
        dso_object_name = dataset.value_by_name(0, 'dsoobjectname', '')
        dso_object_da_content = CUtils.any_2_str(dataset.value_by_name(0, 'dso_da_result', ''))
        dso_object_quality = dataset.value_by_name(0, 'dso_quality', '')

        ds_retry_times = dataset.value_by_name(0, 'retry_times', 0)
        if ds_retry_times >= self.abnormal_job_retry_times():
            ds_last_process_memo = CUtils.any_2_str(dataset.value_by_name(0, 'last_process_memo', None))
            process_result = CResult.merge_result(
                self.Failure,
                '{0}, \n系统已经重试{1}次, 仍然未能解决, 请人工检查修正后重试!'.format(
                    ds_last_process_memo,
                    ds_retry_times
                )
            )
            self.update_status(dso_id, None, process_result, self.ProcStatus_Error)
            return process_result

        dso_quality = CXml()
        dso_quality.load_xml(dso_object_quality)

        dso_da_json = CJson()
        dso_da_json.load_json_text(dso_object_da_content)

        CLogger().debug(
            '开始处理对象: {0}.{1}.{2}.{3}对各个子系统的支撑能力'.format(dso_id, dso_data_type, dso_object_type, dso_object_name))

        try:
            modules_root_dir = CSys.get_metadata_data_access_modules_root_dir()
            modules_file_list = CFile.file_or_subpath_of_path(
                modules_root_dir,
                '{0}_*.{1}'.format(self.Name_Module, self.FileExt_Py)
            )
            for file_name_without_path in modules_file_list:
                file_main_name = CFile.file_main_name(file_name_without_path)
                # 判断模块的可访问是否已经被人工审批, 如果人工审批, 则这里不再计算和覆盖
                module_access = dso_da_json.xpath_one(
                    '{0}.{1}'.format(file_main_name, self.Name_Audit),
                    self.Name_System
                )
                if CUtils.equal_ignore_case(module_access, self.Name_User):
                    continue

                try:
                    module_obj = CObject.create_module_instance(
                        CSys.get_metadata_data_access_modules_root_name(),
                        file_main_name,
                        self.get_mission_db_id()
                    )
                    module_title = CUtils.dict_value_by_name(module_obj.information(), self.Name_Title, '')
                    result = CUtils.any_2_str(module_obj.access(dso_id,
                                                                dso_object_name,
                                                                dso_data_type,
                                                                dso_quality)
                                              )
                    if CResult.result_success(result):
                        module_access = CResult.result_info(result, self.Name_Access, self.DataAccess_Forbid)
                    else:
                        CLogger().debug('模块[{0}]解析出现错误, 系统将忽略本模块, 继续处理下一个!'.format(file_main_name))
                        module_access = self.DataAccess_Unknown

                    module_access_message = CResult.result_message(result)
                    module_obj = {self.Name_Audit: self.Name_System, self.Name_Result: module_access,
                                  self.Name_Title: module_title, self.Name_Message: module_access_message}
                    dso_da_json.set_value_of_name(file_main_name, module_obj)
                except Exception as error:
                    CLogger().debug('模块[{0}]解析出现异常, 原因为[{1}], 请检查!'.format(file_main_name, error.__str__()))

                    module_access = self.DataAccess_Unknown
                    module_access_message = '模块[{0}]解析出现异常, 原因为[{1}], 请检查!'.format(file_main_name, error.__str__())
                    module_obj = {self.Name_Audit: self.Name_System, self.Name_Result: module_access,
                                  self.Name_Title: file_main_name, self.Name_Message: module_access_message}
                    dso_da_json.set_value_of_name(file_main_name, module_obj)

            process_result = CResult.merge_result(
                self.Success,
                '对象[{0}.{1}]访问权限解析成功!'.format(dso_id, dso_object_name)
            )
            self.update_status(
                dso_id,
                dso_da_json.to_json(),
                process_result
            )
            return process_result
        except Exception as error:
            process_result = CResult.merge_result(
                self.Failure,
                '对象[{0}.{1}]访问权限解析出错, 原因为[{2}]!'.format(dso_id, dso_object_name, error.__str__())
            )
            self.update_status(dso_id, None, process_result)
            return process_result
コード例 #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,第二个参数为字段名,第三个参数为字段值,第四个参数为特殊配置
        """
        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, 'rowno', xml.get_element_text_by_xpath_one(''))
        # self.add_value_to_sync_dict_list(sync_dict, 'colno', xml.get_element_text_by_xpath_one(''))
        self.add_value_to_sync_dict_list(
            sync_dict, 'sfno',
            xml.get_element_text_by_xpath_one(
                '/Metadatafile/BasicDataContent/MapNo'))
        self.add_value_to_sync_dict_list(
            sync_dict, 'domname',
            xml.get_element_text_by_xpath_one(
                '/Metadatafile/BasicDataContent/ProductName'))
        # self.add_value_to_sync_dict_list(sync_dict, 'domscale',xml.get_element_text_by_xpath_one('')
        # self.add_value_to_sync_dict_list(sync_dict, 'imgyear', 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, 'rescode', xml.get_element_text_by_xpath_one(''))
        # self.add_value_to_sync_dict_list(sync_dict, 'colorcode', xml.get_element_text_by_xpath_one(''))
        # self.add_value_to_sync_dict_list(sync_dict, 'tilecode', xml.get_element_text_by_xpath_one(''))
        # self.add_value_to_sync_dict_list(sync_dict, 'sepcode', xml.get_element_text_by_xpath_one(''))
        # self.add_value_to_sync_dict_list(sync_dict, 'extname', xml.get_element_text_by_xpath_one(''))
        # self.add_value_to_sync_dict_list(sync_dict, 'scalecode', xml.get_element_text_by_xpath_one(''))
        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, 'expandlength', xml.get_element_text_by_xpath_one(''))
        # 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, 'projinfo',
            xml.get_element_text_by_xpath_one(
                '/Metadatafile/BasicDataContent/Mathfoundation/MapProjection'))
        self.add_value_to_sync_dict_list(
            sync_dict, 'zonetype',
            xml.get_element_text_by_xpath_one(
                '/Metadatafile/BasicDataContent/Mathfoundation/ZoneDivisionMode'
            ))
        self.add_value_to_sync_dict_list(
            sync_dict, 'centerline',
            xml.get_element_text_by_xpath_one(
                '/Metadatafile/BasicDataContent/Mathfoundation/CentralMederian'
            ))
        self.add_value_to_sync_dict_list(
            sync_dict, 'coordinateunit',
            xml.get_element_text_by_xpath_one(
                '/Metadatafile/BasicDataContent/Mathfoundation/CoordinationUnit'
            ))
        self.add_value_to_sync_dict_list(
            sync_dict, 'createrorgnize',
            xml.get_element_text_by_xpath_one(
                '/Metadatafile/BasicDataContent/Producer'))
        self.add_value_to_sync_dict_list(
            sync_dict, 'publishorgnize',
            xml.get_element_text_by_xpath_one(
                '/Metadatafile/BasicDataContent/Publisher'))
        self.add_value_to_sync_dict_list(
            sync_dict, 'submitorganize',
            xml.get_element_text_by_xpath_one(
                '/Metadatafile/BasicDataContent/Owner'))
        # 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, 'demstandard',
            xml.get_element_text_by_xpath_one(
                '/Metadatafile/BasicDataContent/Mathfoundation/HeightDatum'))
        self.add_value_to_sync_dict_list(
            sync_dict, 'demname',
            xml.get_element_text_by_xpath_one(
                '/Metadatafile/BasicDataContent/Mathfoundation/HeightSystem'))
        # 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, 'isfull', xml.get_element_text_by_xpath_one(''))
        # self.add_value_to_sync_dict_list(sync_dict, 'imagesource', 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
コード例 #28
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, 'aprodid', object_table_id)
        self.add_value_to_sync_dict_list(
            sync_dict, 'aprowid',
            object_table_data.value_by_name(0, 'dsoparentobjid', ''))
        self.add_value_to_sync_dict_list(
            sync_dict, 'sataname',
            xml.get_element_text_by_xpath_one(
                '/Metadatafile/BasicDataContent/SatelliteID'))
        dsoobjectname = object_table_data.value_by_name(0, 'dsoobjectname', '')
        resolution = xml.get_element_text_by_xpath_one(
            '/Metadatafile/BasicDataContent/Resolution')
        if 'pan' in CUtils.text_to_lower(dsoobjectname):

            self.add_value_to_sync_dict_list(sync_dict, 'panfilename',
                                             dsoobjectname)

            self.add_value_to_sync_dict_list(sync_dict, 'panresolution',
                                             resolution)

            self.add_value_to_sync_dict_list(
                sync_dict, 'panimagedate',
                xml.get_element_text_by_xpath_one(
                    '/Metadatafile/BasicDataContent/ReceiveTime'))

            self.add_value_to_sync_dict_list(sync_dict, 'fusefilename',
                                             dsoobjectname)
        else:

            self.add_value_to_sync_dict_list(sync_dict, 'msfilename',
                                             dsoobjectname)
            # sync_dict['mssensorname'] = "''"

            self.add_value_to_sync_dict_list(sync_dict, 'msresolution',
                                             resolution)
            # sync_dict['mstraceno'] = "''"

            self.add_value_to_sync_dict_list(
                sync_dict, 'msimagedate',
                xml.get_element_text_by_xpath_one(
                    '/Metadatafile/BasicDataContent/ReceiveTime'))
            # sync_dict['fusefilename'] = "''"

        self.add_value_to_sync_dict_list(
            sync_dict, 'dsometadatajson',
            object_table_data.value_by_name(0, 'dsometadataxml_bus', ''))
        # sync_dict['bandcount'] = "''"
        # sync_dict['bandname'] = "''"
        # sync_dict['cloudpercent'] = "''"

        # 数据量
        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'))
        # resolution
        self.add_value_to_sync_dict_list(
            sync_dict, 'resolution',
            xml.get_element_text_by_xpath_one(
                '/Metadatafile/BasicDataContent/Resolution'))
        # 色彩模式
        # sync_dict['colormodel'] = "''"
        # 像素位数
        # sync_dict['piexldepth'] = "''"
        # 比例尺分母
        # sync_dict['scale'] = "''"
        # 主要星源
        self.add_value_to_sync_dict_list(
            sync_dict, 'mainrssource',
            xml.get_element_text_by_xpath_one(
                '/Metadatafile/BasicDataContent/SatelliteID'))
        self.add_value_to_sync_dict_list(
            sync_dict, 'remark',
            xml.get_element_text_by_xpath_one(
                '/Metadatafile/BasicDataContent/Description'))

        return sync_dict
コード例 #29
0
    def init_metadata_bus(self, parser: CMetaDataParser) -> str:
        """
        通过相应信息转换xml
        """
        file_main_name = parser.file_info.file_main_name
        file_path = parser.file_info.file_path
        xml_obj = CXml()  # 建立xml对象
        node_root = xml_obj.new_xml('root')

        node_item1 = xml_obj.create_element(node_root, 'item')
        xml_obj.set_attr(node_item1, self.Name_Name, 'ProductName')
        xml_obj.set_element_text(node_item1, file_main_name)  # 设置item节点与属性与内容

        pathdata_list = re.findall(
            r'(?i)(\d{4}.{2})[\\\\/]FenFu',
            file_path
        )
        if len(pathdata_list) > 0:
            pathdata = CUtils.any_2_str(pathdata_list[0])
        else:
            pathdata = ''
        node_item2 = xml_obj.create_element(node_root, 'item')
        xml_obj.set_attr(node_item2, self.Name_Name, 'DataDate')
        xml_obj.set_element_text(node_item2, pathdata)  # 设置item节点与属性与内容

        pixelsize_value = parser.metadata.metadata_json().xpath_one('pixelsize.width', None)
        if pixelsize_value is not None:
            pixelsize_num = CUtils.to_decimal(pixelsize_value, None)
            if pixelsize_num is not None:
                if CUtils.to_decimal(pixelsize_value, 0) < 0.01:
                    pixelsize_value = pixelsize_num * 110000
            else:
                pixelsize_value = ''
        else:
            pixelsize_value = ''
        pixelsize_value = CUtils.any_2_str(pixelsize_value)
        if len(pixelsize_value) > 10:
            pixelsize_value = pixelsize_value[:10]
        node_item3 = xml_obj.create_element(node_root, 'item')
        xml_obj.set_attr(node_item3, self.Name_Name, 'Resolution')
        xml_obj.set_element_text(node_item3, pixelsize_value)  # 设置item节点与属性与内容

        SatelliteID = ''
        node_item4 = xml_obj.create_element(node_root, 'item')
        xml_obj.set_attr(node_item4, self.Name_Name, 'SatelliteID')
        xml_obj.set_element_text(node_item4, SatelliteID)  # 设置item节点与属性与内容

        GeographicName = ''
        node_item5 = xml_obj.create_element(node_root, 'item')
        xml_obj.set_attr(node_item5, self.Name_Name, 'GeographicName')
        xml_obj.set_element_text(node_item5, GeographicName)  # 设置item节点与属性与内容

        node_item6 = xml_obj.create_element(node_root, 'item')
        xml_obj.set_attr(node_item6, self.Name_Name, 'Description')
        xml_obj.set_element_text(node_item6, '')  # 设置item节点与属性与内容

        try:
            if xml_obj is not None:
                parser.metadata.set_metadata_bus(
                    self.Success,
                    '元数据文件成功构建! ',
                    self.MetaDataFormat_XML,
                    xml_obj.to_xml()
                )

                return CResult.merge_result(
                    self.Success,
                    '元数据文件成功构建! '
                )
            else:
                raise
        except Exception as error:
            parser.metadata.set_metadata_bus(
                self.Exception,
                '构建元数据文件失败, 无法处理! 错误原因为{0}'.format(error.__str__()),
                self.MetaDataFormat_Text,
                ''
            )
            return CResult.merge_result(
                self.Exception,
                '构建元数据文件失败, 无法处理! 错误原因为{0}'.format(error.__str__())
            )
コード例 #30
0
    def get_sync_predefined_dict_list(self, insert_or_updata) -> list:
        """
        insert_or_updata 指明配置的是更新还是插入,-1时为插入,0为更新
        本方法的写法为强规则,调用add_value_to_sync_dict_list配置
        第一个参数为list,第二个参数为字段名,第三个参数为字段值,第四个参数为特殊配置
        datacount:数据数量 secrecylevel:密级 colormodel:色彩模式
        piexldepth:像素位数
        """
        sync_dict_list = list()
        object_table_id = self._obj_id
        object_table_data = self._dataset
        self.add_value_to_sync_dict_list(sync_dict_list, 'aprid',
                                         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,
            'productname',  # 配置字段名
            dsometadataxml_xml.get_element_text_by_xpath_one(
                '/root/DSName'))  # 配置字段值
        self.add_value_to_sync_dict_list(sync_dict_list, 'producttype',
                                         self._obj_type_code)
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'dsodatatype',
            object_table_data.value_by_name(0, 'dsodatatype', ''))
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'begdate',
            CUtils.to_day_format(
                dsometadataxml_xml.get_element_text_by_xpath_one(
                    '/root/BeginDate'), ''))
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'enddate',
            CUtils.to_day_format(
                dsometadataxml_xml.get_element_text_by_xpath_one(
                    '/root/EndDate'), ''))
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'imagedate',
            CUtils.to_day_format(
                dsometadataxml_xml.get_element_text_by_xpath_one('/root/Date'),
                ''))
        # datacount:数据数量
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'datacount', '''
            (select count(dsoid) FROM dm2_storage_object WHERE dsoparentobjid='{0}')
            '''.format(object_table_id), self.DataValueType_SQL)
        # secrecylevel:密级
        regioncode = dsometadataxml_xml.get_element_text_by_xpath_one(
            '/root/RegionCode')
        self.add_value_to_sync_dict_list(  # regioncode:行政区码
            sync_dict_list, 'regioncode', regioncode)
        self.add_value_to_sync_dict_list(  # regionname:行政区
            sync_dict_list, 'regionname',
            dsometadataxml_xml.get_element_text_by_xpath_one(
                '/root/RegionName'))

        self.add_value_to_sync_dict_list(
            sync_dict_list, 'centerx', '''
            (select centerx::decimal(8,2) from ro_global_dim_space where gdscode='{0}')
            '''.format(regioncode), self.DataValueType_SQL)
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'centery', '''
            (select centery::decimal(8,2) from ro_global_dim_space where gdscode='{0}')
            '''.format(regioncode), self.DataValueType_SQL)
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'geomwkt', "st_astext("
            "(select gdsgeometry from ro_global_dim_space where gdscode='{0}')"
            ")".format(regioncode), self.DataValueType_SQL)
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'geomobj',
            "(select gdsgeometry from ro_global_dim_space where gdscode='{0}')"
            .format(regioncode), self.DataValueType_SQL)

        self.add_value_to_sync_dict_list(
            sync_dict_list, 'browserimg',
            object_table_data.value_by_name(0, 'dso_browser', ''))
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'thumbimg',
            object_table_data.value_by_name(0, 'dso_thumb', ''))
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'producetime',
            CUtils.to_day_format(
                dsometadataxml_xml.get_element_text_by_xpath_one('/root/Date'),
                ''))
        self.add_value_to_sync_dict_list(  # resolution:分辨率
            sync_dict_list, 'resolution',
            dsometadataxml_xml.get_element_text_by_xpath_one(
                '/root/Resolution'))

        self.add_value_to_sync_dict_list(
            sync_dict_list, 'imgsize',
            "(select round((sum(dodfilesize)/1048576),2) from dm2_storage_obj_detail "
            "where dodobjectid in "
            "(select dsoid FROM dm2_storage_object WHERE dsoparentobjid='{0}')"
            ")".format(object_table_id), self.DataValueType_SQL)
        # colormodel:交插件处理
        # piexldepth:交插件处理
        if insert_or_updata:
            self.add_value_to_sync_dict_list(sync_dict_list, 'isdel', '0')
            now_time = CUtils.any_2_str(
                datetime.datetime.now().strftime('%F %T'))
            self.add_value_to_sync_dict_list(sync_dict_list, 'addtime',
                                             now_time)
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'extent',
            "(select gds_geo_bbox from ro_global_dim_space where gdscode='{0}')"
            .format(regioncode), self.DataValueType_SQL)
        # self.add_value_to_sync_dict_list(
        #     sync_dict_list, 'proj', object_table_data.value_by_name(0, 'dso_prj_wkt', ''), self.DB_True)
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'remark',
            dsometadataxml_xml.get_element_text_by_xpath_one('/root/Remark'))
        # ispublishservice:暂时为空
        self.add_value_to_sync_dict_list(sync_dict_list, 'queryable', '1')
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'mainrssource',
            dsometadataxml_xml.get_element_text_by_xpath_one(
                '/root/MajorSource'))
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'scale',
            dsometadataxml_xml.get_element_text_by_xpath_one(
                '/root/ScaleDenominator'))
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'dsdid',
            object_table_data.value_by_name(0, 'query_dataset_directory_id',
                                            ''))
        self.add_value_to_sync_dict_list(
            sync_dict_list, 'imagedatetag',
            self.transform_time_to_imagedatetag(
                dsometadataxml_xml.get_element_text_by_xpath_one(
                    '/root/Date')))

        return sync_dict_list