valar 1.3.19__tar.gz → 1.3.21__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {valar-1.3.19/src/valar.egg-info → valar-1.3.21}/PKG-INFO +1 -1
- {valar-1.3.19 → valar-1.3.21}/setup.py +1 -1
- {valar-1.3.19 → valar-1.3.21}/src/valar/auth/Authentication.py +2 -1
- {valar-1.3.19 → valar-1.3.21}/src/valar/channels/consumer.py +11 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/channels/executer.py +8 -3
- {valar-1.3.19 → valar-1.3.21}/src/valar/channels/sender.py +4 -2
- {valar-1.3.19 → valar-1.3.21}/src/valar/dao/defaults/field_keys_default.py +1 -1
- {valar-1.3.19 → valar-1.3.21}/src/valar/dao/defaults/field_values_default.py +5 -7
- {valar-1.3.19 → valar-1.3.21}/src/valar/dao/meta.py +1 -17
- {valar-1.3.19 → valar-1.3.21}/src/valar/dao/orm_dao.py +0 -4
- {valar-1.3.19 → valar-1.3.21}/src/valar/migrations/0001_initial.py +20 -2
- {valar-1.3.19 → valar-1.3.21}/src/valar/models/core.py +0 -2
- {valar-1.3.19 → valar-1.3.21}/src/valar/models/meta.py +0 -1
- {valar-1.3.19 → valar-1.3.21}/src/valar/urls.py +4 -1
- {valar-1.3.19 → valar-1.3.21}/src/valar/views/auth.py +7 -8
- valar-1.3.21/src/valar/views/handler.py +47 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/views/meta.py +24 -12
- {valar-1.3.19 → valar-1.3.21}/src/valar/views/password.py +1 -1
- {valar-1.3.19 → valar-1.3.21}/src/valar/views/rest.py +22 -2
- {valar-1.3.19 → valar-1.3.21/src/valar.egg-info}/PKG-INFO +1 -1
- valar-1.3.19/src/valar/views/handler.py +0 -54
- {valar-1.3.19 → valar-1.3.21}/LICENSE +0 -0
- {valar-1.3.19 → valar-1.3.21}/MANIFEST.in +0 -0
- {valar-1.3.19 → valar-1.3.21}/README.md +0 -0
- {valar-1.3.19 → valar-1.3.21}/setup.cfg +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/__init__.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/apps.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/auth/Middleware.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/auth/__init__.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/channels/__init__.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/channels/counter.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/channels/mapping.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/channels/views.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/classes/__init__.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/classes/app_mixins/__init__.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/classes/app_mixins/auto_migration_mixin.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/classes/app_mixins/auto_urlpatterns_mixin.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/classes/singleton_meta.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/classes/valar_minio.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/classes/valar_response.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/dao/__init__.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/dao/abstract.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/dao/defaults/__init__.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/dao/defaults/view_defaults.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/dao/engine.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/dao/frame.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/dao/mon_dao.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/dao/mon_field.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/dao/orm_field.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/dao/query.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/migrations/__init__.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/models/__init__.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/models/auth.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/models/frame.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/models/indicator.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/models/test.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/views/__init__.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar/views/file.py +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar.egg-info/SOURCES.txt +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar.egg-info/dependency_links.txt +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar.egg-info/requires.txt +0 -0
- {valar-1.3.19 → valar-1.3.21}/src/valar.egg-info/top_level.txt +0 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import jwt
|
|
2
2
|
from django.conf import settings
|
|
3
|
+
from django.http import HttpRequest
|
|
3
4
|
|
|
4
5
|
from ..classes.valar_response import ValarResponse
|
|
5
6
|
|
|
@@ -11,7 +12,7 @@ class ValaAuthError(Exception):
|
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
def auth_required(view_func):
|
|
14
|
-
def wrapper(request, *args, **kwargs):
|
|
15
|
+
def wrapper(request: HttpRequest, *args, **kwargs):
|
|
15
16
|
try:
|
|
16
17
|
payload = valid_request_token(request)
|
|
17
18
|
request.user_id = payload["user_id"]
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from channels.generic.websocket import AsyncJsonWebsocketConsumer
|
|
2
|
+
from django.conf import settings
|
|
2
3
|
|
|
3
4
|
VALAR_CHANNEL_GROUP = 'VALAR'
|
|
4
5
|
|
|
@@ -15,6 +16,10 @@ class ValarConsumer(AsyncJsonWebsocketConsumer):
|
|
|
15
16
|
self.client = params.get('client')
|
|
16
17
|
await self.channel_layer.group_add(VALAR_CHANNEL_GROUP, self.channel_name)
|
|
17
18
|
await self.accept()
|
|
19
|
+
await self.send_json({
|
|
20
|
+
"tag": 'system',
|
|
21
|
+
"minio": getattr(settings, 'MINIO_ROOT') if hasattr(settings, 'MINIO_ROOT') else '/minio'
|
|
22
|
+
})
|
|
18
23
|
|
|
19
24
|
async def disconnect(self, code):
|
|
20
25
|
await self.channel_layer.group_discard(VALAR_CHANNEL_GROUP, self.channel_name)
|
|
@@ -30,17 +35,23 @@ class ValarConsumer(AsyncJsonWebsocketConsumer):
|
|
|
30
35
|
async def user_emit(self, event):
|
|
31
36
|
users: list = event.get('users', [])
|
|
32
37
|
data = event.get('data', {})
|
|
38
|
+
tag = event.get('tag')
|
|
39
|
+
data.update({'tag': tag})
|
|
33
40
|
if self.uid in users:
|
|
34
41
|
await self.send_json(data)
|
|
35
42
|
|
|
36
43
|
async def client_emit(self, event):
|
|
37
44
|
clients: list = event.get('clients', [])
|
|
38
45
|
data = event.get('data', {})
|
|
46
|
+
tag = event.get('tag')
|
|
47
|
+
data.update({'tag': tag})
|
|
39
48
|
if self.client in clients:
|
|
40
49
|
await self.send_json(data)
|
|
41
50
|
|
|
42
51
|
async def broadcast_emit(self, event):
|
|
43
52
|
data = event.get('data', {})
|
|
53
|
+
tag = event.get('tag')
|
|
54
|
+
data.update({'tag': tag})
|
|
44
55
|
await self.send_json(data)
|
|
45
56
|
|
|
46
57
|
async def register_emit(self, event):
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
|
|
3
3
|
from ..channels.sender import ValarChannelSender
|
|
4
|
+
import traceback
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
async def execute_channel(method, sender: ValarChannelSender):
|
|
@@ -10,6 +11,10 @@ async def execute_channel(method, sender: ValarChannelSender):
|
|
|
10
11
|
|
|
11
12
|
def __execute__(method, sender: ValarChannelSender):
|
|
12
13
|
sender.start()
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
try:
|
|
15
|
+
response = method(sender)
|
|
16
|
+
sender.done(response)
|
|
17
|
+
sender.stop()
|
|
18
|
+
except Exception as e:
|
|
19
|
+
traceback.print_exc()
|
|
20
|
+
sender.error(str(e))
|
|
@@ -18,8 +18,9 @@ class Channel:
|
|
|
18
18
|
self.url = body.get('url')
|
|
19
19
|
self.auth = body.get('auth')
|
|
20
20
|
self.broadcast = body.get('broadcast')
|
|
21
|
+
|
|
21
22
|
self.data = body.get('data')
|
|
22
|
-
self.
|
|
23
|
+
self.token = body.get('token')
|
|
23
24
|
|
|
24
25
|
def to_dict(self, resolver, payload):
|
|
25
26
|
data = {
|
|
@@ -27,7 +28,7 @@ class Channel:
|
|
|
27
28
|
'url': self.url,
|
|
28
29
|
'auth': self.auth,
|
|
29
30
|
'broadcast': self.broadcast,
|
|
30
|
-
'
|
|
31
|
+
'token': self.token,
|
|
31
32
|
'timestamp': datetime.now().timestamp()
|
|
32
33
|
}
|
|
33
34
|
if resolver:
|
|
@@ -97,6 +98,7 @@ class ValarChannelSender(Sender):
|
|
|
97
98
|
pay = self.__payload__ if status == 'proceed' else data
|
|
98
99
|
body = {
|
|
99
100
|
'type': f'{scope}.emit',
|
|
101
|
+
'tag': 'batch',
|
|
100
102
|
'data': self.__channel__.to_dict(status, pay),
|
|
101
103
|
'clients': [self.client],
|
|
102
104
|
'users': []
|
|
@@ -4,7 +4,7 @@ meta_field_key_defaults = {
|
|
|
4
4
|
},
|
|
5
5
|
'valar.MetaView': {
|
|
6
6
|
'list': ('pick', ['code', 'name']),
|
|
7
|
-
'core': ('pick', ['name', 'enable', 'lock'
|
|
7
|
+
'core': ('pick', ['name', 'enable', 'lock']),
|
|
8
8
|
'style': ('pick', ['form_width', 'form_height', 'table_width', 'table_height']),
|
|
9
9
|
'rest': ('pick',
|
|
10
10
|
['allow_search', 'allow_order', 'allow_insert', 'allow_remove', 'allow_download', 'allow_upload']),
|
|
@@ -27,11 +27,8 @@ meta_field_value_defaults = {
|
|
|
27
27
|
},
|
|
28
28
|
"core": {
|
|
29
29
|
"name": {
|
|
30
|
-
'span':
|
|
30
|
+
'span': 24
|
|
31
31
|
},
|
|
32
|
-
"enable": {
|
|
33
|
-
"span": 8
|
|
34
|
-
}
|
|
35
32
|
}
|
|
36
33
|
},
|
|
37
34
|
'valar.MetaFieldDomain': {
|
|
@@ -104,7 +101,6 @@ meta_field_value_defaults = {
|
|
|
104
101
|
},
|
|
105
102
|
"tool": {
|
|
106
103
|
'column_width': 100,
|
|
107
|
-
'span': 24,
|
|
108
104
|
'tool': 'tree',
|
|
109
105
|
'refer': {
|
|
110
106
|
'entity': 'valar.MetaFieldTool',
|
|
@@ -119,11 +115,13 @@ meta_field_value_defaults = {
|
|
|
119
115
|
},
|
|
120
116
|
"refer": {
|
|
121
117
|
'allow_edit': False,
|
|
122
|
-
'column_width': 80
|
|
118
|
+
'column_width': 80,
|
|
119
|
+
"hide_on_form": True
|
|
123
120
|
},
|
|
124
121
|
"format": {
|
|
125
122
|
'allow_edit': False,
|
|
126
|
-
'column_width': 80
|
|
123
|
+
'column_width': 80,
|
|
124
|
+
"hide_on_form": True
|
|
127
125
|
},
|
|
128
126
|
'header_color': {
|
|
129
127
|
'tool': 'color',
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import copy
|
|
2
2
|
|
|
3
3
|
from deepmerge import always_merger
|
|
4
|
-
from django.conf import settings
|
|
5
4
|
|
|
6
5
|
from ..dao.defaults.field_keys_default import meta_field_key_defaults
|
|
7
6
|
from ..dao.defaults.field_values_default import meta_field_value_defaults
|
|
@@ -11,7 +10,6 @@ from ..dao.frame import meta_field_tool_mapping
|
|
|
11
10
|
from ..dao.mon_dao import MonDao
|
|
12
11
|
from ..dao.orm_dao import OrmDao
|
|
13
12
|
from ..dao.orm_field import column_width
|
|
14
|
-
from ..models.frame import MetaFieldDomain
|
|
15
13
|
from ..models.meta import Meta, MetaView
|
|
16
14
|
|
|
17
15
|
|
|
@@ -56,18 +54,15 @@ class ValarMeta:
|
|
|
56
54
|
name, entity = meta['name'], meta['entity']
|
|
57
55
|
fields = self.view.metafield_set.all().order_by('-sort')
|
|
58
56
|
_fields = {}
|
|
59
|
-
_minio = settings.MINIO_ROOT if hasattr(settings, 'MINIO_ROOT') else '/minio'
|
|
60
57
|
for field in fields:
|
|
61
|
-
_field = field.json(entity=entity, code=self.code, db='orm'
|
|
58
|
+
_field = field.json(entity=entity, code=self.code, db='orm')
|
|
62
59
|
align, tool, width, domain = _field['align'], _field['tool'], _field['column_width'], _field['domain']
|
|
63
60
|
_field['align'] = align if align else meta_field_tool_mapping.get(tool, 'left')
|
|
64
61
|
_field['column_width'] = width if width else column_width(domain, tool)
|
|
65
62
|
|
|
66
63
|
_fields[field.prop] = _field
|
|
67
64
|
|
|
68
|
-
_minio = settings.MINIO_ROOT if hasattr(settings, 'MINIO_ROOT') else '/minio'
|
|
69
65
|
_view.update({
|
|
70
|
-
'$minio': _minio,
|
|
71
66
|
'$db': 'orm',
|
|
72
67
|
'$entity': entity,
|
|
73
68
|
'$code': self.code,
|
|
@@ -87,17 +82,6 @@ class ValarMeta:
|
|
|
87
82
|
view_item.update({
|
|
88
83
|
"name": self.code.upper(),
|
|
89
84
|
"saved": True,
|
|
90
|
-
"property": {
|
|
91
|
-
"value": "id",
|
|
92
|
-
"label": "name",
|
|
93
|
-
"display": "id",
|
|
94
|
-
"sort": "sort",
|
|
95
|
-
"disabled": "disabled",
|
|
96
|
-
"isLeaf": "isLeaf",
|
|
97
|
-
"icon": "icon",
|
|
98
|
-
"children": "children",
|
|
99
|
-
"pid": "pid",
|
|
100
|
-
}
|
|
101
85
|
})
|
|
102
86
|
values = always_merger.merge(default_values, code_values)
|
|
103
87
|
view_item.update(values)
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import datetime
|
|
2
2
|
import json
|
|
3
3
|
|
|
4
|
-
from django.conf import settings
|
|
5
4
|
from django.core.paginator import Paginator
|
|
6
5
|
from django.db.models.options import Options
|
|
7
6
|
|
|
@@ -15,7 +14,6 @@ from django.db.models.fields.files import FieldFile
|
|
|
15
14
|
from django.forms import FileField
|
|
16
15
|
|
|
17
16
|
from ..dao.orm_field import OrmField
|
|
18
|
-
from ..models.auth import Account
|
|
19
17
|
from ..models.core import VTree, VModel
|
|
20
18
|
from ..models.meta import MetaField
|
|
21
19
|
|
|
@@ -52,7 +50,6 @@ class OrmDao(AbstractDao):
|
|
|
52
50
|
return list(query_set.values(*props))
|
|
53
51
|
|
|
54
52
|
def insert_one(self, item):
|
|
55
|
-
print(item)
|
|
56
53
|
return self.__save__(item)
|
|
57
54
|
|
|
58
55
|
def update_one(self, item):
|
|
@@ -332,7 +329,6 @@ def __set_simple_values__(fields, values):
|
|
|
332
329
|
elif domain == 'JSONField':
|
|
333
330
|
json_props.append(prop)
|
|
334
331
|
for row in values:
|
|
335
|
-
row['$minio'] = settings.MINIO_ROOT
|
|
336
332
|
for prop, formating in date_props_mapping.items():
|
|
337
333
|
if row.get(prop):
|
|
338
334
|
row[prop] = row[prop].strftime(formating)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Generated by Django 4.2.24 on 2025-
|
|
1
|
+
# Generated by Django 4.2.24 on 2025-10-19 15:26
|
|
2
2
|
|
|
3
3
|
from django.db import migrations, models
|
|
4
4
|
import django.db.models.deletion
|
|
@@ -30,6 +30,25 @@ class Migration(migrations.Migration):
|
|
|
30
30
|
'verbose_name': '指标集',
|
|
31
31
|
},
|
|
32
32
|
),
|
|
33
|
+
migrations.CreateModel(
|
|
34
|
+
name='Location',
|
|
35
|
+
fields=[
|
|
36
|
+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
37
|
+
('sort', models.BigIntegerField(null=True, verbose_name='序号')),
|
|
38
|
+
('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
|
|
39
|
+
('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
|
|
40
|
+
('disabled', models.BooleanField(default=False, verbose_name='禁用')),
|
|
41
|
+
('saved', models.BooleanField(default=False, verbose_name='已保存')),
|
|
42
|
+
('scope', models.CharField(max_length=100, null=True)),
|
|
43
|
+
('code', models.CharField(max_length=100, null=True)),
|
|
44
|
+
('name', models.CharField(max_length=100, null=True)),
|
|
45
|
+
('name_cn', models.CharField(max_length=100, null=True)),
|
|
46
|
+
('name_en', models.CharField(max_length=100, null=True)),
|
|
47
|
+
],
|
|
48
|
+
options={
|
|
49
|
+
'verbose_name': '指标集',
|
|
50
|
+
},
|
|
51
|
+
),
|
|
33
52
|
migrations.CreateModel(
|
|
34
53
|
name='Meta',
|
|
35
54
|
fields=[
|
|
@@ -184,7 +203,6 @@ class Migration(migrations.Migration):
|
|
|
184
203
|
('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
|
|
185
204
|
('disabled', models.BooleanField(default=False, verbose_name='禁用')),
|
|
186
205
|
('saved', models.BooleanField(default=False, verbose_name='已保存')),
|
|
187
|
-
('property', models.JSONField(default=dict, verbose_name='属性')),
|
|
188
206
|
('code', models.CharField(default='default ', max_length=50, verbose_name='类视图')),
|
|
189
207
|
('name', models.CharField(max_length=50, null=True, verbose_name='视图名称')),
|
|
190
208
|
('lock', models.BooleanField(default=False, verbose_name='锁定元数据')),
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import json
|
|
2
2
|
|
|
3
3
|
from django.apps import AppConfig
|
|
4
|
-
from django.conf import settings
|
|
5
4
|
from django.db import models
|
|
6
5
|
from django.db.models import ManyToOneRel, OneToOneRel, ManyToManyRel, ManyToManyField, UUIDField, FileField, \
|
|
7
6
|
ForeignKey, OneToOneField, DateField, TimeField, DateTimeField, BigAutoField, JSONField
|
|
@@ -76,7 +75,6 @@ class VModel(models.Model):
|
|
|
76
75
|
_set = getattr(self, accessor).all().order_by('-sort')
|
|
77
76
|
data[prop] = [item.id for item in _set]
|
|
78
77
|
data[f'{prop}_set'] = [item.json() for item in _set]
|
|
79
|
-
data['$minio'] = settings.MINIO_ROOT
|
|
80
78
|
return data
|
|
81
79
|
|
|
82
80
|
|
|
@@ -15,7 +15,6 @@ class Meta(VModel):
|
|
|
15
15
|
|
|
16
16
|
class MetaView(VModel):
|
|
17
17
|
meta = models.ForeignKey('Meta', on_delete=models.CASCADE, verbose_name='元数据')
|
|
18
|
-
property = models.JSONField(default=dict, verbose_name='属性')
|
|
19
18
|
|
|
20
19
|
code = models.CharField(max_length=50, verbose_name='类视图', default='default ')
|
|
21
20
|
name = models.CharField(max_length=50, verbose_name='视图名称', null=True)
|
|
@@ -5,6 +5,9 @@ from django.urls import path, re_path
|
|
|
5
5
|
urlpatterns = [
|
|
6
6
|
path('socket/<str:handler>', handel_channel),
|
|
7
7
|
path('batch', rest.batch),
|
|
8
|
+
|
|
9
|
+
path('<str:db>/<str:entity>/save_many', rest.save_many),
|
|
10
|
+
path('<str:db>/<str:entity>/delete_many', rest.delete_many),
|
|
8
11
|
path('<str:db>/<str:entity>/save_one', rest.save_one),
|
|
9
12
|
path('<str:db>/<str:entity>/insert_one', rest.insert_one),
|
|
10
13
|
path('<str:db>/<str:entity>/delete_one', rest.delete_one),
|
|
@@ -20,7 +23,7 @@ urlpatterns = [
|
|
|
20
23
|
path('load_customs', meta.load_customs),
|
|
21
24
|
path('get_fields', meta.get_fields),
|
|
22
25
|
path('save_custom', meta.save_custom),
|
|
23
|
-
path('
|
|
26
|
+
path('upload_frame', meta.upload_frame),
|
|
24
27
|
|
|
25
28
|
path('<str:db>/<str:entity>/save_file', file.save_file),
|
|
26
29
|
path('<str:db>/<str:entity>/remove_file', file.remove_file),
|
|
@@ -14,24 +14,23 @@ from ..models.auth import Account, AbstractUser, Menu
|
|
|
14
14
|
|
|
15
15
|
def sign_in(request):
|
|
16
16
|
body = json.loads(request.body)
|
|
17
|
-
|
|
18
|
-
email = body.get(
|
|
19
|
-
password = body.get("password")
|
|
20
|
-
signin = body.get("signin")
|
|
17
|
+
keys = ['username', 'email', 'password', 'signin']
|
|
18
|
+
username, email, password, signin = [body.get(k) for k in keys]
|
|
21
19
|
dao = Dao('valar.Account')
|
|
22
20
|
account = dao.search({"username": username}).first()
|
|
21
|
+
|
|
23
22
|
if account is not None:
|
|
24
23
|
if signin:
|
|
25
24
|
if not account.is_auth(password):
|
|
26
|
-
return ValarResponse(False, '密码错误', 'warning'
|
|
25
|
+
return ValarResponse(False, '密码错误', 'warning')
|
|
27
26
|
else:
|
|
28
|
-
return ValarResponse(False, f"{username}已被占用", 'warning'
|
|
27
|
+
return ValarResponse(False, f"{username}已被占用", 'warning')
|
|
29
28
|
else:
|
|
30
29
|
if signin:
|
|
31
|
-
return ValarResponse(False, f"{username}不存在", 'warning'
|
|
30
|
+
return ValarResponse(False, f"{username}不存在", 'warning')
|
|
32
31
|
else:
|
|
33
32
|
if username == 'admin' and password != settings.SECRET_KEY:
|
|
34
|
-
return ValarResponse(False, "请输入正确的admin密码", 'warning'
|
|
33
|
+
return ValarResponse(False, "请输入正确的admin密码", 'warning')
|
|
35
34
|
else:
|
|
36
35
|
account = dao.save_one({
|
|
37
36
|
"username": username,
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import traceback
|
|
2
|
+
|
|
3
|
+
from ..channels.counter import Counter
|
|
4
|
+
from ..channels.sender import ValarChannelSender
|
|
5
|
+
from ..dao import Dao
|
|
6
|
+
from ..dao.engine import ValarEngine
|
|
7
|
+
|
|
8
|
+
import time
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def valar_test_handler(sender: ValarChannelSender):
|
|
12
|
+
data = sender.data
|
|
13
|
+
length = data.get('length', 100)
|
|
14
|
+
counter = Counter(length)
|
|
15
|
+
for i in range(length):
|
|
16
|
+
time.sleep(0.1)
|
|
17
|
+
tick = counter.tick()
|
|
18
|
+
tick.update({'name': 'test1'})
|
|
19
|
+
sender.load(tick)
|
|
20
|
+
return "aba"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def batch_handler(sender: ValarChannelSender):
|
|
24
|
+
data = sender.data
|
|
25
|
+
entity, db, method = data.get("entity"), data.get("db"), data.get("method")
|
|
26
|
+
dao = Dao(entity, db)
|
|
27
|
+
if method == 'save_many':
|
|
28
|
+
array = data.get("data", [])
|
|
29
|
+
counter = Counter(array)
|
|
30
|
+
keys = []
|
|
31
|
+
for item in array:
|
|
32
|
+
item.update({'saved': True})
|
|
33
|
+
bean = dao.save_one(item)
|
|
34
|
+
keys.append(bean.id)
|
|
35
|
+
payload = counter.tick()
|
|
36
|
+
sender.load(payload)
|
|
37
|
+
return keys
|
|
38
|
+
elif method == 'delete_many':
|
|
39
|
+
conditions = data.get("data", [])
|
|
40
|
+
paths = dao.delete(conditions)
|
|
41
|
+
counter = Counter(len(paths))
|
|
42
|
+
minio = ValarEngine().get_minio_bucket(entity)
|
|
43
|
+
for path in paths:
|
|
44
|
+
minio.remove(path)
|
|
45
|
+
payload = counter.tick()
|
|
46
|
+
sender.load(payload)
|
|
47
|
+
return []
|
|
@@ -10,7 +10,7 @@ from ..dao.meta import ValarMeta
|
|
|
10
10
|
from ..models.meta import MetaView, Meta, MetaField
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
def
|
|
13
|
+
def upload_frame(request):
|
|
14
14
|
body = json.loads(request.body)
|
|
15
15
|
db = body.get('db')
|
|
16
16
|
entity = body.get('entity')
|
|
@@ -19,9 +19,17 @@ def upload_mapping(request):
|
|
|
19
19
|
view__meta__db=db,
|
|
20
20
|
view__meta__entity=entity,
|
|
21
21
|
view__code=code,
|
|
22
|
-
domain__in=[
|
|
22
|
+
domain__in=[
|
|
23
|
+
'ManyToManyField',
|
|
24
|
+
'ManyToManyRel',
|
|
25
|
+
'ManyToOneRel',
|
|
26
|
+
'OneToOneField',
|
|
27
|
+
'OneToOneRel',
|
|
28
|
+
'ForeignKey',
|
|
29
|
+
'CharField'
|
|
30
|
+
]
|
|
23
31
|
).filter(Q(allow_upload=True) | Q(allow_update=True))
|
|
24
|
-
|
|
32
|
+
frame = {}
|
|
25
33
|
for field in fields:
|
|
26
34
|
prop = field.prop
|
|
27
35
|
refer = field.refer
|
|
@@ -29,14 +37,18 @@ def upload_mapping(request):
|
|
|
29
37
|
entity = refer['entity']
|
|
30
38
|
value = refer['value']
|
|
31
39
|
label = refer['label']
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
try:
|
|
41
|
+
includes = {prop: refer['includes'][prop] for prop in refer['includes'] if not prop.startswith('$')}
|
|
42
|
+
excludes = {prop: refer['excludes'][prop] for prop in refer['excludes'] if not prop.startswith('$')}
|
|
43
|
+
values = Dao(entity, db).manager.filter(**includes).exclude(**excludes).values(*[value, label])
|
|
44
|
+
frame[prop] = [
|
|
45
|
+
{"value": row[value], "label": row[label]}
|
|
46
|
+
for row in values if row[value]
|
|
47
|
+
]
|
|
48
|
+
except Exception:
|
|
49
|
+
pass
|
|
50
|
+
|
|
51
|
+
return ValarResponse(frame)
|
|
40
52
|
|
|
41
53
|
|
|
42
54
|
def meta_view(request, db, entity):
|
|
@@ -121,7 +133,7 @@ def add_fields(request):
|
|
|
121
133
|
|
|
122
134
|
|
|
123
135
|
def metas(request):
|
|
124
|
-
values = Meta.objects.all().values('db', 'entity', 'name', 'tree'
|
|
136
|
+
values = Meta.objects.all().values('db', 'entity', 'name', 'tree')
|
|
125
137
|
mapping = {'orm': {'valar': []}, 'mon': []}
|
|
126
138
|
for row in values:
|
|
127
139
|
db = row['db']
|
|
@@ -57,4 +57,4 @@ def __send__(account):
|
|
|
57
57
|
return ValarResponse(False, '该账户未登记邮箱信息', code='error')
|
|
58
58
|
content = f'Your temporary password is {token}, please change it as soon as possible.'
|
|
59
59
|
ValarEngine().send_email('Retrieve Password', content, email)
|
|
60
|
-
return ValarResponse(
|
|
60
|
+
return ValarResponse(f'临时密码已发送至{email}')
|
|
@@ -8,6 +8,7 @@ from ..channels.executer import execute_channel
|
|
|
8
8
|
from ..channels.sender import ValarChannelSender
|
|
9
9
|
from ..classes.valar_response import ValarResponse
|
|
10
10
|
from ..dao import Dao
|
|
11
|
+
from ..dao.engine import ValarEngine
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
async def batch(request):
|
|
@@ -16,10 +17,30 @@ async def batch(request):
|
|
|
16
17
|
return ValarResponse(True)
|
|
17
18
|
|
|
18
19
|
|
|
20
|
+
def save_many(request, db, entity):
|
|
21
|
+
array = json.loads(request.body)
|
|
22
|
+
dao = Dao(entity, db)
|
|
23
|
+
keys = []
|
|
24
|
+
for item in array:
|
|
25
|
+
item.update({'saved': True})
|
|
26
|
+
bean = dao.save_one(item)
|
|
27
|
+
keys.append(bean.id)
|
|
28
|
+
return ValarResponse(keys)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def delete_many(request, db, entity):
|
|
32
|
+
conditions = json.loads(request.body)
|
|
33
|
+
dao = Dao(entity, db)
|
|
34
|
+
paths = dao.delete(conditions)
|
|
35
|
+
minio = ValarEngine().get_minio_bucket(entity)
|
|
36
|
+
for path in paths:
|
|
37
|
+
minio.remove(path)
|
|
38
|
+
return ValarResponse(True)
|
|
39
|
+
|
|
40
|
+
|
|
19
41
|
def insert_one(request, db, entity):
|
|
20
42
|
item = json.loads(request.body)
|
|
21
43
|
dao = Dao(entity, db)
|
|
22
|
-
print(item)
|
|
23
44
|
bean = dao.insert_one(item)
|
|
24
45
|
item = dao.serialize(bean)
|
|
25
46
|
return ValarResponse(item)
|
|
@@ -56,7 +77,6 @@ def find_one(request, db, entity):
|
|
|
56
77
|
dao = Dao(entity, db)
|
|
57
78
|
bean = dao.find_one(_id)
|
|
58
79
|
item = dao.serialize(bean)
|
|
59
|
-
item['$minio'] = settings.MINIO_ROOT
|
|
60
80
|
return ValarResponse(item)
|
|
61
81
|
|
|
62
82
|
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import traceback
|
|
2
|
-
|
|
3
|
-
from ..channels.counter import Counter
|
|
4
|
-
from ..channels.sender import ValarChannelSender
|
|
5
|
-
from ..dao import Dao
|
|
6
|
-
from ..dao.engine import ValarEngine
|
|
7
|
-
|
|
8
|
-
import time
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def valar_test_handler(sender: ValarChannelSender):
|
|
12
|
-
data = sender.data
|
|
13
|
-
length = data.get('length', 100)
|
|
14
|
-
counter = Counter(length)
|
|
15
|
-
for i in range(length):
|
|
16
|
-
time.sleep(0.1)
|
|
17
|
-
tick = counter.tick()
|
|
18
|
-
tick.update({'name': 'test1'})
|
|
19
|
-
sender.load(tick)
|
|
20
|
-
return "aba"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
def batch_handler(sender: ValarChannelSender):
|
|
24
|
-
data = sender.data
|
|
25
|
-
entity, db, method = data.get("entity"), data.get("db"), data.get("method")
|
|
26
|
-
dao = Dao(entity, db)
|
|
27
|
-
body = {"method": method}
|
|
28
|
-
|
|
29
|
-
try:
|
|
30
|
-
if method == 'save_many':
|
|
31
|
-
array = data.get("array", [])
|
|
32
|
-
counter = Counter(array)
|
|
33
|
-
keys = []
|
|
34
|
-
for item in array:
|
|
35
|
-
item.update({'saved': True})
|
|
36
|
-
bean = dao.save_one(item)
|
|
37
|
-
keys.append(bean.id)
|
|
38
|
-
payload = counter.tick()
|
|
39
|
-
sender.load(payload)
|
|
40
|
-
body.update({'keys': keys})
|
|
41
|
-
sender.done(body)
|
|
42
|
-
elif method == 'delete_many':
|
|
43
|
-
conditions = data.get("conditions", [])
|
|
44
|
-
paths = dao.delete(conditions)
|
|
45
|
-
counter = Counter(len(paths))
|
|
46
|
-
minio = ValarEngine().get_minio_bucket(entity)
|
|
47
|
-
for path in paths:
|
|
48
|
-
minio.remove(path)
|
|
49
|
-
payload = counter.tick()
|
|
50
|
-
sender.load(payload)
|
|
51
|
-
sender.done(body)
|
|
52
|
-
except Exception as e:
|
|
53
|
-
traceback.print_exc()
|
|
54
|
-
sender.error(str(e))
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|