Skip to content

v1.0.0

Compare
Choose a tag to compare
@github-actions github-actions released this 21 Oct 19:22
· 101 commits to master since this release
v1.0.0
314ec4a

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

$ 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

#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

Fixes

Deprecations