ashb commented on a change in pull request #4640: [RFC] [WIP] Feature/flask
restful
URL: https://github.com/apache/airflow/pull/4640#discussion_r255074893
##########
File path: airflow/plugin/rest_api/__init__.py
##########
@@ -0,0 +1,115 @@
+import logging
+import string
+
+import connexion
+import pkg_resources
+from connexion import Resolver
+from flask import jsonify
+
+from airflow import AirflowException
+from airflow.api import load_auth
+from airflow.plugins_manager import AirflowPlugin
+
+log = logging.getLogger(__name__)
+
+
+class RestApiPlugin(AirflowPlugin):
+ """
+ Add swagger entrypoint
+ """
+ name = 'restful-api'
+
+ @classmethod
+ def on_load(cls, flask_app, configuration, *args, **kwargs):
+ load_auth()
+ app = connexion.App(
+ __name__,
+ specification_dir=pkg_resources.resource_filename(
+ __name__,
+ ''
+ )
+ )
+ log.debug("Loading airflow API.")
+ experimental_api = app.add_api(
+ 'experimental_swagger.yaml',
+ strict_validation=True,
+ resolver=AirflowRestyResolver('experimental'),
+ )
+ cls.flask_blueprints.append(experimental_api.blueprint)
+
+ # The proposed v1 API would be included the same way
+ # as the experimental API.
+ #
+ # v1_api = app.add_api(
+ # 'v1_swagger.yaml',
+ # strict_validation=True,
+ # resolver=AirflowRestyResolver('v1'),
+ # )
+ # cls.flask_blueprints.append(v1_api.blueprint)
+
+
+class AirflowRestyResolver(Resolver):
+ handler_mapping = {
+ 'dags.delete': 'airflow.api.common.experimental.delete_dag.delete_dag',
+ 'dags.dag_runs.list':
'airflow.api.common.experimental.get_dag_runs.get_dag_runs',
+ 'dags.dag_runs.get':
'airflow.api.common.experimental.get_dag_run_state.get_dag_run_state',
+ 'dags.dag_runs.post':
'airflow.api.common.experimental.trigger_dag.trigger_dag',
+ 'dags.dag_runs.tasks.get':
'airflow.api.common.experimental.get_task_instance.get_task_instance',
+ 'dags.paused.get': 'airflow.www.api.experimental.endpoints.dag_paused',
+ 'dags.tasks.get': 'airflow.api.common.experimental.get_task.get_task',
+ 'latest_runs.list':
'airflow.www.api.experimental.endpoints.latest_dag_runs',
+ 'test.list': 'airflow.www.api.experimental.endpoints.test',
+ 'pools.list': 'airflow.api.common.experimental.pool.get_pools',
+ 'pools.get': 'airflow.api.common.experimental.pool.get_pool',
+ 'pools.post': 'airflow.api.common.experimental.pool.create_pool',
+ 'pools.delete': 'airflow.api.common.experimental.pool.delete_pool',
+ }
+
+ def __init__(self, version):
+ Resolver.__init__(self)
+ self.version = version
+
+ def resolve_function_from_operation_id(self, operation_id):
+ method = Resolver.resolve_function_from_operation_id(self,
operation_id)
Review comment:
```suggestion
method = super(AirflowResolver,
self).resolve_function_from_operation_id(self, operation_id)
```
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services