"""$Name plugin main class. $description """ import json import logging from pathlib import Path from typing import List, Dict, Optional, Type from flask import Flask, Blueprint from shopdb.plugins.base import BasePlugin, PluginMeta from shopdb.core.models import AssetType from shopdb.extensions import db from .models import $Name from .api import ${name}_bp logger = logging.getLogger(__name__) class ${Name}Plugin(BasePlugin): """$Name plugin. $description """ def __init__(self): manifest_path = Path(__file__).parent / 'manifest.json' with open(manifest_path) as f: self._manifest = json.load(f) @property def meta(self) -> PluginMeta: return PluginMeta( name=self._manifest['name'], version=self._manifest['version'], description=self._manifest['description'], author=self._manifest.get('author', ''), dependencies=self._manifest.get('dependencies', []), core_version=self._manifest.get('core_version', '>=0.1.0'), api_prefix=self._manifest.get('api_prefix'), ) def get_blueprint(self) -> Optional[Blueprint]: return ${name}_bp def get_models(self) -> List[Type]: return [$Name] def init_app(self, app: Flask, db_instance) -> None: logger.info(f'$Name plugin initialized (v{self.meta.version})') def on_install(self, app: Flask) -> None: with app.app_context(): self._ensure_asset_type() logger.info('$Name plugin installed') def _ensure_asset_type(self) -> None: existing = AssetType.query.filter_by(assettype='$name').first() if not existing: asset_type = AssetType( assettype='$name', pluginname='$name', tablename='$name', description=self.meta.description, ) db.session.add(asset_type) db.session.commit() logger.debug('Created asset type: $name')