The init file#

The init.py file is the heart of Shopyo’s extension management and path resolution. It handles the initialization of Flask extensions and the automatic discovery of models from packages.

Core Extensions#

Shopyo comes pre-configured with the following extensions:

  • SQLAlchemy: Database ORM.

  • LoginManager: Session management.

  • Migrate: Database migrations (Alembic wrapper).

  • Mail: Email support.

  • CSRFProtect: Cross-Site Request Forgery protection.

Path Resolution#

The file defines several critical paths used throughout the framework:

root_path = os.path.dirname(os.path.abspath(__file__))
static_path = os.path.join(root_path, "static")
modules_path = os.path.join(root_path, "modules")
themes_path = os.path.join(static_path, "themes")

Extension Loading#

The load_extensions(app) function is responsible for binding the extension objects to the Flask application instance.

Beyond standard initialization, it also performs Automatic Model Discovery:

def load_extensions(app):
    # ... standard init_app calls ...

    with app.app_context():
        for plugin in app.extensions:
            if plugin.startswith("shopyo_"):
                # Dynamically imports models from shopyo_ packages
                # so they are registered with SQLAlchemy/Migrate
                importlib.import_module(f"{plugin}.models")

This ensures that any installed Shopyo packages have their database models automatically recognized by flask db migrate.

Installed Packages#

The installed_packages list is where you register additional Shopyo-compatible packages that are installed via pip.

installed_packages = ["shopyo_appadmin", "shopyo_auth"]