check_meta.py
2.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# 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": {
}
}
}
}
}