valar 1.0.27__tar.gz → 1.0.29__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.

Potentially problematic release.


This version of valar might be problematic. Click here for more details.

Files changed (61) hide show
  1. {valar-1.0.27/src/valar.egg-info → valar-1.0.29}/PKG-INFO +1 -1
  2. {valar-1.0.27 → valar-1.0.29}/setup.py +1 -1
  3. {valar-1.0.27 → valar-1.0.29}/src/valar/core/counter.py +1 -1
  4. {valar-1.0.27 → valar-1.0.29}/src/valar/core/dao/dao_base.py +1 -1
  5. {valar-1.0.27 → valar-1.0.29}/src/valar/core/dao/dao_orm.py +10 -7
  6. {valar-1.0.27 → valar-1.0.29}/src/valar/core/dao/engine_minio.py +3 -2
  7. {valar-1.0.27 → valar-1.0.29}/src/valar/core/dao/model_orm.py +24 -21
  8. {valar-1.0.27 → valar-1.0.29}/src/valar/core/dao/query_orm.py +3 -2
  9. {valar-1.0.27 → valar-1.0.29}/src/valar/core/meta/defaults/field_values_default.py +2 -2
  10. {valar-1.0.27 → valar-1.0.29}/src/valar/core/meta/defaults/frame_defaults.py +3 -3
  11. valar-1.0.29/src/valar/core/meta/defaults/view_defaults.py +20 -0
  12. {valar-1.0.27 → valar-1.0.29}/src/valar/core/meta/field_orm.py +5 -3
  13. {valar-1.0.27 → valar-1.0.29}/src/valar/core/meta/init_meta_frame.py +5 -3
  14. {valar-1.0.27 → valar-1.0.29}/src/valar/core/meta/meta_orm.py +9 -4
  15. valar-1.0.29/src/valar/data/apps.py +13 -0
  16. valar-1.0.29/src/valar/data/migrations/0001_initial.py +140 -0
  17. valar-1.0.29/src/valar/data/migrations/0002_remove_metaview_allow_batch.py +17 -0
  18. valar-1.0.29/src/valar/data/migrations/0003_remove_metaview_allow_pop_metaview_allow_order_and_more.py +27 -0
  19. valar-1.0.29/src/valar/data/migrations/0004_rename_allow_sort_metafield_allow_order.py +18 -0
  20. {valar-1.0.27 → valar-1.0.29}/src/valar/data/models.py +3 -4
  21. {valar-1.0.27 → valar-1.0.29}/src/valar/data/urls.py +5 -0
  22. valar-1.0.29/src/valar/data/views/file.py +12 -0
  23. {valar-1.0.27 → valar-1.0.29}/src/valar/data/views/handler.py +4 -4
  24. {valar-1.0.27 → valar-1.0.29}/src/valar/data/views/rest.py +2 -2
  25. {valar-1.0.27 → valar-1.0.29/src/valar.egg-info}/PKG-INFO +1 -1
  26. {valar-1.0.27 → valar-1.0.29}/src/valar.egg-info/SOURCES.txt +6 -0
  27. valar-1.0.27/src/valar/core/meta/defaults/view_defaults.py +0 -7
  28. {valar-1.0.27 → valar-1.0.29}/LICENSE +0 -0
  29. {valar-1.0.27 → valar-1.0.29}/README.md +0 -0
  30. {valar-1.0.27 → valar-1.0.29}/setup.cfg +0 -0
  31. {valar-1.0.27 → valar-1.0.29}/src/valar/__init__.py +0 -0
  32. {valar-1.0.27 → valar-1.0.29}/src/valar/channels/__init__.py +0 -0
  33. {valar-1.0.27 → valar-1.0.29}/src/valar/channels/consumer.py +0 -0
  34. {valar-1.0.27 → valar-1.0.29}/src/valar/channels/executer.py +0 -0
  35. {valar-1.0.27 → valar-1.0.29}/src/valar/channels/mapping.py +0 -0
  36. {valar-1.0.27 → valar-1.0.29}/src/valar/channels/sender.py +0 -0
  37. {valar-1.0.27 → valar-1.0.29}/src/valar/channels/views.py +0 -0
  38. {valar-1.0.27 → valar-1.0.29}/src/valar/core/__init__.py +0 -0
  39. {valar-1.0.27 → valar-1.0.29}/src/valar/core/dao/__init__.py +0 -0
  40. {valar-1.0.27 → valar-1.0.29}/src/valar/core/dao/_mon_array2tree.py +0 -0
  41. {valar-1.0.27 → valar-1.0.29}/src/valar/core/dao/dao_mon.py +0 -0
  42. {valar-1.0.27 → valar-1.0.29}/src/valar/core/dao/engine.py +0 -0
  43. {valar-1.0.27 → valar-1.0.29}/src/valar/core/dao/engine_mon.py +0 -0
  44. {valar-1.0.27 → valar-1.0.29}/src/valar/core/dao/engine_orm.py +0 -0
  45. {valar-1.0.27 → valar-1.0.29}/src/valar/core/dao/model_mon.py +0 -0
  46. {valar-1.0.27 → valar-1.0.29}/src/valar/core/dao/query_mon.py +0 -0
  47. {valar-1.0.27 → valar-1.0.29}/src/valar/core/dao/utils_orm.py +0 -0
  48. {valar-1.0.27 → valar-1.0.29}/src/valar/core/dao_abstract.py +0 -0
  49. {valar-1.0.27 → valar-1.0.29}/src/valar/core/meta/__init__.py +0 -0
  50. {valar-1.0.27 → valar-1.0.29}/src/valar/core/meta/defaults/__init__.py +0 -0
  51. {valar-1.0.27 → valar-1.0.29}/src/valar/core/meta/defaults/field_keys_default.py +0 -0
  52. {valar-1.0.27 → valar-1.0.29}/src/valar/core/middleware.py +0 -0
  53. {valar-1.0.27 → valar-1.0.29}/src/valar/core/response.py +0 -0
  54. {valar-1.0.27 → valar-1.0.29}/src/valar/core/singleton_meta.py +0 -0
  55. {valar-1.0.27 → valar-1.0.29}/src/valar/core/valar_models.py +0 -0
  56. {valar-1.0.27 → valar-1.0.29}/src/valar/data/__init__.py +0 -0
  57. {valar-1.0.27 → valar-1.0.29}/src/valar/data/migrations/__init__.py +0 -0
  58. {valar-1.0.27 → valar-1.0.29}/src/valar/data/views/__init__.py +0 -0
  59. {valar-1.0.27 → valar-1.0.29}/src/valar.egg-info/dependency_links.txt +0 -0
  60. {valar-1.0.27 → valar-1.0.29}/src/valar.egg-info/requires.txt +0 -0
  61. {valar-1.0.27 → valar-1.0.29}/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.0.27
3
+ Version: 1.0.29
4
4
  Summary: valar for morghulis
5
5
  Home-page: https://gitee.com/GRIFFIN120/valar_dev
6
6
  Author: LYP
@@ -16,7 +16,7 @@ requires = [
16
16
 
17
17
  setup(
18
18
  name="valar", # 包名
19
- version="1.0.27", # 版本号
19
+ version="1.0.29", # 版本号
20
20
  author="LYP", # 作者
21
21
  author_email="liuyinpeng@buaa.edu.cn", # 邮箱
22
22
  description="valar for morghulis", # 简短描述
@@ -5,5 +5,5 @@ class Counter:
5
5
 
6
6
  def tick(self):
7
7
  self.index += 1
8
- percentage = round(self.index * 100 / self.length)
8
+ percentage = round(self.index * 100 / self.length) if self.length else 0
9
9
  return {"index": self.index, "length": self.length, "percentage": percentage}
@@ -35,7 +35,7 @@ class Dao(AbstractDao):
35
35
  return self.dao.transform(o)
36
36
 
37
37
  def tree(self, root, conditions=None):
38
- return self.dao.tree(conditions, root)
38
+ return self.dao.tree(root, conditions)
39
39
 
40
40
 
41
41
 
@@ -17,7 +17,7 @@ class OrmDao(AbstractDao):
17
17
  def get_model(self):
18
18
  return self.model
19
19
 
20
- def save_one(self, item):
20
+ def save_one(self, item, with_id=False):
21
21
  oid, simple_item, complex_item = self.model.detach_item(item)
22
22
  query_set = self.objects.filter(id=oid) if oid else []
23
23
  if len(query_set):
@@ -25,9 +25,12 @@ class OrmDao(AbstractDao):
25
25
  query_set.update(**simple_item)
26
26
  bean = query_set.first()
27
27
  else:
28
- bean = self.objects.create(**simple_item)
29
- bean.sort = bean.id
30
- bean.save()
28
+ if with_id:
29
+ bean = self.objects.create(**{**simple_item, "id": oid})
30
+ else:
31
+ bean = self.objects.create(**simple_item)
32
+ bean.sort = bean.id
33
+ bean.save()
31
34
  self.model.save_complex_field(complex_item, bean)
32
35
  bean.save()
33
36
  return bean
@@ -67,7 +70,7 @@ class OrmDao(AbstractDao):
67
70
 
68
71
  def delete(self, conditions):
69
72
  query_set, total = self.find(conditions)
70
- self.model.remove_files(query_set)
73
+ # self.model.remove_files(query_set)
71
74
  query_set.delete()
72
75
 
73
76
  def transform(self, o, code=None):
@@ -77,7 +80,7 @@ class OrmDao(AbstractDao):
77
80
  return o.full()
78
81
 
79
82
  def tree(self, root, conditions=None):
80
- all_set, _ = self.find([])
83
+ all_set, _ = self.find()
81
84
  query = OrmQuery(conditions)
82
85
  if query.is_empty(conditions):
83
86
  return all_set
@@ -93,4 +96,4 @@ class OrmDao(AbstractDao):
93
96
  _id = mapping.get(_id)
94
97
  if root in route:
95
98
  id_set.update(route)
96
- return all_set.filter(id__in=id_set).order_by('-sort')
99
+ return all_set.filter(id__in=id_set).order_by('-sort')
@@ -41,8 +41,9 @@ class MinioEngine(metaclass=SingletonMeta):
41
41
  return f'{bucket_name}/{object_name}'
42
42
 
43
43
  def remove_path(self, path):
44
- bucket_name, object_name = path.split('/')
45
- self.remove(bucket_name, object_name)
44
+ if path:
45
+ bucket_name, object_name = path.split('/')
46
+ self.remove(bucket_name, object_name)
46
47
 
47
48
  def remove(self, bucket_name, object_name):
48
49
  self.client.remove_object(
@@ -1,3 +1,7 @@
1
+ import copy
2
+
3
+ from bson import ObjectId
4
+ from bson.errors import InvalidId
1
5
  from deepmerge import always_merger
2
6
  from django.db.models import ManyToOneRel, ForeignKey, ManyToManyRel, ManyToManyField, OneToOneField, OneToOneRel
3
7
  from django.db.models import QuerySet
@@ -10,9 +14,8 @@ from .utils_orm import OrmUtils
10
14
  from ..meta.defaults.field_keys_default import meta_field_key_defaults
11
15
  from ..meta.defaults.field_values_default import meta_field_value_defaults
12
16
  from ..meta.field_orm import OrmField
13
- from ..meta.init_meta_frame import init_meta_frame
14
17
  from ..valar_models import VModel, VTree
15
- from ...data.models import MetaFieldDomain
18
+ from ...data.models import MetaFieldDomain
16
19
 
17
20
 
18
21
  class OrmModel:
@@ -35,7 +38,11 @@ class OrmModel:
35
38
 
36
39
  @staticmethod
37
40
  def object_id(_id):
38
- return _id if isinstance(_id, int) and _id else None
41
+ try:
42
+ return int(_id)
43
+ except TypeError:
44
+ return None
45
+
39
46
 
40
47
  def props(self, domain=None):
41
48
  array = []
@@ -46,21 +53,6 @@ class OrmModel:
46
53
  return array
47
54
 
48
55
 
49
- def meta_frame(self):
50
- query_set = MetaFieldDomain.objects.all()
51
- if query_set.count() == 0:
52
- query_set = init_meta_frame()
53
- values = query_set.values('name', 'default__code', 'align')
54
- return {
55
- vs['name']: {
56
- "tool": vs['default__code'],
57
- "align": vs['align'],
58
- }
59
- for vs in values
60
- }
61
-
62
-
63
-
64
56
 
65
57
  def initial_fields(self, code):
66
58
  props = self.props()
@@ -74,17 +66,28 @@ class OrmModel:
74
66
  code_values = default_values.get(code, {})
75
67
  default_fields = always_merger.merge(init_values, code_values)
76
68
 
77
- meta_frame = self.meta_frame()
69
+ values = MetaFieldDomain.objects.all().values('name', 'default__code', 'align')
70
+ meta_frame = {
71
+ vs['name']: {
72
+ "tool": vs['default__code'],
73
+ "align": vs['align'],
74
+ }
75
+ for vs in values
76
+ }
78
77
  fields = []
79
78
  for prop in props:
80
79
  field = self.get_field(prop)
81
80
  field_json = field.json()
82
- frame = meta_frame.get(field.domain, {})
81
+ frame = copy.deepcopy(meta_frame.get(field.domain, {}))
82
+ refer = field_json['refer']
83
+ if refer['isTree'] and frame.get('tool') == 'select' :
84
+ frame['tool'] = 'tree'
85
+ elif self.is_tree and prop =='icon':
86
+ frame['tool'] = 'icon'
83
87
  field_json.update(frame)
84
88
  default_field = default_fields.get(prop, {})
85
89
  always_merger.merge(field_json, default_field)
86
90
  fields.append(field_json)
87
-
88
91
  fields.reverse()
89
92
  return fields
90
93
 
@@ -20,7 +20,8 @@ def __translate_condition__(conditions, _type):
20
20
 
21
21
  class OrmQuery:
22
22
 
23
- def __init__(self, conditions: list, orders = None):
23
+ def __init__(self, conditions: list , orders = None):
24
+ conditions = conditions or []
24
25
  self.orders = __translate_orders__(orders or {'sort': -1})
25
26
  conditions = conditions if len(conditions) else [{'includes':{},'excludes':{}}]
26
27
  self.includes = __translate_condition__(conditions,'includes')
@@ -32,7 +33,7 @@ class OrmQuery:
32
33
  temp = {}
33
34
  for cond in conditions:
34
35
  temp.update(cond)
35
- return len(temp.keys()) >0
36
+ return len(temp.keys()) == 0
36
37
  else:
37
38
  return True
38
39
 
@@ -63,8 +63,8 @@ meta_field_value_defaults = {
63
63
  'tool': 'tree',
64
64
  'refer': {
65
65
  'entity':'data.MetaFieldTool',
66
- 'includes': {'metafielddomain__name':'$domain'},
67
- 'value': 'code'
66
+ 'includes': {'metafielddomain__name':'${domain}'},
67
+ 'value': 'code','display':'code'
68
68
  }
69
69
 
70
70
  },
@@ -39,14 +39,14 @@ meta_field_domain = [
39
39
  'name': 'CharField',
40
40
  'default_id': 'text', 'align': 'left',
41
41
  'tools': [
42
- 'text', 'number', 'meta', 'color', 'auto', 'date', 'select', 'tree', 'cascade', 'icon',
42
+ 'text', 'number', 'meta', 'color', 'auto', 'date', 'time','select', 'tree', 'cascade', 'icon',
43
43
  'textarea', 'timerange', 'daterange', 'dates', 'set'
44
44
  ]
45
45
  },
46
46
  {
47
47
  'name': 'TextField',
48
48
  'default_id': 'textarea', 'align': 'left',
49
- 'tools': ['text', 'textarea']
49
+ 'tools': ['text', 'textarea', 'rich']
50
50
  },
51
51
  {
52
52
  'name': 'BooleanField',
@@ -116,7 +116,7 @@ meta_field_domain = [
116
116
  {
117
117
  'name': 'FileField',
118
118
  'default_id': 'file', 'align': 'center',
119
- 'tools': ['image', 'file', 'rich']
119
+ 'tools': ['image', 'file']
120
120
  },
121
121
  {
122
122
  'name': 'BigAutoField',
@@ -0,0 +1,20 @@
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
+ }
@@ -4,6 +4,7 @@ from django.db.models import IntegerField, BooleanField, FloatField,TextField, C
4
4
  from django.db.models import FileField, JSONField
5
5
  from django.db.models import DateTimeField, TimeField, DateField
6
6
 
7
+ from src.valar.core.valar_models import VTree
7
8
 
8
9
 
9
10
  class OrmField:
@@ -43,7 +44,7 @@ class OrmField:
43
44
  }
44
45
  if self.is_tree:
45
46
  if self.prop in ['pid', 'isLeaf']:
46
- _field['hide_on_table'] = True
47
+ # _field['hide_on_table'] = True
47
48
  _field['hide_on_form'] = True
48
49
  _field['hide_on_form_branch'] = True
49
50
  _field['hide_on_form_leaf'] = True
@@ -92,14 +93,15 @@ class OrmField:
92
93
  def __refer__(self):
93
94
  refer = {
94
95
  "entity": None,
95
- "value": "name", "label": 'name', "display": "id",
96
+ "value": "id", "label": 'name', "display": "id",
96
97
  "multiple": self.multiple, "strict": False, "remote": False,
97
98
  "includes": {}, "excludes": {},
98
- "root": 0, "isTree": self.is_tree
99
+ "root": 0, "isTree": False
99
100
  }
100
101
  if self.model:
101
102
  module, name = self.model.__module__, self.model.__name__
102
103
  refer['entity'] = '%s.%s' % (module.replace('.models', '').split('.')[-1], name)
104
+ refer['isTree'] = issubclass(self.model, VTree)
103
105
  return refer
104
106
 
105
107
  def __formating__(self):
@@ -10,16 +10,18 @@ def init_meta_frame():
10
10
  tool_dao = OrmDao('data.MetaFieldTool')
11
11
  domain_dao = OrmDao('data.MetaFieldDomain')
12
12
  mapping = {}
13
+ tool_dao.objects.all().delete()
13
14
  for item in meta_field_tool:
15
+ item = copy.deepcopy(item)
14
16
  _id, code = item['id'], item['code']
15
17
  item.update({"saved": True})
16
18
  if item['isLeaf']:
17
19
  mapping[code] = _id
18
- tool_dao.save_one(item)
19
-
20
+ tool_dao.save_one(item, True)
21
+ domain_dao.objects.all().delete()
20
22
  for row in meta_field_domain:
23
+ row = copy.deepcopy(row)
21
24
  default_id, tools = row['default_id'], row['tools']
22
- print(mapping[default_id])
23
25
  _row = copy.deepcopy(row)
24
26
  _row.update({
25
27
  'default_id': mapping[default_id],
@@ -2,7 +2,7 @@ from deepmerge import always_merger
2
2
 
3
3
  from .defaults.view_defaults import meta_view_default_values
4
4
  from ...core.dao.dao_orm import OrmDao
5
- from ...data.models import MetaView, Meta
5
+ from ...data.models import MetaView, Meta, MetaFieldDomain
6
6
 
7
7
 
8
8
  class OrmMeta:
@@ -38,8 +38,9 @@ class OrmMeta:
38
38
  field_dao = OrmDao('data.MetaField')
39
39
  _fields = self.dao.model.initial_fields(code)
40
40
  for _field in _fields:
41
- _field.update({'view_id':view.id, "saved": True })
42
- field_dao.save_one(_field)
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)
43
44
 
44
45
 
45
46
  def get_view(self):
@@ -47,7 +48,11 @@ class OrmMeta:
47
48
  meta = self.meta.json()
48
49
  name, entity = meta['name'], meta['entity']
49
50
  fields = self.view.metafield_set.all().order_by('-sort')
50
- _fields = {field.prop: field.json(entity=entity, code=self.code, db='orm') for field in fields}
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
+ }
51
56
  _view.update({
52
57
  '$db': 'orm',
53
58
  '$entity': entity,
@@ -0,0 +1,13 @@
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()
@@ -0,0 +1,140 @@
1
+ # Generated by Django 4.2.23 on 2025-07-06 02:42
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
+ ('saved', models.BooleanField(default=False)),
23
+ ('entity', models.CharField(max_length=100, null=True, unique=True, verbose_name='数据源')),
24
+ ('name', models.CharField(max_length=50, null=True, verbose_name='实体别名')),
25
+ ],
26
+ options={
27
+ 'verbose_name': '数据实体',
28
+ },
29
+ ),
30
+ migrations.CreateModel(
31
+ name='MetaFieldTool',
32
+ fields=[
33
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
34
+ ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
35
+ ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
36
+ ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
37
+ ('saved', models.BooleanField(default=False)),
38
+ ('pid', models.IntegerField(default=0, verbose_name='父节点')),
39
+ ('isLeaf', models.BooleanField(default=False, verbose_name='叶子节点')),
40
+ ('icon', models.CharField(max_length=255, null=True, verbose_name='图标')),
41
+ ('name', models.CharField(max_length=255, null=True, verbose_name='名称')),
42
+ ('code', models.CharField(max_length=100, null=True, unique=True, verbose_name='代码')),
43
+ ],
44
+ options={
45
+ 'verbose_name': '元数据字段工具',
46
+ },
47
+ ),
48
+ migrations.CreateModel(
49
+ name='MetaView',
50
+ fields=[
51
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
52
+ ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
53
+ ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
54
+ ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
55
+ ('saved', models.BooleanField(default=False)),
56
+ ('code', models.CharField(default='default ', max_length=50, verbose_name='类视图')),
57
+ ('name', models.CharField(max_length=50, null=True, verbose_name='视图名称')),
58
+ ('form_width', models.IntegerField(default=0, verbose_name='表单宽度')),
59
+ ('form_height', models.IntegerField(default=0, verbose_name='表单高度')),
60
+ ('table_width', models.IntegerField(default=0, verbose_name='表格宽度')),
61
+ ('table_height', models.IntegerField(default=0, verbose_name='表格高度')),
62
+ ('enable', models.BooleanField(default=True, verbose_name='是否启用')),
63
+ ('show_header', models.BooleanField(default=True, verbose_name='展示头部')),
64
+ ('allow_batch', models.BooleanField(default=True, verbose_name='批处理')),
65
+ ('allow_search', models.BooleanField(default=True, verbose_name='检索功能')),
66
+ ('allow_sort', models.BooleanField(default=True, verbose_name='排序功能')),
67
+ ('allow_pop', models.BooleanField(default=True, verbose_name='移动功能')),
68
+ ('allow_insert', models.BooleanField(default=True, verbose_name='新增功能')),
69
+ ('allow_edit', models.BooleanField(default=True, verbose_name='编辑功能')),
70
+ ('allow_remove', models.BooleanField(default=True, verbose_name='删除功能')),
71
+ ('allow_download', models.BooleanField(default=True, verbose_name='下载功能')),
72
+ ('allow_upload', models.BooleanField(default=True, verbose_name='上传功能')),
73
+ ('meta', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='data.meta', verbose_name='元数据')),
74
+ ],
75
+ options={
76
+ 'verbose_name': '数据视图',
77
+ 'unique_together': {('meta', 'code')},
78
+ },
79
+ ),
80
+ migrations.CreateModel(
81
+ name='MetaFieldDomain',
82
+ fields=[
83
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
84
+ ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
85
+ ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
86
+ ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
87
+ ('saved', models.BooleanField(default=False)),
88
+ ('name', models.CharField(max_length=255, null=True, unique=True, verbose_name='名称')),
89
+ ('align', models.CharField(max_length=10, null=True, verbose_name='对齐方式')),
90
+ ('default', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='data.metafieldtool', verbose_name='默认工具')),
91
+ ('search', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='data.metafieldtool', verbose_name='搜索工具')),
92
+ ('tools', models.ManyToManyField(to='data.metafieldtool', verbose_name='工具集')),
93
+ ],
94
+ options={
95
+ 'verbose_name': '元数据字段类型',
96
+ },
97
+ ),
98
+ migrations.CreateModel(
99
+ name='MetaField',
100
+ fields=[
101
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
102
+ ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
103
+ ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
104
+ ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
105
+ ('saved', models.BooleanField(default=False)),
106
+ ('prop', models.CharField(max_length=100, verbose_name='字段名称')),
107
+ ('label', models.CharField(max_length=100, verbose_name='字段标签')),
108
+ ('name', models.CharField(max_length=100, verbose_name='字段别名')),
109
+ ('domain', models.CharField(max_length=100, verbose_name='字段类型')),
110
+ ('tool', models.CharField(default='default', max_length=100, verbose_name='工具组件')),
111
+ ('refer', models.JSONField(default=dict, verbose_name='索引')),
112
+ ('format', models.JSONField(default=dict, verbose_name='格式')),
113
+ ('not_null', models.BooleanField(default=False, verbose_name='不为空')),
114
+ ('allow_edit', models.BooleanField(default=True, verbose_name='可编辑')),
115
+ ('allow_sort', models.BooleanField(default=True, verbose_name='可排序')),
116
+ ('allow_search', models.BooleanField(default=True, verbose_name='可搜索')),
117
+ ('allow_download', models.BooleanField(default=True, verbose_name='可下载')),
118
+ ('allow_upload', models.BooleanField(default=False, verbose_name='可上传')),
119
+ ('allow_update', models.BooleanField(default=False, verbose_name='可更新')),
120
+ ('unit', models.CharField(max_length=55, null=True, verbose_name='单位符')),
121
+ ('column_width', models.FloatField(default=0, verbose_name='表头宽度')),
122
+ ('align', models.CharField(default='left', max_length=55, verbose_name='对齐方式')),
123
+ ('fixed', models.CharField(max_length=100, null=True, verbose_name='固定位置')),
124
+ ('header_color', models.CharField(max_length=55, null=True, verbose_name='表头颜色')),
125
+ ('cell_color', models.CharField(max_length=55, null=True, verbose_name='单元颜色')),
126
+ ('edit_on_table', models.BooleanField(default=True, verbose_name='表格编辑')),
127
+ ('hide_on_table', models.BooleanField(default=False, verbose_name='表内隐藏')),
128
+ ('span', models.IntegerField(default=0, verbose_name='表单占位')),
129
+ ('hide_on_form', models.BooleanField(default=False, verbose_name='表单隐藏')),
130
+ ('hide_on_form_edit', models.BooleanField(default=False, verbose_name='编辑隐藏')),
131
+ ('hide_on_form_insert', models.BooleanField(default=False, verbose_name='新增隐藏')),
132
+ ('hide_on_form_branch', models.BooleanField(default=False, verbose_name='分支隐藏')),
133
+ ('hide_on_form_leaf', models.BooleanField(default=False, verbose_name='叶子隐藏')),
134
+ ('view', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='data.metaview', verbose_name='数据视图')),
135
+ ],
136
+ options={
137
+ 'verbose_name': '视图字段',
138
+ },
139
+ ),
140
+ ]
@@ -0,0 +1,17 @@
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
+ ]
@@ -0,0 +1,27 @@
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
+ ]
@@ -0,0 +1,18 @@
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
+ ]
@@ -26,10 +26,9 @@ class MetaView(VModel):
26
26
 
27
27
  enable = models.BooleanField(default=True, verbose_name='是否启用')
28
28
  show_header = models.BooleanField(default=True, verbose_name='展示头部')
29
- allow_batch = models.BooleanField(default=True, verbose_name='批处理')
30
29
  allow_search = models.BooleanField(default=True, verbose_name='检索功能')
31
- allow_sort = models.BooleanField(default=True, verbose_name='排序功能')
32
- allow_pop = models.BooleanField(default=True, verbose_name='移动功能')
30
+ allow_sort = models.BooleanField(default=True, verbose_name='移动功能')
31
+ allow_order = models.BooleanField(default=True, verbose_name='排序功能')
33
32
  allow_insert = models.BooleanField(default=True, verbose_name='新增功能')
34
33
  allow_edit = models.BooleanField(default=True, verbose_name='编辑功能')
35
34
  allow_remove = models.BooleanField(default=True, verbose_name='删除功能')
@@ -58,7 +57,7 @@ class MetaField(VModel):
58
57
  """rest"""
59
58
  not_null = models.BooleanField(default=False, verbose_name='不为空') #
60
59
  allow_edit = models.BooleanField(default=True, verbose_name='可编辑')
61
- allow_sort = models.BooleanField(default=True, verbose_name='可排序')
60
+ allow_order = models.BooleanField(default=True, verbose_name='可排序')
62
61
  allow_search = models.BooleanField(default=True, verbose_name='可搜索')
63
62
  allow_download = models.BooleanField(default=True, verbose_name='可下载')
64
63
  allow_upload = models.BooleanField(default=False, verbose_name='可上传')
@@ -1,5 +1,6 @@
1
1
  from django.urls import path
2
2
 
3
+ from .views.file import save_file
3
4
  from ..channels.views import handel_channel
4
5
  from .views.rest import save_many,delete_many,save_one,delete_one,find_one,find,update,table, tree, meta_view
5
6
 
@@ -15,4 +16,8 @@ urlpatterns = [
15
16
  path('<str:db>/<str:entity>/table', table),
16
17
  path('<str:db>/<str:entity>/tree', tree),
17
18
  path('<str:db>/<str:entity>/meta_view', meta_view),
19
+
20
+ path('<str:db>/<str:entity>/save_file', save_file),
21
+
22
+
18
23
  ]
@@ -0,0 +1,12 @@
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)
@@ -29,10 +29,10 @@ def delete_many_handler(sender: ValarSocketSender):
29
29
  paths = dao.model.get_file_paths(query_set)
30
30
  query_set.delete()
31
31
  counter = Counter(len(paths))
32
- for path in paths:
33
- dao.model.minio.remove_path(path)
34
- payload = counter.tick()
35
- sender.to_clients(payload, sender.client, wait=True)
32
+ # for path in paths:
33
+ # dao.model.minio.remove_path(path)
34
+ payload = counter.tick()
35
+ sender.to_clients(payload, sender.client, wait=True)
36
36
  else:
37
37
  dao = MonDao(entity)
38
38
  dao.delete(conditions)
@@ -71,6 +71,7 @@ def table(request, db, entity):
71
71
  def tree(request, db, entity):
72
72
  body = json.loads(request.body)
73
73
  conditions = body.get('conditions', [])
74
+
74
75
  root = body.get('root')
75
76
  dao = Dao(entity, db)
76
77
  query_set = dao.tree(root, conditions)
@@ -84,6 +85,5 @@ def tree(request, db, entity):
84
85
  def meta_view(request, db, entity):
85
86
  body = json.loads(request.body)
86
87
  code = body.get('code')
87
- _meta = OrmMeta(entity, code)
88
- _view = _meta.get_view()
88
+ _view = OrmMeta(entity, code).get_view()
89
89
  return ValarResponse(_view)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: valar
3
- Version: 1.0.27
3
+ Version: 1.0.29
4
4
  Summary: valar for morghulis
5
5
  Home-page: https://gitee.com/GRIFFIN120/valar_dev
6
6
  Author: LYP
@@ -44,9 +44,15 @@ src/valar/core/meta/defaults/field_values_default.py
44
44
  src/valar/core/meta/defaults/frame_defaults.py
45
45
  src/valar/core/meta/defaults/view_defaults.py
46
46
  src/valar/data/__init__.py
47
+ src/valar/data/apps.py
47
48
  src/valar/data/models.py
48
49
  src/valar/data/urls.py
50
+ src/valar/data/migrations/0001_initial.py
51
+ src/valar/data/migrations/0002_remove_metaview_allow_batch.py
52
+ src/valar/data/migrations/0003_remove_metaview_allow_pop_metaview_allow_order_and_more.py
53
+ src/valar/data/migrations/0004_rename_allow_sort_metafield_allow_order.py
49
54
  src/valar/data/migrations/__init__.py
50
55
  src/valar/data/views/__init__.py
56
+ src/valar/data/views/file.py
51
57
  src/valar/data/views/handler.py
52
58
  src/valar/data/views/rest.py
@@ -1,7 +0,0 @@
1
- meta_view_default_values = {
2
- 'data.MetaView': {
3
- '__init__': {
4
- 'allow_insert': False
5
- }
6
- }
7
- }
File without changes
File without changes
File without changes
File without changes