valar 1.3.3__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.
Files changed (60) hide show
  1. {valar-1.3.3/src/valar.egg-info → valar-1.3.5}/PKG-INFO +1 -1
  2. {valar-1.3.3 → valar-1.3.5}/setup.py +5 -2
  3. {valar-1.3.3 → valar-1.3.5}/src/valar/channels/sender.py +4 -1
  4. {valar-1.3.3 → valar-1.3.5}/src/valar/dao/defaults/field_keys_default.py +2 -2
  5. {valar-1.3.3 → valar-1.3.5}/src/valar/dao/meta.py +2 -1
  6. {valar-1.3.3 → valar-1.3.5}/src/valar/dao/orm_dao.py +1 -0
  7. {valar-1.3.3 → valar-1.3.5}/src/valar/models/auth.py +1 -1
  8. {valar-1.3.3 → valar-1.3.5}/src/valar/views/auth.py +1 -1
  9. valar-1.3.5/src/valar/views/handler.py +53 -0
  10. {valar-1.3.3 → valar-1.3.5}/src/valar/views/rest.py +3 -0
  11. {valar-1.3.3 → valar-1.3.5/src/valar.egg-info}/PKG-INFO +1 -1
  12. {valar-1.3.3 → valar-1.3.5}/src/valar.egg-info/SOURCES.txt +0 -1
  13. valar-1.3.3/src/valar/migrations/0001_initial.py +0 -285
  14. valar-1.3.3/src/valar/views/handler.py +0 -46
  15. {valar-1.3.3 → valar-1.3.5}/LICENSE +0 -0
  16. {valar-1.3.3 → valar-1.3.5}/README.md +0 -0
  17. {valar-1.3.3 → valar-1.3.5}/setup.cfg +0 -0
  18. {valar-1.3.3 → valar-1.3.5}/src/valar/__init__.py +0 -0
  19. {valar-1.3.3 → valar-1.3.5}/src/valar/apps.py +0 -0
  20. {valar-1.3.3 → valar-1.3.5}/src/valar/auth/Authentication.py +0 -0
  21. {valar-1.3.3 → valar-1.3.5}/src/valar/auth/Middleware.py +0 -0
  22. {valar-1.3.3 → valar-1.3.5}/src/valar/auth/__init__.py +0 -0
  23. {valar-1.3.3 → valar-1.3.5}/src/valar/channels/__init__.py +0 -0
  24. {valar-1.3.3 → valar-1.3.5}/src/valar/channels/consumer.py +0 -0
  25. {valar-1.3.3 → valar-1.3.5}/src/valar/channels/counter.py +0 -0
  26. {valar-1.3.3 → valar-1.3.5}/src/valar/channels/executer.py +0 -0
  27. {valar-1.3.3 → valar-1.3.5}/src/valar/channels/mapping.py +0 -0
  28. {valar-1.3.3 → valar-1.3.5}/src/valar/channels/views.py +0 -0
  29. {valar-1.3.3 → valar-1.3.5}/src/valar/classes/__init__.py +0 -0
  30. {valar-1.3.3 → valar-1.3.5}/src/valar/classes/app_mixins/__init__.py +0 -0
  31. {valar-1.3.3 → valar-1.3.5}/src/valar/classes/app_mixins/auto_migration_mixin.py +0 -0
  32. {valar-1.3.3 → valar-1.3.5}/src/valar/classes/app_mixins/auto_urlpatterns_mixin.py +0 -0
  33. {valar-1.3.3 → valar-1.3.5}/src/valar/classes/singleton_meta.py +0 -0
  34. {valar-1.3.3 → valar-1.3.5}/src/valar/classes/valar_minio.py +0 -0
  35. {valar-1.3.3 → valar-1.3.5}/src/valar/classes/valar_response.py +0 -0
  36. {valar-1.3.3 → valar-1.3.5}/src/valar/dao/__init__.py +0 -0
  37. {valar-1.3.3 → valar-1.3.5}/src/valar/dao/abstract.py +0 -0
  38. {valar-1.3.3 → valar-1.3.5}/src/valar/dao/defaults/__init__.py +0 -0
  39. {valar-1.3.3 → valar-1.3.5}/src/valar/dao/defaults/field_values_default.py +0 -0
  40. {valar-1.3.3 → valar-1.3.5}/src/valar/dao/defaults/view_defaults.py +0 -0
  41. {valar-1.3.3 → valar-1.3.5}/src/valar/dao/engine.py +0 -0
  42. {valar-1.3.3 → valar-1.3.5}/src/valar/dao/frame.py +0 -0
  43. {valar-1.3.3 → valar-1.3.5}/src/valar/dao/mon_dao.py +0 -0
  44. {valar-1.3.3 → valar-1.3.5}/src/valar/dao/mon_field.py +0 -0
  45. {valar-1.3.3 → valar-1.3.5}/src/valar/dao/orm_field.py +0 -0
  46. {valar-1.3.3 → valar-1.3.5}/src/valar/dao/query.py +0 -0
  47. {valar-1.3.3 → valar-1.3.5}/src/valar/migrations/__init__.py +0 -0
  48. {valar-1.3.3 → valar-1.3.5}/src/valar/models/__init__.py +0 -0
  49. {valar-1.3.3 → valar-1.3.5}/src/valar/models/core.py +0 -0
  50. {valar-1.3.3 → valar-1.3.5}/src/valar/models/frame.py +0 -0
  51. {valar-1.3.3 → valar-1.3.5}/src/valar/models/meta.py +0 -0
  52. {valar-1.3.3 → valar-1.3.5}/src/valar/models/test.py +0 -0
  53. {valar-1.3.3 → valar-1.3.5}/src/valar/urls.py +0 -0
  54. {valar-1.3.3 → valar-1.3.5}/src/valar/views/__init__.py +0 -0
  55. {valar-1.3.3 → valar-1.3.5}/src/valar/views/file.py +0 -0
  56. {valar-1.3.3 → valar-1.3.5}/src/valar/views/meta.py +0 -0
  57. {valar-1.3.3 → valar-1.3.5}/src/valar/views/password.py +0 -0
  58. {valar-1.3.3 → valar-1.3.5}/src/valar.egg-info/dependency_links.txt +0 -0
  59. {valar-1.3.3 → valar-1.3.5}/src/valar.egg-info/requires.txt +0 -0
  60. {valar-1.3.3 → valar-1.3.5}/src/valar.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: valar
3
- Version: 1.3.3
3
+ Version: 1.3.5
4
4
  Summary: valar for morghulis
5
5
  Home-page: https://gitee.com/GRIFFIN120/valar_dev
6
6
  Author: LYP
@@ -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="1.3.3", # 版本号
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 = {
@@ -39,14 +39,14 @@ meta_field_key_defaults = {
39
39
  ]
40
40
  ),
41
41
  },
42
- 'valar.Vala': {
42
+ 'valar.Valar': {
43
43
  'simple': ('pick', ['id', 'name', 'text_field', 'boolean_field', 'integer_field', 'float_field']),
44
44
  'date': ('pick', ['id', 'name', 'date_field', 'datetime_field', 'time_field']),
45
45
  'special': ('pick', ['id', 'name', 'text_field', 'json_field', 'file', 'm2m']),
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(minutes=30)
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))
@@ -71,6 +71,9 @@ def search(request, db, entity):
71
71
  size = body.get('size')
72
72
  page = body.get('page')
73
73
  root = body.get('root')
74
+
75
+ print(root, 'root', entity)
76
+
74
77
  code = body.get('code', 'default')
75
78
  conditions = body.get('conditions')
76
79
  dao = Dao(entity, db)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: valar
3
- Version: 1.3.3
3
+ Version: 1.3.5
4
4
  Summary: valar for morghulis
5
5
  Home-page: https://gitee.com/GRIFFIN120/valar_dev
6
6
  Author: LYP
@@ -40,7 +40,6 @@ src/valar/dao/defaults/__init__.py
40
40
  src/valar/dao/defaults/field_keys_default.py
41
41
  src/valar/dao/defaults/field_values_default.py
42
42
  src/valar/dao/defaults/view_defaults.py
43
- src/valar/migrations/0001_initial.py
44
43
  src/valar/migrations/__init__.py
45
44
  src/valar/models/__init__.py
46
45
  src/valar/models/auth.py
@@ -1,285 +0,0 @@
1
- # Generated by Django 4.2.23 on 2025-09-06 15:12
2
-
3
- from django.db import migrations, models
4
- import django.db.models.deletion
5
-
6
-
7
- class Migration(migrations.Migration):
8
-
9
- initial = True
10
-
11
- dependencies = [
12
- ]
13
-
14
- operations = [
15
- migrations.CreateModel(
16
- name='Meta',
17
- fields=[
18
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
19
- ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
20
- ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
21
- ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
22
- ('disabled', models.BooleanField(default=False, verbose_name='禁用')),
23
- ('saved', models.BooleanField(default=False, verbose_name='已保存')),
24
- ('db', models.CharField(max_length=100, null=True, verbose_name='数据库')),
25
- ('entity', models.CharField(max_length=100, null=True, verbose_name='数据源')),
26
- ('name', models.CharField(max_length=50, null=True, verbose_name='实体别名')),
27
- ('tree', models.BooleanField(default=False, verbose_name='是否树形')),
28
- ],
29
- options={
30
- 'verbose_name': '数据实体',
31
- 'unique_together': {('db', 'entity')},
32
- },
33
- ),
34
- migrations.CreateModel(
35
- name='MetaFieldTool',
36
- fields=[
37
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
38
- ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
39
- ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
40
- ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
41
- ('disabled', models.BooleanField(default=False, verbose_name='禁用')),
42
- ('saved', models.BooleanField(default=False, verbose_name='已保存')),
43
- ('pid', models.IntegerField(default=0, verbose_name='父节点')),
44
- ('isLeaf', models.BooleanField(default=False, verbose_name='叶子节点')),
45
- ('icon', models.CharField(max_length=255, null=True, verbose_name='图标')),
46
- ('name', models.CharField(max_length=255, null=True, verbose_name='名称')),
47
- ('code', models.CharField(max_length=100, null=True, unique=True, verbose_name='代码')),
48
- ('align', models.CharField(max_length=10, null=True, verbose_name='对齐方式')),
49
- ],
50
- options={
51
- 'verbose_name': '元数据字段工具',
52
- },
53
- ),
54
- migrations.CreateModel(
55
- name='Role',
56
- fields=[
57
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
58
- ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
59
- ('name', models.CharField(max_length=50, null=True)),
60
- ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
61
- ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
62
- ('disabled', models.BooleanField(default=False, verbose_name='禁用')),
63
- ('saved', models.BooleanField(default=False, verbose_name='已保存')),
64
- ('duty', models.TextField(null=True, verbose_name='职责描述')),
65
- ],
66
- options={
67
- 'verbose_name': '角色',
68
- },
69
- ),
70
- migrations.CreateModel(
71
- name='Valar',
72
- fields=[
73
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
74
- ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
75
- ('name', models.CharField(max_length=50, null=True)),
76
- ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
77
- ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
78
- ('disabled', models.BooleanField(default=False, verbose_name='禁用')),
79
- ('saved', models.BooleanField(default=False, verbose_name='已保存')),
80
- ('text_field', models.TextField(null=True, verbose_name='Text Field')),
81
- ('boolean_field', models.BooleanField(null=True, verbose_name='Boolean Field')),
82
- ('integer_field', models.IntegerField(null=True, verbose_name='Integer Field')),
83
- ('float_field', models.FloatField(null=True, verbose_name='Float Field')),
84
- ('date_field', models.DateField(null=True, verbose_name='Date Field')),
85
- ('datetime_field', models.DateTimeField(null=True, verbose_name='Datetime Field')),
86
- ('time_field', models.TimeField(null=True, verbose_name='Time Field')),
87
- ('json_field', models.JSONField(null=True, verbose_name='Json Field')),
88
- ('file', models.FileField(null=True, upload_to='', verbose_name='File Field')),
89
- ],
90
- options={
91
- 'abstract': False,
92
- },
93
- ),
94
- migrations.CreateModel(
95
- name='Voo',
96
- fields=[
97
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
98
- ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
99
- ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
100
- ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
101
- ('disabled', models.BooleanField(default=False, verbose_name='禁用')),
102
- ('saved', models.BooleanField(default=False, verbose_name='已保存')),
103
- ('name', models.CharField(max_length=100, null=True, verbose_name='Name')),
104
- ('valar', models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, to='valar.valar', verbose_name='Valar')),
105
- ],
106
- options={
107
- 'abstract': False,
108
- },
109
- ),
110
- migrations.CreateModel(
111
- name='Vmo',
112
- fields=[
113
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
114
- ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
115
- ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
116
- ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
117
- ('disabled', models.BooleanField(default=False, verbose_name='禁用')),
118
- ('saved', models.BooleanField(default=False, verbose_name='已保存')),
119
- ('name', models.CharField(max_length=100, null=True, verbose_name='Name')),
120
- ('valar', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='valar.valar', verbose_name='Valar')),
121
- ],
122
- options={
123
- 'abstract': False,
124
- },
125
- ),
126
- migrations.CreateModel(
127
- name='Vmm',
128
- fields=[
129
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
130
- ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
131
- ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
132
- ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
133
- ('disabled', models.BooleanField(default=False, verbose_name='禁用')),
134
- ('saved', models.BooleanField(default=False, verbose_name='已保存')),
135
- ('pid', models.IntegerField(default=0, verbose_name='父节点')),
136
- ('isLeaf', models.BooleanField(default=False, verbose_name='叶子节点')),
137
- ('icon', models.CharField(max_length=255, null=True, verbose_name='图标')),
138
- ('name', models.CharField(max_length=100, null=True, verbose_name='name')),
139
- ('valars', models.ManyToManyField(to='valar.valar', verbose_name='valars')),
140
- ],
141
- options={
142
- 'abstract': False,
143
- },
144
- ),
145
- migrations.CreateModel(
146
- name='MetaView',
147
- fields=[
148
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
149
- ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
150
- ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
151
- ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
152
- ('disabled', models.BooleanField(default=False, verbose_name='禁用')),
153
- ('saved', models.BooleanField(default=False, verbose_name='已保存')),
154
- ('property', models.JSONField(default=dict, verbose_name='属性')),
155
- ('code', models.CharField(default='default ', max_length=50, verbose_name='类视图')),
156
- ('name', models.CharField(max_length=50, null=True, verbose_name='视图名称')),
157
- ('lock', models.BooleanField(default=False, verbose_name='锁定元数据')),
158
- ('enable', models.BooleanField(default=True, verbose_name='是否启用')),
159
- ('form_width', models.IntegerField(null=True, verbose_name='表单宽度')),
160
- ('form_height', models.IntegerField(null=True, verbose_name='表单高度')),
161
- ('table_width', models.IntegerField(null=True, verbose_name='表格宽度')),
162
- ('table_height', models.IntegerField(null=True, verbose_name='表格高度')),
163
- ('allow_search', models.BooleanField(default=True, verbose_name='检索功能')),
164
- ('allow_order', models.BooleanField(default=True, verbose_name='排序功能')),
165
- ('allow_insert', models.BooleanField(default=True, verbose_name='新增功能')),
166
- ('allow_edit', models.BooleanField(default=True, verbose_name='编辑功能')),
167
- ('allow_edit_on_form', models.BooleanField(default=True, verbose_name='表单编辑')),
168
- ('allow_edit_on_cell', models.BooleanField(default=True, verbose_name='表内编辑')),
169
- ('allow_edit_on_sort', models.BooleanField(default=True, verbose_name='移动功能')),
170
- ('allow_remove', models.BooleanField(default=True, verbose_name='删除功能')),
171
- ('allow_download', models.BooleanField(default=True, verbose_name='下载功能')),
172
- ('allow_upload', models.BooleanField(default=True, verbose_name='上传功能')),
173
- ('meta', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='valar.meta', verbose_name='元数据')),
174
- ],
175
- options={
176
- 'verbose_name': '数据视图',
177
- 'unique_together': {('meta', 'code')},
178
- },
179
- ),
180
- migrations.CreateModel(
181
- name='MetaFieldDomain',
182
- fields=[
183
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
184
- ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
185
- ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
186
- ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
187
- ('disabled', models.BooleanField(default=False, verbose_name='禁用')),
188
- ('saved', models.BooleanField(default=False, verbose_name='已保存')),
189
- ('name', models.CharField(max_length=255, null=True, unique=True, verbose_name='名称')),
190
- ('default', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='valar.metafieldtool', verbose_name='默认工具')),
191
- ('tools', models.ManyToManyField(to='valar.metafieldtool', verbose_name='工具集')),
192
- ],
193
- options={
194
- 'verbose_name': '元数据字段类型',
195
- },
196
- ),
197
- migrations.CreateModel(
198
- name='MetaField',
199
- fields=[
200
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
201
- ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
202
- ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
203
- ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
204
- ('saved', models.BooleanField(default=False, verbose_name='已保存')),
205
- ('prop', models.CharField(max_length=100, verbose_name='字段名称')),
206
- ('label', models.CharField(max_length=100, verbose_name='字段标签')),
207
- ('name', models.CharField(max_length=100, verbose_name='字段别名')),
208
- ('domain', models.CharField(max_length=100, verbose_name='字段类型')),
209
- ('tool', models.CharField(default='default', max_length=100, verbose_name='工具组件')),
210
- ('refer', models.JSONField(default=dict, verbose_name='索引')),
211
- ('format', models.JSONField(default=dict, verbose_name='格式')),
212
- ('disabled', models.BooleanField(default=False, verbose_name='禁用')),
213
- ('not_null', models.BooleanField(default=False, verbose_name='不为空')),
214
- ('allow_edit', models.BooleanField(default=True, verbose_name='可编辑')),
215
- ('allow_order', models.BooleanField(default=True, verbose_name='可排序')),
216
- ('allow_search', models.BooleanField(default=True, verbose_name='可搜索')),
217
- ('allow_download', models.BooleanField(default=True, verbose_name='可下载')),
218
- ('allow_upload', models.BooleanField(default=True, verbose_name='可上传')),
219
- ('allow_update', models.BooleanField(default=True, verbose_name='可更新')),
220
- ('unit', models.CharField(max_length=55, null=True, verbose_name='单位符')),
221
- ('column_width', models.FloatField(default=0, verbose_name='表头宽度')),
222
- ('align', models.CharField(max_length=55, null=True, verbose_name='对齐方式')),
223
- ('fixed', models.CharField(max_length=100, null=True, verbose_name='固定位置')),
224
- ('header_color', models.CharField(max_length=55, null=True, verbose_name='表头颜色')),
225
- ('cell_color', models.CharField(max_length=55, null=True, verbose_name='单元颜色')),
226
- ('edit_on_table', models.BooleanField(default=True, verbose_name='表格编辑')),
227
- ('hide_on_table', models.BooleanField(default=False, verbose_name='表内隐藏')),
228
- ('span', models.IntegerField(default=0, verbose_name='表单占位')),
229
- ('hide_on_form', models.BooleanField(default=False, verbose_name='表单隐藏')),
230
- ('hide_on_form_edit', models.BooleanField(default=False, verbose_name='编辑隐藏')),
231
- ('hide_on_form_insert', models.BooleanField(default=False, verbose_name='新增隐藏')),
232
- ('hide_on_form_branch', models.BooleanField(default=False, verbose_name='分支隐藏')),
233
- ('hide_on_form_leaf', models.BooleanField(default=False, verbose_name='叶子隐藏')),
234
- ('view', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='valar.metaview', verbose_name='数据视图')),
235
- ],
236
- options={
237
- 'verbose_name': '视图字段',
238
- },
239
- ),
240
- migrations.CreateModel(
241
- name='Account',
242
- fields=[
243
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
244
- ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
245
- ('name', models.CharField(max_length=50, null=True)),
246
- ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
247
- ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
248
- ('disabled', models.BooleanField(default=False, verbose_name='禁用')),
249
- ('saved', models.BooleanField(default=False, verbose_name='已保存')),
250
- ('username', models.CharField(max_length=255, null=True, unique=True, verbose_name='账号')),
251
- ('password', models.CharField(max_length=255, verbose_name='密码')),
252
- ('email', models.CharField(max_length=255, null=True, unique=True, verbose_name='邮箱')),
253
- ('is_admin', models.BooleanField(default=False, verbose_name='超级管理员')),
254
- ('is_active', models.BooleanField(default=False, verbose_name='激活状态')),
255
- ('token', models.CharField(max_length=255, null=True, verbose_name='Token')),
256
- ('roles', models.ManyToManyField(to='valar.role')),
257
- ],
258
- options={
259
- 'verbose_name': '账户信息',
260
- },
261
- ),
262
- migrations.CreateModel(
263
- name='Menu',
264
- fields=[
265
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
266
- ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
267
- ('name', models.CharField(max_length=50, null=True)),
268
- ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
269
- ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
270
- ('disabled', models.BooleanField(default=False, verbose_name='禁用')),
271
- ('saved', models.BooleanField(default=False, verbose_name='已保存')),
272
- ('pid', models.IntegerField(default=0, verbose_name='父节点')),
273
- ('isLeaf', models.BooleanField(default=False, verbose_name='叶子节点')),
274
- ('icon', models.CharField(max_length=255, null=True, verbose_name='图标')),
275
- ('scope', models.CharField(max_length=100, null=True, verbose_name='域')),
276
- ('path', models.CharField(max_length=255, null=True, verbose_name='地址')),
277
- ('is_admin', models.BooleanField(default=False, null=True, verbose_name='超管权限')),
278
- ('roles', models.ManyToManyField(to='valar.role')),
279
- ],
280
- options={
281
- 'verbose_name': '菜单',
282
- 'unique_together': {('scope', 'path')},
283
- },
284
- ),
285
- ]
@@ -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