valar 1.1.0__py3-none-any.whl → 1.1.2__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.

Potentially problematic release.


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

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: valar
3
- Version: 1.1.0
3
+ Version: 1.1.2
4
4
  Summary: valar for morghulis
5
5
  Home-page: https://gitee.com/GRIFFIN120/valar_dev
6
6
  Author: LYP
@@ -34,6 +34,7 @@ pip install valar
34
34
 
35
35
 
36
36
  # 1. settings
37
+
37
38
  ```python
38
39
 
39
40
  from pathlib import Path
@@ -57,7 +58,7 @@ INSTALLED_APPS = [
57
58
  'django.contrib.sessions',
58
59
  "corsheaders",
59
60
  'channels',
60
- 'valar.data',
61
+ 'src.valar.data',
61
62
  ]
62
63
 
63
64
  MIDDLEWARE = [
@@ -104,11 +105,12 @@ MINIO = {
104
105
 
105
106
  ```
106
107
  # 2. asgi
108
+
107
109
  ```python
108
110
  from django.core.asgi import get_asgi_application
109
111
  from channels.routing import ProtocolTypeRouter, URLRouter
110
112
  from django.urls import re_path
111
- from valar.channels.consumer import ValarConsumer
113
+ from src.valar.channels import ValarConsumer
112
114
 
113
115
  application = ProtocolTypeRouter({
114
116
  'http': get_asgi_application(),
@@ -127,11 +129,12 @@ python manage.py migrate
127
129
 
128
130
 
129
131
  # 4. root urls
132
+
130
133
  ```python
131
134
  from django.urls import path, include
132
135
 
133
136
  urlpatterns = [
134
- path('data/', include('valar.data.urls')),
137
+ path('data/', include('src.valar.data.urls')),
135
138
  ]
136
139
 
137
140
  channel_mapping = {
@@ -140,18 +143,20 @@ channel_mapping = {
140
143
  ```
141
144
 
142
145
  # 5. channel_handler
146
+
143
147
  ```python
144
148
 
145
149
  import time
146
150
 
147
- from valar.channels.sender import ValarSocketSender
148
- from valar.core.counter import Counter
151
+ from src.valar.channels.sender import ValarSocketSender
152
+ from src.valar import Counter
153
+
149
154
 
150
155
  def test_handler(sender: ValarSocketSender):
151
156
  data = sender.data
152
- length = data.get('length',50)
157
+ length = data.get('length', 50)
153
158
  counter = Counter(length)
154
159
  for i in range(length):
155
160
  time.sleep(0.1)
156
- sender.to_clients(counter.tick() ,sender.client, wait=True)
161
+ sender.to_clients(counter.tick(), sender.client, wait=True)
157
162
  ```
@@ -0,0 +1,5 @@
1
+ valar-1.1.2.dist-info/licenses/LICENSE,sha256=2bm9uFabQZ3Ykb_SaSU_uUbAj2-htc6WJQmS_65qD00,1073
2
+ valar-1.1.2.dist-info/METADATA,sha256=D2TzkJvEnB56IlXfAF0Utru6yu4FC0iRhrwPSegRfF0,3398
3
+ valar-1.1.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
4
+ valar-1.1.2.dist-info/top_level.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
5
+ valar-1.1.2.dist-info/RECORD,,
@@ -0,0 +1 @@
1
+
frame/__init__.py DELETED
File without changes
@@ -1,141 +0,0 @@
1
- # Generated by Django 4.2.23 on 2025-07-15 16:22
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
- ('db', models.CharField(max_length=100, null=True, verbose_name='数据库')),
24
- ('entity', models.CharField(max_length=100, null=True, verbose_name='数据源')),
25
- ('name', models.CharField(max_length=50, null=True, verbose_name='实体别名')),
26
- ],
27
- options={
28
- 'verbose_name': '数据实体',
29
- 'unique_together': {('db', 'entity')},
30
- },
31
- ),
32
- migrations.CreateModel(
33
- name='MetaFieldTool',
34
- fields=[
35
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
36
- ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
37
- ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
38
- ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
39
- ('saved', models.BooleanField(default=False)),
40
- ('pid', models.IntegerField(default=0, verbose_name='父节点')),
41
- ('isLeaf', models.BooleanField(default=False, verbose_name='叶子节点')),
42
- ('icon', models.CharField(max_length=255, null=True, verbose_name='图标')),
43
- ('name', models.CharField(max_length=255, null=True, verbose_name='名称')),
44
- ('code', models.CharField(max_length=100, null=True, unique=True, verbose_name='代码')),
45
- ],
46
- options={
47
- 'verbose_name': '元数据字段工具',
48
- },
49
- ),
50
- migrations.CreateModel(
51
- name='MetaView',
52
- fields=[
53
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
54
- ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
55
- ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
56
- ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
57
- ('saved', models.BooleanField(default=False)),
58
- ('code', models.CharField(default='default ', max_length=50, verbose_name='类视图')),
59
- ('name', models.CharField(max_length=50, null=True, verbose_name='视图名称')),
60
- ('form_width', models.IntegerField(default=0, verbose_name='表单宽度')),
61
- ('form_height', models.IntegerField(default=0, verbose_name='表单高度')),
62
- ('table_width', models.IntegerField(default=0, verbose_name='表格宽度')),
63
- ('table_height', models.IntegerField(default=0, verbose_name='表格高度')),
64
- ('enable', models.BooleanField(default=True, verbose_name='是否启用')),
65
- ('show_header', models.BooleanField(default=True, verbose_name='展示头部')),
66
- ('allow_search', models.BooleanField(default=True, verbose_name='检索功能')),
67
- ('allow_sort', models.BooleanField(default=True, verbose_name='移动功能')),
68
- ('allow_order', models.BooleanField(default=True, verbose_name='排序功能')),
69
- ('allow_insert', models.BooleanField(default=True, verbose_name='新增功能')),
70
- ('allow_edit', models.BooleanField(default=True, verbose_name='编辑功能')),
71
- ('allow_remove', models.BooleanField(default=True, verbose_name='删除功能')),
72
- ('allow_download', models.BooleanField(default=True, verbose_name='下载功能')),
73
- ('allow_upload', models.BooleanField(default=True, verbose_name='上传功能')),
74
- ('meta', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='valar.meta', verbose_name='元数据')),
75
- ],
76
- options={
77
- 'verbose_name': '数据视图',
78
- 'unique_together': {('meta', 'code')},
79
- },
80
- ),
81
- migrations.CreateModel(
82
- name='MetaFieldDomain',
83
- fields=[
84
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
85
- ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
86
- ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
87
- ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
88
- ('saved', models.BooleanField(default=False)),
89
- ('name', models.CharField(max_length=255, null=True, unique=True, verbose_name='名称')),
90
- ('align', models.CharField(max_length=10, null=True, verbose_name='对齐方式')),
91
- ('default', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='valar.metafieldtool', verbose_name='默认工具')),
92
- ('search', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='valar.metafieldtool', verbose_name='搜索工具')),
93
- ('tools', models.ManyToManyField(to='valar.metafieldtool', verbose_name='工具集')),
94
- ],
95
- options={
96
- 'verbose_name': '元数据字段类型',
97
- },
98
- ),
99
- migrations.CreateModel(
100
- name='MetaField',
101
- fields=[
102
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
103
- ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
104
- ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
105
- ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
106
- ('saved', models.BooleanField(default=False)),
107
- ('prop', models.CharField(max_length=100, verbose_name='字段名称')),
108
- ('label', models.CharField(max_length=100, verbose_name='字段标签')),
109
- ('name', models.CharField(max_length=100, verbose_name='字段别名')),
110
- ('domain', models.CharField(max_length=100, verbose_name='字段类型')),
111
- ('tool', models.CharField(default='default', max_length=100, verbose_name='工具组件')),
112
- ('refer', models.JSONField(default=dict, verbose_name='索引')),
113
- ('format', models.JSONField(default=dict, verbose_name='格式')),
114
- ('not_null', models.BooleanField(default=False, verbose_name='不为空')),
115
- ('allow_edit', models.BooleanField(default=True, verbose_name='可编辑')),
116
- ('allow_order', models.BooleanField(default=True, verbose_name='可排序')),
117
- ('allow_search', models.BooleanField(default=True, verbose_name='可搜索')),
118
- ('allow_download', models.BooleanField(default=True, verbose_name='可下载')),
119
- ('allow_upload', models.BooleanField(default=False, verbose_name='可上传')),
120
- ('allow_update', models.BooleanField(default=False, verbose_name='可更新')),
121
- ('unit', models.CharField(max_length=55, null=True, verbose_name='单位符')),
122
- ('column_width', models.FloatField(default=0, verbose_name='表头宽度')),
123
- ('align', models.CharField(default='left', max_length=55, verbose_name='对齐方式')),
124
- ('fixed', models.CharField(max_length=100, null=True, verbose_name='固定位置')),
125
- ('header_color', models.CharField(max_length=55, null=True, verbose_name='表头颜色')),
126
- ('cell_color', models.CharField(max_length=55, null=True, verbose_name='单元颜色')),
127
- ('edit_on_table', models.BooleanField(default=True, verbose_name='表格编辑')),
128
- ('hide_on_table', models.BooleanField(default=False, verbose_name='表内隐藏')),
129
- ('span', models.IntegerField(default=0, verbose_name='表单占位')),
130
- ('hide_on_form', models.BooleanField(default=False, verbose_name='表单隐藏')),
131
- ('hide_on_form_edit', models.BooleanField(default=False, verbose_name='编辑隐藏')),
132
- ('hide_on_form_insert', models.BooleanField(default=False, verbose_name='新增隐藏')),
133
- ('hide_on_form_branch', models.BooleanField(default=False, verbose_name='分支隐藏')),
134
- ('hide_on_form_leaf', models.BooleanField(default=False, verbose_name='叶子隐藏')),
135
- ('view', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='valar.metaview', verbose_name='数据视图')),
136
- ],
137
- options={
138
- 'verbose_name': '视图字段',
139
- },
140
- ),
141
- ]
migrations/__init__.py DELETED
File without changes
models/__init__.py DELETED
@@ -1 +0,0 @@
1
- from . import core, frame, meta
models/core.py DELETED
@@ -1,82 +0,0 @@
1
- from django.apps import AppConfig
2
- from django.db import models
3
- from django.db.models import ManyToOneRel, OneToOneRel, ManyToManyRel, ManyToManyField, UUIDField, FileField, \
4
- ForeignKey, OneToOneField, DateField, TimeField, DateTimeField, BigAutoField
5
- from django.db.models.options import Options
6
-
7
-
8
- class VModel(models.Model):
9
- objects = models.Manager()
10
- sort = models.BigIntegerField(null=True, verbose_name='序号')
11
- name = models.CharField(max_length=50, null=True)
12
- create_time = models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')
13
- modify_time = models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')
14
- saved = models.BooleanField(default=False)
15
-
16
- class Meta:
17
- abstract = True
18
-
19
- def __str__(self):
20
- return str(self.full())
21
-
22
- def get_meta(self)->Options:
23
- return getattr(self, '_meta')
24
-
25
- def get_entity(self):
26
- name = type(self).__name__
27
- config: AppConfig = self.get_meta().app_config
28
- return f'{config.label}.{name}'
29
-
30
- def json(self, *args, **kwargs):
31
- excludes = [ManyToOneRel, OneToOneRel, ManyToManyField, ManyToManyRel, UUIDField]
32
- fields = [field for field in self.get_meta().get_fields() if type(field) not in excludes]
33
- data = {}
34
- for field in fields:
35
- value = field.value_from_object(self)
36
- prop = field.name
37
- domain = type(field)
38
- if value is not None:
39
- if domain in [ForeignKey, OneToOneField]:
40
- prop = f'{prop}_id'
41
- elif domain in [DateTimeField]:
42
- value = value.strftime('%Y-%m-%d %H:%M:%S')
43
- elif domain in [DateField]:
44
- value = value.strftime('%Y-%m-%d')
45
- elif domain in [TimeField]:
46
- value = value.strftime('%H:%M:%S')
47
- elif domain in [FileField]:
48
- value = value.name
49
- elif domain in [BigAutoField]:
50
- value = str(value)
51
- data[prop] = value
52
- data.update({f'${k}': v for k,v in kwargs.items()})
53
- return data
54
-
55
- def full(self):
56
- includes = [ManyToManyField, ManyToManyRel, ForeignKey, ManyToOneRel, OneToOneField, OneToOneRel]
57
- fields = [field for field in self.get_meta().get_fields() if type(field) in includes]
58
- data = self.json()
59
- for field in fields:
60
- prop = field.name
61
- domain = type(field)
62
- if domain in [ForeignKey,OneToOneField]:
63
- bean: VModel = getattr(self, prop)
64
- data[prop] = bean.json() if bean else None
65
- elif domain == OneToOneRel:
66
- print('OneToOneRel')
67
- pass
68
- elif domain in [ManyToManyField,ManyToManyRel,ManyToOneRel]:
69
- accessor = prop if domain == ManyToManyField else field.get_accessor_name()
70
- _set = getattr(self, accessor).all().order_by('-sort')
71
- data[prop] = [item.id for item in _set]
72
- data[f'{prop}_set'] = [item.json() for item in _set]
73
- return data
74
-
75
-
76
- class VTree(VModel):
77
- pid = models.IntegerField(null=False, default=0, verbose_name='父节点')
78
- isLeaf = models.BooleanField( default=False, verbose_name='叶子节点')
79
- icon = models.CharField(max_length=255, null=True, verbose_name='图标')
80
- class Meta:
81
- abstract = True
82
-
models/frame.py DELETED
@@ -1,30 +0,0 @@
1
- from django.db import models
2
- from .core import VModel, VTree
3
-
4
-
5
- class MetaFieldTool(VTree):
6
- name = models.CharField(max_length=255, null=True, verbose_name='名称')
7
- code = models.CharField(max_length=100, unique=True, null=True, verbose_name='代码') #
8
-
9
- class Meta:
10
- verbose_name = '元数据字段工具'
11
- #
12
- #
13
-
14
- class MetaFieldDomain(VModel):
15
- name = models.CharField(max_length=255, unique=True, null=True, verbose_name='名称')
16
- tools = models.ManyToManyField(to=MetaFieldTool, verbose_name='工具集')
17
- default = models.ForeignKey(
18
- to=MetaFieldTool, null=True,
19
- on_delete=models.SET_NULL,
20
- related_name='+',
21
- verbose_name='默认工具')
22
- search = models.ForeignKey(
23
- to=MetaFieldTool, null=True,
24
- on_delete=models.SET_NULL,
25
- related_name='+',
26
- verbose_name='搜索工具')
27
- align = models.CharField(max_length=10, null=True, verbose_name='对齐方式')
28
- class Meta:
29
- verbose_name = '元数据字段类型'
30
-
models/meta.py DELETED
@@ -1,87 +0,0 @@
1
- from django.db import models
2
- from .core import VModel
3
-
4
-
5
- class Meta(VModel):
6
- db = models.CharField(max_length=100, verbose_name='数据库', null=True)
7
- entity = models.CharField(max_length=100, verbose_name='数据源', null=True)
8
- name = models.CharField(max_length=50, verbose_name='实体别名', null=True)
9
-
10
- class Meta:
11
- verbose_name = '数据实体'
12
- unique_together = ('db', 'entity')
13
-
14
-
15
- class MetaView(VModel):
16
- meta = models.ForeignKey('Meta', on_delete=models.CASCADE, verbose_name='元数据')
17
-
18
- code = models.CharField(max_length=50, verbose_name='类视图', default='default ')
19
- name = models.CharField(max_length=50, verbose_name='视图名称', null=True)
20
-
21
- form_width = models.IntegerField(default=0, verbose_name='表单宽度')
22
- form_height = models.IntegerField(default=0, verbose_name='表单高度')
23
- table_width = models.IntegerField(default=0, verbose_name='表格宽度')
24
- table_height = models.IntegerField(default=0, verbose_name='表格高度')
25
-
26
- enable = models.BooleanField(default=True, verbose_name='是否启用')
27
- show_header = models.BooleanField(default=True, verbose_name='展示头部')
28
- allow_search = models.BooleanField(default=True, verbose_name='检索功能')
29
- allow_sort = models.BooleanField(default=True, verbose_name='移动功能')
30
- allow_order = models.BooleanField(default=True, verbose_name='排序功能')
31
- allow_insert = models.BooleanField(default=True, verbose_name='新增功能')
32
- allow_edit = models.BooleanField(default=True, verbose_name='编辑功能')
33
- allow_remove = models.BooleanField(default=True, verbose_name='删除功能')
34
- allow_download = models.BooleanField(default=True, verbose_name='下载功能')
35
- allow_upload = models.BooleanField(default=True, verbose_name='上传功能')
36
-
37
- class Meta:
38
- verbose_name = '数据视图'
39
- unique_together = ('meta', 'code')
40
-
41
-
42
- class MetaField(VModel):
43
- # 标识
44
- view = models.ForeignKey('MetaView', on_delete=models.CASCADE, verbose_name='数据视图')
45
- prop = models.CharField(max_length=100, verbose_name='字段名称') #
46
- label = models.CharField(max_length=100, verbose_name='字段标签') #
47
- name = models.CharField(max_length=100, verbose_name='字段别名') #
48
-
49
- """tool"""
50
- domain = models.CharField(max_length=100, verbose_name='字段类型') #
51
- tool = models.CharField(max_length=100, default='default', verbose_name='工具组件')
52
- refer = models.JSONField(default=dict, verbose_name='索引') #
53
- format = models.JSONField(default=dict, verbose_name='格式') #
54
-
55
-
56
- """rest"""
57
- not_null = models.BooleanField(default=False, verbose_name='不为空') #
58
- allow_edit = models.BooleanField(default=True, verbose_name='可编辑')
59
- allow_order = models.BooleanField(default=True, verbose_name='可排序')
60
- allow_search = models.BooleanField(default=True, verbose_name='可搜索')
61
- allow_download = models.BooleanField(default=True, verbose_name='可下载')
62
- allow_upload = models.BooleanField(default=False, verbose_name='可上传')
63
- allow_update = models.BooleanField(default=False, verbose_name='可更新')
64
-
65
- """table"""
66
- unit = models.CharField(max_length=55, verbose_name='单位符', null=True)
67
- column_width = models.FloatField(default=0, verbose_name='表头宽度')
68
- align = models.CharField(max_length=55, default='left', verbose_name='对齐方式') #
69
- fixed = models.CharField(max_length=100, verbose_name='固定位置', null=True)
70
- header_color = models.CharField(max_length=55, verbose_name='表头颜色', null=True)
71
- cell_color = models.CharField(max_length=55, verbose_name='单元颜色', null=True)
72
- edit_on_table = models.BooleanField(default=True, verbose_name='表格编辑')
73
- hide_on_table = models.BooleanField(default=False, verbose_name='表内隐藏')
74
-
75
- """form"""
76
- span = models.IntegerField(default=0, verbose_name='表单占位')
77
- hide_on_form = models.BooleanField(default=False, verbose_name='表单隐藏')
78
- hide_on_form_edit = models.BooleanField(default=False, verbose_name='编辑隐藏')
79
- hide_on_form_insert = models.BooleanField(default=False, verbose_name='新增隐藏')
80
- hide_on_form_branch = models.BooleanField(default=False, verbose_name='分支隐藏')
81
- hide_on_form_leaf = models.BooleanField(default=False, verbose_name='叶子隐藏')
82
-
83
-
84
- class Meta:
85
- verbose_name = '视图字段'
86
-
87
-
@@ -1,12 +0,0 @@
1
- frame/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- migrations/0001_initial.py,sha256=fW74vobQLZ-cJlljq7LnuxlbMb_qibtx6sVDl6Egrq8,9745
3
- migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- models/__init__.py,sha256=t5BRtyeM8Pa3MRpiC72IoMIl6-2YGEZrU77iemLfuSk,31
5
- models/core.py,sha256=a-EEN6-s_wdKrgw8nJTPvWcvxRiSG-ff7k_L5_crW-0,3439
6
- models/frame.py,sha256=MrgcPfBLN0nvpIm2gF68YjmavIgOMGLZUjJ-eiNb90o,1016
7
- models/meta.py,sha256=auy7ofa5aR_1dmp-DtoQ7DiFsqKc923-Wh0ymTh7k0A,4470
8
- valar-1.1.0.dist-info/licenses/LICENSE,sha256=2bm9uFabQZ3Ykb_SaSU_uUbAj2-htc6WJQmS_65qD00,1073
9
- valar-1.1.0.dist-info/METADATA,sha256=1VudqlWI655yj_yGwO7Ap-AgyKxaZ_t9hsonBuMqZ_A,3394
10
- valar-1.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
11
- valar-1.1.0.dist-info/top_level.txt,sha256=ePTyujihr1SPrcV-yRJAGVq34JJTyn6MmqGGvHpIGOo,24
12
- valar-1.1.0.dist-info/RECORD,,
@@ -1,3 +0,0 @@
1
- frame
2
- migrations
3
- models
File without changes