Merge "Some resource managers are not using the base underscore methods"

This commit is contained in:
Zuul 2019-08-02 07:33:29 +00:00 committed by Gerrit Code Review
commit 2f107a2115
4 changed files with 97 additions and 145 deletions

View File

@ -128,42 +128,54 @@ class ResourceManager(object):
(self.resource_class.__name__, name)
)
def _copy_if_defined(self, data, **kwargs):
for name, value in kwargs.items():
if value is not None:
data[name] = value
def _validate(self, url, data, response_key=None, dump_json=True,
headers=None, is_iter_resp=False):
return self._create(url, data, response_key, dump_json,
headers, is_iter_resp, resp_status_ok=200,
as_class=False)
def _create(self, url, data, response_key=None, dump_json=True):
def _create(self, url, data, response_key=None, dump_json=True,
headers=None, is_iter_resp=False, resp_status_ok=201,
as_class=True):
if dump_json:
data = jsonutils.dumps(data)
try:
resp = self.http_client.post(url, data)
resp = self.http_client.post(url, data, headers)
except exceptions.HttpError as ex:
self._raise_api_exception(ex.response)
if resp.status_code != 201:
if resp.status_code != resp_status_ok:
self._raise_api_exception(resp)
return self.resource_class(self, extract_json(resp, response_key))
resource = extract_json(resp, response_key)
if is_iter_resp:
return [self.resource_class(self, resource_data)
for resource_data in resource]
return self.resource_class(self, resource) if as_class else resource
def _update(self, url, data, response_key=None, dump_json=True):
def _update(self, url, data, response_key=None, dump_json=True,
headers=None, is_iter_resp=False):
if dump_json:
data = jsonutils.dumps(data)
try:
resp = self.http_client.put(url, data)
resp = self.http_client.put(url, data, headers)
except exceptions.HttpError as ex:
self._raise_api_exception(ex.response)
if resp.status_code != 200:
self._raise_api_exception(resp)
return self.resource_class(self, extract_json(resp, response_key))
resource = extract_json(resp, response_key)
if is_iter_resp:
return [self.resource_class(self, resource_data)
for resource_data in resource]
return self.resource_class(self, resource)
def _list(self, url, response_key=None):
def _list(self, url, response_key=None, headers=None):
try:
resp = self.http_client.get(url)
resp = self.http_client.get(url, headers)
except exceptions.HttpError as ex:
self._raise_api_exception(ex.response)
@ -173,9 +185,9 @@ class ResourceManager(object):
return [self.resource_class(self, resource_data)
for resource_data in extract_json(resp, response_key)]
def _get(self, url, response_key=None):
def _get(self, url, response_key=None, headers=None):
try:
resp = self.http_client.get(url)
resp = self.http_client.get(url, headers)
except exceptions.HttpError as ex:
self._raise_api_exception(ex.response)
@ -184,19 +196,17 @@ class ResourceManager(object):
else:
self._raise_api_exception(resp)
def _delete(self, url):
def _delete(self, url, headers=None):
try:
resp = self.http_client.delete(url)
resp = self.http_client.delete(url, headers)
except exceptions.HttpError as ex:
self._raise_api_exception(ex.response)
if resp.status_code != 204:
self._raise_api_exception(resp)
def _plurify_resource_name(self):
return self.resource_class.resource_name + 's'
def _raise_api_exception(self, resp):
@staticmethod
def _raise_api_exception(resp):
try:
error_data = (resp.headers.get("Server-Error-Message", None) or
get_json(resp).get("faultstring"))

View File

@ -12,7 +12,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from keystoneauth1 import exceptions
from mistralclient.api import base
from mistralclient import utils
@ -31,20 +30,14 @@ class ActionManager(base.ResourceManager):
# definition file
definition = utils.get_contents_if_file(definition)
try:
resp = self.http_client.post(
'/actions?scope=%s' % scope,
definition,
headers={'content-type': 'text/plain'}
)
except exceptions.HttpError as ex:
self._raise_api_exception(ex.response)
if resp.status_code != 201:
self._raise_api_exception(resp)
return [self.resource_class(self, resource_data)
for resource_data in base.extract_json(resp, 'actions')]
return self._create(
'/actions?scope=%s' % scope,
definition,
response_key='actions',
dump_json=False,
headers={'content-type': 'text/plain'},
is_iter_resp=True
)
def update(self, definition, scope='private', id=None):
self._ensure_not_empty(definition=definition)
@ -55,20 +48,14 @@ class ActionManager(base.ResourceManager):
# definition file
definition = utils.get_contents_if_file(definition)
try:
resp = self.http_client.put(
'%s?scope=%s' % (url_pre, scope),
definition,
headers={'content-type': 'text/plain'}
)
except exceptions.HttpError as ex:
self._raise_api_exception(ex.response)
if resp.status_code != 200:
self._raise_api_exception(resp)
return [self.resource_class(self, resource_data)
for resource_data in base.extract_json(resp, 'actions')]
return self._update(
'%s?scope=%s' % (url_pre, scope),
definition,
response_key='actions',
dump_json=False,
headers={'content-type': 'text/plain'},
is_iter_resp=True
)
def list(self, marker='', limit=None, sort_keys='', sort_dirs='',
fields='', **filters):
@ -104,16 +91,9 @@ class ActionManager(base.ResourceManager):
# definition file
definition = utils.get_contents_if_file(definition)
try:
resp = self.http_client.post(
'/actions/validate',
definition,
headers={'content-type': 'text/plain'}
)
except exceptions.HttpError as ex:
self._raise_api_exception(ex.response)
if resp.status_code != 200:
self._raise_api_exception(resp)
return base.extract_json(resp, None)
return self._validate(
'/actions/validate',
definition,
dump_json=False,
headers={'content-type': 'text/plain'}
)

View File

@ -13,7 +13,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from keystoneauth1 import exceptions
from mistralclient.api import base
from mistralclient import utils
@ -47,19 +46,12 @@ class WorkbookManager(base.ResourceManager):
# definition file
definition = utils.get_contents_if_file(definition)
try:
resp = self.http_client.post(
self._get_workbooks_url(None, namespace, scope),
definition,
headers={'content-type': 'text/plain'}
)
except exceptions.HttpError as ex:
self._raise_api_exception(ex.response)
if resp.status_code != 201:
self._raise_api_exception(resp)
return self.resource_class(self, base.extract_json(resp, None))
return self._create(
self._get_workbooks_url(None, namespace, scope),
definition,
dump_json=False,
headers={'content-type': 'text/plain'}
)
def update(self, definition, namespace='', scope='private'):
self._ensure_not_empty(definition=definition)
@ -68,19 +60,12 @@ class WorkbookManager(base.ResourceManager):
# definition file
definition = utils.get_contents_if_file(definition)
try:
resp = self.http_client.put(
self._get_workbooks_url(None, namespace, scope),
definition,
headers={'content-type': 'text/plain'}
)
except exceptions.HttpError as ex:
self._raise_api_exception(ex.response)
if resp.status_code != 200:
self._raise_api_exception(resp)
return self.resource_class(self, base.extract_json(resp, None))
return self._update(
self._get_workbooks_url(None, namespace, scope),
definition,
dump_json=False,
headers={'content-type': 'text/plain'}
)
def list(self, namespace='', marker='', limit=None, sort_keys='',
sort_dirs='', fields='', **filters):
@ -115,16 +100,9 @@ class WorkbookManager(base.ResourceManager):
# definition file
definition = utils.get_contents_if_file(definition)
try:
resp = self.http_client.post(
'/workbooks/validate',
definition,
headers={'content-type': 'text/plain'}
)
except exceptions.HttpError as ex:
self._raise_api_exception(ex.response)
if resp.status_code != 200:
self._raise_api_exception(resp)
return base.extract_json(resp, None)
return self._validate(
'/workbooks/validate',
definition,
dump_json=False,
headers={'content-type': 'text/plain'}
)

View File

@ -13,7 +13,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from keystoneauth1 import exceptions
from mistralclient.api import base
from mistralclient import utils
@ -32,20 +31,14 @@ class WorkflowManager(base.ResourceManager):
# definition file
definition = utils.get_contents_if_file(definition)
try:
resp = self.http_client.post(
'/workflows?scope=%s&namespace=%s' % (scope, namespace),
definition,
headers={'content-type': 'text/plain'}
)
except exceptions.HttpError as ex:
self._raise_api_exception(ex.response)
if resp.status_code != 201:
self._raise_api_exception(resp)
return [self.resource_class(self, resource_data)
for resource_data in base.extract_json(resp, 'workflows')]
return self._create(
'/workflows?scope=%s&namespace=%s' % (scope, namespace),
definition,
response_key='workflows',
dump_json=False,
headers={'content-type': 'text/plain'},
is_iter_resp=True
)
def update(self, definition, namespace='', scope='private', id=None):
self._ensure_not_empty(definition=definition)
@ -56,23 +49,21 @@ class WorkflowManager(base.ResourceManager):
# definition file
definition = utils.get_contents_if_file(definition)
try:
resp = self.http_client.put(
'%s?namespace=%s&scope=%s' % (url_pre, namespace, scope),
definition,
headers={'content-type': 'text/plain'}
)
except exceptions.HttpError as ex:
self._raise_api_exception(ex.response)
if resp.status_code != 200:
self._raise_api_exception(resp)
is_iter_resp = True
response_key = 'workflows'
if id:
return self.resource_class(self, base.extract_json(resp, None))
is_iter_resp = False
response_key = None
return [self.resource_class(self, resource_data)
for resource_data in base.extract_json(resp, 'workflows')]
return self._update(
'%s?namespace=%s&scope=%s' % (url_pre, namespace, scope),
definition,
response_key=response_key,
dump_json=False,
headers={'content-type': 'text/plain'},
is_iter_resp=is_iter_resp,
)
def list(self, namespace='', marker='', limit=None, sort_keys='',
sort_dirs='', fields='', **filters):
@ -117,16 +108,9 @@ class WorkflowManager(base.ResourceManager):
# definition file
definition = utils.get_contents_if_file(definition)
try:
resp = self.http_client.post(
'/workflows/validate',
definition,
headers={'content-type': 'text/plain'}
)
except exceptions.HttpError as ex:
self._raise_api_exception(ex.response)
if resp.status_code != 200:
self._raise_api_exception(resp)
return base.extract_json(resp, None)
return self._validate(
'/workflows/validate',
definition,
dump_json=False,
headers={'content-type': 'text/plain'}
)