cloud: Remove '_ShadeAdapter'

Very few things require the JSON conversion functionality this provides
nowadays (few TODO items outstanding). We can finally remove it.

Change-Id: Iaff2a67913c47d6f807fe8d332ad98d0581823b0
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
This commit is contained in:
Stephen Finucane
2022-06-08 14:37:03 +02:00
parent e74301292a
commit ca770c5bcd
4 changed files with 19 additions and 23 deletions

View File

@@ -62,15 +62,12 @@ The `openstack.cloud` layer has some specific rules:
Returned Resources
------------------
Complex objects returned to the caller must be a `munch.Munch` type. The
`openstack.proxy._ShadeAdapter` class makes resources into `munch.Munch`.
Complex objects returned to the caller must be a `openstack.resource.Resource`
type.
All objects should be normalized. It is shade's purpose in life to make
All objects should be normalized. It is openstacksdk's purpose in life to make
OpenStack consistent for end users, and this means not trusting the clouds
to return consistent objects. There should be a normalize function in
`openstack/cloud/_normalize.py` that is applied to objects before returning
them to the user. See :doc:`../user/model` for further details on object model
requirements.
to return consistent objects. The `Resource` object should do this for us.
Fields should not be in the normalization contract if we cannot commit to
providing them to all users.

View File

@@ -396,7 +396,7 @@ class _OpenStackCloudMixin:
request_max_version = '{version}.latest'.format(
version=config_major
)
adapter = proxy._ShadeAdapter(
adapter = proxy.Proxy(
session=self.session,
service_type=self.config.get_service_type(service_type),
service_name=self.config.get_service_name(service_type),
@@ -414,7 +414,7 @@ class _OpenStackCloudMixin:
if adapter.get_endpoint():
return adapter
adapter = proxy._ShadeAdapter(
adapter = proxy.Proxy(
session=self.session,
service_type=self.config.get_service_type(service_type),
service_name=self.config.get_service_name(service_type),
@@ -457,7 +457,7 @@ class _OpenStackCloudMixin:
def _get_raw_client(
self, service_type, api_version=None, endpoint_override=None
):
return proxy._ShadeAdapter(
return proxy.Proxy(
session=self.session,
service_type=self.config.get_service_type(service_type),
service_name=self.config.get_service_name(service_type),

View File

@@ -16,8 +16,10 @@ import collections
import time
from openstack.cloud import meta
from openstack import proxy
# TODO(stephenfin): Convert to use proxy
def get_events(cloud, stack_id, event_args, marker=None, limit=None):
# TODO(mordred) FIX THIS ONCE assert_calls CAN HANDLE QUERY STRINGS
params = collections.OrderedDict()
@@ -29,8 +31,11 @@ def get_events(cloud, stack_id, event_args, marker=None, limit=None):
if limit:
event_args['limit'] = limit
data = cloud._orchestration_client.get(
'/stacks/{id}/events'.format(id=stack_id), params=params
data = proxy._json_response(
cloud._orchestration_client.get(
'/stacks/{id}/events'.format(id=stack_id),
params=params,
)
)
events = meta.get_and_munchify('events', data)

View File

@@ -107,7 +107,7 @@ class Proxy(adapter.Adapter, Generic[T]):
kwargs.setdefault(
'retriable_status_codes', self.retriable_status_codes
)
super(Proxy, self).__init__(session=session, *args, **kwargs)
super().__init__(session=session, *args, **kwargs)
self._statsd_client = statsd_client
self._statsd_prefix = statsd_prefix
self._prometheus_counter = prometheus_counter
@@ -173,7 +173,7 @@ class Proxy(adapter.Adapter, Generic[T]):
# Get from cache or execute and cache
response = conn._cache.get_or_create(
key=key,
creator=super(Proxy, self).request,
creator=super().request,
creator_args=(
[url, method],
dict(
@@ -190,7 +190,7 @@ class Proxy(adapter.Adapter, Generic[T]):
# asked for cache bypass
self._invalidate_cache(conn, key_prefix)
# Pass through the API request bypassing cache
response = super(Proxy, self).request(
response = super().request(
url,
method,
connect_retries=connect_retries,
@@ -815,6 +815,8 @@ class Proxy(adapter.Adapter, Generic[T]):
return False
# TODO(stephenfin): Remove this and all users. Use of this generally indicates
# a missing Resource type.
def _json_response(response, result_key=None, error_message=None):
"""Temporary method to use to bridge from ShadeAdapter to SDK calls."""
exceptions.raise_from_response(response, error_message=error_message)
@@ -832,11 +834,3 @@ def _json_response(response, result_key=None, error_message=None):
except JSONDecodeError:
return response
return result_json
class _ShadeAdapter(Proxy):
"""Wrapper for shade methods that expect json unpacking."""
def request(self, url, method, error_message=None, **kwargs):
response = super(_ShadeAdapter, self).request(url, method, **kwargs)
return _json_response(response, error_message=error_message)