Skip to content

Commit 640f9ed

Browse files
authored
Fix codegen due to internal API change (#509)
1 parent 45cf86a commit 640f9ed

27 files changed

+1169
-46
lines changed

.github/workflows/tests.yml

+6-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ jobs:
2626
fail-fast: false
2727
matrix:
2828
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
29-
edgedb-version: [stable , nightly]
29+
edgedb-version: [5, nightly]
3030
os: [ubuntu-latest, macos-latest, windows-2019]
3131
loop: [asyncio, uvloop]
3232
exclude:
@@ -88,6 +88,11 @@ jobs:
8888
LOOP_IMPL: ${{ matrix.loop }}
8989
SERVER_VERSION: ${{ matrix.edgedb-version }}
9090
run: |
91+
if [ "${SERVER_VERSION}" = "nightly" ]; then
92+
export EDGEDB_TEST_CODEGEN_ASSERT_SUFFIX=.assert
93+
else
94+
export EDGEDB_TEST_CODEGEN_ASSERT_SUFFIX=.assert${SERVER_VERSION}
95+
fi
9196
if [ "${LOOP_IMPL}" = "uvloop" ]; then
9297
env USE_UVLOOP=1 python -m unittest -v tests.suite
9398
else

edgedb/abstract.py

+16
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,22 @@ class DescribeContext:
110110
output_format: protocol.OutputFormat
111111
expect_one: bool
112112

113+
def lower(
114+
self, *, allow_capabilities: enums.Capability
115+
) -> protocol.ExecuteContext:
116+
return protocol.ExecuteContext(
117+
query=self.query,
118+
args=None,
119+
kwargs=None,
120+
reg=protocol.CodecsRegistry(),
121+
qc=protocol.LRUMapping(maxsize=1),
122+
output_format=self.output_format,
123+
expect_one=self.expect_one,
124+
inline_typenames=self.inject_type_names,
125+
allow_capabilities=allow_capabilities,
126+
state=self.state.as_dict() if self.state else None,
127+
)
128+
113129

114130
@dataclasses.dataclass
115131
class DescribeResult:

edgedb/base_client.py

+7-15
Original file line numberDiff line numberDiff line change
@@ -255,23 +255,15 @@ async def _execute(self, execute_context: abstract.ExecuteContext) -> None:
255255
async def describe(
256256
self, describe_context: abstract.DescribeContext
257257
) -> abstract.DescribeResult:
258-
cardinality, in_dc, out_dc, capabilities = await self._protocol._parse(
259-
describe_context.query,
260-
reg=protocol.CodecsRegistry(),
261-
inline_typenames=describe_context.inject_type_names,
262-
output_format=describe_context.output_format,
263-
expect_one=describe_context.expect_one,
264-
allow_capabilities=enums.Capability.EXECUTE,
265-
state=(
266-
describe_context.state.as_dict()
267-
if describe_context.state else None
268-
),
258+
ctx = describe_context.lower(
259+
allow_capabilities=enums.Capability.EXECUTE
269260
)
261+
await self._protocol._parse(ctx)
270262
return abstract.DescribeResult(
271-
input_type=in_dc.make_type(describe_context),
272-
output_type=out_dc.make_type(describe_context),
273-
output_cardinality=enums.Cardinality(cardinality[0]),
274-
capabilities=capabilities,
263+
input_type=ctx.in_dc.make_type(describe_context),
264+
output_type=ctx.out_dc.make_type(describe_context),
265+
output_cardinality=enums.Cardinality(ctx.cardinality[0]),
266+
capabilities=ctx.capabilities,
275267
)
276268

277269
def terminate(self):

edgedb/protocol/protocol.pxd

+3-3
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,9 @@ cdef class ExecuteContext:
8585
object state
8686

8787
# Contextual variables
88-
bytes cardinality
89-
BaseCodec in_dc
90-
BaseCodec out_dc
88+
readonly bytes cardinality
89+
readonly BaseCodec in_dc
90+
readonly BaseCodec out_dc
9191
readonly uint64_t capabilities
9292

9393
cdef inline bint has_na_cardinality(self)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
generated_async_edgeql.py.assert5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# AUTOGENERATED FROM:
2+
# 'select_optional_json.edgeql'
3+
# 'select_scalar.edgeql'
4+
# 'linked/test_linked.edgeql'
5+
# WITH:
6+
# $ edgedb-py --target async --file --no-skip-pydantic-validation
7+
8+
9+
from __future__ import annotations
10+
import dataclasses
11+
import edgedb
12+
import uuid
13+
14+
15+
@dataclasses.dataclass
16+
class SelectOptionalJsonResultItem:
17+
id: uuid.UUID
18+
snake_case: SelectOptionalJsonResultItemSnakeCase | None
19+
20+
21+
@dataclasses.dataclass
22+
class SelectOptionalJsonResultItemSnakeCase:
23+
id: uuid.UUID
24+
25+
26+
async def select_optional_json(
27+
executor: edgedb.AsyncIOExecutor,
28+
arg0: str | None,
29+
) -> list[tuple[str, SelectOptionalJsonResultItem]]:
30+
return await executor.query(
31+
"""\
32+
create type TestCase {
33+
create link snake_case -> TestCase;
34+
};
35+
36+
select (<optional json>$0, TestCase {snake_case});\
37+
""",
38+
arg0,
39+
)
40+
41+
42+
async def select_scalar(
43+
executor: edgedb.AsyncIOExecutor,
44+
) -> int:
45+
return await executor.query_single(
46+
"""\
47+
select 1;\
48+
""",
49+
)
50+
51+
52+
async def test_linked(
53+
executor: edgedb.AsyncIOExecutor,
54+
) -> int:
55+
return await executor.query_single(
56+
"""\
57+
select 42\
58+
""",
59+
)

tests/codegen/test-project2/generated_async_edgeql.py.assert

+2-4
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ import typing
2222
import uuid
2323

2424

25-
Input = typing.Sequence[float]
2625
MyScalar = int
26+
V3 = typing.Sequence[float]
2727

2828

2929
@dataclasses.dataclass
@@ -61,7 +61,6 @@ class MyEnum(enum.Enum):
6161

6262
@dataclasses.dataclass
6363
class MyQueryResult:
64-
id: uuid.UUID
6564
a: uuid.UUID
6665
b: uuid.UUID | None
6766
c: str
@@ -122,7 +121,6 @@ class MyQueryResult:
122121

123122
@dataclasses.dataclass
124123
class SelectArgsResult:
125-
id: uuid.UUID
126124
Str: str
127125
DateTime: datetime.datetime
128126

@@ -145,7 +143,7 @@ class SelectObjectResultParamsItem:
145143
async def custom_vector_input(
146144
executor: edgedb.AsyncIOExecutor,
147145
*,
148-
input: Input | None = None,
146+
input: V3 | None = None,
149147
) -> int | None:
150148
return await executor.query_single(
151149
"""\

0 commit comments

Comments
 (0)