valar 1.3.4__tar.gz → 1.3.5__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.4/src/valar.egg-info → valar-1.3.5}/PKG-INFO +1 -1
- {valar-1.3.4 → valar-1.3.5}/setup.py +5 -2
- {valar-1.3.4 → valar-1.3.5}/src/valar/channels/sender.py +4 -1
- {valar-1.3.4 → valar-1.3.5}/src/valar/dao/defaults/field_keys_default.py +1 -1
- {valar-1.3.4 → valar-1.3.5}/src/valar/dao/meta.py +2 -1
- {valar-1.3.4 → valar-1.3.5}/src/valar/dao/orm_dao.py +1 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/models/auth.py +1 -1
- {valar-1.3.4 → valar-1.3.5}/src/valar/views/auth.py +1 -1
- valar-1.3.5/src/valar/views/handler.py +53 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/views/rest.py +3 -0
- {valar-1.3.4 → valar-1.3.5/src/valar.egg-info}/PKG-INFO +1 -1
- valar-1.3.4/src/valar/views/handler.py +0 -46
- {valar-1.3.4 → valar-1.3.5}/LICENSE +0 -0
- {valar-1.3.4 → valar-1.3.5}/README.md +0 -0
- {valar-1.3.4 → valar-1.3.5}/setup.cfg +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/__init__.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/apps.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/auth/Authentication.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/auth/Middleware.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/auth/__init__.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/channels/__init__.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/channels/consumer.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/channels/counter.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/channels/executer.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/channels/mapping.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/channels/views.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/classes/__init__.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/classes/app_mixins/__init__.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/classes/app_mixins/auto_migration_mixin.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/classes/app_mixins/auto_urlpatterns_mixin.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/classes/singleton_meta.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/classes/valar_minio.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/classes/valar_response.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/dao/__init__.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/dao/abstract.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/dao/defaults/__init__.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/dao/defaults/field_values_default.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/dao/defaults/view_defaults.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/dao/engine.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/dao/frame.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/dao/mon_dao.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/dao/mon_field.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/dao/orm_field.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/dao/query.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/migrations/__init__.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/models/__init__.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/models/core.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/models/frame.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/models/meta.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/models/test.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/urls.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/views/__init__.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/views/file.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/views/meta.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar/views/password.py +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar.egg-info/SOURCES.txt +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar.egg-info/dependency_links.txt +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar.egg-info/requires.txt +0 -0
- {valar-1.3.4 → valar-1.3.5}/src/valar.egg-info/top_level.txt +0 -0
|
@@ -3,6 +3,8 @@ from setuptools import setup, find_packages
|
|
|
3
3
|
with open("README.md", "r", encoding="utf-8") as f:
|
|
4
4
|
long_description = f.read()
|
|
5
5
|
|
|
6
|
+
version = "1.3.5"
|
|
7
|
+
|
|
6
8
|
requires = [
|
|
7
9
|
'channels==3.0.3',
|
|
8
10
|
'pymongo~=4.11.2',
|
|
@@ -12,11 +14,12 @@ requires = [
|
|
|
12
14
|
'openpyxl==3.1.5',
|
|
13
15
|
'deepmerge~=2.0',
|
|
14
16
|
'minio==7.2.2',
|
|
15
|
-
'PyJWT~=2.10.1'
|
|
17
|
+
'PyJWT~=2.10.1',
|
|
16
18
|
]
|
|
19
|
+
|
|
17
20
|
setup(
|
|
18
21
|
name="valar", # 包名
|
|
19
|
-
version=
|
|
22
|
+
version=version, # 版本号
|
|
20
23
|
author="LYP", # 作者
|
|
21
24
|
author_email="liuyinpeng@buaa.edu.cn", # 邮箱
|
|
22
25
|
description="valar for morghulis", # 简短描述
|
|
@@ -39,7 +39,7 @@ class Sender:
|
|
|
39
39
|
|
|
40
40
|
def __init__(self, request: HttpRequest):
|
|
41
41
|
self.client = request.headers.get('CLIENT')
|
|
42
|
-
self.uid = request.session.get('UID')
|
|
42
|
+
# self.uid = request.session.get('UID')
|
|
43
43
|
self.group_send = async_to_sync(get_channel_layer().group_send)
|
|
44
44
|
|
|
45
45
|
|
|
@@ -88,6 +88,9 @@ class ValarChannelSender(Sender):
|
|
|
88
88
|
def done(self, payload):
|
|
89
89
|
self.__emit__('done', payload)
|
|
90
90
|
|
|
91
|
+
def error(self, payload):
|
|
92
|
+
self.__emit__('error', payload)
|
|
93
|
+
|
|
91
94
|
def __emit__(self, status='proceed', data=None):
|
|
92
95
|
scope = 'broadcast' if self.__channel__.broadcast else 'client'
|
|
93
96
|
body = {
|
|
@@ -46,7 +46,7 @@ meta_field_key_defaults = {
|
|
|
46
46
|
'ref': ('pick', ['id', 'name', 'm2o', 'm2m', 'o2o_id']),
|
|
47
47
|
},
|
|
48
48
|
'valar.Account': {
|
|
49
|
-
'auth': ('pick', ['user_id', 'username', 'email', 'is_active', 'is_admin', 'roles']),
|
|
49
|
+
'auth': ('pick', ['user_id', 'username', 'email', 'password', 'is_active', 'is_admin', 'roles']),
|
|
50
50
|
},
|
|
51
51
|
'valar.Role': {
|
|
52
52
|
'auth': ('pick', ['name', 'duty', 'menu', 'account']),
|
|
@@ -45,7 +45,8 @@ class ValarMeta:
|
|
|
45
45
|
if view.metafield_set.count() == 0:
|
|
46
46
|
_fields = self.__initial_fields__()
|
|
47
47
|
for _field in _fields:
|
|
48
|
-
if _field['prop'] not in ['sort', 'create_time', 'modify_time', 'saved']
|
|
48
|
+
if (_field['prop'] not in ['id', 'sort', 'create_time', 'modify_time', 'saved', 'disabled']
|
|
49
|
+
and _field['domain'] not in ['ManyToManyRel', 'OneToOneRel', 'ManyToOneRel']):
|
|
49
50
|
_field.update({'view_id': view.id, "saved": True})
|
|
50
51
|
field_dao.save_one(_field)
|
|
51
52
|
|
|
@@ -77,6 +77,7 @@ class OrmDao(AbstractDao):
|
|
|
77
77
|
return self.manager.filter(id=oid).first() if oid is not None else None
|
|
78
78
|
|
|
79
79
|
def find(self, conditions=None, orders=None, size=0, page=1):
|
|
80
|
+
|
|
80
81
|
includes, excludes, orders = Query(conditions, orders).orm()
|
|
81
82
|
query_set = self.manager.filter(includes).exclude(excludes).order_by(*orders)
|
|
82
83
|
total = query_set.count()
|
|
@@ -13,7 +13,7 @@ class Role(VModel):
|
|
|
13
13
|
class Account(VModel):
|
|
14
14
|
"""账户核心信息"""
|
|
15
15
|
username = models.CharField(max_length=255, null=True, unique=True, verbose_name='账号')
|
|
16
|
-
password = models.CharField(max_length=255, verbose_name='密码')
|
|
16
|
+
password = models.CharField(max_length=255, null=True, verbose_name='密码')
|
|
17
17
|
email = models.CharField(max_length=255, null=True, unique=True, verbose_name='邮箱')
|
|
18
18
|
"""权限"""
|
|
19
19
|
is_admin = models.BooleanField(default=False, verbose_name='超级管理员')
|
|
@@ -41,7 +41,7 @@ def sign_in(request):
|
|
|
41
41
|
})
|
|
42
42
|
return ValarResponse(jwt.encode({
|
|
43
43
|
"user_id": account.id,
|
|
44
|
-
"exp": datetime.datetime.utcnow() + datetime.timedelta(
|
|
44
|
+
"exp": datetime.datetime.utcnow() + datetime.timedelta(hours=2)
|
|
45
45
|
}, settings.SECRET_KEY, algorithm="HS256"))
|
|
46
46
|
|
|
47
47
|
|
|
@@ -0,0 +1,53 @@
|
|
|
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
|
+
|
|
21
|
+
|
|
22
|
+
def batch_handler(sender: ValarChannelSender):
|
|
23
|
+
data = sender.data
|
|
24
|
+
entity, db, method = data.get("entity"), data.get("db"), data.get("method")
|
|
25
|
+
dao = Dao(entity, db)
|
|
26
|
+
body = {"method": method}
|
|
27
|
+
|
|
28
|
+
try:
|
|
29
|
+
if method == 'save_many':
|
|
30
|
+
array = data.get("array", [])
|
|
31
|
+
counter = Counter(array)
|
|
32
|
+
keys = []
|
|
33
|
+
for item in array:
|
|
34
|
+
item.update({'saved': True})
|
|
35
|
+
bean = dao.save_one(item)
|
|
36
|
+
keys.append(bean.id)
|
|
37
|
+
payload = counter.tick()
|
|
38
|
+
sender.load(payload)
|
|
39
|
+
body.update({'keys': keys})
|
|
40
|
+
sender.done(body)
|
|
41
|
+
elif method == 'delete_many':
|
|
42
|
+
conditions = data.get("conditions", [])
|
|
43
|
+
paths = dao.delete(conditions)
|
|
44
|
+
counter = Counter(len(paths))
|
|
45
|
+
minio = ValarEngine().get_minio_bucket(entity)
|
|
46
|
+
for path in paths:
|
|
47
|
+
minio.remove(path)
|
|
48
|
+
payload = counter.tick()
|
|
49
|
+
sender.load(payload)
|
|
50
|
+
sender.done(body)
|
|
51
|
+
except Exception as e:
|
|
52
|
+
traceback.print_exc()
|
|
53
|
+
sender.error(str(e))
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
from ..channels.counter import Counter
|
|
2
|
-
from ..channels.sender import ValarChannelSender
|
|
3
|
-
from ..dao import Dao
|
|
4
|
-
from ..dao.engine import ValarEngine
|
|
5
|
-
|
|
6
|
-
import time
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
def valar_test_handler(sender: ValarChannelSender):
|
|
10
|
-
data = sender.data
|
|
11
|
-
length = data.get('length', 100)
|
|
12
|
-
counter = Counter(length)
|
|
13
|
-
for i in range(length):
|
|
14
|
-
time.sleep(0.1)
|
|
15
|
-
tick = counter.tick()
|
|
16
|
-
tick.update({'name': 'test1'})
|
|
17
|
-
sender.load(tick)
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
def batch_handler(sender: ValarChannelSender):
|
|
21
|
-
data = sender.data
|
|
22
|
-
entity, db, method = data.get("entity"), data.get("db"), data.get("method")
|
|
23
|
-
dao = Dao(entity, db)
|
|
24
|
-
body = {"method": method}
|
|
25
|
-
if method == 'save_many':
|
|
26
|
-
array = data.get("array", [])
|
|
27
|
-
counter = Counter(array)
|
|
28
|
-
keys = []
|
|
29
|
-
for item in array:
|
|
30
|
-
item.update({'saved': True})
|
|
31
|
-
bean = dao.save_one(item)
|
|
32
|
-
keys.append(bean.id)
|
|
33
|
-
payload = counter.tick()
|
|
34
|
-
sender.load(payload)
|
|
35
|
-
body.update({'keys': keys})
|
|
36
|
-
sender.done(body)
|
|
37
|
-
elif method == 'delete_many':
|
|
38
|
-
conditions = data.get("conditions", [])
|
|
39
|
-
paths = dao.delete(conditions)
|
|
40
|
-
counter = Counter(len(paths))
|
|
41
|
-
minio = ValarEngine().get_minio_bucket(entity)
|
|
42
|
-
for path in paths:
|
|
43
|
-
minio.remove(path)
|
|
44
|
-
payload = counter.tick()
|
|
45
|
-
sender.load(payload)
|
|
46
|
-
sender.done(body)
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|