Some resource managers are not using the base underscore methods
Refactor the base class so they can use these methods Change-Id: I8455772eee4865d535b3002e2d922149fb8f8a6e Closes-bug: #1765087
This commit is contained in:
@@ -128,42 +128,54 @@ class ResourceManager(object):
|
|||||||
(self.resource_class.__name__, name)
|
(self.resource_class.__name__, name)
|
||||||
)
|
)
|
||||||
|
|
||||||
def _copy_if_defined(self, data, **kwargs):
|
def _validate(self, url, data, response_key=None, dump_json=True,
|
||||||
for name, value in kwargs.items():
|
headers=None, is_iter_resp=False):
|
||||||
if value is not None:
|
return self._create(url, data, response_key, dump_json,
|
||||||
data[name] = value
|
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:
|
if dump_json:
|
||||||
data = jsonutils.dumps(data)
|
data = jsonutils.dumps(data)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
resp = self.http_client.post(url, data)
|
resp = self.http_client.post(url, data, headers)
|
||||||
except exceptions.HttpError as ex:
|
except exceptions.HttpError as ex:
|
||||||
self._raise_api_exception(ex.response)
|
self._raise_api_exception(ex.response)
|
||||||
|
|
||||||
if resp.status_code != 201:
|
if resp.status_code != resp_status_ok:
|
||||||
self._raise_api_exception(resp)
|
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:
|
if dump_json:
|
||||||
data = jsonutils.dumps(data)
|
data = jsonutils.dumps(data)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
resp = self.http_client.put(url, data)
|
resp = self.http_client.put(url, data, headers)
|
||||||
except exceptions.HttpError as ex:
|
except exceptions.HttpError as ex:
|
||||||
self._raise_api_exception(ex.response)
|
self._raise_api_exception(ex.response)
|
||||||
|
|
||||||
if resp.status_code != 200:
|
if resp.status_code != 200:
|
||||||
self._raise_api_exception(resp)
|
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:
|
try:
|
||||||
resp = self.http_client.get(url)
|
resp = self.http_client.get(url, headers)
|
||||||
except exceptions.HttpError as ex:
|
except exceptions.HttpError as ex:
|
||||||
self._raise_api_exception(ex.response)
|
self._raise_api_exception(ex.response)
|
||||||
|
|
||||||
@@ -173,9 +185,9 @@ class ResourceManager(object):
|
|||||||
return [self.resource_class(self, resource_data)
|
return [self.resource_class(self, resource_data)
|
||||||
for resource_data in extract_json(resp, response_key)]
|
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:
|
try:
|
||||||
resp = self.http_client.get(url)
|
resp = self.http_client.get(url, headers)
|
||||||
except exceptions.HttpError as ex:
|
except exceptions.HttpError as ex:
|
||||||
self._raise_api_exception(ex.response)
|
self._raise_api_exception(ex.response)
|
||||||
|
|
||||||
@@ -184,19 +196,17 @@ class ResourceManager(object):
|
|||||||
else:
|
else:
|
||||||
self._raise_api_exception(resp)
|
self._raise_api_exception(resp)
|
||||||
|
|
||||||
def _delete(self, url):
|
def _delete(self, url, headers=None):
|
||||||
try:
|
try:
|
||||||
resp = self.http_client.delete(url)
|
resp = self.http_client.delete(url, headers)
|
||||||
except exceptions.HttpError as ex:
|
except exceptions.HttpError as ex:
|
||||||
self._raise_api_exception(ex.response)
|
self._raise_api_exception(ex.response)
|
||||||
|
|
||||||
if resp.status_code != 204:
|
if resp.status_code != 204:
|
||||||
self._raise_api_exception(resp)
|
self._raise_api_exception(resp)
|
||||||
|
|
||||||
def _plurify_resource_name(self):
|
@staticmethod
|
||||||
return self.resource_class.resource_name + 's'
|
def _raise_api_exception(resp):
|
||||||
|
|
||||||
def _raise_api_exception(self, resp):
|
|
||||||
try:
|
try:
|
||||||
error_data = (resp.headers.get("Server-Error-Message", None) or
|
error_data = (resp.headers.get("Server-Error-Message", None) or
|
||||||
get_json(resp).get("faultstring"))
|
get_json(resp).get("faultstring"))
|
||||||
|
@@ -12,7 +12,6 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
from keystoneauth1 import exceptions
|
|
||||||
from mistralclient.api import base
|
from mistralclient.api import base
|
||||||
from mistralclient import utils
|
from mistralclient import utils
|
||||||
|
|
||||||
@@ -31,20 +30,14 @@ class ActionManager(base.ResourceManager):
|
|||||||
# definition file
|
# definition file
|
||||||
definition = utils.get_contents_if_file(definition)
|
definition = utils.get_contents_if_file(definition)
|
||||||
|
|
||||||
try:
|
return self._create(
|
||||||
resp = self.http_client.post(
|
'/actions?scope=%s' % scope,
|
||||||
'/actions?scope=%s' % scope,
|
definition,
|
||||||
definition,
|
response_key='actions',
|
||||||
headers={'content-type': 'text/plain'}
|
dump_json=False,
|
||||||
)
|
headers={'content-type': 'text/plain'},
|
||||||
except exceptions.HttpError as ex:
|
is_iter_resp=True
|
||||||
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')]
|
|
||||||
|
|
||||||
def update(self, definition, scope='private', id=None):
|
def update(self, definition, scope='private', id=None):
|
||||||
self._ensure_not_empty(definition=definition)
|
self._ensure_not_empty(definition=definition)
|
||||||
@@ -55,20 +48,14 @@ class ActionManager(base.ResourceManager):
|
|||||||
# definition file
|
# definition file
|
||||||
definition = utils.get_contents_if_file(definition)
|
definition = utils.get_contents_if_file(definition)
|
||||||
|
|
||||||
try:
|
return self._update(
|
||||||
resp = self.http_client.put(
|
'%s?scope=%s' % (url_pre, scope),
|
||||||
'%s?scope=%s' % (url_pre, scope),
|
definition,
|
||||||
definition,
|
response_key='actions',
|
||||||
headers={'content-type': 'text/plain'}
|
dump_json=False,
|
||||||
)
|
headers={'content-type': 'text/plain'},
|
||||||
except exceptions.HttpError as ex:
|
is_iter_resp=True
|
||||||
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')]
|
|
||||||
|
|
||||||
def list(self, marker='', limit=None, sort_keys='', sort_dirs='',
|
def list(self, marker='', limit=None, sort_keys='', sort_dirs='',
|
||||||
fields='', **filters):
|
fields='', **filters):
|
||||||
@@ -104,16 +91,9 @@ class ActionManager(base.ResourceManager):
|
|||||||
# definition file
|
# definition file
|
||||||
definition = utils.get_contents_if_file(definition)
|
definition = utils.get_contents_if_file(definition)
|
||||||
|
|
||||||
try:
|
return self._validate(
|
||||||
resp = self.http_client.post(
|
'/actions/validate',
|
||||||
'/actions/validate',
|
definition,
|
||||||
definition,
|
dump_json=False,
|
||||||
headers={'content-type': 'text/plain'}
|
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)
|
|
||||||
|
@@ -13,7 +13,6 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
from keystoneauth1 import exceptions
|
|
||||||
from mistralclient.api import base
|
from mistralclient.api import base
|
||||||
from mistralclient import utils
|
from mistralclient import utils
|
||||||
|
|
||||||
@@ -47,19 +46,12 @@ class WorkbookManager(base.ResourceManager):
|
|||||||
# definition file
|
# definition file
|
||||||
definition = utils.get_contents_if_file(definition)
|
definition = utils.get_contents_if_file(definition)
|
||||||
|
|
||||||
try:
|
return self._create(
|
||||||
resp = self.http_client.post(
|
self._get_workbooks_url(None, namespace, scope),
|
||||||
self._get_workbooks_url(None, namespace, scope),
|
definition,
|
||||||
definition,
|
dump_json=False,
|
||||||
headers={'content-type': 'text/plain'}
|
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))
|
|
||||||
|
|
||||||
def update(self, definition, namespace='', scope='private'):
|
def update(self, definition, namespace='', scope='private'):
|
||||||
self._ensure_not_empty(definition=definition)
|
self._ensure_not_empty(definition=definition)
|
||||||
@@ -68,19 +60,12 @@ class WorkbookManager(base.ResourceManager):
|
|||||||
# definition file
|
# definition file
|
||||||
definition = utils.get_contents_if_file(definition)
|
definition = utils.get_contents_if_file(definition)
|
||||||
|
|
||||||
try:
|
return self._update(
|
||||||
resp = self.http_client.put(
|
self._get_workbooks_url(None, namespace, scope),
|
||||||
self._get_workbooks_url(None, namespace, scope),
|
definition,
|
||||||
definition,
|
dump_json=False,
|
||||||
headers={'content-type': 'text/plain'}
|
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))
|
|
||||||
|
|
||||||
def list(self, namespace='', marker='', limit=None, sort_keys='',
|
def list(self, namespace='', marker='', limit=None, sort_keys='',
|
||||||
sort_dirs='', fields='', **filters):
|
sort_dirs='', fields='', **filters):
|
||||||
@@ -115,16 +100,9 @@ class WorkbookManager(base.ResourceManager):
|
|||||||
# definition file
|
# definition file
|
||||||
definition = utils.get_contents_if_file(definition)
|
definition = utils.get_contents_if_file(definition)
|
||||||
|
|
||||||
try:
|
return self._validate(
|
||||||
resp = self.http_client.post(
|
'/workbooks/validate',
|
||||||
'/workbooks/validate',
|
definition,
|
||||||
definition,
|
dump_json=False,
|
||||||
headers={'content-type': 'text/plain'}
|
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)
|
|
||||||
|
@@ -13,7 +13,6 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
from keystoneauth1 import exceptions
|
|
||||||
from mistralclient.api import base
|
from mistralclient.api import base
|
||||||
from mistralclient import utils
|
from mistralclient import utils
|
||||||
|
|
||||||
@@ -32,20 +31,14 @@ class WorkflowManager(base.ResourceManager):
|
|||||||
# definition file
|
# definition file
|
||||||
definition = utils.get_contents_if_file(definition)
|
definition = utils.get_contents_if_file(definition)
|
||||||
|
|
||||||
try:
|
return self._create(
|
||||||
resp = self.http_client.post(
|
'/workflows?scope=%s&namespace=%s' % (scope, namespace),
|
||||||
'/workflows?scope=%s&namespace=%s' % (scope, namespace),
|
definition,
|
||||||
definition,
|
response_key='workflows',
|
||||||
headers={'content-type': 'text/plain'}
|
dump_json=False,
|
||||||
)
|
headers={'content-type': 'text/plain'},
|
||||||
except exceptions.HttpError as ex:
|
is_iter_resp=True
|
||||||
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')]
|
|
||||||
|
|
||||||
def update(self, definition, namespace='', scope='private', id=None):
|
def update(self, definition, namespace='', scope='private', id=None):
|
||||||
self._ensure_not_empty(definition=definition)
|
self._ensure_not_empty(definition=definition)
|
||||||
@@ -56,23 +49,21 @@ class WorkflowManager(base.ResourceManager):
|
|||||||
# definition file
|
# definition file
|
||||||
definition = utils.get_contents_if_file(definition)
|
definition = utils.get_contents_if_file(definition)
|
||||||
|
|
||||||
try:
|
is_iter_resp = True
|
||||||
resp = self.http_client.put(
|
response_key = 'workflows'
|
||||||
'%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)
|
|
||||||
|
|
||||||
if id:
|
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)
|
return self._update(
|
||||||
for resource_data in base.extract_json(resp, 'workflows')]
|
'%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='',
|
def list(self, namespace='', marker='', limit=None, sort_keys='',
|
||||||
sort_dirs='', fields='', **filters):
|
sort_dirs='', fields='', **filters):
|
||||||
@@ -117,16 +108,9 @@ class WorkflowManager(base.ResourceManager):
|
|||||||
# definition file
|
# definition file
|
||||||
definition = utils.get_contents_if_file(definition)
|
definition = utils.get_contents_if_file(definition)
|
||||||
|
|
||||||
try:
|
return self._validate(
|
||||||
resp = self.http_client.post(
|
'/workflows/validate',
|
||||||
'/workflows/validate',
|
definition,
|
||||||
definition,
|
dump_json=False,
|
||||||
headers={'content-type': 'text/plain'}
|
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)
|
|
||||||
|
Reference in New Issue
Block a user