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 Returned Resources
------------------ ------------------
Complex objects returned to the caller must be a `munch.Munch` type. The Complex objects returned to the caller must be a `openstack.resource.Resource`
`openstack.proxy._ShadeAdapter` class makes resources into `munch.Munch`. 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 OpenStack consistent for end users, and this means not trusting the clouds
to return consistent objects. There should be a normalize function in to return consistent objects. The `Resource` object should do this for us.
`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.
Fields should not be in the normalization contract if we cannot commit to Fields should not be in the normalization contract if we cannot commit to
providing them to all users. providing them to all users.

View File

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

View File

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

View File

@@ -107,7 +107,7 @@ class Proxy(adapter.Adapter, Generic[T]):
kwargs.setdefault( kwargs.setdefault(
'retriable_status_codes', self.retriable_status_codes '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_client = statsd_client
self._statsd_prefix = statsd_prefix self._statsd_prefix = statsd_prefix
self._prometheus_counter = prometheus_counter self._prometheus_counter = prometheus_counter
@@ -173,7 +173,7 @@ class Proxy(adapter.Adapter, Generic[T]):
# Get from cache or execute and cache # Get from cache or execute and cache
response = conn._cache.get_or_create( response = conn._cache.get_or_create(
key=key, key=key,
creator=super(Proxy, self).request, creator=super().request,
creator_args=( creator_args=(
[url, method], [url, method],
dict( dict(
@@ -190,7 +190,7 @@ class Proxy(adapter.Adapter, Generic[T]):
# asked for cache bypass # asked for cache bypass
self._invalidate_cache(conn, key_prefix) self._invalidate_cache(conn, key_prefix)
# Pass through the API request bypassing cache # Pass through the API request bypassing cache
response = super(Proxy, self).request( response = super().request(
url, url,
method, method,
connect_retries=connect_retries, connect_retries=connect_retries,
@@ -815,6 +815,8 @@ class Proxy(adapter.Adapter, Generic[T]):
return False 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): def _json_response(response, result_key=None, error_message=None):
"""Temporary method to use to bridge from ShadeAdapter to SDK calls.""" """Temporary method to use to bridge from ShadeAdapter to SDK calls."""
exceptions.raise_from_response(response, error_message=error_message) 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: except JSONDecodeError:
return response return response
return result_json 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)