reyserver 1.1.40__py3-none-any.whl → 1.1.42__py3-none-any.whl

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.
reyserver/__init__.py CHANGED
@@ -11,6 +11,7 @@ Modules
11
11
  -------
12
12
  rall : All methods.
13
13
  rbase : Base methods.
14
+ rclient : Client methods.
14
15
  rfile : File methods.
15
16
  rserver : Server methods.
16
17
  """
reyserver/rall.py CHANGED
@@ -10,5 +10,6 @@
10
10
 
11
11
 
12
12
  from .rbase import *
13
+ from .rclient import *
13
14
  from .rfile import *
14
15
  from .rserver import *
reyserver/rbase.py CHANGED
@@ -12,14 +12,18 @@
12
12
  from typing import Sequence
13
13
  from inspect import iscoroutinefunction
14
14
  from contextlib import asynccontextmanager
15
- from fastapi import FastAPI
15
+ from fastapi import FastAPI, Depends
16
+
17
+ from reydb import DatabaseAsync
18
+ from reydb.rconn import DatabaseConnectionAsync
19
+ from reydb.rorm import DatabaseORMSessionAsync
16
20
  from reykit.rbase import CoroutineFunctionSimple, Base, is_iterable
17
21
 
18
22
 
19
23
  __all__ = (
20
24
  'ServerBase',
21
25
  'ServerAPI',
22
- 'generate_lifespan'
26
+ 'create_lifespan'
23
27
  )
24
28
 
25
29
 
@@ -35,12 +39,12 @@ class ServerAPI(ServerBase):
35
39
  """
36
40
 
37
41
 
38
- def generate_lifespan(
42
+ def create_lifespan(
39
43
  before: CoroutineFunctionSimple | Sequence[CoroutineFunctionSimple] | None = None,
40
44
  after: CoroutineFunctionSimple | Sequence[CoroutineFunctionSimple] | None = None,
41
45
  ):
42
46
  """
43
- Generate function of lifespan manager.
47
+ Create function of lifespan manager.
44
48
 
45
49
  Parameters
46
50
  ----------
@@ -58,7 +62,7 @@ def generate_lifespan(
58
62
  elif iscoroutinefunction(after):
59
63
  after = (after,)
60
64
 
61
- # Define.
65
+
62
66
  @asynccontextmanager
63
67
  async def lifespan(app: FastAPI):
64
68
  """
@@ -80,3 +84,36 @@ def generate_lifespan(
80
84
 
81
85
 
82
86
  return lifespan
87
+
88
+
89
+ # def create_depend_conn(db: DatabaseAsync):
90
+ # """
91
+ # Create dependencie function of asynchronous database connection.
92
+
93
+ # Parameters
94
+ # ----------
95
+ # db : Asynchronous database instance.
96
+ # """
97
+
98
+
99
+ # @asynccontextmanager
100
+ # async def lifespan(app: FastAPI):
101
+ # """
102
+ # Server lifespan manager.
103
+
104
+ # Parameters
105
+ # ----------
106
+ # app : Server APP.
107
+ # """
108
+
109
+ # # Before.
110
+ # for task in before:
111
+ # await task()
112
+ # yield
113
+
114
+ # # After.
115
+ # for task in after:
116
+ # await after()
117
+
118
+
119
+ # return lifespan
reyserver/rclient.py ADDED
@@ -0,0 +1,45 @@
1
+ # !/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+
4
+ """
5
+ @Time : 2025-10-09 00:02:09
6
+ @Author : Rey
7
+ @Contact : reyxbo@163.com
8
+ @Explain : Client methods.
9
+ """
10
+
11
+
12
+ from rbase import ServerBase
13
+
14
+
15
+ __all__ = (
16
+ 'ServerClient',
17
+ )
18
+
19
+
20
+ class ServerClient(ServerBase):
21
+ """
22
+ Server client type.
23
+ """
24
+
25
+
26
+ def __init__(self, url: str) -> None:
27
+ """
28
+ Build instance attributes.
29
+
30
+ Parameters
31
+ ----------
32
+ url : Server url.
33
+ """
34
+
35
+ # Build.
36
+ self.url = url
37
+
38
+
39
+ def upload_file(self): ...
40
+
41
+
42
+ def download_file(self): ...
43
+
44
+
45
+ def index_file(self): ...
reyserver/rfile.py CHANGED
@@ -9,25 +9,21 @@
9
9
  """
10
10
 
11
11
 
12
- from fastapi import APIRouter
13
- from reydb import rorm
14
- from reydb.rdb import DatabaseAsync
12
+ from typing import Annotated
13
+ from fastapi import APIRouter, Form, File, UploadFile, Depends
14
+ from reydb import rorm, DatabaseAsync
15
+ from reykit.ros import FileStore, get_md5
15
16
 
16
- from . import rserver
17
17
  from .rbase import ServerAPI
18
18
 
19
19
 
20
20
  __all__ = (
21
- 'file_router',
22
21
  'DatabaseORMTableInfo',
23
22
  'DatabaseORMTableData',
24
- 'build_file_db'
23
+ 'ServerAPIFile'
25
24
  )
26
25
 
27
26
 
28
- file_router = APIRouter()
29
-
30
-
31
27
  class DatabaseORMTableInfo(rorm.Model, table=True):
32
28
  """
33
29
  Database `info` table ORM model.
@@ -36,7 +32,7 @@ class DatabaseORMTableInfo(rorm.Model, table=True):
36
32
  __name__ = 'info'
37
33
  __comment__ = 'File information table.'
38
34
  create_time: rorm.Datetime = rorm.Field(field_default=':create_time', not_null=True, index_n=True, comment='Record create time.')
39
- field_id: int = rorm.Field(rorm.types_mysql.MEDIUMINT(unsigned=True), key_auto=True, comment='File self increase ID.')
35
+ file_id: int = rorm.Field(rorm.types_mysql.MEDIUMINT(unsigned=True), key_auto=True, comment='File self increase ID.')
40
36
  md5: str = rorm.Field(rorm.types.CHAR(32), not_null=True, index_n=True, comment='File MD5.')
41
37
  name: str = rorm.Field(rorm.types.VARCHAR(260), index_n=True, comment='File name.')
42
38
  note: str = rorm.Field(rorm.types.VARCHAR(500), comment='File note.')
@@ -54,218 +50,232 @@ class DatabaseORMTableData(rorm.Model, table=True):
54
50
  path: str = rorm.Field(rorm.types.VARCHAR(4095), not_null=True, comment='File disk storage path.')
55
51
 
56
52
 
57
- def build_file_db(db: DatabaseAsync) -> None:
53
+ class ServerAPIFile(ServerAPI):
58
54
  """
59
- Check and build all standard databases and tables, by `self.db_names`.
60
-
61
- Parameters
62
- db : Asynchronous database instance.
55
+ Server File API type.
56
+ Can create database used `self.build_db` method.
63
57
  """
64
58
 
65
- # Set parameter.
66
- database = db.database
67
-
68
- ## Table.
69
- tables = [DatabaseORMTableInfo, DatabaseORMTableData]
70
-
71
- ## View.
72
- views = [
73
- {
74
- 'path': 'data_info',
75
- 'select': (
76
- 'SELECT `b`.`last_time`, `a`.`md5`, `a`.`size`, `b`.`names`, `b`.`notes`\n'
77
- f'FROM `{database}`.`data` AS `a`\n'
78
- 'LEFT JOIN (\n'
79
- ' SELECT\n'
80
- ' `md5`,\n'
81
- " GROUP_CONCAT(DISTINCT(`name`) ORDER BY `create_time` DESC SEPARATOR ' | ') AS `names`,\n"
82
- " GROUP_CONCAT(DISTINCT(`note`) ORDER BY `create_time` DESC SEPARATOR ' | ') AS `notes`,\n"
83
- ' MAX(`create_time`) as `last_time`\n'
84
- f' FROM `{database}`.`info`\n'
85
- ' GROUP BY `md5`\n'
86
- ' ORDER BY `last_time` DESC\n'
87
- ') AS `b`\n'
88
- 'ON `a`.`md5` = `b`.`md5`\n'
89
- 'ORDER BY `last_time` DESC'
90
- )
91
- }
92
- ]
93
-
94
- ## View stats.
95
- views_stats = [
96
- {
97
- 'path': 'stats',
98
- 'items': [
99
- {
100
- 'name': 'count',
101
- 'select': (
102
- 'SELECT COUNT(1)\n'
103
- f'FROM `{database}`.`info`'
104
- ),
105
- 'comment': 'File information count.'
106
- },
107
- {
108
- 'name': 'past_day_count',
109
- 'select': (
110
- 'SELECT COUNT(1)\n'
111
- f'FROM `{database}`.`info`\n'
112
- 'WHERE TIMESTAMPDIFF(DAY, `create_time`, NOW()) = 0'
113
- ),
114
- 'comment': 'File information count in the past day.'
115
- },
116
- {
117
- 'name': 'past_week_count',
118
- 'select': (
119
- 'SELECT COUNT(1)\n'
120
- f'FROM `{database}`.`info`\n'
121
- 'WHERE TIMESTAMPDIFF(DAY, `create_time`, NOW()) <= 6'
122
- ),
123
- 'comment': 'File information count in the past week.'
124
- },
125
- {
126
- 'name': 'past_month_count',
127
- 'select': (
128
- 'SELECT COUNT(1)\n'
129
- f'FROM `{database}`.`info`\n'
130
- 'WHERE TIMESTAMPDIFF(DAY, `create_time`, NOW()) <= 29'
131
- ),
132
- 'comment': 'File information count in the past month.'
133
- },
134
- {
135
- 'name': 'data_count',
136
- 'select': (
137
- 'SELECT COUNT(1)\n'
138
- f'FROM `{database}`.`data`'
139
- ),
140
- 'comment': 'File data unique count.'
141
- },
142
- {
143
- 'name': 'total_size',
144
- 'select': (
145
- 'SELECT FORMAT(SUM(`size`), 0)\n'
146
- f'FROM `{database}`.`data`'
147
- ),
148
- 'comment': 'File total byte size.'
149
- },
150
- {
151
- 'name': 'avg_size',
152
- 'select': (
153
- 'SELECT FORMAT(AVG(`size`), 0)\n'
154
- f'FROM `{database}`.`data`'
155
- ),
156
- 'comment': 'File average byte size.'
157
- },
158
- {
159
- 'name': 'max_size',
160
- 'select': (
161
- 'SELECT FORMAT(MAX(`size`), 0)\n'
162
- f'FROM `{database}`.`data`'
163
- ),
164
- 'comment': 'File maximum byte size.'
165
- },
166
- {
167
- 'name': 'last_time',
168
- 'select': (
169
- 'SELECT MAX(`create_time`)\n'
170
- f'FROM `{database}`.`info`'
171
- ),
172
- 'comment': 'File last record create time.'
173
- }
174
- ]
175
- }
176
- ]
177
-
178
- # Build.
179
- db.build.build(tables=tables, views=views, views_stats=views_stats)
180
-
181
-
182
- @file_router.post('/upload')
183
- def upload(
184
- source: bytes,
185
- name: str | None = None,
186
- note: str | None = None
187
- ) -> int:
188
- """
189
- Upload file.
190
-
191
- Parameters
192
- ----------
193
- source : File path or file bytes.
194
- name : File name.
195
- - `None`: Automatic set.
196
- `parameter 'file' is 'str'`: Use path file name.
197
- `parameter 'file' is 'bytes'`: No name.
198
- - `str`: Use this name.
199
- note : File note.
200
-
201
- Returns
202
- -------
203
- File ID.
204
- """
205
59
 
206
- # Handle parameter.
207
- conn = self.db.connect()
208
- match source:
60
+ def __init__(
61
+ self,
62
+ db: DatabaseAsync,
63
+ path: str = 'file'
64
+ ) -> None:
65
+ """
66
+ Build instance attributes.
67
+
68
+ Parameters
69
+ ----------
70
+ db : Asynchronous database instance.
71
+ path: File store directory.
72
+ """
73
+
74
+ # Build.
75
+ self.db = db
76
+ self.path = path
77
+
78
+ ## Router.
79
+ self.router = self.__create_router()
80
+
81
+ ## Build Database.
82
+ self.build_db()
209
83
 
210
- ## File path.
211
- case str():
212
- file = File(source)
213
- file_bytes = file.bytes
214
- file_md5 = get_md5(file_bytes)
215
- file_name = file.name_suffix
216
84
 
217
- ## File bytes.
218
- case bytes() | bytearray():
219
- if type(source) == bytearray:
220
- source = bytes(source)
221
- file_bytes = source
85
+ async def depend_sess(self):
86
+ """
87
+ Dependencie function of asynchronous database session.
88
+ """
89
+
90
+ # Context.
91
+ async with self.db.orm.session() as sess:
92
+ yield sess
93
+
94
+
95
+ def __create_router(self) -> APIRouter:
96
+ """
97
+ Add APIs to router.
98
+
99
+ Returns
100
+ -------
101
+ Router.
102
+ """
103
+
104
+ # Parameter.
105
+ router = APIRouter()
106
+
107
+
108
+ @router.post('/upload')
109
+ async def upload(
110
+ file: Annotated[UploadFile, File()],
111
+ note: Annotated[str, Form()],
112
+ sess: Annotated[rorm.DatabaseORMSessionAsync, Depends(self.depend_sess)]
113
+ ):
114
+ """
115
+ Upload file.
116
+
117
+ Parameters
118
+ ----------
119
+ file : File instance.
120
+ note : File note.
121
+ sess : Asynchronous database session.
122
+ """
123
+
124
+ # Handle parameter.
125
+ file_store = FileStore(self.path)
126
+ file_name = file.filename
127
+ file_bytes = await file.read()
222
128
  file_md5 = get_md5(file_bytes)
223
- file_name = None
224
-
225
- ## File name.
226
- if name is not None:
227
- file_name = name
228
-
229
- ## File size.
230
- file_size = len(file_bytes)
231
-
232
- # Exist.
233
- exist = conn.execute.exist(
234
- (self.db_names['file'], self.db_names['file.data']),
235
- '`md5` = :file_md5',
236
- file_md5=file_md5
237
- )
238
-
239
- # Upload.
240
-
241
- ## Data.
242
- if not exist:
243
- data = {
244
- 'md5': file_md5,
245
- 'size': file_size,
246
- 'bytes': file_bytes
247
- }
248
- conn.execute.insert(
249
- (self.db_names['file'], self.db_names['file.data']),
250
- data,
251
- 'ignore'
252
- )
253
-
254
- ## Information.
255
- data = {
256
- 'md5': file_md5,
257
- 'name': file_name,
258
- 'note': note
259
- }
260
- conn.execute.insert(
261
- (self.db_names['file'], self.db_names['file.information']),
262
- data
263
- )
264
-
265
- # Get ID.
266
- file_id = conn.insert_id
267
-
268
- # Commit.
269
- conn.commit()
270
-
271
- return file_id
129
+ file_size = len(file_bytes)
130
+
131
+ # Upload.
132
+ file_path = file_store.index(file_md5)
133
+
134
+ ## Data.
135
+ if file_path is None:
136
+ file_path = file_store.store(file_bytes)
137
+ table_data = DatabaseORMTableData(
138
+ md5=file_md5,
139
+ size=file_size,
140
+ path=file_path
141
+ )
142
+ await sess.add(table_data)
143
+
144
+ ## Information.
145
+ table_info = DatabaseORMTableInfo(
146
+ md5=file_md5,
147
+ name=file_name,
148
+ note=note
149
+ )
150
+ await sess.add(table_info)
151
+
152
+ # Get ID.
153
+ await sess.flush()
154
+ file_id = table_info.file_id
155
+
156
+ return {'file_id': file_id}
157
+
158
+
159
+ return router
160
+
161
+
162
+ def build_db(self) -> None:
163
+ """
164
+ Check and build database tables.
165
+ """
166
+
167
+ # Set parameter.
168
+ database = self.db.database
169
+
170
+ ## Table.
171
+ tables = [DatabaseORMTableInfo, DatabaseORMTableData]
172
+
173
+ ## View.
174
+ views = [
175
+ {
176
+ 'path': 'data_info',
177
+ 'select': (
178
+ 'SELECT `b`.`last_time`, `a`.`md5`, `a`.`size`, `b`.`names`, `b`.`notes`\n'
179
+ f'FROM `{database}`.`data` AS `a`\n'
180
+ 'LEFT JOIN (\n'
181
+ ' SELECT\n'
182
+ ' `md5`,\n'
183
+ " GROUP_CONCAT(DISTINCT(`name`) ORDER BY `create_time` DESC SEPARATOR ' | ') AS `names`,\n"
184
+ " GROUP_CONCAT(DISTINCT(`note`) ORDER BY `create_time` DESC SEPARATOR ' | ') AS `notes`,\n"
185
+ ' MAX(`create_time`) as `last_time`\n'
186
+ f' FROM `{database}`.`info`\n'
187
+ ' GROUP BY `md5`\n'
188
+ ' ORDER BY `last_time` DESC\n'
189
+ ') AS `b`\n'
190
+ 'ON `a`.`md5` = `b`.`md5`\n'
191
+ 'ORDER BY `last_time` DESC'
192
+ )
193
+ }
194
+ ]
195
+
196
+ ## View stats.
197
+ views_stats = [
198
+ {
199
+ 'path': 'stats',
200
+ 'items': [
201
+ {
202
+ 'name': 'count',
203
+ 'select': (
204
+ 'SELECT COUNT(1)\n'
205
+ f'FROM `{database}`.`info`'
206
+ ),
207
+ 'comment': 'File information count.'
208
+ },
209
+ {
210
+ 'name': 'past_day_count',
211
+ 'select': (
212
+ 'SELECT COUNT(1)\n'
213
+ f'FROM `{database}`.`info`\n'
214
+ 'WHERE TIMESTAMPDIFF(DAY, `create_time`, NOW()) = 0'
215
+ ),
216
+ 'comment': 'File information count in the past day.'
217
+ },
218
+ {
219
+ 'name': 'past_week_count',
220
+ 'select': (
221
+ 'SELECT COUNT(1)\n'
222
+ f'FROM `{database}`.`info`\n'
223
+ 'WHERE TIMESTAMPDIFF(DAY, `create_time`, NOW()) <= 6'
224
+ ),
225
+ 'comment': 'File information count in the past week.'
226
+ },
227
+ {
228
+ 'name': 'past_month_count',
229
+ 'select': (
230
+ 'SELECT COUNT(1)\n'
231
+ f'FROM `{database}`.`info`\n'
232
+ 'WHERE TIMESTAMPDIFF(DAY, `create_time`, NOW()) <= 29'
233
+ ),
234
+ 'comment': 'File information count in the past month.'
235
+ },
236
+ {
237
+ 'name': 'data_count',
238
+ 'select': (
239
+ 'SELECT COUNT(1)\n'
240
+ f'FROM `{database}`.`data`'
241
+ ),
242
+ 'comment': 'File data unique count.'
243
+ },
244
+ {
245
+ 'name': 'total_size',
246
+ 'select': (
247
+ 'SELECT FORMAT(SUM(`size`), 0)\n'
248
+ f'FROM `{database}`.`data`'
249
+ ),
250
+ 'comment': 'File total byte size.'
251
+ },
252
+ {
253
+ 'name': 'avg_size',
254
+ 'select': (
255
+ 'SELECT FORMAT(AVG(`size`), 0)\n'
256
+ f'FROM `{database}`.`data`'
257
+ ),
258
+ 'comment': 'File average byte size.'
259
+ },
260
+ {
261
+ 'name': 'max_size',
262
+ 'select': (
263
+ 'SELECT FORMAT(MAX(`size`), 0)\n'
264
+ f'FROM `{database}`.`data`'
265
+ ),
266
+ 'comment': 'File maximum byte size.'
267
+ },
268
+ {
269
+ 'name': 'last_time',
270
+ 'select': (
271
+ 'SELECT MAX(`create_time`)\n'
272
+ f'FROM `{database}`.`info`'
273
+ ),
274
+ 'comment': 'File last record create time.'
275
+ }
276
+ ]
277
+ }
278
+ ]
279
+
280
+ # Build.
281
+ self.db.sync_database.build.build(tables=tables, views=views, views_stats=views_stats, skip=True)
reyserver/rserver.py CHANGED
@@ -19,7 +19,8 @@ from uvicorn import run as uvicorn_run
19
19
  from contextlib import asynccontextmanager
20
20
  from reykit.rbase import CoroutineFunctionSimple
21
21
 
22
- from .rbase import ServerBase, generate_lifespan
22
+ from .rbase import ServerBase, create_lifespan
23
+ from .rfile import ServerAPIFile
23
24
 
24
25
 
25
26
  __all__ = (
@@ -57,11 +58,13 @@ class Server(ServerBase):
57
58
  # Parameter.
58
59
  if type(ssl_cert) != type(ssl_key):
59
60
  raise
60
- lifespan = generate_lifespan(before, after)
61
- if iscoroutinefunction(depend):
61
+ lifespan = create_lifespan(before, after)
62
+ if depend is None:
63
+ depend = ()
64
+ elif iscoroutinefunction(depend):
62
65
  depend = (depend,)
63
- dependencies = [
64
- Depends(depend)
66
+ depend = [
67
+ Depends(task)
65
68
  for task in depend
66
69
  ]
67
70
 
@@ -71,8 +74,9 @@ class Server(ServerBase):
71
74
 
72
75
  ## App.
73
76
  self.app = FastAPI(
74
- dependencies=dependencies,
75
- lifespan=lifespan
77
+ dependencies=depend,
78
+ lifespan=lifespan,
79
+ debug=True
76
80
  )
77
81
 
78
82
  ## Static.
@@ -81,7 +85,7 @@ class Server(ServerBase):
81
85
  self.app.mount('/', subapp)
82
86
 
83
87
  ## Middleware.
84
- self.app.add_middleware(GZipMiddleware)
88
+ # self.app.add_middleware(GZipMiddleware)
85
89
  # self.app.add_middleware(TrustedHostMiddleware)
86
90
  # self.app.add_middleware(HTTPSRedirectMiddleware)
87
91
 
@@ -99,26 +103,14 @@ class Server(ServerBase):
99
103
  )
100
104
 
101
105
 
102
- # def add_api_all(self) -> None:
103
- # """
104
- # Add all API.
105
- # """
106
+ def add_api_base(self):
106
107
 
107
- # self.add_api_all()
108
+ @self.app.get('/test')
109
+ async def test():
110
+ return {'message': 'test'}
108
111
 
109
112
 
110
- # def add_api_base(self):
113
+ def add_api_file(self, db):
111
114
 
112
- # # @self.app.get('/')
113
- # # def index():
114
- # # file_bytes = File(self.index).bytes
115
- # # response = HTMLResponse(file_bytes)
116
- # # return response
117
-
118
-
119
- # @self.app.get('/test')
120
- # def test():
121
- # return {'message': 'test'}
122
-
123
-
124
- def add_api_file(self): ...
115
+ api = ServerAPIFile(db)
116
+ self.app.include_router(api.router, prefix='/file')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reyserver
3
- Version: 1.1.40
3
+ Version: 1.1.42
4
4
  Summary: Backend server method set.
5
5
  Project-URL: homepage, https://github.com/reyxbo/reyserver/
6
6
  Author-email: Rey <reyxbo@163.com>
@@ -0,0 +1,10 @@
1
+ reyserver/__init__.py,sha256=Zlfm-fsoVNYvVunQwy-ANR6ITAzksCgZzyHazAttXN4,316
2
+ reyserver/rall.py,sha256=wXhh90tEIqOyM_o2hXs6jWJrRM-B97uHsswhsg4vav0,257
3
+ reyserver/rbase.py,sha256=v06MgTGPYYx5KVoYPHr2OSIaYpDULggZF1eGZFzrO90,2399
4
+ reyserver/rclient.py,sha256=B6HOKyTz7kk6IfjuY0Yu-RlvWHRuWXd4zs1cxXud6pk,650
5
+ reyserver/rfile.py,sha256=sGGGcgzIBnvL45_6WFgH473Jtc_NfyR7ll_b4BiSKRI,9192
6
+ reyserver/rserver.py,sha256=hMUdILnIUPtqwj7IX022lLsPKAmwppG3_4wOzHfZxDQ,2948
7
+ reyserver-1.1.42.dist-info/METADATA,sha256=yT9vTRzQI6XpkUqKSvXRYrwjyQ4f57kWKrNLpwT88vc,1658
8
+ reyserver-1.1.42.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
9
+ reyserver-1.1.42.dist-info/licenses/LICENSE,sha256=UYLPqp7BvPiH8yEZduJqmmyEl6hlM3lKrFIefiD4rvk,1059
10
+ reyserver-1.1.42.dist-info/RECORD,,
reyserver/rdb.py DELETED
@@ -1,11 +0,0 @@
1
- # !/usr/bin/env python
2
- # -*- coding: utf-8 -*-
3
-
4
- """
5
- @Time : 2025-10-07 18:03:06
6
- @Author : Rey
7
- @Contact : reyxbo@163.com
8
- @Explain : Database methods.
9
- """
10
-
11
-
@@ -1,10 +0,0 @@
1
- reyserver/__init__.py,sha256=ZNzM6wBvBSXe1LgV40ZJ1WIAbejWNYGl8x22dmt8C60,289
2
- reyserver/rall.py,sha256=F-vUJIf5DgP0FXI0pdTrEeEiMtN-g81_yTo4ibUL9xk,233
3
- reyserver/rbase.py,sha256=EVLCkX2xdPNdPwkRnZ2ZSjM7kctnMoQ_FSlSNHSZt2E,1630
4
- reyserver/rdb.py,sha256=dfM3alvIII_eDgSCYhGfmQH7kh6eYsDmz4DaprYy9c8,170
5
- reyserver/rfile.py,sha256=P3i1wa2JYsgNFrm0pDCsDN_zFo_Xpv4XigePotVzn8s,8213
6
- reyserver/rserver.py,sha256=e-AFB75511HTOf7XjWerCNq86-QEm_2C81psMrldxls,3085
7
- reyserver-1.1.40.dist-info/METADATA,sha256=cI213JCteWEf_gqfUwYs1eWmLkk8lQ-vu29e5VdXQmw,1658
8
- reyserver-1.1.40.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
9
- reyserver-1.1.40.dist-info/licenses/LICENSE,sha256=UYLPqp7BvPiH8yEZduJqmmyEl6hlM3lKrFIefiD4rvk,1059
10
- reyserver-1.1.40.dist-info/RECORD,,