Просмотр исходного кода

Adds the `include_task_info` query parameter to
the `show` and `list` API methods in `transfers/deployments`

Signed-off-by: Mihaela Balutoiu <mbalutoiu@cloudbasesolutions.com>

Mihaela Balutoiu 8 месяцев назад
Родитель
Сommit
8ce5ceccef
3 измененных файлов с 23 добавлено и 36 удалено
  1. 9 14
      coriolis/api/v1/deployments.py
  2. 7 13
      coriolis/api/v1/transfers.py
  3. 7 9
      coriolis/api/v1/utils.py

+ 9 - 14
coriolis/api/v1/deployments.py

@@ -1,7 +1,6 @@
 # Copyright 2024 Cloudbase Solutions Srl
 # All Rights Reserved.
 
-from oslo_config import cfg as conf
 from oslo_log import log as logging
 from webob import exc
 
@@ -13,14 +12,6 @@ from coriolis.endpoints import api as endpoints_api
 from coriolis import exception
 from coriolis.policies import deployments as deployment_policies
 
-DEPLOYMENTS_API_OPTS = [
-    conf.BoolOpt("include_task_info_in_deployments_api",
-                 default=False,
-                 help="Whether or not to expose the internal 'info' field of "
-                      "a Deployment as part of a `GET` request.")]
-
-CONF = conf.CONF
-CONF.register_opts(DEPLOYMENTS_API_OPTS, 'api')
 
 LOG = logging.getLogger(__name__)
 
@@ -34,25 +25,29 @@ class DeploymentsController(api_wsgi.Controller):
     def show(self, req, id):
         context = req.environ["coriolis.context"]
         context.can(deployment_policies.get_deployments_policy_label("show"))
+        include_task_info = api_utils.get_bool_url_arg(
+            req, "include_task_info", default=False)
         deployment = self._deployment_api.get_deployment(
             context, id,
-            include_task_info=CONF.api.include_task_info_in_deployments_api)
+            include_task_info=include_task_info)
         if not deployment:
             raise exc.HTTPNotFound()
 
         return deployment_view.single(deployment)
 
     def _list(self, req):
-        show_deleted = api_utils._get_show_deleted(
-            req.GET.get("show_deleted", None))
+        show_deleted = api_utils.get_bool_url_arg(
+            req, "show_deleted", default=False)
         context = req.environ["coriolis.context"]
         context.show_deleted = show_deleted
         context.can(deployment_policies.get_deployments_policy_label("list"))
+        include_task_info = api_utils.get_bool_url_arg(
+            req, "include_task_info", default=False)
         return deployment_view.collection(
             self._deployment_api.get_deployments(
                 context,
-                include_tasks=CONF.api.include_task_info_in_deployments_api,
-                include_task_info=CONF.api.include_task_info_in_deployments_api
+                include_tasks=include_task_info,
+                include_task_info=include_task_info
             ))
 
     def index(self, req):

+ 7 - 13
coriolis/api/v1/transfers.py

@@ -11,18 +11,9 @@ from coriolis import exception
 from coriolis.policies import transfers as transfer_policies
 from coriolis.transfers import api
 
-from oslo_config import cfg as conf
 from oslo_log import log as logging
 from webob import exc
 
-TRANSFER_API_OPTS = [
-    conf.BoolOpt("include_task_info_in_transfers_api",
-                 default=False,
-                 help="Whether or not to expose the internal 'info' field of "
-                      "a Transfer as part of a `GET` request.")]
-
-CONF = conf.CONF
-CONF.register_opts(TRANSFER_API_OPTS, 'api')
 
 LOG = logging.getLogger(__name__)
 
@@ -40,21 +31,24 @@ class TransferController(api_wsgi.Controller):
     def show(self, req, id):
         context = req.environ["coriolis.context"]
         context.can(transfer_policies.get_transfers_policy_label("show"))
+        include_task_info = api_utils.get_bool_url_arg(
+            req, "include_task_info", default=False)
         transfer = self._transfer_api.get_transfer(
             context, id,
-            include_task_info=CONF.api.include_task_info_in_transfers_api)
+            include_task_info=include_task_info)
         if not transfer:
             raise exc.HTTPNotFound()
 
         return transfer_view.single(transfer)
 
     def _list(self, req):
-        show_deleted = api_utils._get_show_deleted(
-            req.GET.get("show_deleted", None))
+        show_deleted = api_utils.get_bool_url_arg(
+            req, "show_deleted", default=False)
         context = req.environ["coriolis.context"]
         context.show_deleted = show_deleted
         context.can(transfer_policies.get_transfers_policy_label("list"))
-        include_task_info = CONF.api.include_task_info_in_transfers_api
+        include_task_info = api_utils.get_bool_url_arg(
+            req, "include_task_info", default=False)
         return transfer_view.collection(
             self._transfer_api.get_transfers(
                 context,

+ 7 - 9
coriolis/api/v1/utils.py

@@ -15,18 +15,16 @@ from coriolis import schemas
 LOG = logging.getLogger(__name__)
 
 
-def _get_show_deleted(val):
-    if val is None:
-        return val
+def get_bool_url_arg(req, arg_name, default=False):
+    val = req.GET.get(arg_name, default)
     try:
-        show_deleted = json.loads(val)
-        if type(show_deleted) is bool:
-            return show_deleted
+        parsed_val = json.loads(val)
+        if type(parsed_val) is bool:
+            return parsed_val
     except Exception as err:
         LOG.warn(
-            "failed to parse show_deleted: %s" % err)
-        pass
-    return None
+            "failed to parse %s: %s" % (arg_name, err))
+    return default
 
 
 def validate_network_map(network_map):