satori-python-server 0.14.0__tar.gz → 0.14.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: satori-python-server
3
- Version: 0.14.0
3
+ Version: 0.14.2
4
4
  Summary: Satori Protocol SDK for python, specify server part
5
5
  Home-page: https://github.com/RF-Tar-Railt/satori-python
6
6
  Author-Email: RF-Tar-Railt <rf_tar_railt@qq.com>
@@ -27,7 +27,7 @@ classifiers = [
27
27
  "Programming Language :: Python :: 3.12",
28
28
  "Operating System :: OS Independent",
29
29
  ]
30
- version = "0.14.0"
30
+ version = "0.14.2"
31
31
 
32
32
  [project.license]
33
33
  text = "MIT"
@@ -20,7 +20,7 @@ from graia.amnesia.builtins.asgi import UvicornASGIService
20
20
  from launart import Launart, Service, any_completed
21
21
  from loguru import logger
22
22
  from starlette.applications import Starlette
23
- from starlette.datastructures import FormData
23
+ from starlette.datastructures import FormData as FormData
24
24
  from starlette.requests import Request as StarletteRequest
25
25
  from starlette.responses import JSONResponse, Response
26
26
  from starlette.routing import Route, WebSocketRoute
@@ -34,7 +34,7 @@ from satori.model import Event, ModelBase, Opcode
34
34
  from .adapter import Adapter as Adapter
35
35
  from .conection import WebsocketConnection
36
36
  from .deque import Deque
37
- from .formdata import parse_content_disposition
37
+ from .formdata import parse_content_disposition as parse_content_disposition
38
38
  from .model import Provider as Provider
39
39
  from .model import Request as Request
40
40
  from .model import Router as Router
@@ -94,6 +94,7 @@ class Server(Service, RouterMixin):
94
94
  self.path = path
95
95
  if self.path and not self.path.startswith("/"):
96
96
  self.path = f"/{self.path}"
97
+ self._url = f"http://{host}:{port}{self.path}/{version}"
97
98
  self._adapters = []
98
99
  self.providers = []
99
100
  self.routers = []
@@ -107,14 +108,13 @@ class Server(Service, RouterMixin):
107
108
 
108
109
  def apply(self, item: Provider | Router | Adapter):
109
110
  if isinstance(item, Adapter):
111
+ item.ensure_net(self._url)
110
112
  self._adapters.append(item)
111
113
  self.providers.append(item)
112
- for proxy_url_pf in item.proxy_urls():
113
- self.proxy_url_mapping[proxy_url_pf] = item
114
+ self.proxy_url_mapping[item.id] = item.proxy_urls()
114
115
  elif isinstance(item, Provider):
115
116
  self.providers.append(item)
116
- for proxy_url_pf in item.proxy_urls():
117
- self.proxy_url_mapping[proxy_url_pf] = item
117
+ self.proxy_url_mapping[item.id] = item.proxy_urls()
118
118
  elif isinstance(item, Router):
119
119
  self.routers.append(item)
120
120
  else:
@@ -160,7 +160,9 @@ class Server(Service, RouterMixin):
160
160
  if not provider.authenticate(token):
161
161
  return await ws.close(code=3000, reason="Unauthorized")
162
162
  logins.extend(await provider.get_logins())
163
- sequence = body.get("sequence", -1)
163
+ sequence = body.get("sequence")
164
+ if sequence is None:
165
+ sequence = -1
164
166
  await connection.send({"op": Opcode.READY, "body": {"logins": [lo.dump() for lo in logins]}})
165
167
  self.connections.append(connection)
166
168
  logger.debug(f"New connection: {id(connection)}")
@@ -230,10 +232,11 @@ class Server(Service, RouterMixin):
230
232
  for provider in self.providers:
231
233
  if provider.ensure(platform, self_id):
232
234
  return await provider.download_uploaded(platform, self_id, path)
233
- for proxy_url_pf, provider in self.proxy_url_mapping.items():
234
- if url.startswith(proxy_url_pf):
235
- async with self.session.get(url) as resp:
236
- return await resp.read()
235
+ for provider in self.providers:
236
+ for proxy_url_pf in self.proxy_url_mapping[provider.id]:
237
+ if url.startswith(proxy_url_pf):
238
+ async with self.session.get(url) as resp:
239
+ return await resp.read()
237
240
  raise ValueError(f"Unknown proxy url: {url}")
238
241
 
239
242
  def get_local_file(self, url: str):
@@ -9,6 +9,8 @@ from .route import RouterMixin
9
9
 
10
10
 
11
11
  class Adapter(Service, RouterMixin):
12
+ server_url: str
13
+
12
14
  @abstractmethod
13
15
  def get_platform(self) -> str: ...
14
16
 
@@ -38,3 +40,6 @@ class Adapter(Service, RouterMixin):
38
40
  @property
39
41
  def id(self):
40
42
  return f"satori-python.adapter.{self.get_platform()}#{id(self)}"
43
+
44
+ def ensure_net(self, url: str):
45
+ self.server_url = url
@@ -22,6 +22,9 @@ class Request(Generic[TP]):
22
22
 
23
23
  @runtime_checkable
24
24
  class Provider(Protocol):
25
+ @property
26
+ def id(self) -> str: ...
27
+
25
28
  def publisher(self) -> AsyncIterator[Event]: ...
26
29
 
27
30
  def authenticate(self, token: Optional[str]) -> bool: ...