valar 1.2.0__tar.gz → 1.2.2__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 (58) hide show
  1. {valar-1.2.0/src/valar.egg-info → valar-1.2.2}/PKG-INFO +10 -14
  2. {valar-1.2.0 → valar-1.2.2}/README.md +8 -13
  3. {valar-1.2.0 → valar-1.2.2}/setup.py +3 -2
  4. {valar-1.2.0 → valar-1.2.2}/src/valar/apps.py +2 -4
  5. {valar-1.2.0 → valar-1.2.2/src/valar.egg-info}/PKG-INFO +10 -14
  6. {valar-1.2.0 → valar-1.2.2}/src/valar.egg-info/SOURCES.txt +8 -4
  7. {valar-1.2.0 → valar-1.2.2}/src/valar.egg-info/requires.txt +1 -0
  8. {valar-1.2.0 → valar-1.2.2}/src/valar.egg-info/top_level.txt +1 -0
  9. valar-1.2.2/src/vtest/apps.py +17 -0
  10. valar-1.2.2/src/vtest/handlers.py +15 -0
  11. valar-1.2.2/src/vtest/migrations/0001_initial.py +155 -0
  12. valar-1.2.2/src/vtest/migrations/__init__.py +0 -0
  13. valar-1.2.2/src/vtest/models.py +59 -0
  14. valar-1.2.2/src/vtest/views.py +8 -0
  15. valar-1.2.0/src/valar/classes/app_mixins/auto_migration_mixin.py +0 -8
  16. valar-1.2.0/src/valar/classes/app_mixins/auto_urlpatterns_mixin.py +0 -15
  17. {valar-1.2.0 → valar-1.2.2}/LICENSE +0 -0
  18. {valar-1.2.0 → valar-1.2.2}/setup.cfg +0 -0
  19. {valar-1.2.0 → valar-1.2.2}/src/valar/__init__.py +0 -0
  20. {valar-1.2.0 → valar-1.2.2}/src/valar/channels/__init__.py +0 -0
  21. {valar-1.2.0 → valar-1.2.2}/src/valar/channels/consumer.py +0 -0
  22. {valar-1.2.0 → valar-1.2.2}/src/valar/channels/counter.py +0 -0
  23. {valar-1.2.0 → valar-1.2.2}/src/valar/channels/executer.py +0 -0
  24. {valar-1.2.0 → valar-1.2.2}/src/valar/channels/mapping.py +0 -0
  25. {valar-1.2.0 → valar-1.2.2}/src/valar/channels/sender.py +0 -0
  26. {valar-1.2.0 → valar-1.2.2}/src/valar/channels/views.py +0 -0
  27. {valar-1.2.0 → valar-1.2.2}/src/valar/classes/__init__.py +0 -0
  28. {valar-1.2.0 → valar-1.2.2}/src/valar/classes/singleton_meta.py +0 -0
  29. {valar-1.2.0 → valar-1.2.2}/src/valar/classes/valar_minio.py +0 -0
  30. {valar-1.2.0 → valar-1.2.2}/src/valar/classes/valar_response.py +0 -0
  31. {valar-1.2.0 → valar-1.2.2}/src/valar/dao/__init__.py +0 -0
  32. {valar-1.2.0 → valar-1.2.2}/src/valar/dao/abstract.py +0 -0
  33. {valar-1.2.0/src/valar/classes/app_mixins → valar-1.2.2/src/valar/dao/defaults}/__init__.py +0 -0
  34. {valar-1.2.0 → valar-1.2.2}/src/valar/dao/defaults/field_keys_default.py +0 -0
  35. {valar-1.2.0 → valar-1.2.2}/src/valar/dao/defaults/field_values_default.py +0 -0
  36. {valar-1.2.0 → valar-1.2.2}/src/valar/dao/defaults/view_defaults.py +0 -0
  37. {valar-1.2.0 → valar-1.2.2}/src/valar/dao/engine.py +0 -0
  38. {valar-1.2.0 → valar-1.2.2}/src/valar/dao/frame.py +0 -0
  39. {valar-1.2.0 → valar-1.2.2}/src/valar/dao/meta.py +0 -0
  40. {valar-1.2.0 → valar-1.2.2}/src/valar/dao/mon_dao.py +0 -0
  41. {valar-1.2.0 → valar-1.2.2}/src/valar/dao/mon_field.py +0 -0
  42. {valar-1.2.0 → valar-1.2.2}/src/valar/dao/orm_dao.py +0 -0
  43. {valar-1.2.0 → valar-1.2.2}/src/valar/dao/orm_field.py +0 -0
  44. {valar-1.2.0 → valar-1.2.2}/src/valar/dao/query.py +0 -0
  45. {valar-1.2.0 → valar-1.2.2}/src/valar/migrations/0001_initial.py +0 -0
  46. {valar-1.2.0/src/valar/dao/defaults → valar-1.2.2/src/valar/migrations}/__init__.py +0 -0
  47. {valar-1.2.0 → valar-1.2.2}/src/valar/models/__init__.py +0 -0
  48. {valar-1.2.0 → valar-1.2.2}/src/valar/models/core.py +0 -0
  49. {valar-1.2.0 → valar-1.2.2}/src/valar/models/frame.py +0 -0
  50. {valar-1.2.0 → valar-1.2.2}/src/valar/models/meta.py +0 -0
  51. {valar-1.2.0 → valar-1.2.2}/src/valar/urls.py +0 -0
  52. {valar-1.2.0/src/valar/migrations → valar-1.2.2/src/valar/views}/__init__.py +0 -0
  53. {valar-1.2.0 → valar-1.2.2}/src/valar/views/file.py +0 -0
  54. {valar-1.2.0 → valar-1.2.2}/src/valar/views/handler.py +0 -0
  55. {valar-1.2.0 → valar-1.2.2}/src/valar/views/meta.py +0 -0
  56. {valar-1.2.0 → valar-1.2.2}/src/valar/views/rest.py +0 -0
  57. {valar-1.2.0 → valar-1.2.2}/src/valar.egg-info/dependency_links.txt +0 -0
  58. {valar-1.2.0/src/valar/views → valar-1.2.2/src/vtest}/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: valar
3
- Version: 1.2.0
3
+ Version: 1.2.2
4
4
  Summary: valar for morghulis
5
5
  Home-page: https://gitee.com/GRIFFIN120/valar_dev
6
6
  Author: LYP
@@ -16,6 +16,7 @@ Requires-Dist: pandas==2.2.3
16
16
  Requires-Dist: openpyxl==3.1.5
17
17
  Requires-Dist: deepmerge~=2.0
18
18
  Requires-Dist: minio==7.2.2
19
+ Requires-Dist: valar-auto-mixins~=0.0.1
19
20
  Dynamic: author
20
21
  Dynamic: author-email
21
22
  Dynamic: description
@@ -27,12 +28,13 @@ Dynamic: requires-python
27
28
  Dynamic: summary
28
29
 
29
30
  valar for morghulis
31
+
30
32
  # 1. install
33
+
31
34
  ```shell
32
35
  pip install valar
33
36
  ```
34
37
 
35
-
36
38
  # 1. settings
37
39
 
38
40
  ```python
@@ -47,16 +49,12 @@ BASE_APP = str(BASE_DIR.name)
47
49
  DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
48
50
  SECRET_KEY = get_random_secret_key()
49
51
 
50
-
51
-
52
52
  """ Valar Options """
53
53
 
54
54
  HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
55
55
  MONGO_URI = 'mongodb://root:19870120@121.41.111.175:27017/'
56
56
  MINIO_URL = "s3://admin:password@120.27.8.186:9000"
57
57
 
58
-
59
-
60
58
  """ Minimized compulsory settings """
61
59
 
62
60
  DATABASES = {
@@ -69,7 +67,7 @@ INSTALLED_APPS = [
69
67
  'django.contrib.sessions',
70
68
  "corsheaders",
71
69
  'channels',
72
- 'valar',
70
+ 'valar.apps.ValarConfig',
73
71
  ]
74
72
  MIDDLEWARE = [
75
73
  'django.contrib.sessions.middleware.SessionMiddleware',
@@ -99,6 +97,7 @@ FILE_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
99
97
  DATA_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
100
98
 
101
99
  ```
100
+
102
101
  # 2. asgi
103
102
 
104
103
  ```python
@@ -117,8 +116,8 @@ application = ProtocolTypeRouter({
117
116
  ```
118
117
 
119
118
  # 3. migrate
120
- no need, valar will auto migration
121
119
 
120
+ no need, valar will auto migration
122
121
 
123
122
  # 4. root urls
124
123
 
@@ -126,7 +125,6 @@ no need, valar will auto set urlpatterns
126
125
 
127
126
  # 5. how to use valar_channel
128
127
 
129
-
130
128
  5.1 set HANDLER_MAPPING in settings
131
129
 
132
130
  ```python
@@ -137,13 +135,11 @@ HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
137
135
 
138
136
  ```python
139
137
  from valar.channels.sender import ValarSocketSender
138
+
139
+
140
140
  def test_handler(sender: ValarSocketSender):
141
141
  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)
142
+ sender.load(data)
147
143
  ```
148
144
 
149
145
  5.3 register handler in channel_mapping
@@ -1,10 +1,11 @@
1
1
  valar for morghulis
2
+
2
3
  # 1. install
4
+
3
5
  ```shell
4
6
  pip install valar
5
7
  ```
6
8
 
7
-
8
9
  # 1. settings
9
10
 
10
11
  ```python
@@ -19,16 +20,12 @@ BASE_APP = str(BASE_DIR.name)
19
20
  DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
20
21
  SECRET_KEY = get_random_secret_key()
21
22
 
22
-
23
-
24
23
  """ Valar Options """
25
24
 
26
25
  HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
27
26
  MONGO_URI = 'mongodb://root:19870120@121.41.111.175:27017/'
28
27
  MINIO_URL = "s3://admin:password@120.27.8.186:9000"
29
28
 
30
-
31
-
32
29
  """ Minimized compulsory settings """
33
30
 
34
31
  DATABASES = {
@@ -41,7 +38,7 @@ INSTALLED_APPS = [
41
38
  'django.contrib.sessions',
42
39
  "corsheaders",
43
40
  'channels',
44
- 'valar',
41
+ 'valar.apps.ValarConfig',
45
42
  ]
46
43
  MIDDLEWARE = [
47
44
  'django.contrib.sessions.middleware.SessionMiddleware',
@@ -71,6 +68,7 @@ FILE_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
71
68
  DATA_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
72
69
 
73
70
  ```
71
+
74
72
  # 2. asgi
75
73
 
76
74
  ```python
@@ -89,8 +87,8 @@ application = ProtocolTypeRouter({
89
87
  ```
90
88
 
91
89
  # 3. migrate
92
- no need, valar will auto migration
93
90
 
91
+ no need, valar will auto migration
94
92
 
95
93
  # 4. root urls
96
94
 
@@ -98,7 +96,6 @@ no need, valar will auto set urlpatterns
98
96
 
99
97
  # 5. how to use valar_channel
100
98
 
101
-
102
99
  5.1 set HANDLER_MAPPING in settings
103
100
 
104
101
  ```python
@@ -109,13 +106,11 @@ HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
109
106
 
110
107
  ```python
111
108
  from valar.channels.sender import ValarSocketSender
109
+
110
+
112
111
  def test_handler(sender: ValarSocketSender):
113
112
  data = sender.data
114
- length = data.get('length',30)
115
- counter = sender.create_counter(length)
116
- for i in range(length):
117
- # sync method
118
- sender.to_clients(counter.tick() ,sender.client, wait=True)
113
+ sender.load(data)
119
114
  ```
120
115
 
121
116
  5.3 register handler in channel_mapping
@@ -11,12 +11,13 @@ requires = [
11
11
  'pandas==2.2.3',
12
12
  'openpyxl==3.1.5',
13
13
  'deepmerge~=2.0',
14
- 'minio==7.2.2'
14
+ 'minio==7.2.2',
15
+ 'valar-auto-mixins~=0.0.1'
15
16
  ]
16
17
 
17
18
  setup(
18
19
  name="valar", # 包名
19
- version="1.2.0", # 版本号
20
+ version="1.2.2", # 版本号
20
21
  author="LYP", # 作者
21
22
  author_email="liuyinpeng@buaa.edu.cn", # 邮箱
22
23
  description="valar for morghulis", # 简短描述
@@ -1,9 +1,7 @@
1
1
  import os
2
2
  from django.apps import AppConfig
3
- from .classes.app_mixins.auto_migration_mixin import AutoMigrationMixin
4
- from .classes.app_mixins.auto_urlpatterns_mixin import AutoUrlPatternsMixin
5
-
6
- valar_app = __package__.replace('src.', '')
3
+ from valar_app_mixins.auto_migration_mixin import AutoMigrationMixin
4
+ from valar_app_mixins.auto_urlpatterns_mixin import AutoUrlPatternsMixin
7
5
 
8
6
 
9
7
  class ValarConfig(AutoMigrationMixin, AutoUrlPatternsMixin, AppConfig):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: valar
3
- Version: 1.2.0
3
+ Version: 1.2.2
4
4
  Summary: valar for morghulis
5
5
  Home-page: https://gitee.com/GRIFFIN120/valar_dev
6
6
  Author: LYP
@@ -16,6 +16,7 @@ Requires-Dist: pandas==2.2.3
16
16
  Requires-Dist: openpyxl==3.1.5
17
17
  Requires-Dist: deepmerge~=2.0
18
18
  Requires-Dist: minio==7.2.2
19
+ Requires-Dist: valar-auto-mixins~=0.0.1
19
20
  Dynamic: author
20
21
  Dynamic: author-email
21
22
  Dynamic: description
@@ -27,12 +28,13 @@ Dynamic: requires-python
27
28
  Dynamic: summary
28
29
 
29
30
  valar for morghulis
31
+
30
32
  # 1. install
33
+
31
34
  ```shell
32
35
  pip install valar
33
36
  ```
34
37
 
35
-
36
38
  # 1. settings
37
39
 
38
40
  ```python
@@ -47,16 +49,12 @@ BASE_APP = str(BASE_DIR.name)
47
49
  DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
48
50
  SECRET_KEY = get_random_secret_key()
49
51
 
50
-
51
-
52
52
  """ Valar Options """
53
53
 
54
54
  HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
55
55
  MONGO_URI = 'mongodb://root:19870120@121.41.111.175:27017/'
56
56
  MINIO_URL = "s3://admin:password@120.27.8.186:9000"
57
57
 
58
-
59
-
60
58
  """ Minimized compulsory settings """
61
59
 
62
60
  DATABASES = {
@@ -69,7 +67,7 @@ INSTALLED_APPS = [
69
67
  'django.contrib.sessions',
70
68
  "corsheaders",
71
69
  'channels',
72
- 'valar',
70
+ 'valar.apps.ValarConfig',
73
71
  ]
74
72
  MIDDLEWARE = [
75
73
  'django.contrib.sessions.middleware.SessionMiddleware',
@@ -99,6 +97,7 @@ FILE_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
99
97
  DATA_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
100
98
 
101
99
  ```
100
+
102
101
  # 2. asgi
103
102
 
104
103
  ```python
@@ -117,8 +116,8 @@ application = ProtocolTypeRouter({
117
116
  ```
118
117
 
119
118
  # 3. migrate
120
- no need, valar will auto migration
121
119
 
120
+ no need, valar will auto migration
122
121
 
123
122
  # 4. root urls
124
123
 
@@ -126,7 +125,6 @@ no need, valar will auto set urlpatterns
126
125
 
127
126
  # 5. how to use valar_channel
128
127
 
129
-
130
128
  5.1 set HANDLER_MAPPING in settings
131
129
 
132
130
  ```python
@@ -137,13 +135,11 @@ HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
137
135
 
138
136
  ```python
139
137
  from valar.channels.sender import ValarSocketSender
138
+
139
+
140
140
  def test_handler(sender: ValarSocketSender):
141
141
  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)
142
+ sender.load(data)
147
143
  ```
148
144
 
149
145
  5.3 register handler in channel_mapping
@@ -20,9 +20,6 @@ src/valar/classes/__init__.py
20
20
  src/valar/classes/singleton_meta.py
21
21
  src/valar/classes/valar_minio.py
22
22
  src/valar/classes/valar_response.py
23
- src/valar/classes/app_mixins/__init__.py
24
- src/valar/classes/app_mixins/auto_migration_mixin.py
25
- src/valar/classes/app_mixins/auto_urlpatterns_mixin.py
26
23
  src/valar/dao/__init__.py
27
24
  src/valar/dao/abstract.py
28
25
  src/valar/dao/engine.py
@@ -47,4 +44,11 @@ src/valar/views/__init__.py
47
44
  src/valar/views/file.py
48
45
  src/valar/views/handler.py
49
46
  src/valar/views/meta.py
50
- src/valar/views/rest.py
47
+ src/valar/views/rest.py
48
+ src/vtest/__init__.py
49
+ src/vtest/apps.py
50
+ src/vtest/handlers.py
51
+ src/vtest/models.py
52
+ src/vtest/views.py
53
+ src/vtest/migrations/0001_initial.py
54
+ src/vtest/migrations/__init__.py
@@ -6,3 +6,4 @@ pandas==2.2.3
6
6
  openpyxl==3.1.5
7
7
  deepmerge~=2.0
8
8
  minio==7.2.2
9
+ valar-auto-mixins~=0.0.1
@@ -0,0 +1,17 @@
1
+ import os
2
+ from django.apps import AppConfig
3
+
4
+ from valar_app_mixins.auto_migration_mixin import AutoMigrationMixin
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()
@@ -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
@@ -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 = '树形测试'
@@ -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,8 +0,0 @@
1
- class AutoMigrationMixin:
2
- name = None # 子类必须提供
3
- def auto_migrate(self):
4
- from django.core.management import call_command
5
- app = self.name.replace('src.','')
6
- call_command('makemigrations', app, interactive=False, verbosity=0)
7
- call_command('migrate', app, interactive=False, verbosity=0)
8
-
@@ -1,15 +0,0 @@
1
- import importlib
2
-
3
- from django.conf import settings
4
- from django.urls import path, include
5
-
6
-
7
- class AutoUrlPatternsMixin:
8
- name = None # 子类必须提供
9
-
10
- def set_url(self):
11
- root = settings.ROOT_URLCONF
12
- module = importlib.import_module(root)
13
- urlpatterns: list = getattr(module, 'urlpatterns')
14
- url = f'{self.name}.urls'
15
- urlpatterns.append(path('valar/', include(url)))
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes