edgedb-python
edgedb-python copied to clipboard
Codegen with the describe() API
Please review individual commits.
- [x] The
array,set,namedtupleandtupleshould support__deepcopy__()so thatdataclass.asdict()could properly handle theobjectwith such fields. - [ ] Add tests
edgedb/edgedb#4325 is preferred to generate more friendly code.
Generated sample:
from __future__ import annotations
import dataclasses
import edgedb
import enum
import typing
import uuid
MyString = str
class NoPydanticValidation:
@classmethod
def __get_validators__(cls):
from pydantic import dataclasses as dc
dc.dataclass(cls)
cls.__pydantic_model__.__get_validators__ = lambda: []
return []
class Color(enum.Enum):
RED = "Red"
GREEN = "Green"
BLUE = "Blue"
@dataclasses.dataclass
class Role(NoPydanticValidation):
id: uuid.UUID
name: str
@dataclasses.dataclass
class Test1Result(NoPydanticValidation):
id: uuid.UUID
mystr: MyString
literal: int
enumval: Color
userstr: str
user: typing.Sequence[User]
num: Test1ResultNum
named: Test1ResultNamed
arr: typing.Sequence[int]
tup: typing.Tuple[int, int, int]
class Test1ResultNamed(typing.NamedTuple):
a: int
b: float
@dataclasses.dataclass
class Test1ResultNum(NoPydanticValidation):
id: uuid.UUID
n: int
@dataclasses.dataclass
class User(NoPydanticValidation):
id: uuid.UUID
mobile: str
role: Role
async def test1(
client: edgedb.AsyncIOClient,
arg0: str,
) -> Test1Result:
return await client.query_single(
"""\
select {
mystr := <MyString>'abc',
literal := 42,
enumval := <Color>'Red',
userstr := <str>$0,
user := (select User { mobile, role: { name } }),
num := (select {{n := 1},{},{}} limit 2),
named := (a := 1, b := 2.2),
arr := [1,2,3],
tup := (1,2,3),
}\
""",
arg0,
)