check_meta.py 2.5 KB
# coding=utf-8
# author:        4N
# createtime:    2021/1/27
# email:         nheweijun@sina.com

from osgeo.ogr import *
import uuid

import time
from app.models import *
import json
import re
from app.util.component.ApiTemplate import ApiTemplate
from app.util.component.PGUtil import PGUtil


class Api(ApiTemplate):
    api_name = "检查meta"
    def process(self):

        # 设置任务信息
        self.para["task_guid"] = uuid.uuid1().__str__()
        self.para["task_time"] = time.time()

        # 返回结果
        res = {}

        try:


            # 图层重名检查

            meta_list: list = json.loads(self.para.get("meta").__str__())
            check_meta_only = int(self.para.get("check_meta_only", 0))

            res["data"] = {}


            database = Database.query.filter_by(guid=self.para.get("database_guid")).one_or_none()
            if not database:
                raise Exception("数据库不存在!")
            pg_ds: DataSource = PGUtil.open_pg_data_source(1, DES.decode(database.sqlalchemy_uri))

            res["result"] = True

            for meta in meta_list:
                layers: dict = meta.get("layer")
                for layer_name_origin in layers.keys():
                    layer_name = layers.get(layer_name_origin)
                    if pg_ds.GetLayerByName(layer_name) or InsertingLayerName.query.filter_by(
                            name=layer_name).one_or_none():
                        res["data"][layer_name_origin] = 0
                        res["result"] = False
                    # 判断特殊字符
                    elif re.search(r"\W", layer_name):
                        res["data"][layer_name_origin] = -1
                        res["result"] = False
                    else:
                        res["data"][layer_name_origin] = 1
                if pg_ds:
                    try:
                        pg_ds.Destroy()
                    except:
                        print("关闭数据库失败!")

        except Exception as e:
            raise e

        return res

    api_doc = {
        "tags": ["IO接口"],
        "parameters": [
            {"name": "meta",
             "in": "formData",
             "type": "string",
             "description": "数据meta"}
        ],
        "responses": {
            200: {
                "schema": {
                    "properties": {
                    }
                }
            }
        }
    }