def create_app(config) -> Pint: load_dotenv(verbose=True) app = Pint(__name__, title="BattleShip", base_model_schema=BASE_MODEL_SCHEMA) app = cors(app, allow_origin="*") app.json_encoder = Encoder app.config.from_envvar("CONFIG_FILE") app.games = dict() @app.before_serving async def init_orm(): await init() from battlefield.session.data.api.single import session app.register_blueprint(session) from battlefield.session.data.api.multi import sessions app.register_blueprint(sessions) from battlefield.game.data.websocket import game app.register_blueprint(game) @app.cli.command() def openapi(): print(json.dumps(app.__schema__, indent=4, sort_keys=False)) @app.after_serving async def close_orm(): await Tortoise.close_connections() return app
def create_app(name: str, psql_uri: str = None, mongo_uri: str = None, psql_pool_args: dict = None) -> Pint: """ Create the core API app. Supply URIs as necessary """ app = Pint(name) @app.before_serving async def _startup(): if psql_uri: import asyncpg kwargs = {"min_size": 3, "max_size": 8, "command_timeout": 5} if "localhost" not in psql_uri: kwargs["ssl"] = SSLContext() if psql_pool_args: kwargs.update(psql_pool_args) app.db = await asyncpg.create_pool(psql_uri, **kwargs) else: app.db = None if mongo_uri: from motor.motor_asyncio import AsyncIOMotorClient app.mdb = AsyncIOMotorClient(mongo_uri) else: app.mdb = None app.json_encoder = CustomJSONEncoder app.after_request(add_cors) return app
def create_app(name: str, mongo_uri: str = None) -> Pint: """Create the core API app. Supply URIs as necessary""" app = Pint(name) @app.before_serving async def _startup(): app.mdb = AsyncIOMotorClient(mongo_uri) if mongo_uri else None app.json_encoder = CustomJSONEncoder app.after_request(add_cors) return app
class CustomJSONEncoder(JSONEncoder): # pylint: disable=method-hidden def default(self, obj): try: if isinstance(obj, date): return obj.isoformat() + "Z" iterable = iter(obj) except TypeError: pass else: return list(iterable) return JSONEncoder.default(self, obj) app.json_encoder = CustomJSONEncoder @app.before_first_request def init_rollbar(): """ Initialize Rollbar exception logging """ key = environ.get("LOG_KEY") if not (key and app.env == "production"): return rollbar.init(key, root="avwx_api", allow_logging_basic_config=False) got_request_exception.connect(report_exception, app, weak=False) mdb = None