valar 1.2.3__tar.gz → 1.2.4__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.
- {valar-1.2.3/src/valar.egg-info → valar-1.2.4}/PKG-INFO +68 -27
- {valar-1.2.3 → valar-1.2.4}/README.md +67 -26
- {valar-1.2.3 → valar-1.2.4}/setup.py +1 -1
- {valar-1.2.3 → valar-1.2.4/src/valar.egg-info}/PKG-INFO +68 -27
- {valar-1.2.3 → valar-1.2.4}/LICENSE +0 -0
- {valar-1.2.3 → valar-1.2.4}/setup.cfg +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/__init__.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/apps.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/channels/__init__.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/channels/consumer.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/channels/counter.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/channels/executer.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/channels/mapping.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/channels/sender.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/channels/views.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/classes/__init__.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/classes/app_mixins/__init__.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/classes/app_mixins/auto_migration_mixin.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/classes/app_mixins/auto_urlpatterns_mixin.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/classes/singleton_meta.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/classes/valar_minio.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/classes/valar_response.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/dao/__init__.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/dao/abstract.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/dao/defaults/__init__.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/dao/defaults/field_keys_default.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/dao/defaults/field_values_default.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/dao/defaults/view_defaults.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/dao/engine.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/dao/frame.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/dao/meta.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/dao/mon_dao.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/dao/mon_field.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/dao/orm_dao.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/dao/orm_field.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/dao/query.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/migrations/__init__.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/models/__init__.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/models/core.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/models/frame.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/models/meta.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/models/test.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/urls.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/views/__init__.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/views/file.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/views/handler.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/views/meta.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar/views/rest.py +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar.egg-info/SOURCES.txt +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar.egg-info/dependency_links.txt +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar.egg-info/requires.txt +0 -0
- {valar-1.2.3 → valar-1.2.4}/src/valar.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: valar
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.4
|
|
4
4
|
Summary: valar for morghulis
|
|
5
5
|
Home-page: https://gitee.com/GRIFFIN120/valar_dev
|
|
6
6
|
Author: LYP
|
|
@@ -28,7 +28,7 @@ Dynamic: summary
|
|
|
28
28
|
|
|
29
29
|
valar for morghulis
|
|
30
30
|
|
|
31
|
-
# 1.
|
|
31
|
+
# 1. installation
|
|
32
32
|
|
|
33
33
|
```shell
|
|
34
34
|
pip install valar
|
|
@@ -37,24 +37,16 @@ pip install valar
|
|
|
37
37
|
# 1. settings
|
|
38
38
|
|
|
39
39
|
```python
|
|
40
|
-
from django.core.management.utils import get_random_secret_key
|
|
41
40
|
from pathlib import Path
|
|
42
41
|
|
|
43
|
-
"""
|
|
44
|
-
|
|
42
|
+
""" Compulsory settings """
|
|
45
43
|
DEBUG = True
|
|
46
44
|
BASE_DIR = Path(__file__).resolve().parent.parent
|
|
47
45
|
BASE_APP = str(BASE_DIR.name)
|
|
48
46
|
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
|
49
|
-
SECRET_KEY =
|
|
50
|
-
|
|
51
|
-
""" Valar Options """
|
|
47
|
+
SECRET_KEY = 'django-insecure-of@tfouoq^_f$l!yki#m=6j7)@&kjri$1_$!mca-=%7=+@f@5^'
|
|
52
48
|
|
|
53
|
-
|
|
54
|
-
MONGO_URI = 'mongodb://root:19870120@121.41.111.175:27017/'
|
|
55
|
-
MINIO_URL = "s3://admin:password@120.27.8.186:9000"
|
|
56
|
-
|
|
57
|
-
""" Minimized compulsory settings """
|
|
49
|
+
""" Minimized compulsory settings """
|
|
58
50
|
|
|
59
51
|
DATABASES = {
|
|
60
52
|
'default': {
|
|
@@ -62,29 +54,32 @@ DATABASES = {
|
|
|
62
54
|
'NAME': BASE_DIR / 'db.sqlite3',
|
|
63
55
|
}
|
|
64
56
|
}
|
|
57
|
+
|
|
65
58
|
INSTALLED_APPS = [
|
|
66
59
|
'django.contrib.sessions',
|
|
67
60
|
"corsheaders",
|
|
68
61
|
'channels',
|
|
69
62
|
'valar.apps.ValarConfig',
|
|
70
63
|
]
|
|
64
|
+
|
|
71
65
|
MIDDLEWARE = [
|
|
72
66
|
'django.contrib.sessions.middleware.SessionMiddleware',
|
|
73
67
|
'corsheaders.middleware.CorsMiddleware',
|
|
74
68
|
'django.middleware.common.CommonMiddleware',
|
|
75
69
|
]
|
|
70
|
+
|
|
76
71
|
CHANNEL_LAYERS = {
|
|
77
72
|
"default": {
|
|
78
73
|
"BACKEND": "channels.layers.InMemoryChannelLayer"
|
|
79
74
|
}
|
|
80
75
|
}
|
|
76
|
+
|
|
81
77
|
CORS_ORIGIN_ALLOW_ALL = True
|
|
82
78
|
CORS_ALLOW_CREDENTIALS = True
|
|
83
79
|
ROOT_URLCONF = "%s.urls" % BASE_APP
|
|
84
80
|
ASGI_APPLICATION = "%s.asgi.application" % BASE_APP
|
|
85
81
|
|
|
86
|
-
"""
|
|
87
|
-
|
|
82
|
+
""" Optional settings """
|
|
88
83
|
ALLOWED_HOSTS = ['*']
|
|
89
84
|
LANGUAGE_CODE = 'en-us'
|
|
90
85
|
TIME_ZONE = 'Asia/Shanghai'
|
|
@@ -95,6 +90,13 @@ SESSION_COOKIE_AGE = 60 * 60
|
|
|
95
90
|
FILE_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
|
|
96
91
|
DATA_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
|
|
97
92
|
|
|
93
|
+
""" Valar Options """
|
|
94
|
+
|
|
95
|
+
HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
|
|
96
|
+
MONGO_URI = 'mongodb://username:password@host:27017'
|
|
97
|
+
MINIO_URL = "s3://username:password@host:9000"
|
|
98
|
+
MINIO_ROOT = "https://host:9001"
|
|
99
|
+
|
|
98
100
|
```
|
|
99
101
|
|
|
100
102
|
# 2. asgi
|
|
@@ -103,6 +105,7 @@ DATA_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
|
|
|
103
105
|
from django.core.asgi import get_asgi_application
|
|
104
106
|
from channels.routing import ProtocolTypeRouter, URLRouter
|
|
105
107
|
from django.urls import re_path
|
|
108
|
+
|
|
106
109
|
from valar.channels.consumer import ValarConsumer
|
|
107
110
|
|
|
108
111
|
application = ProtocolTypeRouter({
|
|
@@ -112,39 +115,77 @@ application = ProtocolTypeRouter({
|
|
|
112
115
|
])
|
|
113
116
|
})
|
|
114
117
|
|
|
118
|
+
|
|
115
119
|
```
|
|
116
120
|
|
|
117
121
|
# 3. migrate
|
|
118
122
|
|
|
119
|
-
no need, valar will auto migration
|
|
123
|
+
- no need to makemigrations and migrate for valar, valar will auto migration
|
|
120
124
|
|
|
121
125
|
# 4. root urls
|
|
122
126
|
|
|
123
|
-
no need, valar will auto set urlpatterns
|
|
127
|
+
no need to provide urls for val, valar will auto set urlpatterns for Morghulis (
|
|
128
|
+
see https://www.npmjs.com/package/morghulis)
|
|
124
129
|
|
|
125
|
-
# 5. how to
|
|
130
|
+
# 5. how to register a channel handler for Morghulis async methods
|
|
126
131
|
|
|
127
|
-
5.1
|
|
132
|
+
## 5.1 create a handler
|
|
128
133
|
|
|
129
134
|
```python
|
|
130
|
-
|
|
135
|
+
import time
|
|
136
|
+
from valar.channels.sender import ValarChannelSender
|
|
137
|
+
from valar.channels.counter import Counter
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def valar_test_handler(sender: ValarChannelSender):
|
|
141
|
+
data = sender.data
|
|
142
|
+
length = data.get('length', 100)
|
|
143
|
+
counter = Counter(length)
|
|
144
|
+
for i in range(length):
|
|
145
|
+
time.sleep(0.1)
|
|
146
|
+
tick = counter.tick()
|
|
147
|
+
tick.update({'name': 'test1'})
|
|
148
|
+
sender.load(tick)
|
|
131
149
|
```
|
|
132
150
|
|
|
133
|
-
5.2 create a handler
|
|
151
|
+
### 5.2 create a dict (e.g. using the name 'channel_mapping') to save your handler
|
|
152
|
+
|
|
153
|
+
- I'd like to put it in the root urls.py, you can put it anywhere
|
|
134
154
|
|
|
135
155
|
```python
|
|
136
|
-
|
|
156
|
+
channel_mapping = {
|
|
157
|
+
'test': valar_test_handler,
|
|
158
|
+
}
|
|
159
|
+
```
|
|
137
160
|
|
|
161
|
+
## 5.2 register the channel_mapping in the settings.py
|
|
138
162
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
sender.load(data)
|
|
163
|
+
```python
|
|
164
|
+
HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
|
|
142
165
|
```
|
|
143
166
|
|
|
144
|
-
5.
|
|
167
|
+
### 5.4 you can copy the following codes to your urls.py
|
|
145
168
|
|
|
146
169
|
```python
|
|
170
|
+
import json
|
|
171
|
+
|
|
172
|
+
from django.urls import path
|
|
173
|
+
|
|
174
|
+
from valar.classes.valar_response import ValarResponse
|
|
175
|
+
from valar.views.handler import valar_test_handler
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def test_request(request):
|
|
179
|
+
body = json.loads(request.body)
|
|
180
|
+
return ValarResponse(body)
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
urlpatterns = [
|
|
184
|
+
path('test', test_request),
|
|
185
|
+
]
|
|
186
|
+
|
|
147
187
|
channel_mapping = {
|
|
148
|
-
'
|
|
188
|
+
'test_handler': valar_test_handler,
|
|
149
189
|
}
|
|
190
|
+
|
|
150
191
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
valar for morghulis
|
|
2
2
|
|
|
3
|
-
# 1.
|
|
3
|
+
# 1. installation
|
|
4
4
|
|
|
5
5
|
```shell
|
|
6
6
|
pip install valar
|
|
@@ -9,24 +9,16 @@ pip install valar
|
|
|
9
9
|
# 1. settings
|
|
10
10
|
|
|
11
11
|
```python
|
|
12
|
-
from django.core.management.utils import get_random_secret_key
|
|
13
12
|
from pathlib import Path
|
|
14
13
|
|
|
15
|
-
"""
|
|
16
|
-
|
|
14
|
+
""" Compulsory settings """
|
|
17
15
|
DEBUG = True
|
|
18
16
|
BASE_DIR = Path(__file__).resolve().parent.parent
|
|
19
17
|
BASE_APP = str(BASE_DIR.name)
|
|
20
18
|
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
|
21
|
-
SECRET_KEY =
|
|
22
|
-
|
|
23
|
-
""" Valar Options """
|
|
19
|
+
SECRET_KEY = 'django-insecure-of@tfouoq^_f$l!yki#m=6j7)@&kjri$1_$!mca-=%7=+@f@5^'
|
|
24
20
|
|
|
25
|
-
|
|
26
|
-
MONGO_URI = 'mongodb://root:19870120@121.41.111.175:27017/'
|
|
27
|
-
MINIO_URL = "s3://admin:password@120.27.8.186:9000"
|
|
28
|
-
|
|
29
|
-
""" Minimized compulsory settings """
|
|
21
|
+
""" Minimized compulsory settings """
|
|
30
22
|
|
|
31
23
|
DATABASES = {
|
|
32
24
|
'default': {
|
|
@@ -34,29 +26,32 @@ DATABASES = {
|
|
|
34
26
|
'NAME': BASE_DIR / 'db.sqlite3',
|
|
35
27
|
}
|
|
36
28
|
}
|
|
29
|
+
|
|
37
30
|
INSTALLED_APPS = [
|
|
38
31
|
'django.contrib.sessions',
|
|
39
32
|
"corsheaders",
|
|
40
33
|
'channels',
|
|
41
34
|
'valar.apps.ValarConfig',
|
|
42
35
|
]
|
|
36
|
+
|
|
43
37
|
MIDDLEWARE = [
|
|
44
38
|
'django.contrib.sessions.middleware.SessionMiddleware',
|
|
45
39
|
'corsheaders.middleware.CorsMiddleware',
|
|
46
40
|
'django.middleware.common.CommonMiddleware',
|
|
47
41
|
]
|
|
42
|
+
|
|
48
43
|
CHANNEL_LAYERS = {
|
|
49
44
|
"default": {
|
|
50
45
|
"BACKEND": "channels.layers.InMemoryChannelLayer"
|
|
51
46
|
}
|
|
52
47
|
}
|
|
48
|
+
|
|
53
49
|
CORS_ORIGIN_ALLOW_ALL = True
|
|
54
50
|
CORS_ALLOW_CREDENTIALS = True
|
|
55
51
|
ROOT_URLCONF = "%s.urls" % BASE_APP
|
|
56
52
|
ASGI_APPLICATION = "%s.asgi.application" % BASE_APP
|
|
57
53
|
|
|
58
|
-
"""
|
|
59
|
-
|
|
54
|
+
""" Optional settings """
|
|
60
55
|
ALLOWED_HOSTS = ['*']
|
|
61
56
|
LANGUAGE_CODE = 'en-us'
|
|
62
57
|
TIME_ZONE = 'Asia/Shanghai'
|
|
@@ -67,6 +62,13 @@ SESSION_COOKIE_AGE = 60 * 60
|
|
|
67
62
|
FILE_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
|
|
68
63
|
DATA_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
|
|
69
64
|
|
|
65
|
+
""" Valar Options """
|
|
66
|
+
|
|
67
|
+
HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
|
|
68
|
+
MONGO_URI = 'mongodb://username:password@host:27017'
|
|
69
|
+
MINIO_URL = "s3://username:password@host:9000"
|
|
70
|
+
MINIO_ROOT = "https://host:9001"
|
|
71
|
+
|
|
70
72
|
```
|
|
71
73
|
|
|
72
74
|
# 2. asgi
|
|
@@ -75,6 +77,7 @@ DATA_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
|
|
|
75
77
|
from django.core.asgi import get_asgi_application
|
|
76
78
|
from channels.routing import ProtocolTypeRouter, URLRouter
|
|
77
79
|
from django.urls import re_path
|
|
80
|
+
|
|
78
81
|
from valar.channels.consumer import ValarConsumer
|
|
79
82
|
|
|
80
83
|
application = ProtocolTypeRouter({
|
|
@@ -84,39 +87,77 @@ application = ProtocolTypeRouter({
|
|
|
84
87
|
])
|
|
85
88
|
})
|
|
86
89
|
|
|
90
|
+
|
|
87
91
|
```
|
|
88
92
|
|
|
89
93
|
# 3. migrate
|
|
90
94
|
|
|
91
|
-
no need, valar will auto migration
|
|
95
|
+
- no need to makemigrations and migrate for valar, valar will auto migration
|
|
92
96
|
|
|
93
97
|
# 4. root urls
|
|
94
98
|
|
|
95
|
-
no need, valar will auto set urlpatterns
|
|
99
|
+
no need to provide urls for val, valar will auto set urlpatterns for Morghulis (
|
|
100
|
+
see https://www.npmjs.com/package/morghulis)
|
|
96
101
|
|
|
97
|
-
# 5. how to
|
|
102
|
+
# 5. how to register a channel handler for Morghulis async methods
|
|
98
103
|
|
|
99
|
-
5.1
|
|
104
|
+
## 5.1 create a handler
|
|
100
105
|
|
|
101
106
|
```python
|
|
102
|
-
|
|
107
|
+
import time
|
|
108
|
+
from valar.channels.sender import ValarChannelSender
|
|
109
|
+
from valar.channels.counter import Counter
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def valar_test_handler(sender: ValarChannelSender):
|
|
113
|
+
data = sender.data
|
|
114
|
+
length = data.get('length', 100)
|
|
115
|
+
counter = Counter(length)
|
|
116
|
+
for i in range(length):
|
|
117
|
+
time.sleep(0.1)
|
|
118
|
+
tick = counter.tick()
|
|
119
|
+
tick.update({'name': 'test1'})
|
|
120
|
+
sender.load(tick)
|
|
103
121
|
```
|
|
104
122
|
|
|
105
|
-
5.2 create a handler
|
|
123
|
+
### 5.2 create a dict (e.g. using the name 'channel_mapping') to save your handler
|
|
124
|
+
|
|
125
|
+
- I'd like to put it in the root urls.py, you can put it anywhere
|
|
106
126
|
|
|
107
127
|
```python
|
|
108
|
-
|
|
128
|
+
channel_mapping = {
|
|
129
|
+
'test': valar_test_handler,
|
|
130
|
+
}
|
|
131
|
+
```
|
|
109
132
|
|
|
133
|
+
## 5.2 register the channel_mapping in the settings.py
|
|
110
134
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
sender.load(data)
|
|
135
|
+
```python
|
|
136
|
+
HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
|
|
114
137
|
```
|
|
115
138
|
|
|
116
|
-
5.
|
|
139
|
+
### 5.4 you can copy the following codes to your urls.py
|
|
117
140
|
|
|
118
141
|
```python
|
|
142
|
+
import json
|
|
143
|
+
|
|
144
|
+
from django.urls import path
|
|
145
|
+
|
|
146
|
+
from valar.classes.valar_response import ValarResponse
|
|
147
|
+
from valar.views.handler import valar_test_handler
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
def test_request(request):
|
|
151
|
+
body = json.loads(request.body)
|
|
152
|
+
return ValarResponse(body)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
urlpatterns = [
|
|
156
|
+
path('test', test_request),
|
|
157
|
+
]
|
|
158
|
+
|
|
119
159
|
channel_mapping = {
|
|
120
|
-
'
|
|
160
|
+
'test_handler': valar_test_handler,
|
|
121
161
|
}
|
|
162
|
+
|
|
122
163
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: valar
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.4
|
|
4
4
|
Summary: valar for morghulis
|
|
5
5
|
Home-page: https://gitee.com/GRIFFIN120/valar_dev
|
|
6
6
|
Author: LYP
|
|
@@ -28,7 +28,7 @@ Dynamic: summary
|
|
|
28
28
|
|
|
29
29
|
valar for morghulis
|
|
30
30
|
|
|
31
|
-
# 1.
|
|
31
|
+
# 1. installation
|
|
32
32
|
|
|
33
33
|
```shell
|
|
34
34
|
pip install valar
|
|
@@ -37,24 +37,16 @@ pip install valar
|
|
|
37
37
|
# 1. settings
|
|
38
38
|
|
|
39
39
|
```python
|
|
40
|
-
from django.core.management.utils import get_random_secret_key
|
|
41
40
|
from pathlib import Path
|
|
42
41
|
|
|
43
|
-
"""
|
|
44
|
-
|
|
42
|
+
""" Compulsory settings """
|
|
45
43
|
DEBUG = True
|
|
46
44
|
BASE_DIR = Path(__file__).resolve().parent.parent
|
|
47
45
|
BASE_APP = str(BASE_DIR.name)
|
|
48
46
|
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
|
49
|
-
SECRET_KEY =
|
|
50
|
-
|
|
51
|
-
""" Valar Options """
|
|
47
|
+
SECRET_KEY = 'django-insecure-of@tfouoq^_f$l!yki#m=6j7)@&kjri$1_$!mca-=%7=+@f@5^'
|
|
52
48
|
|
|
53
|
-
|
|
54
|
-
MONGO_URI = 'mongodb://root:19870120@121.41.111.175:27017/'
|
|
55
|
-
MINIO_URL = "s3://admin:password@120.27.8.186:9000"
|
|
56
|
-
|
|
57
|
-
""" Minimized compulsory settings """
|
|
49
|
+
""" Minimized compulsory settings """
|
|
58
50
|
|
|
59
51
|
DATABASES = {
|
|
60
52
|
'default': {
|
|
@@ -62,29 +54,32 @@ DATABASES = {
|
|
|
62
54
|
'NAME': BASE_DIR / 'db.sqlite3',
|
|
63
55
|
}
|
|
64
56
|
}
|
|
57
|
+
|
|
65
58
|
INSTALLED_APPS = [
|
|
66
59
|
'django.contrib.sessions',
|
|
67
60
|
"corsheaders",
|
|
68
61
|
'channels',
|
|
69
62
|
'valar.apps.ValarConfig',
|
|
70
63
|
]
|
|
64
|
+
|
|
71
65
|
MIDDLEWARE = [
|
|
72
66
|
'django.contrib.sessions.middleware.SessionMiddleware',
|
|
73
67
|
'corsheaders.middleware.CorsMiddleware',
|
|
74
68
|
'django.middleware.common.CommonMiddleware',
|
|
75
69
|
]
|
|
70
|
+
|
|
76
71
|
CHANNEL_LAYERS = {
|
|
77
72
|
"default": {
|
|
78
73
|
"BACKEND": "channels.layers.InMemoryChannelLayer"
|
|
79
74
|
}
|
|
80
75
|
}
|
|
76
|
+
|
|
81
77
|
CORS_ORIGIN_ALLOW_ALL = True
|
|
82
78
|
CORS_ALLOW_CREDENTIALS = True
|
|
83
79
|
ROOT_URLCONF = "%s.urls" % BASE_APP
|
|
84
80
|
ASGI_APPLICATION = "%s.asgi.application" % BASE_APP
|
|
85
81
|
|
|
86
|
-
"""
|
|
87
|
-
|
|
82
|
+
""" Optional settings """
|
|
88
83
|
ALLOWED_HOSTS = ['*']
|
|
89
84
|
LANGUAGE_CODE = 'en-us'
|
|
90
85
|
TIME_ZONE = 'Asia/Shanghai'
|
|
@@ -95,6 +90,13 @@ SESSION_COOKIE_AGE = 60 * 60
|
|
|
95
90
|
FILE_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
|
|
96
91
|
DATA_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
|
|
97
92
|
|
|
93
|
+
""" Valar Options """
|
|
94
|
+
|
|
95
|
+
HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
|
|
96
|
+
MONGO_URI = 'mongodb://username:password@host:27017'
|
|
97
|
+
MINIO_URL = "s3://username:password@host:9000"
|
|
98
|
+
MINIO_ROOT = "https://host:9001"
|
|
99
|
+
|
|
98
100
|
```
|
|
99
101
|
|
|
100
102
|
# 2. asgi
|
|
@@ -103,6 +105,7 @@ DATA_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
|
|
|
103
105
|
from django.core.asgi import get_asgi_application
|
|
104
106
|
from channels.routing import ProtocolTypeRouter, URLRouter
|
|
105
107
|
from django.urls import re_path
|
|
108
|
+
|
|
106
109
|
from valar.channels.consumer import ValarConsumer
|
|
107
110
|
|
|
108
111
|
application = ProtocolTypeRouter({
|
|
@@ -112,39 +115,77 @@ application = ProtocolTypeRouter({
|
|
|
112
115
|
])
|
|
113
116
|
})
|
|
114
117
|
|
|
118
|
+
|
|
115
119
|
```
|
|
116
120
|
|
|
117
121
|
# 3. migrate
|
|
118
122
|
|
|
119
|
-
no need, valar will auto migration
|
|
123
|
+
- no need to makemigrations and migrate for valar, valar will auto migration
|
|
120
124
|
|
|
121
125
|
# 4. root urls
|
|
122
126
|
|
|
123
|
-
no need, valar will auto set urlpatterns
|
|
127
|
+
no need to provide urls for val, valar will auto set urlpatterns for Morghulis (
|
|
128
|
+
see https://www.npmjs.com/package/morghulis)
|
|
124
129
|
|
|
125
|
-
# 5. how to
|
|
130
|
+
# 5. how to register a channel handler for Morghulis async methods
|
|
126
131
|
|
|
127
|
-
5.1
|
|
132
|
+
## 5.1 create a handler
|
|
128
133
|
|
|
129
134
|
```python
|
|
130
|
-
|
|
135
|
+
import time
|
|
136
|
+
from valar.channels.sender import ValarChannelSender
|
|
137
|
+
from valar.channels.counter import Counter
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def valar_test_handler(sender: ValarChannelSender):
|
|
141
|
+
data = sender.data
|
|
142
|
+
length = data.get('length', 100)
|
|
143
|
+
counter = Counter(length)
|
|
144
|
+
for i in range(length):
|
|
145
|
+
time.sleep(0.1)
|
|
146
|
+
tick = counter.tick()
|
|
147
|
+
tick.update({'name': 'test1'})
|
|
148
|
+
sender.load(tick)
|
|
131
149
|
```
|
|
132
150
|
|
|
133
|
-
5.2 create a handler
|
|
151
|
+
### 5.2 create a dict (e.g. using the name 'channel_mapping') to save your handler
|
|
152
|
+
|
|
153
|
+
- I'd like to put it in the root urls.py, you can put it anywhere
|
|
134
154
|
|
|
135
155
|
```python
|
|
136
|
-
|
|
156
|
+
channel_mapping = {
|
|
157
|
+
'test': valar_test_handler,
|
|
158
|
+
}
|
|
159
|
+
```
|
|
137
160
|
|
|
161
|
+
## 5.2 register the channel_mapping in the settings.py
|
|
138
162
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
sender.load(data)
|
|
163
|
+
```python
|
|
164
|
+
HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
|
|
142
165
|
```
|
|
143
166
|
|
|
144
|
-
5.
|
|
167
|
+
### 5.4 you can copy the following codes to your urls.py
|
|
145
168
|
|
|
146
169
|
```python
|
|
170
|
+
import json
|
|
171
|
+
|
|
172
|
+
from django.urls import path
|
|
173
|
+
|
|
174
|
+
from valar.classes.valar_response import ValarResponse
|
|
175
|
+
from valar.views.handler import valar_test_handler
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def test_request(request):
|
|
179
|
+
body = json.loads(request.body)
|
|
180
|
+
return ValarResponse(body)
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
urlpatterns = [
|
|
184
|
+
path('test', test_request),
|
|
185
|
+
]
|
|
186
|
+
|
|
147
187
|
channel_mapping = {
|
|
148
|
-
'
|
|
188
|
+
'test_handler': valar_test_handler,
|
|
149
189
|
}
|
|
190
|
+
|
|
150
191
|
```
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|