Releases: edgedb/edgedb-python
v1.1.0
v1.0.0
This is the v1.0 release for the edgedb-python
client library. It is accompanied by the introduction of a new module edgedb.codegen
which can be executed to generate code from .edgeql
files.
Breaking Changes
Query Result Type Changes
-
In edgedb-python 1.0, we dropped many custom data structure implementations, and replaced them with Python builtins:
Impl Dropped Replacement Breaking Changes edgedb.Tuple
tuple
weakref.ref()
will stop working on tuplesedgedb.Set
list
* Immutability is broken
*weakref.ref()
will stop working on sets
*hash()
will stop working on sets
*repr()
produces different resultsedgedb.Array
list
* Immutability is broken
*weakref.ref()
will stop working on lists
*hash()
will stop working on listsWhile the implementations are dropped, the reference name is still there, like
edgedb.Tuple
is simply an alias of the builtintuple
. -
edgedb.NamedTuple
is reimplemented.- [Breaking Change]
weakref.ref()
will stop working on named tuples. edgedb.NamedTuple
is now a subclass of Python builtintuple
.- Before named tuple instances are created, a transient heap type
DerivedNamedTuple
will be created first as a subclass ofedgedb.NamedTuple
, which is then used to create instances with naming data. DerivedNamedTuple
classes are usually cached in codecs, and garbage-collected when all its references are cleared.
- [Breaking Change]
-
edgedb.EnumValue
is reimplemented.- [Breaking Change] The result of
repr()
is slightly changed to have theedgedb.
prefix. edgedb.EnumValue
is now a subclass of Python builtinenum.Enum
.- Before enum values are created, a transient heap type
DerivedEnumValue
will be created first as a subclass ofedgedb.EnumValue
, which is then used to create instances with full enumeration. Enum member names are simply upper case strings of corresponding values. DerivedEnumValue
classes are usually cached in codecs, and garbage-collected when all its references are cleared.
- [Breaking Change] The result of
-
edgedb.Object
changes.- [Breaking Change] The custom implementation of
__hash__()
onedgedb.Object
is dropped, nowhash()
simply returns a hash on the memory address. - [Breaking Change] The custom implementation of rich comparion is dropped, that means
<
,>
,<=
,>=
will stop working onedgedb.Object
instances, and==
is now equivalent tois
foredgedb.Object
instances. edgedb.Object
instances will now yieldTrue
fordataclasses.is_dataclass()
check.edgedb.Object
instances can now be used indataclasses.as_dict()
to recursively generate a dict containing all properties and links (excluding link properties).
- [Breaking Change] The custom implementation of
-
The performance impact is minimal. We are still using the most efficient C-API and C/Cython implementations to offer query results,
No more Python 3.6
As Python 3.6 is no longer supported itself 10 months ago, edgedb-python is also dropping support for Python 3.6.
edgedb-python 1.0 now supprots only Pyhton 3.7 to Python 3.11.
New Features
Code generation
Now you can create one or more .edgeql
files in your EdgeDB project directory, and run:
$ python -m edgedb.codegen
or alternatively:
$ edgedb-py
This command will search through the EdgeDB project directory and generate typesafe query code for the .edgeql
files.
Access of link properties
edgedb.Link
and edgedb.LinkSet
types, as well as the way to access them, are deprecated in edgedb-python 1.0 and will be dropped in 2.0. For example, with a given schema:
type Person {
multi link friends -> Person {
property strength -> float32;
}
}
Expression like person["friends"]
will now emit a DeprecationWarning
. This deprecates the old way to access link properties like person["friends"][0].strength
. Instead, a new way is introduced: you should now use person.friends[0]["@strength"]
.
Detail Changelog
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)
Fixes
-
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
v0.24.0
Changes
-
Remove DSN from
create_client()
(by @elprans in 9081105 for #303) -
Add support for protocol v1.0
(by @fantix in 51344fe for #306) -
improve error when passing empty query arguments
(by @nsidnev in 7a393ec) -
Accept args in execute() and use the new Execute message
(by @fantix in 5298701 for #310) -
drop legacy agruments encoding with named tuple codec
(by @nsidnev in ef96e76) -
Stop using Parse, replace use of headers with fields
(by @elprans in b2c9e4b) -
Change headers format to str:json
(by @fantix in f17a4fd for #319) -
Support EDGEDB_WAIT_UNTIL_AVAILABLE environment variable
(by @fmoor in c27ab36) -
Add
with_globals()
and friends through state over the protocol
(by @fantix in 8582ec1 for #315) -
Implement support for range types
(by @elprans in a415b9f for #332) -
Implement support for cal::date_duration
(by @elprans in e77615b for #335) -
Allow <array<range>> arguments
(by @fmoor in 243250c for #351)
v0.23.0
v0.22.0
v0.18.0
Changes
-
Update to protocol version 0.13
(by @1st1 in c690250, 8by @fmoor in 5ce52ed, by @jaclarke in a5a6218 for #253) -
Lookup
edgedb.toml
recursively in parent directories
(by @fmoor in d9a12b8 for #245) -
Update connection parameter resolution
(by @jaclarke in 085f574 for #241) -
Add optional/required
query_single*
methods + renameretrying_transaction
+ update pool tocreate_client
API
(by @jaclarke in f2ae0d0 for #249)
Deprecations
-
Deprecate
Pool.acquire()
andPool.release()
(by @fmoor in 2d501e9 for #217) -
Rename
tls_verify_hostname
totls_security
(by @fmoor in 2086b86)
Fixes
-
Do not attempt to del transport in
connection_lost
if it has been already
(by @elprans in c719e79 for #215) -
Retry if
start()
raises a retryable error (#228)
(by @fantix in ffaae01 for #228) -
Fix broken pool connection cleanup
(by @fantix in be44959 for #222) -
Fix deprecated usage of
SSLContext
(#231)
(by @elprans in f73f999 for #231) -
Bugfix:
_borrowed_for
is now set entering a transaction (#233)
(by @fantix in bf763d1 for #233) -
Send zero arguments as zero-length bytes in proto 0.12 (#238)
(by @tailhook in f51dd51 for #238) -
Fix
retrying_transaction()
on network errors
(by @fmoor in cc001e6) -
Fix connection and retry options on
AsyncIOPool
(#237)
(by @tailhook in 44e279f for #237) -
Auto retry read-only queries outside transactions (#243)
(by @fmoor in 76bb586 for #243) -
Fix
credentials_file
argument typo onasync_connect
(#252)
(by @mkniewallner in b21b70a for #252)
v0.17.2
null
v0.17.0
Fixes
-
Fix failing tests regarding --help (#207)
(by @fantix in 956a2ca for #207) -
Fix confusing error when no arguments are passed to a query with named params (#208)
(by @elprans in 8e0b334 for #208) -
Add Python 3.10 compatibility (#209)
(by @elprans in 3472f17 for #209) -
Fix asyncio SSL unclosed warning (#210)
(by @fantix in d718839 for #210) -
More reliable transport double-closing
(by @fantix in 337b779)
v0.13.0
- New APIs:
conn.retrying_transaction()
andconn.raw_transaction()
. conn.transaction()
has been deprecated.conn.aclose()
implements graceful disconnect from the DB server.- Starting transactions in
conn.execute()
is no longer allowed. wait_until_available
parameter for connection APIs.