valar 1.2.0__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.

@@ -1,8 +1,8 @@
1
1
  class AutoMigrationMixin:
2
2
  name = None # 子类必须提供
3
+
3
4
  def auto_migrate(self):
4
5
  from django.core.management import call_command
5
- app = self.name.replace('src.','')
6
+ app = self.name.replace('src.', '')
6
7
  call_command('makemigrations', app, interactive=False, verbosity=0)
7
8
  call_command('migrate', app, interactive=False, verbosity=0)
8
-
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: valar
3
- Version: 1.2.0
3
+ Version: 1.2.1
4
4
  Summary: valar for morghulis
5
5
  Home-page: https://gitee.com/GRIFFIN120/valar_dev
6
6
  Author: LYP
@@ -27,12 +27,13 @@ Dynamic: requires-python
27
27
  Dynamic: summary
28
28
 
29
29
  valar for morghulis
30
+
30
31
  # 1. install
32
+
31
33
  ```shell
32
34
  pip install valar
33
35
  ```
34
36
 
35
-
36
37
  # 1. settings
37
38
 
38
39
  ```python
@@ -47,16 +48,12 @@ BASE_APP = str(BASE_DIR.name)
47
48
  DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
48
49
  SECRET_KEY = get_random_secret_key()
49
50
 
50
-
51
-
52
51
  """ Valar Options """
53
52
 
54
53
  HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
55
54
  MONGO_URI = 'mongodb://root:19870120@121.41.111.175:27017/'
56
55
  MINIO_URL = "s3://admin:password@120.27.8.186:9000"
57
56
 
58
-
59
-
60
57
  """ Minimized compulsory settings """
61
58
 
62
59
  DATABASES = {
@@ -69,7 +66,7 @@ INSTALLED_APPS = [
69
66
  'django.contrib.sessions',
70
67
  "corsheaders",
71
68
  'channels',
72
- 'valar',
69
+ 'valar.apps.ValarConfig',
73
70
  ]
74
71
  MIDDLEWARE = [
75
72
  'django.contrib.sessions.middleware.SessionMiddleware',
@@ -99,6 +96,7 @@ FILE_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
99
96
  DATA_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
100
97
 
101
98
  ```
99
+
102
100
  # 2. asgi
103
101
 
104
102
  ```python
@@ -117,8 +115,8 @@ application = ProtocolTypeRouter({
117
115
  ```
118
116
 
119
117
  # 3. migrate
120
- no need, valar will auto migration
121
118
 
119
+ no need, valar will auto migration
122
120
 
123
121
  # 4. root urls
124
122
 
@@ -126,7 +124,6 @@ no need, valar will auto set urlpatterns
126
124
 
127
125
  # 5. how to use valar_channel
128
126
 
129
-
130
127
  5.1 set HANDLER_MAPPING in settings
131
128
 
132
129
  ```python
@@ -137,13 +134,11 @@ HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
137
134
 
138
135
  ```python
139
136
  from valar.channels.sender import ValarSocketSender
137
+
138
+
140
139
  def test_handler(sender: ValarSocketSender):
141
140
  data = sender.data
142
- length = data.get('length',30)
143
- counter = sender.create_counter(length)
144
- for i in range(length):
145
- # sync method
146
- sender.to_clients(counter.tick() ,sender.client, wait=True)
141
+ sender.load(data)
147
142
  ```
148
143
 
149
144
  5.3 register handler in channel_mapping
@@ -13,7 +13,7 @@ valar/classes/singleton_meta.py,sha256=aa9DZKG4Q9Cr67ZWrQ0yaFLrEjwFoTMQbDrpoIqgJ
13
13
  valar/classes/valar_minio.py,sha256=20FpP7fbSuKG4cTF0-gmYUvHnPsVvwWOchfljb92o-8,2720
14
14
  valar/classes/valar_response.py,sha256=nwOOjT1AeORkxAIRTrXMPa6-xtMZP7XaLJnHG-yfudA,252
15
15
  valar/classes/app_mixins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- valar/classes/app_mixins/auto_migration_mixin.py,sha256=PpqZaIYXMDmlMzfDbmdMNv18T_d7wA8yfVSgU4Qw3uM,337
16
+ valar/classes/app_mixins/auto_migration_mixin.py,sha256=Dkl1hgrQxoSjACSbBmodxt9C7RcxJ17CEUewpbeLyO4,338
17
17
  valar/classes/app_mixins/auto_urlpatterns_mixin.py,sha256=FX-t-TJWawXyS2r6jbj_IrJBpzwMbWzIjyK6PsHL6XE,415
18
18
  valar/dao/__init__.py,sha256=WGjXrnjmgcfOvtTYIVjtdsmh9mlc0IJCrZD2ScZ6Kx0,1335
19
19
  valar/dao/abstract.py,sha256=2M5OLxze-uQDAJIgJtuGKoDjpwVw97Rg_wOeOq6gFTA,2318
@@ -40,8 +40,15 @@ valar/views/file.py,sha256=NxfbxT4EJRDFgXol06kD0vcSp4lN4BCVJ5wq43rh8Yg,1537
40
40
  valar/views/handler.py,sha256=zlJoCnFnXK_2hyTXaNQrwj7svWQJk4ixIldCosIoCpY,1113
41
41
  valar/views/meta.py,sha256=H3_raG-LEcfg1p_CBpluhPXBsLFQB_jtaI5CKGgYOKk,4774
42
42
  valar/views/rest.py,sha256=HnmPR6_Q_NTtotaeDjfwIGwVG7eigtKBXfoaedUgar8,2349
43
- valar-1.2.0.dist-info/licenses/LICENSE,sha256=2bm9uFabQZ3Ykb_SaSU_uUbAj2-htc6WJQmS_65qD00,1073
44
- valar-1.2.0.dist-info/METADATA,sha256=8VwVIvq2k2Ck8ZSJ2t3mfUqWTMLOCgNUt-olqZmaM4k,3431
45
- valar-1.2.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
46
- valar-1.2.0.dist-info/top_level.txt,sha256=TVi6VcvvYfVYZ_WnUVwT4psI8p6inaP3KfmQEWrrvYg,6
47
- valar-1.2.0.dist-info/RECORD,,
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)
File without changes