Source code for api.database

import importlib
import os
import sys

import click

from shopyo.api.constants import SEP_CHAR
from shopyo.api.constants import SEP_NUM


[docs]def autoload_models(verbose=False): """ Auto imports models from modules/ in desired file. Used so that flask_migrate does not miss models when migrating Returns ------- None """ click.echo("Auto importing models...") click.echo(SEP_CHAR * SEP_NUM) for folder in os.listdir("modules"): if folder.startswith("__"): continue elif folder.startswith("box__"): for sub_folder in os.listdir(os.path.join("modules", folder)): if sub_folder.startswith("__"): # ignore __pycache__ continue elif sub_folder.endswith(".json"): # box_info.json continue try: to_load_submodel = f"modules.{folder}.{sub_folder}.models" importlib.import_module(to_load_submodel) if verbose: click.echo(f"[x] imported {to_load_submodel}") except Exception as e: if verbose: click.echo(f"[ ] {e}") else: try: to_load = f"modules.{folder}.models" importlib.import_module(to_load) if verbose: click.echo(f"[x] imported {to_load}") except Exception as e: if verbose: click.echo(f"[ ] {e}") # installed modules try: from init import installed_packages except ImportError: click.echo( "This version of Shopyo requires that\n" "init.py contains the line\n" "installed_packages = []\n" "please add it." ) sys.exit() try: for plugin in installed_packages: to_load_models = f"{plugin}.models" importlib.import_module(to_load_models) if verbose: click.echo(f"[x] imported {to_load_models}") except Exception as e: if verbose: click.echo(f"[ ] {e}") click.echo("")