Skip to content

Commit 855fc95

Browse files
lock working for async recv (#165)
Co-authored-by: Antonin ENFRUN <[email protected]>
1 parent dadef19 commit 855fc95

32 files changed

+292
-302
lines changed

.github/workflows/tests.yml

+9-7
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ jobs:
1919
fail-fast: false
2020
matrix:
2121
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
22-
surrealdb-version: ["v2.1.0", "v2.1.1", "v2.1.2", "v2.1.3", "v2.1.4"] # v2.0.0 has different UPSERT behaviour
22+
# surrealdb-version: ["v2.1.0", "v2.1.1", "v2.1.2", "v2.1.3", "v2.1.4"] # v2.0.0 has different UPSERT behaviour
23+
surrealdb-version: ["v2.1.1", "v2.1.2", "v2.1.3", "v2.1.4"] # v2.0.0 has different UPSERT behaviour and v2.1.0 does not support async batching
2324
name: Python ${{ matrix.python-version }} - SurrealDB ${{ matrix.surrealdb-version }}
2425
steps:
2526
- name: Checkout repository
@@ -42,17 +43,18 @@ jobs:
4243
- name: Install dependencies
4344
run: pip install -r requirements.txt
4445

45-
- name: Run unit tests (HTTP)
46+
- name: Run unit tests
4647
run: python -m unittest discover -s tests
4748
env:
4849
PYTHONPATH: ./src
4950
SURREALDB_URL: http://localhost:8000
51+
SURREALDB_VERSION: ${{ matrix.surrealdb-version }}
5052

51-
- name: Run unit tests (WebSocket)
52-
run: python -m unittest discover -s tests
53-
env:
54-
PYTHONPATH: ./src
55-
SURREALDB_URL: ws://localhost:8000
53+
# - name: Run unit tests (WebSocket)
54+
# run: python -m unittest discover -s tests
55+
# env:
56+
# PYTHONPATH: ./src
57+
# SURREALDB_URL: ws://localhost:8000
5658

5759

5860

src/surrealdb/connections/async_http.py

+32-30
Original file line numberDiff line numberDiff line change
@@ -98,24 +98,26 @@ def set_token(self, token: str) -> None:
9898
self.token = token
9999

100100
async def authenticate(self) -> None:
101-
message = RequestMessage(self.id, RequestMethod.AUTHENTICATE, token=self.token)
101+
message = RequestMessage(RequestMethod.AUTHENTICATE, token=self.token)
102+
self.id = message.id
102103
return await self._send(message, "authenticating")
103104

104105
async def invalidate(self) -> None:
105-
message = RequestMessage(self.id, RequestMethod.INVALIDATE)
106+
message = RequestMessage(RequestMethod.INVALIDATE)
107+
self.id = message.id
106108
await self._send(message, "invalidating")
107109
self.token = None
108110

109111
async def signup(self, vars: Dict) -> str:
110-
message = RequestMessage(self.id, RequestMethod.SIGN_UP, data=vars)
112+
message = RequestMessage(RequestMethod.SIGN_UP, data=vars)
113+
self.id = message.id
111114
response = await self._send(message, "signup")
112115
self.check_response_for_result(response, "signup")
113116
self.token = response["result"]
114117
return response["result"]
115118

116119
async def signin(self, vars: dict) -> dict:
117120
message = RequestMessage(
118-
self.id,
119121
RequestMethod.SIGN_IN,
120122
username=vars.get("username"),
121123
password=vars.get("password"),
@@ -124,24 +126,26 @@ async def signin(self, vars: dict) -> dict:
124126
namespace=vars.get("namespace"),
125127
variables=vars.get("variables"),
126128
)
129+
self.id = message.id
127130
response = await self._send(message, "signing in")
128131
self.check_response_for_result(response, "signing in")
129132
self.token = response["result"]
130133
return response["result"]
131134

132135
async def info(self) -> dict:
133-
message = RequestMessage(self.id, RequestMethod.INFO)
136+
message = RequestMessage(RequestMethod.INFO)
137+
self.id = message.id
134138
response = await self._send(message, "getting database information")
135139
self.check_response_for_result(response, "getting database information")
136140
return response["result"]
137141

138142
async def use(self, namespace: str, database: str) -> None:
139143
message = RequestMessage(
140-
self.token,
141144
RequestMethod.USE,
142145
namespace=namespace,
143146
database=database,
144147
)
148+
self.id = message.id
145149
_ = await self._send(message, "use")
146150
self.namespace = namespace
147151
self.database = database
@@ -152,11 +156,11 @@ async def query(self, query: str, params: Optional[dict] = None) -> dict:
152156
for key, value in self.vars.items():
153157
params[key] = value
154158
message = RequestMessage(
155-
self.id,
156159
RequestMethod.QUERY,
157160
query=query,
158161
params=params,
159162
)
163+
self.id = message.id
160164
response = await self._send(message, "query")
161165
self.check_response_for_result(response, "query")
162166
return response["result"][0]["result"]
@@ -167,11 +171,11 @@ async def query_raw(self, query: str, params: Optional[dict] = None) -> dict:
167171
for key, value in self.vars.items():
168172
params[key] = value
169173
message = RequestMessage(
170-
self.id,
171174
RequestMethod.QUERY,
172175
query=query,
173176
params=params,
174177
)
178+
self.id = message.id
175179
response = await self._send(message, "query", bypass=True)
176180
return response
177181

@@ -184,27 +188,26 @@ async def create(
184188
if ":" in thing:
185189
buffer = thing.split(":")
186190
thing = RecordID(table_name=buffer[0], identifier=buffer[1])
187-
message = RequestMessage(
188-
self.id, RequestMethod.CREATE, collection=thing, data=data
189-
)
191+
message = RequestMessage(RequestMethod.CREATE, collection=thing, data=data)
192+
self.id = message.id
190193
response = await self._send(message, "create")
191194
self.check_response_for_result(response, "create")
192195
return response["result"]
193196

194197
async def delete(
195198
self, thing: Union[str, RecordID, Table]
196199
) -> Union[List[dict], dict]:
197-
message = RequestMessage(self.id, RequestMethod.DELETE, record_id=thing)
200+
message = RequestMessage(RequestMethod.DELETE, record_id=thing)
201+
self.id = message.id
198202
response = await self._send(message, "delete")
199203
self.check_response_for_result(response, "delete")
200204
return response["result"]
201205

202206
async def insert(
203207
self, table: Union[str, Table], data: Union[List[dict], dict]
204208
) -> Union[List[dict], dict]:
205-
message = RequestMessage(
206-
self.id, RequestMethod.INSERT, collection=table, params=data
207-
)
209+
message = RequestMessage(RequestMethod.INSERT, collection=table, params=data)
210+
self.id = message.id
208211
response = await self._send(message, "insert")
209212
self.check_response_for_result(response, "insert")
210213
return response["result"]
@@ -213,8 +216,9 @@ async def insert_relation(
213216
self, table: Union[str, Table], data: Union[List[dict], dict]
214217
) -> Union[List[dict], dict]:
215218
message = RequestMessage(
216-
self.id, RequestMethod.INSERT_RELATION, table=table, params=data
219+
RequestMethod.INSERT_RELATION, table=table, params=data
217220
)
221+
self.id = message.id
218222
response = await self._send(message, "insert_relation")
219223
self.check_response_for_result(response, "insert_relation")
220224
return response["result"]
@@ -228,51 +232,49 @@ async def unset(self, key: str) -> None:
228232
async def merge(
229233
self, thing: Union[str, RecordID, Table], data: Optional[Dict] = None
230234
) -> Union[List[dict], dict]:
231-
message = RequestMessage(
232-
self.id, RequestMethod.MERGE, record_id=thing, data=data
233-
)
235+
message = RequestMessage(RequestMethod.MERGE, record_id=thing, data=data)
236+
self.id = message.id
234237
response = await self._send(message, "merge")
235238
self.check_response_for_result(response, "merge")
236239
return response["result"]
237240

238241
async def patch(
239242
self, thing: Union[str, RecordID, Table], data: Optional[List[dict]] = None
240243
) -> Union[List[dict], dict]:
241-
message = RequestMessage(
242-
self.id, RequestMethod.PATCH, collection=thing, params=data
243-
)
244+
message = RequestMessage(RequestMethod.PATCH, collection=thing, params=data)
245+
self.id = message.id
244246
response = await self._send(message, "patch")
245247
self.check_response_for_result(response, "patch")
246248
return response["result"]
247249

248250
async def select(self, thing: str) -> Union[List[dict], dict]:
249-
message = RequestMessage(self.id, RequestMethod.SELECT, params=[thing])
251+
message = RequestMessage(RequestMethod.SELECT, params=[thing])
252+
self.id = message.id
250253
response = await self._send(message, "select")
251254
self.check_response_for_result(response, "select")
252255
return response["result"]
253256

254257
async def update(
255258
self, thing: Union[str, RecordID, Table], data: Optional[Dict] = None
256259
) -> Union[List[dict], dict]:
257-
message = RequestMessage(
258-
self.id, RequestMethod.UPDATE, record_id=thing, data=data
259-
)
260+
message = RequestMessage(RequestMethod.UPDATE, record_id=thing, data=data)
261+
self.id = message.id
260262
response = await self._send(message, "update")
261263
self.check_response_for_result(response, "update")
262264
return response["result"]
263265

264266
async def version(self) -> str:
265-
message = RequestMessage(self.id, RequestMethod.VERSION)
267+
message = RequestMessage(RequestMethod.VERSION)
268+
self.id = message.id
266269
response = await self._send(message, "getting database version")
267270
self.check_response_for_result(response, "getting database version")
268271
return response["result"]
269272

270273
async def upsert(
271274
self, thing: Union[str, RecordID, Table], data: Optional[Dict] = None
272275
) -> Union[List[dict], dict]:
273-
message = RequestMessage(
274-
self.id, RequestMethod.UPSERT, record_id=thing, data=data
275-
)
276+
message = RequestMessage(RequestMethod.UPSERT, record_id=thing, data=data)
277+
self.id = message.id
276278
response = await self._send(message, "upsert")
277279
self.check_response_for_result(response, "upsert")
278280
return response["result"]

0 commit comments

Comments
 (0)