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

Files changed (47) hide show
  1. valar/apps.py +6 -9
  2. valar/channels/consumer.py +10 -12
  3. valar/channels/executer.py +7 -6
  4. valar/channels/sender.py +95 -43
  5. valar/channels/views.py +2 -3
  6. valar/classes/{auto_migration_mixin.py → app_mixins/auto_migration_mixin.py} +2 -2
  7. valar/classes/{auto_urlpatterns_mixin.py → app_mixins/auto_urlpatterns_mixin.py} +3 -3
  8. valar/classes/valar_minio.py +80 -0
  9. valar/classes/valar_response.py +2 -1
  10. valar/dao/__init__.py +45 -0
  11. valar/dao/abstract.py +106 -0
  12. valar/dao/defaults/__init__.py +0 -0
  13. valar/dao/defaults/field_keys_default.py +48 -0
  14. valar/dao/defaults/field_values_default.py +135 -0
  15. valar/dao/defaults/view_defaults.py +26 -0
  16. valar/dao/engine.py +80 -0
  17. valar/dao/frame.py +189 -0
  18. valar/dao/meta.py +128 -0
  19. valar/dao/mon_dao.py +113 -0
  20. valar/dao/mon_field.py +23 -0
  21. valar/dao/orm_dao.py +304 -0
  22. valar/dao/orm_field.py +142 -0
  23. valar/dao/query.py +36 -0
  24. valar/migrations/0001_initial.py +25 -17
  25. valar/models/core.py +16 -10
  26. valar/models/frame.py +4 -7
  27. valar/models/meta.py +19 -16
  28. valar/urls.py +22 -0
  29. valar/views/file.py +49 -0
  30. valar/views/handler.py +33 -0
  31. valar/views/meta.py +150 -0
  32. valar/views/rest.py +90 -0
  33. {valar-1.1.4.dist-info → valar-1.2.1.dist-info}/METADATA +9 -14
  34. valar-1.2.1.dist-info/RECORD +54 -0
  35. {valar-1.1.4.dist-info → valar-1.2.1.dist-info}/top_level.txt +1 -0
  36. vtest/__init__.py +0 -0
  37. vtest/apps.py +17 -0
  38. vtest/handlers.py +15 -0
  39. vtest/migrations/0001_initial.py +155 -0
  40. vtest/migrations/__init__.py +0 -0
  41. vtest/models.py +59 -0
  42. vtest/views.py +8 -0
  43. valar-1.1.4.dist-info/RECORD +0 -28
  44. /valar/{classes → channels}/counter.py +0 -0
  45. /valar/{frame → classes/app_mixins}/__init__.py +0 -0
  46. {valar-1.1.4.dist-info → valar-1.2.1.dist-info}/WHEEL +0 -0
  47. {valar-1.1.4.dist-info → valar-1.2.1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,54 @@
1
+ valar/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ valar/apps.py,sha256=OGgsSN7nsa5GEA3kF0EqtY5eFWI5pnuR2tw32cZXmpo,632
3
+ valar/urls.py,sha256=tE_gvrzla_RDza7JOsINssxBmQfm_R-esUpNtwHUkf4,1099
4
+ valar/channels/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ valar/channels/consumer.py,sha256=fEP52wBHWccturn2QAkqOt9-_Fr8akiw95AoVc6dEMM,1395
6
+ valar/channels/counter.py,sha256=K8aQUI1RiIrSOg3280tV102soC-ZC1qSRZvBXuwNYQ0,377
7
+ valar/channels/executer.py,sha256=_Ap859nvxRl8Ln0BWMqhnL6cQNl-1NQSmMR4Akh-afY,333
8
+ valar/channels/mapping.py,sha256=1SBqxEYO4epbRkSOUw5zm6gau15imz1gokrRTQcy94A,755
9
+ valar/channels/sender.py,sha256=PMa6tM300VPsmDzI_b8n6g3u2YOhAmlve71k1pktKFE,3610
10
+ valar/channels/views.py,sha256=4J_f-Bn3VR0o0spOa9D52aRcxMRZ0YYgo-dMzJqFrd4,375
11
+ valar/classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
+ valar/classes/singleton_meta.py,sha256=aa9DZKG4Q9Cr67ZWrQ0yaFLrEjwFoTMQbDrpoIqgJZs,245
13
+ valar/classes/valar_minio.py,sha256=20FpP7fbSuKG4cTF0-gmYUvHnPsVvwWOchfljb92o-8,2720
14
+ valar/classes/valar_response.py,sha256=nwOOjT1AeORkxAIRTrXMPa6-xtMZP7XaLJnHG-yfudA,252
15
+ valar/classes/app_mixins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
+ valar/classes/app_mixins/auto_migration_mixin.py,sha256=Dkl1hgrQxoSjACSbBmodxt9C7RcxJ17CEUewpbeLyO4,338
17
+ valar/classes/app_mixins/auto_urlpatterns_mixin.py,sha256=FX-t-TJWawXyS2r6jbj_IrJBpzwMbWzIjyK6PsHL6XE,415
18
+ valar/dao/__init__.py,sha256=WGjXrnjmgcfOvtTYIVjtdsmh9mlc0IJCrZD2ScZ6Kx0,1335
19
+ valar/dao/abstract.py,sha256=2M5OLxze-uQDAJIgJtuGKoDjpwVw97Rg_wOeOq6gFTA,2318
20
+ valar/dao/engine.py,sha256=B41ScN2OqWpPmVX6n6EEqHPfNejCsMhAo4oBNOTOUAQ,2759
21
+ valar/dao/frame.py,sha256=9vDsJfB-Ztb4YN8Lt6pHJeF_RndqHsVeA_ygWIOgALM,7468
22
+ valar/dao/meta.py,sha256=qEdTmdLrurp3CCMiGGtsDwVkXys6Rb5P0s_pru2w90A,4930
23
+ valar/dao/mon_dao.py,sha256=TRrHUBdWBbOn47uV5ot_B2GcvWGoNpadJW_CkS0TEhc,3588
24
+ valar/dao/mon_field.py,sha256=AJp-KS19oRiRHtMidC_1uTv2oCplqO4-bdKNDLMllWU,570
25
+ valar/dao/orm_dao.py,sha256=yq3WoWsRQQCXKsX-jBMmyNBicpE22K1SkEldRbGPCHI,12322
26
+ valar/dao/orm_field.py,sha256=cl1c9SML9QHHwQCwTUeRsWXlumHLd82C5RRgdaIx5TU,5017
27
+ valar/dao/query.py,sha256=7MqCdwjdhXWBWjEggHVFQfC0zlZH3TrwuVxKE7E0OKA,1049
28
+ valar/dao/defaults/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
+ valar/dao/defaults/field_keys_default.py,sha256=ypirNtCqnHeQqya3lMaL604z8qWD7oemC4xPaiXAkCg,1817
30
+ valar/dao/defaults/field_values_default.py,sha256=6zKPqbw0vJKW_9ilj6PC7IgDyayiWjHsNc4y7aVzuNw,3552
31
+ valar/dao/defaults/view_defaults.py,sha256=v2wEgiaXqEcM4lcjM2uV83cLA5EJZf6qHfLZ7YJikIg,572
32
+ valar/migrations/0001_initial.py,sha256=ExzflfBPtc_I5kVrKOYY-YM3XStE4bIvqkq1MlYvMS0,10525
33
+ valar/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
+ valar/models/__init__.py,sha256=t5BRtyeM8Pa3MRpiC72IoMIl6-2YGEZrU77iemLfuSk,31
35
+ valar/models/core.py,sha256=ghtfs8uFH6SC0xvd-gkARr-FUWDXG0IMGWSuETOvecw,3695
36
+ valar/models/frame.py,sha256=N13Bok7XNJDLoYDCpCIq8tEUktQVNerrLtk_U0KDJAE,851
37
+ valar/models/meta.py,sha256=JPa-Rap2sdSYnG6Sk7_vFrg5flP3r6fAM7tRvlwb4Vw,4871
38
+ valar/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
+ valar/views/file.py,sha256=NxfbxT4EJRDFgXol06kD0vcSp4lN4BCVJ5wq43rh8Yg,1537
40
+ valar/views/handler.py,sha256=zlJoCnFnXK_2hyTXaNQrwj7svWQJk4ixIldCosIoCpY,1113
41
+ valar/views/meta.py,sha256=H3_raG-LEcfg1p_CBpluhPXBsLFQB_jtaI5CKGgYOKk,4774
42
+ valar/views/rest.py,sha256=HnmPR6_Q_NTtotaeDjfwIGwVG7eigtKBXfoaedUgar8,2349
43
+ valar-1.2.1.dist-info/licenses/LICENSE,sha256=2bm9uFabQZ3Ykb_SaSU_uUbAj2-htc6WJQmS_65qD00,1073
44
+ vtest/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
+ vtest/apps.py,sha256=3mGJT4YxdqrzxQj0uR1KnzBRO3ilu5CJNKmXvahDP1g,583
46
+ vtest/handlers.py,sha256=VQ9Lv5_zvlPmRjV81mX8QTsncm4bOlSHadBcX33SfxE,404
47
+ vtest/models.py,sha256=2xf9qSVbjj8j8dbSp0vx4SHIBdQAGzbVfsyt7nxKTq4,2567
48
+ vtest/views.py,sha256=o0ElFeXGRkmvtpblitAtGQqhwjnu6NIGiIetLNxdauE,172
49
+ vtest/migrations/0001_initial.py,sha256=l4D-fKYjX8qht95iY5dDpFO6bsz7RQY2mbCWRdvhaGo,9434
50
+ vtest/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
+ valar-1.2.1.dist-info/METADATA,sha256=4CaoLHVsjIVyZH4Aq2Kb5wQVr4cJ5Jonpaf2K_oL-dw,3272
52
+ valar-1.2.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
53
+ valar-1.2.1.dist-info/top_level.txt,sha256=BM6TVgqVM6zSHp9lZmbN46veSedwX0ezelOKL8C6IT4,12
54
+ valar-1.2.1.dist-info/RECORD,,
vtest/__init__.py ADDED
File without changes
vtest/apps.py ADDED
@@ -0,0 +1,17 @@
1
+ import os
2
+ from django.apps import AppConfig
3
+ from ..valar.classes.app_mixins.auto_migration_mixin import AutoMigrationMixin
4
+ from ..valar.classes.app_mixins.auto_urlpatterns_mixin import AutoUrlPatternsMixin
5
+
6
+ valar_app = __package__.replace('src.', '')
7
+
8
+
9
+ class VTestConfig(AutoMigrationMixin, AppConfig):
10
+ default_auto_field = 'django.db.models.BigAutoField'
11
+ name = __package__
12
+
13
+ def ready(self):
14
+ if os.environ.get('RUN_MAIN') == 'true':
15
+ from ..valar.dao.frame import MetaFrame
16
+ getattr(super(), 'auto_migrate', None)()
17
+ MetaFrame()
vtest/handlers.py ADDED
@@ -0,0 +1,15 @@
1
+ import time
2
+
3
+ from ..valar.channels.counter import Counter
4
+ from ..valar.channels.sender import ValarChannelSender
5
+
6
+
7
+ def valar_test_handler(sender: ValarChannelSender):
8
+ data = sender.data
9
+ length = data.get('length', 100)
10
+ counter = Counter(length)
11
+ for i in range(length):
12
+ time.sleep(0.1)
13
+ tick = counter.tick()
14
+ tick.update({'name': 'test1'})
15
+ sender.load(tick)
@@ -0,0 +1,155 @@
1
+ # Generated by Django 4.2.23 on 2025-08-28 10:15
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='Case',
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
+ ('name', models.CharField(max_length=50, null=True)),
21
+ ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
22
+ ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
23
+ ('disabled', models.BooleanField(default=False, verbose_name='禁用')),
24
+ ('saved', models.BooleanField(default=False, verbose_name='已保存')),
25
+ ('a1', models.FloatField(default=0, verbose_name='余额')),
26
+ ('a2', models.FloatField(default=0, verbose_name='已用信用额度')),
27
+ ('a3', models.FloatField(default=0, verbose_name='年还款额')),
28
+ ('a4', models.FloatField(default=0, verbose_name='年收入/年还款')),
29
+ ('a5', models.FloatField(default=0, verbose_name='负债')),
30
+ ('a6', models.FloatField(default=0, verbose_name='利率*期数')),
31
+ ('a7', models.FloatField(default=0, verbose_name='分期付款/年收入')),
32
+ ('a8', models.FloatField(default=0, verbose_name='贷款人均负债')),
33
+ ('a9', models.FloatField(default=0, verbose_name='匿名特征加总')),
34
+ ('a10', models.FloatField(default=0, verbose_name='有效不良记录数')),
35
+ ],
36
+ options={
37
+ 'abstract': False,
38
+ },
39
+ ),
40
+ migrations.CreateModel(
41
+ name='Tree',
42
+ fields=[
43
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
44
+ ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
45
+ ('name', models.CharField(max_length=50, null=True)),
46
+ ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
47
+ ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
48
+ ('disabled', models.BooleanField(default=False, verbose_name='禁用')),
49
+ ('saved', models.BooleanField(default=False, verbose_name='已保存')),
50
+ ('pid', models.IntegerField(default=0, verbose_name='父节点')),
51
+ ('isLeaf', models.BooleanField(default=False, verbose_name='叶子节点')),
52
+ ('icon', models.CharField(max_length=255, null=True, verbose_name='图标')),
53
+ ('text', models.TextField(null=True, verbose_name='text')),
54
+ ],
55
+ options={
56
+ 'verbose_name': '树形测试',
57
+ },
58
+ ),
59
+ migrations.CreateModel(
60
+ name='Vala',
61
+ fields=[
62
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
63
+ ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
64
+ ('name', models.CharField(max_length=50, null=True)),
65
+ ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
66
+ ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
67
+ ('disabled', models.BooleanField(default=False, verbose_name='禁用')),
68
+ ('saved', models.BooleanField(default=False, verbose_name='已保存')),
69
+ ('text_field', models.TextField(null=True, verbose_name='text')),
70
+ ('boolean_field', models.BooleanField(null=True, verbose_name='boolean')),
71
+ ('integer_field', models.IntegerField(null=True, verbose_name='integer')),
72
+ ('float_field', models.FloatField(null=True, verbose_name='float')),
73
+ ('date_field', models.DateField(null=True, verbose_name='date')),
74
+ ('datetime_field', models.DateTimeField(null=True, verbose_name='datetime')),
75
+ ('time_field', models.TimeField(null=True, verbose_name='time')),
76
+ ('json_field', models.JSONField(null=True, verbose_name='json')),
77
+ ('file', models.FileField(null=True, upload_to='', verbose_name='File')),
78
+ ],
79
+ options={
80
+ 'abstract': False,
81
+ },
82
+ ),
83
+ migrations.CreateModel(
84
+ name='O2O',
85
+ fields=[
86
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
87
+ ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
88
+ ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
89
+ ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
90
+ ('disabled', models.BooleanField(default=False, verbose_name='禁用')),
91
+ ('saved', models.BooleanField(default=False, verbose_name='已保存')),
92
+ ('name', models.CharField(max_length=100, null=True, verbose_name='name')),
93
+ ('vala', models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, to='vtest.vala', verbose_name='vala')),
94
+ ],
95
+ options={
96
+ 'abstract': False,
97
+ },
98
+ ),
99
+ migrations.CreateModel(
100
+ name='M2O',
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
+ ('disabled', models.BooleanField(default=False, verbose_name='禁用')),
107
+ ('saved', models.BooleanField(default=False, verbose_name='已保存')),
108
+ ('name', models.CharField(max_length=100, null=True, verbose_name='name')),
109
+ ('vala', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='vtest.vala', verbose_name='vala')),
110
+ ],
111
+ options={
112
+ 'abstract': False,
113
+ },
114
+ ),
115
+ migrations.CreateModel(
116
+ name='M2M',
117
+ fields=[
118
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
119
+ ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
120
+ ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
121
+ ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
122
+ ('disabled', models.BooleanField(default=False, verbose_name='禁用')),
123
+ ('saved', models.BooleanField(default=False, verbose_name='已保存')),
124
+ ('pid', models.IntegerField(default=0, verbose_name='父节点')),
125
+ ('isLeaf', models.BooleanField(default=False, verbose_name='叶子节点')),
126
+ ('icon', models.CharField(max_length=255, null=True, verbose_name='图标')),
127
+ ('name', models.CharField(max_length=100, null=True, verbose_name='name')),
128
+ ('valas', models.ManyToManyField(to='vtest.vala', verbose_name='valas')),
129
+ ],
130
+ options={
131
+ 'abstract': False,
132
+ },
133
+ ),
134
+ migrations.CreateModel(
135
+ name='Forcast',
136
+ fields=[
137
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
138
+ ('sort', models.BigIntegerField(null=True, verbose_name='序号')),
139
+ ('name', models.CharField(max_length=50, null=True)),
140
+ ('create_time', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
141
+ ('modify_time', models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')),
142
+ ('disabled', models.BooleanField(default=False, verbose_name='禁用')),
143
+ ('saved', models.BooleanField(default=False, verbose_name='已保存')),
144
+ ('type', models.CharField(max_length=100, verbose_name='类别')),
145
+ ('test', models.FloatField(default=0, verbose_name='测试集')),
146
+ ('train', models.FloatField(default=0, verbose_name='训练集')),
147
+ ('varify', models.FloatField(default=0, verbose_name='验证集')),
148
+ ('value', models.FloatField(default=0, verbose_name='预测结果')),
149
+ ('case', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='vtest.case')),
150
+ ],
151
+ options={
152
+ 'abstract': False,
153
+ },
154
+ ),
155
+ ]
File without changes
vtest/models.py ADDED
@@ -0,0 +1,59 @@
1
+ from django.db import models
2
+
3
+ from ..valar.models.core import VModel, VTree
4
+
5
+
6
+ class Case(VModel):
7
+ a1 = models.FloatField(default=0, verbose_name='余额')
8
+ a2 = models.FloatField(default=0, verbose_name='已用信用额度')
9
+ a3 = models.FloatField(default=0, verbose_name='年还款额')
10
+ a4 = models.FloatField(default=0, verbose_name='年收入/年还款')
11
+ a5 = models.FloatField(default=0, verbose_name='负债')
12
+ a6 = models.FloatField(default=0, verbose_name='利率*期数')
13
+ a7 = models.FloatField(default=0, verbose_name='分期付款/年收入')
14
+ a8 = models.FloatField(default=0, verbose_name='贷款人均负债')
15
+ a9 = models.FloatField(default=0, verbose_name='匿名特征加总')
16
+ a10 = models.FloatField(default=0, verbose_name='有效不良记录数')
17
+
18
+
19
+ class Forcast(VModel):
20
+ case = models.ForeignKey(Case, on_delete=models.CASCADE, null=True)
21
+ type = models.CharField(max_length=100, verbose_name='类别')
22
+ test = models.FloatField(default=0, verbose_name='测试集')
23
+ train = models.FloatField(default=0, verbose_name='训练集')
24
+ varify = models.FloatField(default=0, verbose_name='验证集')
25
+ value = models.FloatField(default=0, verbose_name='预测结果')
26
+
27
+
28
+ class Vala(VModel):
29
+ text_field = models.TextField(null=True, verbose_name='text')
30
+ boolean_field = models.BooleanField(null=True, verbose_name='boolean')
31
+ integer_field = models.IntegerField(null=True, verbose_name='integer')
32
+ float_field = models.FloatField(null=True, verbose_name='float')
33
+ date_field = models.DateField(null=True, verbose_name='date')
34
+ datetime_field = models.DateTimeField(null=True, verbose_name='datetime')
35
+ time_field = models.TimeField(null=True, verbose_name='time')
36
+ json_field = models.JSONField(null=True, verbose_name='json')
37
+ file = models.FileField(null=True, verbose_name='File')
38
+
39
+
40
+ class M2O(VModel):
41
+ vala = models.ForeignKey(to=Vala, null=True, on_delete=models.CASCADE, verbose_name='vala')
42
+ name = models.CharField(max_length=100, null=True, verbose_name='name')
43
+
44
+
45
+ class O2O(VModel):
46
+ vala = models.OneToOneField(to=Vala, null=True, on_delete=models.CASCADE, verbose_name='vala')
47
+ name = models.CharField(max_length=100, null=True, verbose_name='name')
48
+
49
+
50
+ class M2M(VTree):
51
+ valas = models.ManyToManyField(to=Vala, verbose_name='valas')
52
+ name = models.CharField(max_length=100, null=True, verbose_name='name')
53
+
54
+
55
+ class Tree(VTree):
56
+ text = models.TextField(null=True, verbose_name='text')
57
+
58
+ class Meta:
59
+ verbose_name = '树形测试'
vtest/views.py ADDED
@@ -0,0 +1,8 @@
1
+ import json
2
+
3
+ from ..valar.classes.valar_response import ValarResponse
4
+
5
+
6
+ def valar_test_request(request):
7
+ body = json.loads(request.body)
8
+ return ValarResponse(body)
@@ -1,28 +0,0 @@
1
- valar/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- valar/apps.py,sha256=0y3wm8zrT4tnjkgbjjUIO2zuqnBWt-WxNlf3t2buYA4,531
3
- valar/urls.py,sha256=FbM-Wbc7gnda7tlC2dbACxeWcobp_lWlpY29jwxANQY,142
4
- valar/channels/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- valar/channels/consumer.py,sha256=w2Cc-4Jy3tt5h8lKwtmcsJd3yo6HOIrkPspDc1dIQSg,1421
6
- valar/channels/executer.py,sha256=lurFYyUETq6eWjFUXA-m7mmQTeZtwfxrzuOayWxs4BE,314
7
- valar/channels/mapping.py,sha256=1SBqxEYO4epbRkSOUw5zm6gau15imz1gokrRTQcy94A,755
8
- valar/channels/sender.py,sha256=x9oYOYSK0e5E37GauWF5KKbyG1toe8wRAPwSAv0TQms,2465
9
- valar/channels/views.py,sha256=SMY80ZVDDjIZI-k75TymhToV-3fXPAMxcD93G7mDeRw,374
10
- valar/classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- valar/classes/auto_migration_mixin.py,sha256=PpqZaIYXMDmlMzfDbmdMNv18T_d7wA8yfVSgU4Qw3uM,337
12
- valar/classes/auto_urlpatterns_mixin.py,sha256=b0gB2_GpFfpLusNAFGrDvCxlSRghlNlRzNyadrtLDLo,414
13
- valar/classes/counter.py,sha256=K8aQUI1RiIrSOg3280tV102soC-ZC1qSRZvBXuwNYQ0,377
14
- valar/classes/singleton_meta.py,sha256=aa9DZKG4Q9Cr67ZWrQ0yaFLrEjwFoTMQbDrpoIqgJZs,245
15
- valar/classes/valar_response.py,sha256=kQnHWm8McUKTE_Q20JjLQsXOAv-IX979FRg6O42Tsng,246
16
- valar/frame/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
- valar/migrations/0001_initial.py,sha256=QVvA_HAEqs5aXx-YiThpQu8PHnY1ESvnINGTL4aqNsw,9745
18
- valar/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
- valar/models/__init__.py,sha256=t5BRtyeM8Pa3MRpiC72IoMIl6-2YGEZrU77iemLfuSk,31
20
- valar/models/core.py,sha256=a-EEN6-s_wdKrgw8nJTPvWcvxRiSG-ff7k_L5_crW-0,3439
21
- valar/models/frame.py,sha256=MrgcPfBLN0nvpIm2gF68YjmavIgOMGLZUjJ-eiNb90o,1016
22
- valar/models/meta.py,sha256=auy7ofa5aR_1dmp-DtoQ7DiFsqKc923-Wh0ymTh7k0A,4470
23
- valar/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
- valar-1.1.4.dist-info/licenses/LICENSE,sha256=2bm9uFabQZ3Ykb_SaSU_uUbAj2-htc6WJQmS_65qD00,1073
25
- valar-1.1.4.dist-info/METADATA,sha256=-D01bxbiuQZPeWBlVhP3BkGKnqnx1tZN1iQzLi1r41w,3431
26
- valar-1.1.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
27
- valar-1.1.4.dist-info/top_level.txt,sha256=TVi6VcvvYfVYZ_WnUVwT4psI8p6inaP3KfmQEWrrvYg,6
28
- valar-1.1.4.dist-info/RECORD,,
File without changes
File without changes
File without changes