valar 1.0.29__py3-none-any.whl → 1.1.0__py3-none-any.whl
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/data/migrations → migrations}/0001_initial.py +12 -11
- models/__init__.py +1 -0
- models/frame.py +30 -0
- valar/data/models.py → models/meta.py +4 -32
- {valar-1.0.29.dist-info → valar-1.1.0.dist-info}/METADATA +1 -1
- valar-1.1.0.dist-info/RECORD +12 -0
- valar-1.1.0.dist-info/top_level.txt +3 -0
- valar/channels/__init__.py +0 -1
- valar/channels/consumer.py +0 -48
- valar/channels/executer.py +0 -13
- valar/channels/mapping.py +0 -21
- valar/channels/sender.py +0 -60
- valar/channels/views.py +0 -12
- valar/core/counter.py +0 -9
- valar/core/dao/__init__.py +0 -0
- valar/core/dao/_mon_array2tree.py +0 -18
- valar/core/dao/dao_base.py +0 -50
- valar/core/dao/dao_mon.py +0 -76
- valar/core/dao/dao_orm.py +0 -99
- valar/core/dao/engine.py +0 -12
- valar/core/dao/engine_minio.py +0 -91
- valar/core/dao/engine_mon.py +0 -34
- valar/core/dao/engine_orm.py +0 -25
- valar/core/dao/model_mon.py +0 -24
- valar/core/dao/model_orm.py +0 -198
- valar/core/dao/query_mon.py +0 -12
- valar/core/dao/query_orm.py +0 -44
- valar/core/dao/utils_orm.py +0 -87
- valar/core/dao_abstract.py +0 -63
- valar/core/meta/__init__.py +0 -0
- valar/core/meta/defaults/__init__.py +0 -0
- valar/core/meta/defaults/field_keys_default.py +0 -17
- valar/core/meta/defaults/field_values_default.py +0 -85
- valar/core/meta/defaults/frame_defaults.py +0 -136
- valar/core/meta/defaults/view_defaults.py +0 -20
- valar/core/meta/field_orm.py +0 -146
- valar/core/meta/init_meta_frame.py +0 -32
- valar/core/meta/meta_orm.py +0 -74
- valar/core/middleware.py +0 -20
- valar/core/response.py +0 -7
- valar/core/singleton_meta.py +0 -6
- valar/data/__init__.py +0 -0
- valar/data/apps.py +0 -13
- valar/data/migrations/0002_remove_metaview_allow_batch.py +0 -17
- valar/data/migrations/0003_remove_metaview_allow_pop_metaview_allow_order_and_more.py +0 -27
- valar/data/migrations/0004_rename_allow_sort_metafield_allow_order.py +0 -18
- valar/data/migrations/__init__.py +0 -0
- valar/data/urls.py +0 -23
- valar/data/views/__init__.py +0 -0
- valar/data/views/file.py +0 -12
- valar/data/views/handler.py +0 -41
- valar/data/views/rest.py +0 -89
- valar-1.0.29.dist-info/RECORD +0 -55
- valar-1.0.29.dist-info/top_level.txt +0 -1
- {valar → frame}/__init__.py +0 -0
- {valar/core → migrations}/__init__.py +0 -0
- /valar/core/valar_models.py → /models/core.py +0 -0
- {valar-1.0.29.dist-info → valar-1.1.0.dist-info}/WHEEL +0 -0
- {valar-1.0.29.dist-info → valar-1.1.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
meta_field_value_defaults = {
|
|
3
|
-
'data.MetaFieldDomain':{
|
|
4
|
-
"__init__":{
|
|
5
|
-
"default_id":{
|
|
6
|
-
"tool":"tree"
|
|
7
|
-
},
|
|
8
|
-
"search_id":{
|
|
9
|
-
"tool":"tree"
|
|
10
|
-
},
|
|
11
|
-
"tools":{
|
|
12
|
-
"tool":"tree",
|
|
13
|
-
"refer": {
|
|
14
|
-
"display":"code"
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
"align":{
|
|
18
|
-
"tool":"set",
|
|
19
|
-
"format":{
|
|
20
|
-
"set": {
|
|
21
|
-
'left':'左对齐',
|
|
22
|
-
'right':'右对齐',
|
|
23
|
-
'center':'剧中对齐',
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
'data.MetaField':{
|
|
30
|
-
"__init__":{
|
|
31
|
-
"column_width":{
|
|
32
|
-
'unit':'px'
|
|
33
|
-
},
|
|
34
|
-
"fixed":{
|
|
35
|
-
"tool":"set",
|
|
36
|
-
"format":{
|
|
37
|
-
"set": {
|
|
38
|
-
'left':'左侧固定',
|
|
39
|
-
'right':'右侧固定',
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
},
|
|
43
|
-
"align":{
|
|
44
|
-
"tool":"set",
|
|
45
|
-
"format":{
|
|
46
|
-
"set": {
|
|
47
|
-
'left':'左对齐',
|
|
48
|
-
'right':'右对齐',
|
|
49
|
-
'center':'剧中对齐',
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
"prop":{
|
|
54
|
-
'allow_edit': False,
|
|
55
|
-
'column_width': 120
|
|
56
|
-
},
|
|
57
|
-
"domain":{
|
|
58
|
-
'allow_edit': False,
|
|
59
|
-
'column_width': 120,
|
|
60
|
-
},
|
|
61
|
-
"tool":{
|
|
62
|
-
'column_width': 100,
|
|
63
|
-
'tool': 'tree',
|
|
64
|
-
'refer': {
|
|
65
|
-
'entity':'data.MetaFieldTool',
|
|
66
|
-
'includes': {'metafielddomain__name':'${domain}'},
|
|
67
|
-
'value': 'code','display':'code'
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
},
|
|
71
|
-
"span":{
|
|
72
|
-
'column_width': 100,
|
|
73
|
-
"format": { "min": 0, "max": 24, "step": 1, "precision": 0, "step_strictly": True }
|
|
74
|
-
},
|
|
75
|
-
"refer":{
|
|
76
|
-
'allow_edit': False,
|
|
77
|
-
'column_width': 80
|
|
78
|
-
},
|
|
79
|
-
"format":{
|
|
80
|
-
'allow_edit': False,
|
|
81
|
-
'column_width': 80
|
|
82
|
-
},
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
meta_field_tool = [
|
|
3
|
-
{'id': 2, 'sort': 32, 'pid': 7, 'isLeaf': True, 'name': '输入框', 'code': 'text'},
|
|
4
|
-
{'id': 3, 'sort': 17, 'pid': 0, 'isLeaf': False, 'name': 'SPEC', 'code': '特殊工具集'},
|
|
5
|
-
{'id': 5, 'sort': 22, 'pid': 0, 'isLeaf': False, 'name': 'DATE', 'code': '日期时间工具集'},
|
|
6
|
-
{'id': 6, 'sort': 21, 'pid': 8, 'isLeaf': True, 'name': '数字输入', 'code': 'number'},
|
|
7
|
-
{'id': 7, 'sort': 36, 'pid': 0, 'isLeaf': False, 'name': 'TEXT', 'code': '文本工具集'},
|
|
8
|
-
{'id': 8, 'sort': 26, 'pid': 0, 'isLeaf': False, 'name': 'NUMB', 'code': '数字工具集'},
|
|
9
|
-
{'id': 9, 'sort': 10, 'pid': 0, 'isLeaf': False, 'name': 'FILE', 'code': '文件工具集'},
|
|
10
|
-
{'id': 10, 'sort': 27, 'pid': 0, 'isLeaf': False, 'name': 'BOOL', 'code': '逻辑工具集'},
|
|
11
|
-
{'id': 11, 'sort': 31, 'pid': 0, 'isLeaf': False, 'name': 'LIST', 'code': '列表工具集'},
|
|
12
|
-
{'id': 12, 'sort': 8, 'pid': 3, 'isLeaf': True, 'name': '对象', 'code': 'object'},
|
|
13
|
-
{'id': 13, 'sort': 5, 'pid': 9, 'isLeaf': True, 'name': '图片上传', 'code': 'image'},
|
|
14
|
-
{'id': 14, 'sort': 2, 'pid': 9, 'isLeaf': True, 'name': '文件上传', 'code': 'file'},
|
|
15
|
-
{'id': 15, 'sort': 13, 'pid': 9, 'isLeaf': True, 'name': '富文本', 'code': 'rich'},
|
|
16
|
-
{'id': 17, 'sort': 11, 'pid': 10, 'isLeaf': True, 'name': '开关', 'code': 'switch'},
|
|
17
|
-
{'id': 18, 'sort': 7, 'pid': 3, 'isLeaf': True, 'name': '元数据', 'code': 'meta'},
|
|
18
|
-
{'id': 19, 'sort': 9, 'pid': 7, 'isLeaf': True, 'name': '颜色选择', 'code': 'color'},
|
|
19
|
-
{'id': 20, 'sort': 14, 'pid': 11, 'isLeaf': True, 'name': '穿梭框', 'code': 'transfer'},
|
|
20
|
-
{'id': 21, 'sort': 16, 'pid': 7, 'isLeaf': True, 'name': '自动填充', 'code': 'auto'},
|
|
21
|
-
{'id': 22, 'sort': 35, 'pid': 5, 'isLeaf': True, 'name': '日期选择', 'code': 'date'},
|
|
22
|
-
{'id': 23, 'sort': 12, 'pid': 10, 'isLeaf': True, 'name': '逻辑选择', 'code': 'boolean'},
|
|
23
|
-
{'id': 24, 'sort': 24, 'pid': 11, 'isLeaf': True, 'name': '列表选择', 'code': 'select'},
|
|
24
|
-
{'id': 25, 'sort': 15, 'pid': 11, 'isLeaf': True, 'name': '树形选择', 'code': 'tree'},
|
|
25
|
-
{'id': 26, 'sort': 23, 'pid': 11, 'isLeaf': True, 'name': '及联选择', 'code': 'cascade'},
|
|
26
|
-
{'id': 28, 'sort': 25, 'pid': 7, 'isLeaf': True, 'name': '图标', 'code': 'icon'},
|
|
27
|
-
{'id': 31, 'sort': 6, 'pid': 0, 'isLeaf': True, 'name': '无', 'code': 'none'},
|
|
28
|
-
{'id': 32, 'sort': 30, 'pid': 7, 'isLeaf': True, 'name': '文本框', 'code': 'textarea'},
|
|
29
|
-
{'id': 33, 'sort': 18, 'pid': 36, 'isLeaf': True, 'name': '时间区间', 'code': 'timerange'},
|
|
30
|
-
{'id': 35, 'sort': 33, 'pid': 5, 'isLeaf': True, 'name': '时间选择', 'code': 'time'},
|
|
31
|
-
{'id': 36, 'sort': 20, 'pid': 0, 'isLeaf': False, 'name': 'RANGE', 'code': '区间工具集'},
|
|
32
|
-
{'id': 37, 'sort': 38, 'pid': 36, 'isLeaf': True, 'name': '日期区间', 'code': 'daterange'},
|
|
33
|
-
{'id': 39, 'sort': 3, 'pid': 36, 'isLeaf': True, 'name': '多日期', 'code': 'dates'},
|
|
34
|
-
{'id': 54, 'sort': 54, 'pid': 7, 'isLeaf': True, 'name': '集合', 'code': 'set'}
|
|
35
|
-
]
|
|
36
|
-
|
|
37
|
-
meta_field_domain = [
|
|
38
|
-
{
|
|
39
|
-
'name': 'CharField',
|
|
40
|
-
'default_id': 'text', 'align': 'left',
|
|
41
|
-
'tools': [
|
|
42
|
-
'text', 'number', 'meta', 'color', 'auto', 'date', 'time','select', 'tree', 'cascade', 'icon',
|
|
43
|
-
'textarea', 'timerange', 'daterange', 'dates', 'set'
|
|
44
|
-
]
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
'name': 'TextField',
|
|
48
|
-
'default_id': 'textarea', 'align': 'left',
|
|
49
|
-
'tools': ['text', 'textarea', 'rich']
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
'name': 'BooleanField',
|
|
53
|
-
'default_id': 'switch', 'align': 'center',
|
|
54
|
-
'tools': ['switch', 'boolean']
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
'name': 'IntegerField',
|
|
58
|
-
'default_id': 'number', 'align': 'right',
|
|
59
|
-
'tools': ['number']
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
'name': 'FloatField',
|
|
63
|
-
'default_id': 'number', 'align': 'right',
|
|
64
|
-
'tools': ['number']
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
'name': 'ForeignKey',
|
|
68
|
-
'default_id': 'select', 'align': 'left',
|
|
69
|
-
'tools': ['select', 'tree', 'cascade']
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
'name': 'ManyToOneRel',
|
|
73
|
-
'default_id': 'select', 'align': 'center',
|
|
74
|
-
'tools': ['transfer', 'select', 'tree', 'cascade']
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
'name': 'ManyToManyField',
|
|
78
|
-
'default_id': 'select', 'align': 'center',
|
|
79
|
-
'tools': [ 'transfer', 'select', 'tree', 'cascade']
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
'name': 'ManyToManyRel',
|
|
83
|
-
'default_id': 'select', 'align': 'center',
|
|
84
|
-
'tools': ['transfer', 'select', 'tree', 'cascade']
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
'name': 'OneToOneRel',
|
|
88
|
-
'default_id': 'none', 'align': 'left',
|
|
89
|
-
'tools': []
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
'name': 'OneToOneField',
|
|
93
|
-
'default_id': 'none', 'align': 'left',
|
|
94
|
-
'tools': []
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
'name': 'DateField',
|
|
98
|
-
'default_id': 'date', 'align': 'center',
|
|
99
|
-
'tools': ['date']
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
'name': 'TimeField',
|
|
103
|
-
'default_id': 'time', 'align': 'center',
|
|
104
|
-
'tools': ['time']
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
'name': 'DateTimeField',
|
|
108
|
-
'default_id': 'date', 'align': 'center',
|
|
109
|
-
'tools': ['date']
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
'name': 'JSONField',
|
|
113
|
-
'default_id': 'object', 'align': 'center',
|
|
114
|
-
'tools': ['object']
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
'name': 'FileField',
|
|
118
|
-
'default_id': 'file', 'align': 'center',
|
|
119
|
-
'tools': ['image', 'file']
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
'name': 'BigAutoField',
|
|
123
|
-
'default_id': 'none', 'align': 'right',
|
|
124
|
-
'tools': []
|
|
125
|
-
},
|
|
126
|
-
{
|
|
127
|
-
'name': 'UUIDField',
|
|
128
|
-
'default_id': 'none', 'align': 'left',
|
|
129
|
-
'tools': []
|
|
130
|
-
},
|
|
131
|
-
{
|
|
132
|
-
'name': 'Custom',
|
|
133
|
-
'default_id': 'none', 'align': 'left',
|
|
134
|
-
'tools': []
|
|
135
|
-
},
|
|
136
|
-
]
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
meta_view_default_values = {
|
|
2
|
-
'data.MetaView': {
|
|
3
|
-
'__init__': {
|
|
4
|
-
'allow_insert': False,
|
|
5
|
-
'allow_edit': False
|
|
6
|
-
}
|
|
7
|
-
},
|
|
8
|
-
'data.Meta': {
|
|
9
|
-
'__init__': {
|
|
10
|
-
'allow_insert': False,
|
|
11
|
-
'allow_edit': False
|
|
12
|
-
}
|
|
13
|
-
},
|
|
14
|
-
'data.MetaField': {
|
|
15
|
-
'__init__': {
|
|
16
|
-
'allow_insert': False,
|
|
17
|
-
'allow_edit': False
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
}
|
valar/core/meta/field_orm.py
DELETED
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
from deepmerge import always_merger
|
|
2
|
-
from django.db.models import ManyToOneRel, ForeignKey, ManyToManyRel, ManyToManyField,OneToOneField,OneToOneRel
|
|
3
|
-
from django.db.models import IntegerField, BooleanField, FloatField,TextField, CharField
|
|
4
|
-
from django.db.models import FileField, JSONField
|
|
5
|
-
from django.db.models import DateTimeField, TimeField, DateField
|
|
6
|
-
|
|
7
|
-
from src.valar.core.valar_models import VTree
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class OrmField:
|
|
11
|
-
|
|
12
|
-
def __init__(self, entity, field, is_tree):
|
|
13
|
-
self.entity = entity
|
|
14
|
-
self.model_field = field
|
|
15
|
-
self.is_tree = is_tree
|
|
16
|
-
self.not_null = not field.null
|
|
17
|
-
self.clazz = type(field)
|
|
18
|
-
self.multiple = self.clazz in [ManyToOneRel, ManyToManyField, ManyToManyRel]
|
|
19
|
-
|
|
20
|
-
self.prop = self.__prop__()
|
|
21
|
-
self.domain = self.__domain__()
|
|
22
|
-
self.model = self.__model__()
|
|
23
|
-
self.label = self.__label__()
|
|
24
|
-
self.column_width = self.__column_width__()
|
|
25
|
-
self.refer = self.__refer__()
|
|
26
|
-
self.align = self.___align__()
|
|
27
|
-
self.format = self.__formating__()
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
def json(self):
|
|
34
|
-
_field = {
|
|
35
|
-
"prop": self.prop,
|
|
36
|
-
"label": self.label,
|
|
37
|
-
"name": self.label,
|
|
38
|
-
"domain": self.domain,
|
|
39
|
-
"refer": self.refer,
|
|
40
|
-
"format": self.format,
|
|
41
|
-
"not_null": self.not_null,
|
|
42
|
-
"align": self.align,
|
|
43
|
-
"column_width": self.column_width,
|
|
44
|
-
}
|
|
45
|
-
if self.is_tree:
|
|
46
|
-
if self.prop in ['pid', 'isLeaf']:
|
|
47
|
-
# _field['hide_on_table'] = True
|
|
48
|
-
_field['hide_on_form'] = True
|
|
49
|
-
_field['hide_on_form_branch'] = True
|
|
50
|
-
_field['hide_on_form_leaf'] = True
|
|
51
|
-
elif self.prop in ['icon']:
|
|
52
|
-
_field['tool'] = 'icon'
|
|
53
|
-
return _field
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
def __column_width__(self):
|
|
57
|
-
if self.clazz in [BooleanField, FileField, JSONField]:
|
|
58
|
-
return 100
|
|
59
|
-
elif self.clazz in [DateField, DateTimeField, TimeField]:
|
|
60
|
-
return 120
|
|
61
|
-
return 0
|
|
62
|
-
|
|
63
|
-
def __label__(self):
|
|
64
|
-
return self.model._meta.verbose_name \
|
|
65
|
-
if self.clazz in [ManyToOneRel, ManyToManyField, ManyToManyRel, OneToOneRel, OneToOneField] \
|
|
66
|
-
else self.model_field.verbose_name
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
def __model__(self):
|
|
70
|
-
return self.model_field.related_model \
|
|
71
|
-
if self.clazz in [ManyToOneRel, ManyToManyField, ManyToManyRel, OneToOneRel, OneToOneField, ForeignKey] \
|
|
72
|
-
else None
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
def __domain__(self):
|
|
76
|
-
return self.clazz.__name__ \
|
|
77
|
-
if self.clazz in [ManyToOneRel, ManyToManyField, ManyToManyRel ,OneToOneRel, OneToOneField] \
|
|
78
|
-
else self.model_field.get_internal_type()
|
|
79
|
-
|
|
80
|
-
def __prop__(self):
|
|
81
|
-
return self.model_field.name + "_id" \
|
|
82
|
-
if self.clazz in [ForeignKey,OneToOneRel, OneToOneField] \
|
|
83
|
-
else self.model_field.name
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
def ___align__(self):
|
|
87
|
-
if self.clazz in [FloatField, IntegerField]:
|
|
88
|
-
return 'right'
|
|
89
|
-
elif self.clazz in [BooleanField, FileField, JSONField, DateField, DateTimeField, TimeField]:
|
|
90
|
-
return 'center'
|
|
91
|
-
return 'left'
|
|
92
|
-
|
|
93
|
-
def __refer__(self):
|
|
94
|
-
refer = {
|
|
95
|
-
"entity": None,
|
|
96
|
-
"value": "id", "label": 'name', "display": "id",
|
|
97
|
-
"multiple": self.multiple, "strict": False, "remote": False,
|
|
98
|
-
"includes": {}, "excludes": {},
|
|
99
|
-
"root": 0, "isTree": False
|
|
100
|
-
}
|
|
101
|
-
if self.model:
|
|
102
|
-
module, name = self.model.__module__, self.model.__name__
|
|
103
|
-
refer['entity'] = '%s.%s' % (module.replace('.models', '').split('.')[-1], name)
|
|
104
|
-
refer['isTree'] = issubclass(self.model, VTree)
|
|
105
|
-
return refer
|
|
106
|
-
|
|
107
|
-
def __formating__(self):
|
|
108
|
-
_format = {
|
|
109
|
-
# 文本
|
|
110
|
-
"maxlength": 0,
|
|
111
|
-
"type": 'text',
|
|
112
|
-
|
|
113
|
-
# 数值
|
|
114
|
-
"min": None,
|
|
115
|
-
"max": None,
|
|
116
|
-
"step": 1,
|
|
117
|
-
"precision": None,
|
|
118
|
-
"step_strictly": False,
|
|
119
|
-
|
|
120
|
-
# 日期
|
|
121
|
-
"frequency": "date",
|
|
122
|
-
|
|
123
|
-
# 文件
|
|
124
|
-
"maximum": 5,
|
|
125
|
-
"accept": [],
|
|
126
|
-
"width": 800,
|
|
127
|
-
"height": 0,
|
|
128
|
-
"file_name_field":None,
|
|
129
|
-
"locked": False,
|
|
130
|
-
|
|
131
|
-
#集合
|
|
132
|
-
"set": {}
|
|
133
|
-
}
|
|
134
|
-
if self.clazz == CharField:
|
|
135
|
-
_format['maxlength'] = self.model_field.max_length
|
|
136
|
-
if self.clazz == TextField:
|
|
137
|
-
_format['type'] = "textarea"
|
|
138
|
-
elif self.clazz == DateTimeField:
|
|
139
|
-
_format['frequency'] = "datetime"
|
|
140
|
-
elif self.clazz == IntegerField:
|
|
141
|
-
_format['precision'] = 0
|
|
142
|
-
_format['step_strictly'] = True
|
|
143
|
-
return _format
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import copy
|
|
2
|
-
|
|
3
|
-
from .defaults.frame_defaults import meta_field_tool, meta_field_domain
|
|
4
|
-
|
|
5
|
-
from ...data.models import MetaFieldDomain, MetaFieldTool
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def init_meta_frame():
|
|
9
|
-
from ..dao.dao_orm import OrmDao
|
|
10
|
-
tool_dao = OrmDao('data.MetaFieldTool')
|
|
11
|
-
domain_dao = OrmDao('data.MetaFieldDomain')
|
|
12
|
-
mapping = {}
|
|
13
|
-
tool_dao.objects.all().delete()
|
|
14
|
-
for item in meta_field_tool:
|
|
15
|
-
item = copy.deepcopy(item)
|
|
16
|
-
_id, code = item['id'], item['code']
|
|
17
|
-
item.update({"saved": True})
|
|
18
|
-
if item['isLeaf']:
|
|
19
|
-
mapping[code] = _id
|
|
20
|
-
tool_dao.save_one(item, True)
|
|
21
|
-
domain_dao.objects.all().delete()
|
|
22
|
-
for row in meta_field_domain:
|
|
23
|
-
row = copy.deepcopy(row)
|
|
24
|
-
default_id, tools = row['default_id'], row['tools']
|
|
25
|
-
_row = copy.deepcopy(row)
|
|
26
|
-
_row.update({
|
|
27
|
-
'default_id': mapping[default_id],
|
|
28
|
-
'tools': [mapping[tool] for tool in tools],
|
|
29
|
-
"saved": True
|
|
30
|
-
})
|
|
31
|
-
domain_dao.save_one(_row)
|
|
32
|
-
return MetaFieldDomain.objects.all()
|
valar/core/meta/meta_orm.py
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
from deepmerge import always_merger
|
|
2
|
-
|
|
3
|
-
from .defaults.view_defaults import meta_view_default_values
|
|
4
|
-
from ...core.dao.dao_orm import OrmDao
|
|
5
|
-
from ...data.models import MetaView, Meta, MetaFieldDomain
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class OrmMeta:
|
|
9
|
-
|
|
10
|
-
def __init__(self, entity, code):
|
|
11
|
-
self.entity = entity
|
|
12
|
-
self.dao = OrmDao(entity)
|
|
13
|
-
self.code = code or 'default'
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
# load_meta
|
|
17
|
-
meta_dao = OrmDao('data.Meta')
|
|
18
|
-
_meta = {"entity": entity}
|
|
19
|
-
meta: Meta = meta_dao.search(_meta).first()
|
|
20
|
-
if meta is None:
|
|
21
|
-
_meta.update({"name": self.dao.model.name, 'saved': True})
|
|
22
|
-
meta = meta_dao.save_one(_meta)
|
|
23
|
-
self.meta = meta
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
# load_view
|
|
27
|
-
view_dao = OrmDao('data.MetaView')
|
|
28
|
-
_view = {"code": self.code, "meta_id": meta.id}
|
|
29
|
-
view: MetaView = view_dao.search(_view).first()
|
|
30
|
-
if view is None:
|
|
31
|
-
_view.update({"name": self.code.upper(), "saved": True})
|
|
32
|
-
view = view_dao.save_one(_view)
|
|
33
|
-
self.__init_view__(view)
|
|
34
|
-
self.view = view
|
|
35
|
-
|
|
36
|
-
# load_fields
|
|
37
|
-
if view.metafield_set.count() == 0:
|
|
38
|
-
field_dao = OrmDao('data.MetaField')
|
|
39
|
-
_fields = self.dao.model.initial_fields(code)
|
|
40
|
-
for _field in _fields:
|
|
41
|
-
if _field['prop'] not in [ 'sort', 'create_time','modify_time','saved']:
|
|
42
|
-
_field.update({'view_id': view.id, "saved": True})
|
|
43
|
-
field_dao.save_one(_field)
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
def get_view(self):
|
|
47
|
-
_view = self.view.json()
|
|
48
|
-
meta = self.meta.json()
|
|
49
|
-
name, entity = meta['name'], meta['entity']
|
|
50
|
-
fields = self.view.metafield_set.all().order_by('-sort')
|
|
51
|
-
_fields = {
|
|
52
|
-
field.prop: field.json(entity=entity, code=self.code, db='orm')
|
|
53
|
-
for field in fields
|
|
54
|
-
# if field.prop not in ['id', 'sort', 'create_time','modify_time','saved','pid','isLeaf']
|
|
55
|
-
}
|
|
56
|
-
_view.update({
|
|
57
|
-
'$db': 'orm',
|
|
58
|
-
'$entity': entity,
|
|
59
|
-
'$code': self.code,
|
|
60
|
-
'$meta_name': name,
|
|
61
|
-
'$is_tree': self.dao.model.is_tree,
|
|
62
|
-
'$fields': _fields
|
|
63
|
-
})
|
|
64
|
-
return _view
|
|
65
|
-
|
|
66
|
-
def __init_view__(self, view: MetaView):
|
|
67
|
-
default_view = meta_view_default_values.get(self.entity, {})
|
|
68
|
-
default_values = default_view.get('__init__',{})
|
|
69
|
-
code_values = default_view.get(self.code, {})
|
|
70
|
-
values = always_merger.merge(default_values, code_values)
|
|
71
|
-
if len(values) > 0:
|
|
72
|
-
for key, value in values.items():
|
|
73
|
-
setattr(view, key, value)
|
|
74
|
-
view.save()
|
valar/core/middleware.py
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
from django.http import HttpRequest
|
|
2
|
-
from django.utils.deprecation import MiddlewareMixin
|
|
3
|
-
from response import ValarResponse
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class Middleware(MiddlewareMixin):
|
|
7
|
-
@staticmethod
|
|
8
|
-
def process_response(request: HttpRequest, response: ValarResponse):
|
|
9
|
-
headers = response.headers
|
|
10
|
-
if type(response)==ValarResponse:
|
|
11
|
-
message, code = response.message, response.code
|
|
12
|
-
headers['valar_message'] = message
|
|
13
|
-
headers['valar_code'] = code
|
|
14
|
-
|
|
15
|
-
keys = ['client','auth','uid']
|
|
16
|
-
for key in keys:
|
|
17
|
-
value = request.headers.get(key)
|
|
18
|
-
if value:
|
|
19
|
-
headers[key] = value
|
|
20
|
-
return response
|
valar/core/response.py
DELETED
valar/core/singleton_meta.py
DELETED
valar/data/__init__.py
DELETED
|
File without changes
|
valar/data/apps.py
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
# apps.py
|
|
2
|
-
import os
|
|
3
|
-
from django.apps import AppConfig
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class ValarDataConfig(AppConfig):
|
|
9
|
-
name='src.valar.data'
|
|
10
|
-
def ready(self):
|
|
11
|
-
if os.environ.get('RUN_MAIN') == 'true':
|
|
12
|
-
from src.valar.core.meta.init_meta_frame import init_meta_frame
|
|
13
|
-
init_meta_frame()
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# Generated by Django 4.2.23 on 2025-07-06 06:52
|
|
2
|
-
|
|
3
|
-
from django.db import migrations
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class Migration(migrations.Migration):
|
|
7
|
-
|
|
8
|
-
dependencies = [
|
|
9
|
-
('data', '0001_initial'),
|
|
10
|
-
]
|
|
11
|
-
|
|
12
|
-
operations = [
|
|
13
|
-
migrations.RemoveField(
|
|
14
|
-
model_name='metaview',
|
|
15
|
-
name='allow_batch',
|
|
16
|
-
),
|
|
17
|
-
]
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# Generated by Django 4.2.23 on 2025-07-06 06:55
|
|
2
|
-
|
|
3
|
-
from django.db import migrations, models
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class Migration(migrations.Migration):
|
|
7
|
-
|
|
8
|
-
dependencies = [
|
|
9
|
-
('data', '0002_remove_metaview_allow_batch'),
|
|
10
|
-
]
|
|
11
|
-
|
|
12
|
-
operations = [
|
|
13
|
-
migrations.RemoveField(
|
|
14
|
-
model_name='metaview',
|
|
15
|
-
name='allow_pop',
|
|
16
|
-
),
|
|
17
|
-
migrations.AddField(
|
|
18
|
-
model_name='metaview',
|
|
19
|
-
name='allow_order',
|
|
20
|
-
field=models.BooleanField(default=True, verbose_name='排序功能'),
|
|
21
|
-
),
|
|
22
|
-
migrations.AlterField(
|
|
23
|
-
model_name='metaview',
|
|
24
|
-
name='allow_sort',
|
|
25
|
-
field=models.BooleanField(default=True, verbose_name='移动功能'),
|
|
26
|
-
),
|
|
27
|
-
]
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# Generated by Django 4.2.23 on 2025-07-06 06:56
|
|
2
|
-
|
|
3
|
-
from django.db import migrations
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class Migration(migrations.Migration):
|
|
7
|
-
|
|
8
|
-
dependencies = [
|
|
9
|
-
('data', '0003_remove_metaview_allow_pop_metaview_allow_order_and_more'),
|
|
10
|
-
]
|
|
11
|
-
|
|
12
|
-
operations = [
|
|
13
|
-
migrations.RenameField(
|
|
14
|
-
model_name='metafield',
|
|
15
|
-
old_name='allow_sort',
|
|
16
|
-
new_name='allow_order',
|
|
17
|
-
),
|
|
18
|
-
]
|
|
File without changes
|
valar/data/urls.py
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
from django.urls import path
|
|
2
|
-
|
|
3
|
-
from .views.file import save_file
|
|
4
|
-
from ..channels.views import handel_channel
|
|
5
|
-
from .views.rest import save_many,delete_many,save_one,delete_one,find_one,find,update,table, tree, meta_view
|
|
6
|
-
|
|
7
|
-
urlpatterns = [
|
|
8
|
-
path('socket/<str:handler>', handel_channel),
|
|
9
|
-
path('save_many', save_many),
|
|
10
|
-
path('delete_many', delete_many),
|
|
11
|
-
path('<str:db>/<str:entity>/save_one', save_one),
|
|
12
|
-
path('<str:db>/<str:entity>/delete_one', delete_one),
|
|
13
|
-
path('<str:db>/<str:entity>/find_one', find_one),
|
|
14
|
-
path('<str:db>/<str:entity>/find', find),
|
|
15
|
-
path('<str:db>/<str:entity>/update', update),
|
|
16
|
-
path('<str:db>/<str:entity>/table', table),
|
|
17
|
-
path('<str:db>/<str:entity>/tree', tree),
|
|
18
|
-
path('<str:db>/<str:entity>/meta_view', meta_view),
|
|
19
|
-
|
|
20
|
-
path('<str:db>/<str:entity>/save_file', save_file),
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
]
|
valar/data/views/__init__.py
DELETED
|
File without changes
|
valar/data/views/file.py
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
from django.core.files.uploadedfile import InMemoryUploadedFile
|
|
2
|
-
from django.http import QueryDict
|
|
3
|
-
|
|
4
|
-
from src.valar.core.response import ValarResponse
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
def save_file(request, db, entity):
|
|
8
|
-
params: QueryDict = request.POST.dict()
|
|
9
|
-
_id, prop, field = (params.get(key) for key in ['id', 'prop', 'field'])
|
|
10
|
-
file: InMemoryUploadedFile = request.FILES['file']
|
|
11
|
-
|
|
12
|
-
return ValarResponse(True)
|