Skip to main content

Use SQLAlchemy with Ex-DRF.

Project description

SqlAlchemy support for Ex-DRF

exdrf-al is the SQLAlchemy 2.x bridge for exdrf: declarative metadata is turned into ExDataset / ExResource / ExField trees used by generators (al2pd, al2qt, al2r, …), Qt (exdrf-qt), and Alembic helpers (Click commands in this package). It depends on exdrf and exdrf-pd.

The library provides guidance and support code for using SQLAlchemy with Ex-DRF.

Usage

Start by basing your models off Base from exdrf_al.base module. It is a rather simple class that allows for model and fields iteration. If you don't want to use it, take a look at the implementation of that class for how to extract the information you need from your models.

Models

The library reads the description of models from the sqlAlchemy metadata. On top of that you can add additional information by adding members to the info key in the __table_args__ model attribute.

The keys that are used inside the info dictionary are documented in exdrf.resource.ResExtraInfo, which is the pydantic class that parses the information. Here is brief description of the most important keys:

  • label: takes a string that is interpreted by the DSL in exdrf. label_dsl; it is used to generate code that computes the label of a record given the record. The exdrf.label_dsl module includes code to create python and typescript code from a parsed label definition.

Example:

class Example(Base):
    __tablename__ = "the_table"
    __table_args__ = {
        "info": {
            "label": """(if name name (concat "ID:" " id))""",
        }
    }
    id: int
    name: Optional[str] = None

Fields

Just like with the models, the model field metadata is used to extract the information. Additionally, we use values in the dictionary assigned to the info attribute to add additional information.

The keys that are used inside the info consist of a common subset for all field types and specific keys for each field type. The common keys parsed by the exdrf.field.FieldInfo class are documented with that class, and each field type is described in its own module under exdrf.field_types.

Example:

class Example(Base):
    __tablename__ = "the_table"
    id: Mapped[int] = mapped_column(
        primary_key=True,
        doc="The unique identifier for a record within its table",
        info={
            "sortable": False
        }
    )
    name: Mapped[Optional[str]] = mapped_column(
        doc="The name of the record",
        info={
            "filterable": False,
            "multiline": True,
            "min_length": 3,
        }
    )

Relationships

relationship(..., info={...}) is validated with exdrf.field_types.ref_base.RelExtraInfo, which extends exdrf.field.FieldInfo. Keys such as direction and doc are required or conventional; optional keys from FieldInfo apply as well.

When use_rel is true on a non-bridge OneToMany relationship, Qt code generation (exdrf-gen-al2qt) emits a dedicated editor tab with a DrfRelated-style transfer list (Qt{Parent}Rel{Ref}) instead of an inline Qt{Ref}MuSe control on category tabs.

Example:

items: Mapped[Set["Item"]] = relationship(
    "Item",
    back_populates="owner",
    collection_class=set,
    info={
        "doc": "Owned items",
        "direction": "OneToMany",
        "use_rel": True,
    },
)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

exdrf_al-0.1.20.tar.gz (55.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

exdrf_al-0.1.20-py3-none-any.whl (65.5 kB view details)

Uploaded Python 3

File details

Details for the file exdrf_al-0.1.20.tar.gz.

File metadata

  • Download URL: exdrf_al-0.1.20.tar.gz
  • Upload date:
  • Size: 55.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for exdrf_al-0.1.20.tar.gz
Algorithm Hash digest
SHA256 90b6c56efa01eb39e22347784c2071b132efc1f8f3394d9ac325f14bf8902071
MD5 31d78ac52d7a2d83212d83c56f582033
BLAKE2b-256 8d048277b2738e9274c5b1cd3735fb38583ebc8bd99d472572c07b1bd70be49d

See more details on using hashes here.

File details

Details for the file exdrf_al-0.1.20-py3-none-any.whl.

File metadata

  • Download URL: exdrf_al-0.1.20-py3-none-any.whl
  • Upload date:
  • Size: 65.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for exdrf_al-0.1.20-py3-none-any.whl
Algorithm Hash digest
SHA256 062c7f19d56663aa586815b5bdfc0eb1f4b7d4cdb26a22365c8dcc712b657ec5
MD5 d8e524cb8bfd5e31e7033000d71b5f0e
BLAKE2b-256 287e8b3445d678835f5bce95bf387ab4fa22d366a8872b8d037e7181e7f8b29c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page