ashb commented on a change in pull request #4640: [RFC] [WIP] Feature/flask 
restful
URL: https://github.com/apache/airflow/pull/4640#discussion_r255074738
 
 

 ##########
 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)
 
 Review comment:
   ```suggestion
           super(AirflowResolver, self).__init__(self)
   ```

----------------------------------------------------------------
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

Reply via email to