-
Notifications
You must be signed in to change notification settings - Fork 45
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement dataclass for EdgeObject #359
Conversation
Have not tested, but for this part: return client.query("select User { name, role: { name } }")[0] Will the first index return us the |
Oh that's the first object in the result set as we are using p.s.: Ideally we could do something like: @app.get("/", response_model=typing.Iterable[User])
def read_root():
return client.query("select User { name, role: { name } }") But we're blocked by fastapi/fastapi#3913 - so using a regular |
Furthermore, we will be able to separate this into 2 separate files:
import edgedb
import typing
import uuid
from dataclasses import dataclass
@dataclass
class Role:
id: uuid.UUID
name: str
@classmethod
def __get_validators__(cls):
return []
@dataclass
class User:
id: uuid.UUID
name: str
role: Role
@classmethod
def __get_validators__(cls):
return []
def query(client: edgedb.Client) -> typing.Sequence[User]:
return client.query("select User { name, role: { name } }") So that we can generate |
That would be preferred, or you could subsequently use |
An example please? Sorry I'm not sure I'm 100% following. |
class CustomMapping(typing.Generic[KV, KT]):
def __getitem__(self, key: KT) -> VT:
... This would only be useful if you have custom-defined typings in the client library. For example, you could use type variables to represent types from EdgeQL. This could be used as: @app.get("/", response_model=CustomMapping[User, Role])
def read_root():
return client.query("select User { name, role: { name } }") |
Co-authored-by: Yury Selivanov <[email protected]>
5c4991f
to
8ec3afd
Compare
49246c7
to
b3912c5
Compare
Changes ======= * Implement dataclass for EdgeObject (#359) (by @fantix in dfb8c8b for #359) * Redo edgedb basic types to inherit from builtin types (#366) (by @fantix in b11b991 for #366) * Officially drop 3.6 support (#373) (by @msullivan in 7b76bc7 for #373) * Support Python 3.11 (#375) (by @msullivan in 04b0da2 for #375) * Codegen with the describe_query() API (#363) (by @fantix in 361221d for #363) * Add codegen docs (#380) (by @colinhacks in 23dd42e for #380) * Use typing_extension.Literal in codegen for Python 3.7 (by @fantix in 6d0d6ab) * Add __all__ to edgedb/__init__.py (by @fmoor in d3ef6d9) Fixes ===== * Improve duration parsing (by @fmoor in 241c80d) * Tweak wording in query_single() error messages (#369) (by @msullivan in e24bb53 for #369) * Fix flake tests on python3.7 (#371) (by @msullivan in 583e1cb for #371) * Don't reject tuple arguments on the client side (#370) (by @msullivan in 09c950f for #370) * Correct edgedb.Client.close() timeout behavior (by @fantix in 33a912c) * Ping first if conn is idle for too long (#365) (by @fantix in 99cf78a for #365) Deprecations ============ * Deprecate object links and simplify link property access (#379) (by @fantix in 2c5dcc7 for #379)
Changes ======= * Implement dataclass for EdgeObject (#359) (by @fantix in dfb8c8b for #359) * Redo edgedb basic types to inherit from builtin types (#366) (by @fantix in b11b991 for #366) * Officially drop 3.6 support (#373) (by @msullivan in 7b76bc7 for #373) * Support Python 3.11 (#375) (by @msullivan in 04b0da2 for #375) * Codegen with the describe_query() API (#363) (by @fantix in 361221d for #363) * Add codegen docs (#380) (by @colinhacks in 23dd42e for #380) * Use typing_extension.Literal in codegen for Python 3.7 (by @fantix in 6d0d6ab) * Add __all__ to edgedb/__init__.py (by @fmoor in d3ef6d9) Fixes ===== * Improve duration parsing (by @fmoor in 241c80d) * Tweak wording in query_single() error messages (#369) (by @msullivan in e24bb53 for #369) * Fix flake tests on python3.7 (#371) (by @msullivan in 583e1cb for #371) * Don't reject tuple arguments on the client side (#370) (by @msullivan in 09c950f for #370) * Correct edgedb.Client.close() timeout behavior (by @fantix in 33a912c) * Ping first if conn is idle for too long (#365) (by @fantix in 99cf78a for #365) * Use @-prefixed keys in object codec for link properties (#384) (by @fantix in 68480f9 for #377) Deprecations ============ * Deprecate object links and simplify link property access (#379) (by @fantix in 2c5dcc7 for #379)
This would allow using the
EdgeObject
as a dataclass, in particular:dataclasses.is_dataclass(obj)
will returnTrue
dataclasses.asdict(obj)
will return a properdict
Then we could do something like this with FastAPI as an example:
Schema: