valar 0.0.8__tar.gz → 0.0.10__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-0.0.10/PKG-INFO +146 -0
- valar-0.0.10/README.md +128 -0
- {valar-0.0.8 → valar-0.0.10}/setup.py +1 -1
- valar-0.0.10/src/valar/__init__.py +21 -0
- {valar-0.0.8 → valar-0.0.10}/src/valar/channels/__init__.py +1 -2
- {valar-0.0.8 → valar-0.0.10}/src/valar/channels/views.py +9 -4
- valar-0.0.10/src/valar.egg-info/PKG-INFO +146 -0
- valar-0.0.8/PKG-INFO +0 -44
- valar-0.0.8/README.md +0 -26
- valar-0.0.8/src/valar/dao/migrations/__init__.py +0 -0
- valar-0.0.8/src/valar.egg-info/PKG-INFO +0 -44
- {valar-0.0.8 → valar-0.0.10}/LICENSE +0 -0
- {valar-0.0.8 → valar-0.0.10}/setup.cfg +0 -0
- {valar-0.0.8/src/valar → valar-0.0.10/src/valar/dao}/__init__.py +0 -0
- {valar-0.0.8 → valar-0.0.10}/src/valar/dao/migrations/0001_initial.py +0 -0
- {valar-0.0.8/src/valar/dao → valar-0.0.10/src/valar/dao/migrations}/__init__.py +0 -0
- {valar-0.0.8 → valar-0.0.10}/src/valar/dao/models.py +0 -0
- {valar-0.0.8 → valar-0.0.10}/src/valar/dao/views.py +0 -0
- {valar-0.0.8 → valar-0.0.10}/src/valar.egg-info/SOURCES.txt +0 -0
- {valar-0.0.8 → valar-0.0.10}/src/valar.egg-info/dependency_links.txt +0 -0
- {valar-0.0.8 → valar-0.0.10}/src/valar.egg-info/requires.txt +0 -0
- {valar-0.0.8 → valar-0.0.10}/src/valar.egg-info/top_level.txt +0 -0
valar-0.0.10/PKG-INFO
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
|
+
Name: valar
|
|
3
|
+
Version: 0.0.10
|
|
4
|
+
Summary: valar for morghulis
|
|
5
|
+
Author: LYP
|
|
6
|
+
Author-email: liuyinpeng@buaa.edu.cn
|
|
7
|
+
Requires-Python: >=3.9
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Requires-Dist: channels==3.0.3
|
|
11
|
+
Dynamic: author
|
|
12
|
+
Dynamic: author-email
|
|
13
|
+
Dynamic: description
|
|
14
|
+
Dynamic: description-content-type
|
|
15
|
+
Dynamic: requires-dist
|
|
16
|
+
Dynamic: requires-python
|
|
17
|
+
Dynamic: summary
|
|
18
|
+
|
|
19
|
+
valar for morghulis
|
|
20
|
+
|
|
21
|
+
# settings
|
|
22
|
+
```python
|
|
23
|
+
from pathlib import Path
|
|
24
|
+
|
|
25
|
+
""" Compulsory settings """
|
|
26
|
+
DEBUG = True
|
|
27
|
+
BASE_DIR = Path(__file__).resolve().parent.parent
|
|
28
|
+
BASE_APP = str(BASE_DIR.name)
|
|
29
|
+
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
|
30
|
+
|
|
31
|
+
""" Minimized compulsory settings """
|
|
32
|
+
|
|
33
|
+
DATABASES = {
|
|
34
|
+
'default': {
|
|
35
|
+
'ENGINE': 'django.db.backends.sqlite3',
|
|
36
|
+
'NAME': BASE_DIR / 'db.sqlite3',
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
INSTALLED_APPS = [
|
|
41
|
+
'django.contrib.sessions',
|
|
42
|
+
"corsheaders",
|
|
43
|
+
'channels',
|
|
44
|
+
'valar.dao'
|
|
45
|
+
]
|
|
46
|
+
|
|
47
|
+
MIDDLEWARE = [
|
|
48
|
+
'django.contrib.sessions.middleware.SessionMiddleware',
|
|
49
|
+
'corsheaders.middleware.CorsMiddleware',
|
|
50
|
+
'django.middleware.common.CommonMiddleware',
|
|
51
|
+
'valar.Middleware'
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
CHANNEL_LAYERS = {
|
|
55
|
+
"default": {
|
|
56
|
+
"BACKEND": "channels.layers.InMemoryChannelLayer"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
CORS_ORIGIN_ALLOW_ALL = True
|
|
61
|
+
CORS_ALLOW_CREDENTIALS = True
|
|
62
|
+
ROOT_URLCONF = "%s.urls" % BASE_APP
|
|
63
|
+
ASGI_APPLICATION = "%s.asgi.application" % BASE_APP
|
|
64
|
+
VALAR_CHANNEL_HANDLER_MAPPING = "%s.urls.channel_handler_mapping" % BASE_APP
|
|
65
|
+
|
|
66
|
+
""" Optional settings """
|
|
67
|
+
# ALLOWED_HOSTS = ['*']
|
|
68
|
+
# LANGUAGE_CODE = 'en-us'
|
|
69
|
+
# TIME_ZONE = 'Asia/Shanghai'
|
|
70
|
+
# USE_I18N = True
|
|
71
|
+
# USE_TZ = False
|
|
72
|
+
# SESSION_SAVE_EVERY_REQUEST = True
|
|
73
|
+
# SESSION_COOKIE_AGE = 60 * 60
|
|
74
|
+
# FILE_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
|
|
75
|
+
# DATA_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
# root urls
|
|
79
|
+
```python
|
|
80
|
+
from django.urls import path
|
|
81
|
+
|
|
82
|
+
from valar.channels import ValarSocketSender
|
|
83
|
+
from valar.channels.views import handel_channel
|
|
84
|
+
|
|
85
|
+
urlpatterns = [
|
|
86
|
+
path('socket/<str:handler>', handel_channel),
|
|
87
|
+
]
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
async def test_handler(data, sender: ValarSocketSender):
|
|
91
|
+
# print(data, sender.handler, sender.client, sender.uid)
|
|
92
|
+
await sender.to_users({'user': 15}, 15)
|
|
93
|
+
for i in range(3):
|
|
94
|
+
await sender.to_clients({'h': i},sender.client)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
channel_handler_mapping = {
|
|
98
|
+
'test': test_handler
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
# asgi
|
|
105
|
+
```python
|
|
106
|
+
from django.core.asgi import get_asgi_application
|
|
107
|
+
from channels.routing import ProtocolTypeRouter, URLRouter
|
|
108
|
+
from django.urls import re_path
|
|
109
|
+
|
|
110
|
+
from valar.channels import ValarConsumer
|
|
111
|
+
|
|
112
|
+
application = ProtocolTypeRouter({
|
|
113
|
+
'http': get_asgi_application(),
|
|
114
|
+
'websocket': URLRouter([
|
|
115
|
+
re_path(r'(?P<client>\w+)/$', ValarConsumer.as_asgi()),
|
|
116
|
+
])
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
# prepare
|
|
124
|
+
```sh
|
|
125
|
+
python -m pip install --upgrade pip
|
|
126
|
+
```
|
|
127
|
+
```sh
|
|
128
|
+
pip install --upgrade build
|
|
129
|
+
```
|
|
130
|
+
```sh
|
|
131
|
+
pip install twine
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
# publish
|
|
135
|
+
```sh
|
|
136
|
+
rm -r dist
|
|
137
|
+
```
|
|
138
|
+
```sh
|
|
139
|
+
python -m build
|
|
140
|
+
```
|
|
141
|
+
```sh
|
|
142
|
+
twine check dist/*
|
|
143
|
+
```
|
|
144
|
+
```sh
|
|
145
|
+
twine upload dist/*
|
|
146
|
+
```
|
valar-0.0.10/README.md
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
valar for morghulis
|
|
2
|
+
|
|
3
|
+
# settings
|
|
4
|
+
```python
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
""" Compulsory settings """
|
|
8
|
+
DEBUG = True
|
|
9
|
+
BASE_DIR = Path(__file__).resolve().parent.parent
|
|
10
|
+
BASE_APP = str(BASE_DIR.name)
|
|
11
|
+
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
|
12
|
+
|
|
13
|
+
""" Minimized compulsory settings """
|
|
14
|
+
|
|
15
|
+
DATABASES = {
|
|
16
|
+
'default': {
|
|
17
|
+
'ENGINE': 'django.db.backends.sqlite3',
|
|
18
|
+
'NAME': BASE_DIR / 'db.sqlite3',
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
INSTALLED_APPS = [
|
|
23
|
+
'django.contrib.sessions',
|
|
24
|
+
"corsheaders",
|
|
25
|
+
'channels',
|
|
26
|
+
'valar.dao'
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
MIDDLEWARE = [
|
|
30
|
+
'django.contrib.sessions.middleware.SessionMiddleware',
|
|
31
|
+
'corsheaders.middleware.CorsMiddleware',
|
|
32
|
+
'django.middleware.common.CommonMiddleware',
|
|
33
|
+
'valar.Middleware'
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
CHANNEL_LAYERS = {
|
|
37
|
+
"default": {
|
|
38
|
+
"BACKEND": "channels.layers.InMemoryChannelLayer"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
CORS_ORIGIN_ALLOW_ALL = True
|
|
43
|
+
CORS_ALLOW_CREDENTIALS = True
|
|
44
|
+
ROOT_URLCONF = "%s.urls" % BASE_APP
|
|
45
|
+
ASGI_APPLICATION = "%s.asgi.application" % BASE_APP
|
|
46
|
+
VALAR_CHANNEL_HANDLER_MAPPING = "%s.urls.channel_handler_mapping" % BASE_APP
|
|
47
|
+
|
|
48
|
+
""" Optional settings """
|
|
49
|
+
# ALLOWED_HOSTS = ['*']
|
|
50
|
+
# LANGUAGE_CODE = 'en-us'
|
|
51
|
+
# TIME_ZONE = 'Asia/Shanghai'
|
|
52
|
+
# USE_I18N = True
|
|
53
|
+
# USE_TZ = False
|
|
54
|
+
# SESSION_SAVE_EVERY_REQUEST = True
|
|
55
|
+
# SESSION_COOKIE_AGE = 60 * 60
|
|
56
|
+
# FILE_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
|
|
57
|
+
# DATA_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
# root urls
|
|
61
|
+
```python
|
|
62
|
+
from django.urls import path
|
|
63
|
+
|
|
64
|
+
from valar.channels import ValarSocketSender
|
|
65
|
+
from valar.channels.views import handel_channel
|
|
66
|
+
|
|
67
|
+
urlpatterns = [
|
|
68
|
+
path('socket/<str:handler>', handel_channel),
|
|
69
|
+
]
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
async def test_handler(data, sender: ValarSocketSender):
|
|
73
|
+
# print(data, sender.handler, sender.client, sender.uid)
|
|
74
|
+
await sender.to_users({'user': 15}, 15)
|
|
75
|
+
for i in range(3):
|
|
76
|
+
await sender.to_clients({'h': i},sender.client)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
channel_handler_mapping = {
|
|
80
|
+
'test': test_handler
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
# asgi
|
|
87
|
+
```python
|
|
88
|
+
from django.core.asgi import get_asgi_application
|
|
89
|
+
from channels.routing import ProtocolTypeRouter, URLRouter
|
|
90
|
+
from django.urls import re_path
|
|
91
|
+
|
|
92
|
+
from valar.channels import ValarConsumer
|
|
93
|
+
|
|
94
|
+
application = ProtocolTypeRouter({
|
|
95
|
+
'http': get_asgi_application(),
|
|
96
|
+
'websocket': URLRouter([
|
|
97
|
+
re_path(r'(?P<client>\w+)/$', ValarConsumer.as_asgi()),
|
|
98
|
+
])
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
# prepare
|
|
106
|
+
```sh
|
|
107
|
+
python -m pip install --upgrade pip
|
|
108
|
+
```
|
|
109
|
+
```sh
|
|
110
|
+
pip install --upgrade build
|
|
111
|
+
```
|
|
112
|
+
```sh
|
|
113
|
+
pip install twine
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
# publish
|
|
117
|
+
```sh
|
|
118
|
+
rm -r dist
|
|
119
|
+
```
|
|
120
|
+
```sh
|
|
121
|
+
python -m build
|
|
122
|
+
```
|
|
123
|
+
```sh
|
|
124
|
+
twine check dist/*
|
|
125
|
+
```
|
|
126
|
+
```sh
|
|
127
|
+
twine upload dist/*
|
|
128
|
+
```
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from django.http import JsonResponse, HttpRequest
|
|
2
|
+
from django.utils.deprecation import MiddlewareMixin
|
|
3
|
+
|
|
4
|
+
class ValarResponse(JsonResponse):
|
|
5
|
+
def __init__(self, data, message='', code='info'):
|
|
6
|
+
self.message = message
|
|
7
|
+
self.code = code
|
|
8
|
+
super(ValarResponse, self).__init__(data, safe=False)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class Middleware(MiddlewareMixin):
|
|
12
|
+
@staticmethod
|
|
13
|
+
def process_response(request: HttpRequest, response: ValarResponse):
|
|
14
|
+
message, code = response.message, response.code
|
|
15
|
+
user_id = request.session.get('USER_ID')
|
|
16
|
+
headers = response.headers
|
|
17
|
+
headers['valar_message'] = message
|
|
18
|
+
headers['valar_code'] = code
|
|
19
|
+
if user_id:
|
|
20
|
+
headers['user_id'] = user_id
|
|
21
|
+
return response
|
|
@@ -43,7 +43,7 @@ class ValarSocketSender:
|
|
|
43
43
|
await self.send(GROUP, body)
|
|
44
44
|
|
|
45
45
|
async def register(self):
|
|
46
|
-
body = self.__convert_body('register.emit', [self.client], [self.uid])
|
|
46
|
+
body = self.__convert_body('register.emit', None,[self.client], [self.uid])
|
|
47
47
|
await self.send(GROUP, body)
|
|
48
48
|
|
|
49
49
|
|
|
@@ -65,7 +65,6 @@ class ValarConsumer(AsyncJsonWebsocketConsumer):
|
|
|
65
65
|
await self.close(code)
|
|
66
66
|
|
|
67
67
|
async def receive_json(self, data, *args, **kwargs):
|
|
68
|
-
print(data)
|
|
69
68
|
pass
|
|
70
69
|
|
|
71
70
|
async def user_emit(self, event):
|
|
@@ -2,10 +2,13 @@ import asyncio
|
|
|
2
2
|
import importlib
|
|
3
3
|
import json
|
|
4
4
|
from django.core.exceptions import ImproperlyConfigured
|
|
5
|
-
from django.http import JsonResponse
|
|
6
5
|
from django.conf import settings
|
|
7
6
|
|
|
8
|
-
from
|
|
7
|
+
from .. import ValarResponse
|
|
8
|
+
from ..channels import ValarSocketSender
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
9
12
|
|
|
10
13
|
|
|
11
14
|
async def handel_channel(request, handler):
|
|
@@ -13,10 +16,12 @@ async def handel_channel(request, handler):
|
|
|
13
16
|
uid = request.session.get('UID')
|
|
14
17
|
data = json.loads(request.body)
|
|
15
18
|
method = get_valar_channel_handler(handler)
|
|
16
|
-
loop = asyncio.get_event_loop()
|
|
17
19
|
sender = ValarSocketSender(handler, client, uid)
|
|
20
|
+
if uid and client:
|
|
21
|
+
await sender.register()
|
|
22
|
+
loop = asyncio.get_event_loop()
|
|
18
23
|
loop.create_task(method(data, sender))
|
|
19
|
-
return
|
|
24
|
+
return ValarResponse({'status':'OK'}, message='OK', code= 'success')
|
|
20
25
|
|
|
21
26
|
|
|
22
27
|
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
|
+
Name: valar
|
|
3
|
+
Version: 0.0.10
|
|
4
|
+
Summary: valar for morghulis
|
|
5
|
+
Author: LYP
|
|
6
|
+
Author-email: liuyinpeng@buaa.edu.cn
|
|
7
|
+
Requires-Python: >=3.9
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Requires-Dist: channels==3.0.3
|
|
11
|
+
Dynamic: author
|
|
12
|
+
Dynamic: author-email
|
|
13
|
+
Dynamic: description
|
|
14
|
+
Dynamic: description-content-type
|
|
15
|
+
Dynamic: requires-dist
|
|
16
|
+
Dynamic: requires-python
|
|
17
|
+
Dynamic: summary
|
|
18
|
+
|
|
19
|
+
valar for morghulis
|
|
20
|
+
|
|
21
|
+
# settings
|
|
22
|
+
```python
|
|
23
|
+
from pathlib import Path
|
|
24
|
+
|
|
25
|
+
""" Compulsory settings """
|
|
26
|
+
DEBUG = True
|
|
27
|
+
BASE_DIR = Path(__file__).resolve().parent.parent
|
|
28
|
+
BASE_APP = str(BASE_DIR.name)
|
|
29
|
+
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
|
30
|
+
|
|
31
|
+
""" Minimized compulsory settings """
|
|
32
|
+
|
|
33
|
+
DATABASES = {
|
|
34
|
+
'default': {
|
|
35
|
+
'ENGINE': 'django.db.backends.sqlite3',
|
|
36
|
+
'NAME': BASE_DIR / 'db.sqlite3',
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
INSTALLED_APPS = [
|
|
41
|
+
'django.contrib.sessions',
|
|
42
|
+
"corsheaders",
|
|
43
|
+
'channels',
|
|
44
|
+
'valar.dao'
|
|
45
|
+
]
|
|
46
|
+
|
|
47
|
+
MIDDLEWARE = [
|
|
48
|
+
'django.contrib.sessions.middleware.SessionMiddleware',
|
|
49
|
+
'corsheaders.middleware.CorsMiddleware',
|
|
50
|
+
'django.middleware.common.CommonMiddleware',
|
|
51
|
+
'valar.Middleware'
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
CHANNEL_LAYERS = {
|
|
55
|
+
"default": {
|
|
56
|
+
"BACKEND": "channels.layers.InMemoryChannelLayer"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
CORS_ORIGIN_ALLOW_ALL = True
|
|
61
|
+
CORS_ALLOW_CREDENTIALS = True
|
|
62
|
+
ROOT_URLCONF = "%s.urls" % BASE_APP
|
|
63
|
+
ASGI_APPLICATION = "%s.asgi.application" % BASE_APP
|
|
64
|
+
VALAR_CHANNEL_HANDLER_MAPPING = "%s.urls.channel_handler_mapping" % BASE_APP
|
|
65
|
+
|
|
66
|
+
""" Optional settings """
|
|
67
|
+
# ALLOWED_HOSTS = ['*']
|
|
68
|
+
# LANGUAGE_CODE = 'en-us'
|
|
69
|
+
# TIME_ZONE = 'Asia/Shanghai'
|
|
70
|
+
# USE_I18N = True
|
|
71
|
+
# USE_TZ = False
|
|
72
|
+
# SESSION_SAVE_EVERY_REQUEST = True
|
|
73
|
+
# SESSION_COOKIE_AGE = 60 * 60
|
|
74
|
+
# FILE_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
|
|
75
|
+
# DATA_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 100
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
# root urls
|
|
79
|
+
```python
|
|
80
|
+
from django.urls import path
|
|
81
|
+
|
|
82
|
+
from valar.channels import ValarSocketSender
|
|
83
|
+
from valar.channels.views import handel_channel
|
|
84
|
+
|
|
85
|
+
urlpatterns = [
|
|
86
|
+
path('socket/<str:handler>', handel_channel),
|
|
87
|
+
]
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
async def test_handler(data, sender: ValarSocketSender):
|
|
91
|
+
# print(data, sender.handler, sender.client, sender.uid)
|
|
92
|
+
await sender.to_users({'user': 15}, 15)
|
|
93
|
+
for i in range(3):
|
|
94
|
+
await sender.to_clients({'h': i},sender.client)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
channel_handler_mapping = {
|
|
98
|
+
'test': test_handler
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
# asgi
|
|
105
|
+
```python
|
|
106
|
+
from django.core.asgi import get_asgi_application
|
|
107
|
+
from channels.routing import ProtocolTypeRouter, URLRouter
|
|
108
|
+
from django.urls import re_path
|
|
109
|
+
|
|
110
|
+
from valar.channels import ValarConsumer
|
|
111
|
+
|
|
112
|
+
application = ProtocolTypeRouter({
|
|
113
|
+
'http': get_asgi_application(),
|
|
114
|
+
'websocket': URLRouter([
|
|
115
|
+
re_path(r'(?P<client>\w+)/$', ValarConsumer.as_asgi()),
|
|
116
|
+
])
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
# prepare
|
|
124
|
+
```sh
|
|
125
|
+
python -m pip install --upgrade pip
|
|
126
|
+
```
|
|
127
|
+
```sh
|
|
128
|
+
pip install --upgrade build
|
|
129
|
+
```
|
|
130
|
+
```sh
|
|
131
|
+
pip install twine
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
# publish
|
|
135
|
+
```sh
|
|
136
|
+
rm -r dist
|
|
137
|
+
```
|
|
138
|
+
```sh
|
|
139
|
+
python -m build
|
|
140
|
+
```
|
|
141
|
+
```sh
|
|
142
|
+
twine check dist/*
|
|
143
|
+
```
|
|
144
|
+
```sh
|
|
145
|
+
twine upload dist/*
|
|
146
|
+
```
|
valar-0.0.8/PKG-INFO
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.2
|
|
2
|
-
Name: valar
|
|
3
|
-
Version: 0.0.8
|
|
4
|
-
Summary: valar for morghulis
|
|
5
|
-
Author: LYP
|
|
6
|
-
Author-email: liuyinpeng@buaa.edu.cn
|
|
7
|
-
Requires-Python: >=3.9
|
|
8
|
-
Description-Content-Type: text/markdown
|
|
9
|
-
License-File: LICENSE
|
|
10
|
-
Requires-Dist: channels==3.0.3
|
|
11
|
-
Dynamic: author
|
|
12
|
-
Dynamic: author-email
|
|
13
|
-
Dynamic: description
|
|
14
|
-
Dynamic: description-content-type
|
|
15
|
-
Dynamic: requires-dist
|
|
16
|
-
Dynamic: requires-python
|
|
17
|
-
Dynamic: summary
|
|
18
|
-
|
|
19
|
-
valar for morghulis
|
|
20
|
-
|
|
21
|
-
# prepare
|
|
22
|
-
```sh
|
|
23
|
-
python -m pip install --upgrade pip
|
|
24
|
-
```
|
|
25
|
-
```sh
|
|
26
|
-
pip install --upgrade build
|
|
27
|
-
```
|
|
28
|
-
```sh
|
|
29
|
-
pip install twine
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
# publish
|
|
33
|
-
```sh
|
|
34
|
-
rm -r dist
|
|
35
|
-
```
|
|
36
|
-
```sh
|
|
37
|
-
python -m build
|
|
38
|
-
```
|
|
39
|
-
```sh
|
|
40
|
-
twine check dist/*
|
|
41
|
-
```
|
|
42
|
-
```sh
|
|
43
|
-
twine upload dist/*
|
|
44
|
-
```
|
valar-0.0.8/README.md
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
valar for morghulis
|
|
2
|
-
|
|
3
|
-
# prepare
|
|
4
|
-
```sh
|
|
5
|
-
python -m pip install --upgrade pip
|
|
6
|
-
```
|
|
7
|
-
```sh
|
|
8
|
-
pip install --upgrade build
|
|
9
|
-
```
|
|
10
|
-
```sh
|
|
11
|
-
pip install twine
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
# publish
|
|
15
|
-
```sh
|
|
16
|
-
rm -r dist
|
|
17
|
-
```
|
|
18
|
-
```sh
|
|
19
|
-
python -m build
|
|
20
|
-
```
|
|
21
|
-
```sh
|
|
22
|
-
twine check dist/*
|
|
23
|
-
```
|
|
24
|
-
```sh
|
|
25
|
-
twine upload dist/*
|
|
26
|
-
```
|
|
File without changes
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.2
|
|
2
|
-
Name: valar
|
|
3
|
-
Version: 0.0.8
|
|
4
|
-
Summary: valar for morghulis
|
|
5
|
-
Author: LYP
|
|
6
|
-
Author-email: liuyinpeng@buaa.edu.cn
|
|
7
|
-
Requires-Python: >=3.9
|
|
8
|
-
Description-Content-Type: text/markdown
|
|
9
|
-
License-File: LICENSE
|
|
10
|
-
Requires-Dist: channels==3.0.3
|
|
11
|
-
Dynamic: author
|
|
12
|
-
Dynamic: author-email
|
|
13
|
-
Dynamic: description
|
|
14
|
-
Dynamic: description-content-type
|
|
15
|
-
Dynamic: requires-dist
|
|
16
|
-
Dynamic: requires-python
|
|
17
|
-
Dynamic: summary
|
|
18
|
-
|
|
19
|
-
valar for morghulis
|
|
20
|
-
|
|
21
|
-
# prepare
|
|
22
|
-
```sh
|
|
23
|
-
python -m pip install --upgrade pip
|
|
24
|
-
```
|
|
25
|
-
```sh
|
|
26
|
-
pip install --upgrade build
|
|
27
|
-
```
|
|
28
|
-
```sh
|
|
29
|
-
pip install twine
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
# publish
|
|
33
|
-
```sh
|
|
34
|
-
rm -r dist
|
|
35
|
-
```
|
|
36
|
-
```sh
|
|
37
|
-
python -m build
|
|
38
|
-
```
|
|
39
|
-
```sh
|
|
40
|
-
twine check dist/*
|
|
41
|
-
```
|
|
42
|
-
```sh
|
|
43
|
-
twine upload dist/*
|
|
44
|
-
```
|
|
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
|