Initial import: shopdb-flask multi-site asset platform
Flask + Vue rewrite of the classic-ASP shopdb, built as a plugin framework so sister GE Aerospace sites can adopt it. Product version 0.7.0-pre-0.8.0, plugin contract 0.11.0, 966 backend tests. Key entry points: - docs/INSTALL-WINDOWS-IIS.md - tested Windows + IIS install runbook (own-site and subpath deployment methods) - docs/PILOT-DEPLOY.md - production pilot: stand up + import + verify - docs/IMPORT-API.md - schema-agnostic legacy data import contract - scripts/site_imports/wjf/ - West Jefferson reference import loader - docs/adr/ - twelve accepted architecture decision records
This commit is contained in:
5
shopdb/plugins/templates/api/__init__.py.tmpl
Normal file
5
shopdb/plugins/templates/api/__init__.py.tmpl
Normal file
@@ -0,0 +1,5 @@
|
||||
"""$Name plugin API package."""
|
||||
|
||||
from .routes import ${name}_bp
|
||||
|
||||
__all__ = ['${name}_bp']
|
||||
45
shopdb/plugins/templates/api/routes.py.tmpl
Normal file
45
shopdb/plugins/templates/api/routes.py.tmpl
Normal file
@@ -0,0 +1,45 @@
|
||||
"""$Name plugin API routes."""
|
||||
|
||||
from flask import Blueprint, request
|
||||
from flask_jwt_extended import jwt_required
|
||||
|
||||
from shopdb.api import (
|
||||
success_response,
|
||||
error_response,
|
||||
paginated_response,
|
||||
ErrorCodes,
|
||||
get_pagination_params,
|
||||
paginate_query,
|
||||
)
|
||||
|
||||
from ..models import $Name
|
||||
|
||||
|
||||
${name}_bp = Blueprint('$name', __name__)
|
||||
|
||||
|
||||
@${name}_bp.route('', methods=['GET'])
|
||||
@jwt_required(optional=True)
|
||||
def list_${name}():
|
||||
"""List $name assets, paginated."""
|
||||
page, per_page = get_pagination_params(request)
|
||||
|
||||
query = ${Name}.query
|
||||
items, total = paginate_query(query, page, per_page)
|
||||
data = [item.to_dict() for item in items]
|
||||
|
||||
return paginated_response(data, page, per_page, total)
|
||||
|
||||
|
||||
@${name}_bp.route('/<int:assetid>', methods=['GET'])
|
||||
@jwt_required(optional=True)
|
||||
def get_${name}(assetid: int):
|
||||
"""Get a single $name by assetid."""
|
||||
item = ${Name}.query.get(assetid)
|
||||
if not item:
|
||||
return error_response(
|
||||
ErrorCodes.NOT_FOUND,
|
||||
f'$Name with assetid {assetid} not found',
|
||||
http_code=404,
|
||||
)
|
||||
return success_response(item.to_dict())
|
||||
Reference in New Issue
Block a user