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.
- {valar-1.2.0/src/valar.egg-info → valar-1.2.2}/PKG-INFO +10 -14
- {valar-1.2.0 → valar-1.2.2}/README.md +8 -13
- {valar-1.2.0 → valar-1.2.2}/setup.py +3 -2
- {valar-1.2.0 → valar-1.2.2}/src/valar/apps.py +2 -4
- {valar-1.2.0 → valar-1.2.2/src/valar.egg-info}/PKG-INFO +10 -14
- {valar-1.2.0 → valar-1.2.2}/src/valar.egg-info/SOURCES.txt +8 -4
- {valar-1.2.0 → valar-1.2.2}/src/valar.egg-info/requires.txt +1 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar.egg-info/top_level.txt +1 -0
- valar-1.2.2/src/vtest/apps.py +17 -0
- valar-1.2.2/src/vtest/handlers.py +15 -0
- valar-1.2.2/src/vtest/migrations/0001_initial.py +155 -0
- valar-1.2.2/src/vtest/migrations/__init__.py +0 -0
- valar-1.2.2/src/vtest/models.py +59 -0
- valar-1.2.2/src/vtest/views.py +8 -0
- valar-1.2.0/src/valar/classes/app_mixins/auto_migration_mixin.py +0 -8
- valar-1.2.0/src/valar/classes/app_mixins/auto_urlpatterns_mixin.py +0 -15
- {valar-1.2.0 → valar-1.2.2}/LICENSE +0 -0
- {valar-1.2.0 → valar-1.2.2}/setup.cfg +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/__init__.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/channels/__init__.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/channels/consumer.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/channels/counter.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/channels/executer.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/channels/mapping.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/channels/sender.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/channels/views.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/classes/__init__.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/classes/singleton_meta.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/classes/valar_minio.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/classes/valar_response.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/dao/__init__.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/dao/abstract.py +0 -0
- {valar-1.2.0/src/valar/classes/app_mixins → valar-1.2.2/src/valar/dao/defaults}/__init__.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/dao/defaults/field_keys_default.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/dao/defaults/field_values_default.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/dao/defaults/view_defaults.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/dao/engine.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/dao/frame.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/dao/meta.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/dao/mon_dao.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/dao/mon_field.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/dao/orm_dao.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/dao/orm_field.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/dao/query.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/migrations/0001_initial.py +0 -0
- {valar-1.2.0/src/valar/dao/defaults → valar-1.2.2/src/valar/migrations}/__init__.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/models/__init__.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/models/core.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/models/frame.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/models/meta.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/urls.py +0 -0
- {valar-1.2.0/src/valar/migrations → valar-1.2.2/src/valar/views}/__init__.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/views/file.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/views/handler.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/views/meta.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar/views/rest.py +0 -0
- {valar-1.2.0 → valar-1.2.2}/src/valar.egg-info/dependency_links.txt +0 -0
- {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.
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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 .
|
|
4
|
-
from .
|
|
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.
|
|
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
|
-
|
|
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
|
|
@@ -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 = '树形测试'
|
|
@@ -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
|
|
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
|