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