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.

Files changed (53) hide show
  1. {valar-1.2.3/src/valar.egg-info → valar-1.2.5}/PKG-INFO +82 -31
  2. valar-1.2.5/README.md +173 -0
  3. {valar-1.2.3 → valar-1.2.5}/setup.py +1 -1
  4. {valar-1.2.3 → valar-1.2.5/src/valar.egg-info}/PKG-INFO +82 -31
  5. valar-1.2.3/README.md +0 -122
  6. {valar-1.2.3 → valar-1.2.5}/LICENSE +0 -0
  7. {valar-1.2.3 → valar-1.2.5}/setup.cfg +0 -0
  8. {valar-1.2.3 → valar-1.2.5}/src/valar/__init__.py +0 -0
  9. {valar-1.2.3 → valar-1.2.5}/src/valar/apps.py +0 -0
  10. {valar-1.2.3 → valar-1.2.5}/src/valar/channels/__init__.py +0 -0
  11. {valar-1.2.3 → valar-1.2.5}/src/valar/channels/consumer.py +0 -0
  12. {valar-1.2.3 → valar-1.2.5}/src/valar/channels/counter.py +0 -0
  13. {valar-1.2.3 → valar-1.2.5}/src/valar/channels/executer.py +0 -0
  14. {valar-1.2.3 → valar-1.2.5}/src/valar/channels/mapping.py +0 -0
  15. {valar-1.2.3 → valar-1.2.5}/src/valar/channels/sender.py +0 -0
  16. {valar-1.2.3 → valar-1.2.5}/src/valar/channels/views.py +0 -0
  17. {valar-1.2.3 → valar-1.2.5}/src/valar/classes/__init__.py +0 -0
  18. {valar-1.2.3 → valar-1.2.5}/src/valar/classes/app_mixins/__init__.py +0 -0
  19. {valar-1.2.3 → valar-1.2.5}/src/valar/classes/app_mixins/auto_migration_mixin.py +0 -0
  20. {valar-1.2.3 → valar-1.2.5}/src/valar/classes/app_mixins/auto_urlpatterns_mixin.py +0 -0
  21. {valar-1.2.3 → valar-1.2.5}/src/valar/classes/singleton_meta.py +0 -0
  22. {valar-1.2.3 → valar-1.2.5}/src/valar/classes/valar_minio.py +0 -0
  23. {valar-1.2.3 → valar-1.2.5}/src/valar/classes/valar_response.py +0 -0
  24. {valar-1.2.3 → valar-1.2.5}/src/valar/dao/__init__.py +0 -0
  25. {valar-1.2.3 → valar-1.2.5}/src/valar/dao/abstract.py +0 -0
  26. {valar-1.2.3 → valar-1.2.5}/src/valar/dao/defaults/__init__.py +0 -0
  27. {valar-1.2.3 → valar-1.2.5}/src/valar/dao/defaults/field_keys_default.py +0 -0
  28. {valar-1.2.3 → valar-1.2.5}/src/valar/dao/defaults/field_values_default.py +0 -0
  29. {valar-1.2.3 → valar-1.2.5}/src/valar/dao/defaults/view_defaults.py +0 -0
  30. {valar-1.2.3 → valar-1.2.5}/src/valar/dao/engine.py +0 -0
  31. {valar-1.2.3 → valar-1.2.5}/src/valar/dao/frame.py +0 -0
  32. {valar-1.2.3 → valar-1.2.5}/src/valar/dao/meta.py +0 -0
  33. {valar-1.2.3 → valar-1.2.5}/src/valar/dao/mon_dao.py +0 -0
  34. {valar-1.2.3 → valar-1.2.5}/src/valar/dao/mon_field.py +0 -0
  35. {valar-1.2.3 → valar-1.2.5}/src/valar/dao/orm_dao.py +0 -0
  36. {valar-1.2.3 → valar-1.2.5}/src/valar/dao/orm_field.py +0 -0
  37. {valar-1.2.3 → valar-1.2.5}/src/valar/dao/query.py +0 -0
  38. {valar-1.2.3 → valar-1.2.5}/src/valar/migrations/__init__.py +0 -0
  39. {valar-1.2.3 → valar-1.2.5}/src/valar/models/__init__.py +0 -0
  40. {valar-1.2.3 → valar-1.2.5}/src/valar/models/core.py +0 -0
  41. {valar-1.2.3 → valar-1.2.5}/src/valar/models/frame.py +0 -0
  42. {valar-1.2.3 → valar-1.2.5}/src/valar/models/meta.py +0 -0
  43. {valar-1.2.3 → valar-1.2.5}/src/valar/models/test.py +0 -0
  44. {valar-1.2.3 → valar-1.2.5}/src/valar/urls.py +0 -0
  45. {valar-1.2.3 → valar-1.2.5}/src/valar/views/__init__.py +0 -0
  46. {valar-1.2.3 → valar-1.2.5}/src/valar/views/file.py +0 -0
  47. {valar-1.2.3 → valar-1.2.5}/src/valar/views/handler.py +0 -0
  48. {valar-1.2.3 → valar-1.2.5}/src/valar/views/meta.py +0 -0
  49. {valar-1.2.3 → valar-1.2.5}/src/valar/views/rest.py +0 -0
  50. {valar-1.2.3 → valar-1.2.5}/src/valar.egg-info/SOURCES.txt +0 -0
  51. {valar-1.2.3 → valar-1.2.5}/src/valar.egg-info/dependency_links.txt +0 -0
  52. {valar-1.2.3 → valar-1.2.5}/src/valar.egg-info/requires.txt +0 -0
  53. {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
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. install
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
- # 1. settings
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
- """ Compulsory settings """
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 = get_random_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
- HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
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
- """ Optional settings """
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
- # 2. asgi
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
- # 3. migrate
130
+ ## 2.3 urls.py
118
131
 
119
- no need, valar will auto migration
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
- # 4. root urls
136
+ # 3. migrate
122
137
 
123
- no need, valar will auto set urlpatterns
138
+ - no need to makemigrations and migrate for valar, valar will auto migration
124
139
 
125
- # 5. how to use valar_channel
140
+ # 4. how to register a channel handler for Morghulis async methods
126
141
 
127
- 5.1 set HANDLER_MAPPING in settings
142
+ ## 4.1 create a handler
128
143
 
129
144
  ```python
130
- HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
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
- 5.2 create a handler
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
- from valar.channels.sender import ValarSocketSender
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
- def test_handler(sender: ValarSocketSender):
140
- data = sender.data
141
- sender.load(data)
173
+ ```python
174
+ HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
142
175
  ```
143
176
 
144
- 5.3 register handler in channel_mapping
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
- 'test': test_handler,
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
+ ```
@@ -16,7 +16,7 @@ requires = [
16
16
 
17
17
  setup(
18
18
  name="valar", # 包名
19
- version="1.2.3", # 版本号
19
+ version="1.2.5", # 版本号
20
20
  author="LYP", # 作者
21
21
  author_email="liuyinpeng@buaa.edu.cn", # 邮箱
22
22
  description="valar for morghulis", # 简短描述
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: valar
3
- Version: 1.2.3
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. install
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
- # 1. settings
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
- """ Compulsory settings """
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 = get_random_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
- HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
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
- """ Optional settings """
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
- # 2. asgi
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
- # 3. migrate
130
+ ## 2.3 urls.py
118
131
 
119
- no need, valar will auto migration
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
- # 4. root urls
136
+ # 3. migrate
122
137
 
123
- no need, valar will auto set urlpatterns
138
+ - no need to makemigrations and migrate for valar, valar will auto migration
124
139
 
125
- # 5. how to use valar_channel
140
+ # 4. how to register a channel handler for Morghulis async methods
126
141
 
127
- 5.1 set HANDLER_MAPPING in settings
142
+ ## 4.1 create a handler
128
143
 
129
144
  ```python
130
- HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
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
- 5.2 create a handler
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
- from valar.channels.sender import ValarSocketSender
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
- def test_handler(sender: ValarSocketSender):
140
- data = sender.data
141
- sender.load(data)
173
+ ```python
174
+ HANDLER_MAPPING = "%s.urls.channel_mapping" % BASE_APP
142
175
  ```
143
176
 
144
- 5.3 register handler in channel_mapping
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
- 'test': test_handler,
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