""" Main SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2021 Project Author name guillermo.gutierrezmorote@concordia.ca Project Collaborator name peteryefi@gmail.com """ import datetime import flask import yaml from flasgger import LazyJSONEncoder, Swagger from flask import Response, jsonify from flask_restful import Api from flask_swagger import swagger import hub_api.helpers.session_helper as sh from hub_api.construction_catalog import ConstructionCatalogEntry, ConstructionCatalogEntries, ConstructionCatalogNames from hub_api.greenery_catalog import GreeneryCatalogEntry, GreeneryCatalogEntries, GreeneryCatalogNames from hub_api.session import SessionStart, SessionEnd, KeepSessionAlive from hub_api.uptime import Uptime from hub_api.usage_catalog import UsageCatalogEntry, UsageCatalogEntries, UsageCatalogNames from hub_api.user import User, UserLogin sh.begin_time = datetime.datetime.now() app = flask.Flask('cerc_api') app.json_provider_class = LazyJSONEncoder api = Api(app) with open("hub_api/docs/openapi-specs.yml", "r") as stream: swagger_config = { "headers": [], "specs": [ { "endpoint": 'apispec', "route": '/apispec.json', "rule_filter": lambda rule: True, # all in "model_filter": lambda tag: True, # all in } ], "static_url_path": "/flasgger_static", "specs_route": "/api-docs/", "openapi": "3.0.0" } try: sh.swagger_data = Swagger(app, template=yaml.safe_load(stream), config=swagger_config) except yaml.YAMLError as exc: print(exc) api.add_resource(Uptime, '/v1.4/uptime') # Catalogs. api.add_resource(GreeneryCatalogEntry, '/v1.4/greenery-catalog/entry') api.add_resource(GreeneryCatalogEntries, '/v1.4/greenery-catalog/entries') api.add_resource(GreeneryCatalogNames, '/v1.4/greenery-catalog/names') api.add_resource(ConstructionCatalogEntry, '/v1.4/construction-catalog/entry') api.add_resource(ConstructionCatalogEntries, '/v1.4/construction-catalog/entries') api.add_resource(ConstructionCatalogNames, '/v1.4/construction-catalog/names') api.add_resource(UsageCatalogEntry, '/v1.4/usage-catalog/entry') api.add_resource(UsageCatalogEntries, '/v1.4/usage-catalog/entries') api.add_resource(UsageCatalogNames, '/v1.4/usage-catalog/names') # Session api.add_resource(User, '/v1.4/user') api.add_resource(UserLogin, '/v1.4/user/login') api.add_resource(SessionStart, '/v1.4/session/start') api.add_resource(SessionEnd, '/v1.4/session/end') api.add_resource(KeepSessionAlive, '/v1.4/session/keep_alive') @app.route("/v1.4/spec") def spec(): return jsonify(sh.swagger_data.config) @app.route("/") def home(): return Response(headers={'Access-Control-Allow-Origin': '*'}) app.run(port=15789, host="0.0.0.0", debug=True)