Edgedb

Latest version: v1.9.0

Safety actively analyzes 630094 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 5 of 7

1.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

366

1. 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 tuples |
| `edgedb.Set` | `list` | * Immutability is broken<br>* `weakref.ref()` will stop working on sets<br>* `hash()` will stop working on sets<br>* `repr()` produces different results |
| `edgedb.Array` | `list` | * Immutability is broken<br>* `weakref.ref()` will stop working on lists<br>* `hash()` will stop working on lists |

While the implementations are dropped, the reference name is still there, like `edgedb.Tuple` is simply an alias of the builtin `tuple`.

2. `edgedb.NamedTuple` is reimplemented.

* **[Breaking Change]** `weakref.ref()` will stop working on named tuples.
* `edgedb.NamedTuple` is now a subclass of Python builtin `tuple`.
* Before named tuple instances are created, a transient heap type `DerivedNamedTuple` will be created first as a subclass of `edgedb.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.

3. `edgedb.EnumValue` is reimplemented.

* **[Breaking Change]** The result of `repr()` is slightly changed to have the `edgedb.` prefix.
* `edgedb.EnumValue` is now a subclass of Python builtin `enum.Enum`.
* Before enum values are created, a transient heap type `DerivedEnumValue` will be created first as a subclass of `edgedb.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.

4. `edgedb.Object` changes.

* **[Breaking Change]** The custom implementation of `__hash__()` on `edgedb.Object` is dropped, now `hash()` simply returns a hash on the memory address.
* **[Breaking Change]** The custom implementation of rich comparion is dropped, that means `<`, `>`, `<=`, `>=` will stop working on `edgedb.Object` instances, and `==` is now equivalent to `is` for `edgedb.Object` instances.
* `edgedb.Object` instances will now yield `True` for `dataclasses.is_dataclass()` check.
* `edgedb.Object` instances can now be used in `dataclasses.as_dict()` to recursively generate a dict containing all properties and links (excluding link properties).

5. 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

363

Now you can create one or more `.edgeql` files in your EdgeDB project directory, and run:

console
$ python -m edgedb.codegen


or alternatively:

console
$ edgedb-py


This command will search through the EdgeDB project directory and generate typesafe query code for the `.edgeql` files.


Access of link properties

379

`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 dfb8c8b0 for 359)

* Redo edgedb basic types to inherit from builtin types (366) (by fantix in b11b9917 for 366)

* Officially drop 3.6 support (373) (by msullivan in 7b76bc73 for 373)

* Support Python 3.11 (375) (by msullivan in 04b0da2a for 375)

* Codegen with the describe_query() API (363) (by fantix in 361221df for 363)

* Add codegen docs (380) (by colinhacks in 23dd42e6 for 380)

* Use typing_extension.Literal in codegen for Python 3.7 (by fantix in 6d0d6abc)

* Add __all__ to edgedb/__init__.py (by fmoor in d3ef6d93)

Fixes

* Improve duration parsing (by fmoor in 241c80d8)

* Tweak wording in query_single() error messages (369) (by msullivan in e24bb538 for 369)

* Fix flake tests on python3.7 (371) (by msullivan in 583e1cbd for 371)

* Don't reject tuple arguments on the client side (370) (by msullivan in 09c950fd for 370)

* Correct edgedb.Client.close() timeout behavior (by fantix in 33a912c1)

* Ping first if conn is idle for too long (365) (by fantix in 99cf78a0 for 365)

* Use -prefixed keys in object codec for link properties (384) (by fantix in 68480f92 for 377)

Deprecations

* Deprecate object links and simplify link property access (379) (by fantix in 2c5dcc70 for 379)

1.0rc5

1.0b1

1.0a7

1.0a6

1.0a5

Page 5 of 7

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.