Skip to content

QuartSQLAlchemy constructor does not support Quart factory pattern #23

@brassy-endomorph

Description

@brassy-endomorph

I want to do the following:

# __init__.py
from quart import Quart
from quart_sqlalchemy import QuartSQLAlchemyConfig

def create_app() -> Quart:
    quart = Quart(__name__)
    ...  # init stuff
    db.config = QuartSQLAlchemyConfig(...)
    db.init_app(app)

# db.py
from quart_squalchemy import QuartSQLAlchemy

db = QuartSQLAlchemy()

This fails because the QuartSQLAlchemy constructor calls its superclass which calls initialize().

class QuartSQLAlchemy(SQLAlchemy):
def __init__(
self,
config: SQLAlchemyConfig,
app: t.Optional[Quart] = None,
):
super().__init__(config)
if app is not None:
self.init_app(app)

class SQLAlchemy:
config: SQLAlchemyConfig
binds: t.Dict[str, t.Union[Bind, AsyncBind]]
Model: t.Type[sa.orm.DeclarativeBase]
def __init__(self, config: SQLAlchemyConfig, initialize: bool = True):
self.config = config
if initialize:
self.initialize()

A fix for this would be for QuartSQLAlchemy to init like:

    def __init__(
        self,
        config: SQLAlchemyConfig,
        app: t.Optional[Quart] = None,
    ):
        super().__init__(config, initialize=app is not None)
        if app is not None:
            self.init_app(app)

And then for init_app() to call self.initialize() as its first line.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions