mirror of https://github.com/openspug/spug
A api update
parent
80657d4649
commit
70913eacf4
|
@ -4,6 +4,8 @@ from .views import *
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', ConfigView.as_view()),
|
path('', ConfigView.as_view()),
|
||||||
|
path('parse/json/', parse_json),
|
||||||
|
path('parse/text/', parse_text),
|
||||||
path('environment/', EnvironmentView.as_view()),
|
path('environment/', EnvironmentView.as_view()),
|
||||||
path('service/', ServiceView.as_view()),
|
path('service/', ServiceView.as_view()),
|
||||||
path('history/', HistoryView.as_view()),
|
path('history/', HistoryView.as_view()),
|
||||||
|
|
|
@ -2,6 +2,7 @@ from django.views.generic import View
|
||||||
from django.db.models import F
|
from django.db.models import F
|
||||||
from libs import json_response, JsonParser, Argument
|
from libs import json_response, JsonParser, Argument
|
||||||
from apps.config.models import *
|
from apps.config.models import *
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
class EnvironmentView(View):
|
class EnvironmentView(View):
|
||||||
|
@ -142,16 +143,11 @@ class ConfigView(View):
|
||||||
if config:
|
if config:
|
||||||
ConfigHistory.objects.create(
|
ConfigHistory.objects.create(
|
||||||
action='3',
|
action='3',
|
||||||
type=config.type,
|
|
||||||
o_id=config.o_id,
|
|
||||||
env_id=config.env_id,
|
|
||||||
key=config.key,
|
|
||||||
desc=config.desc,
|
|
||||||
is_public=config.is_public,
|
|
||||||
old_value=config.value,
|
old_value=config.value,
|
||||||
value='',
|
value='',
|
||||||
updated_at=human_time(),
|
updated_at=human_time(),
|
||||||
updated_by=request.user
|
updated_by=request.user,
|
||||||
|
**config.to_dict(excludes=('id', 'value', 'updated_at', 'updated_by_id'))
|
||||||
)
|
)
|
||||||
config.delete()
|
config.delete()
|
||||||
return json_response(error=error)
|
return json_response(error=error)
|
||||||
|
@ -173,3 +169,76 @@ class HistoryView(View):
|
||||||
data.append(tmp)
|
data.append(tmp)
|
||||||
return json_response(data)
|
return json_response(data)
|
||||||
return json_response(error=error)
|
return json_response(error=error)
|
||||||
|
|
||||||
|
|
||||||
|
def parse_json(request):
|
||||||
|
form, error = JsonParser(
|
||||||
|
Argument('o_id', type=int, help='缺少必要参数'),
|
||||||
|
Argument('type', filter=lambda x: x in dict(Config.TYPES), help='缺少必要参数'),
|
||||||
|
Argument('env_id', type=int, help='缺少必要参数'),
|
||||||
|
Argument('data', type=dict, help='缺少必要参数')
|
||||||
|
).parse(request.body)
|
||||||
|
if error is None:
|
||||||
|
data = form.pop('data')
|
||||||
|
_parse(request, form, data)
|
||||||
|
return json_response(error=error)
|
||||||
|
|
||||||
|
|
||||||
|
def parse_text(request):
|
||||||
|
form, error = JsonParser(
|
||||||
|
Argument('o_id', type=int, help='缺少必要参数'),
|
||||||
|
Argument('type', filter=lambda x: x in dict(Config.TYPES), help='缺少必要参数'),
|
||||||
|
Argument('env_id', type=int, help='缺少必要参数'),
|
||||||
|
Argument('data', help='缺少必要参数')
|
||||||
|
).parse(request.body)
|
||||||
|
if error is None:
|
||||||
|
data = {}
|
||||||
|
for line in form.pop('data').strip().split('\n'):
|
||||||
|
fields = line.split('=', 1)
|
||||||
|
if len(fields) != 2 or fields[0].strip() == '':
|
||||||
|
return json_response(error=f'解析配置{line!r}失败,确认其遵循 key = value 格式')
|
||||||
|
data[fields[0].strip()] = fields[1].strip()
|
||||||
|
_parse(request, form, data)
|
||||||
|
return json_response(error=error)
|
||||||
|
|
||||||
|
|
||||||
|
def _parse(request, query, data):
|
||||||
|
for item in Config.objects.filter(**query):
|
||||||
|
if item.key in data:
|
||||||
|
value = _filter_value(data.pop(item.key))
|
||||||
|
if item.value != value:
|
||||||
|
old_value = item.value
|
||||||
|
item.value = value
|
||||||
|
item.updated_at = human_time()
|
||||||
|
item.updated_by = request.user
|
||||||
|
item.save()
|
||||||
|
ConfigHistory.objects.create(
|
||||||
|
action='2',
|
||||||
|
old_value=old_value,
|
||||||
|
**item.to_dict(excludes=('id',)))
|
||||||
|
else:
|
||||||
|
ConfigHistory.objects.create(
|
||||||
|
action='3',
|
||||||
|
old_value=item.value,
|
||||||
|
value='',
|
||||||
|
updated_at=human_time(),
|
||||||
|
updated_by=request.user,
|
||||||
|
**item.to_dict(excludes=('id', 'value', 'updated_at', 'updated_by_id'))
|
||||||
|
)
|
||||||
|
item.delete()
|
||||||
|
for key, value in data.items():
|
||||||
|
query.key = key
|
||||||
|
query.is_public = True
|
||||||
|
query.value = _filter_value(value)
|
||||||
|
query.updated_at = human_time()
|
||||||
|
query.updated_by = request.user
|
||||||
|
Config.objects.create(**query)
|
||||||
|
ConfigHistory.objects.create(action='1', **query)
|
||||||
|
|
||||||
|
|
||||||
|
def _filter_value(value):
|
||||||
|
if isinstance(value, (str, int)):
|
||||||
|
value = str(value).strip()
|
||||||
|
else:
|
||||||
|
value = json.dumps(value)
|
||||||
|
return value
|
||||||
|
|
Loading…
Reference in New Issue