diff options
| author | Josh Gachnang <josh@pcsforeducation.com> | 2014-03-19 17:29:53 -0700 |
|---|---|---|
| committer | Josh Gachnang <josh@pcsforeducation.com> | 2014-03-19 17:29:53 -0700 |
| commit | 0e6776f6c0e88ccec5d4875d6ff196bc06ec558f (patch) | |
| tree | 6fd24ed526c914ccaab77e2ccbad22a00ce0b75a /ironic_python_agent/api/controllers/v1/base.py | |
| parent | 6e366520bbcdb1e4540d550a2017d5440b16938b (diff) | |
| parent | fc043dd1d345034dc9f63738ec09d2c88e3bb286 (diff) | |
| download | ironic-python-agent-0e6776f6c0e88ccec5d4875d6ff196bc06ec558f.tar.gz | |
Merge pull request #72 from rackerlabs/JoshNang/ipa
Rename to Ironic Python Agent
Diffstat (limited to 'ironic_python_agent/api/controllers/v1/base.py')
| -rw-r--r-- | ironic_python_agent/api/controllers/v1/base.py | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/ironic_python_agent/api/controllers/v1/base.py b/ironic_python_agent/api/controllers/v1/base.py new file mode 100644 index 00000000..20af8964 --- /dev/null +++ b/ironic_python_agent/api/controllers/v1/base.py @@ -0,0 +1,73 @@ +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import six +from wsme import types as wtypes + + +class ExceptionType(wtypes.UserType): + basetype = wtypes.DictType + name = 'exception' + + def validate(self, value): + if not isinstance(value, BaseException): + raise ValueError('Value is not an exception') + return value + + def tobasetype(self, value): + """Turn a RESTError into a dict.""" + return { + 'type': value.__class__.__name__, + 'code': value.status_code, + 'message': value.message, + 'details': value.details, + } + + frombasetype = tobasetype + + +exception_type = ExceptionType() + + +class MultiType(wtypes.UserType): + """A complex type that represents one or more types. + + Used for validating that a value is an instance of one of the types. + + :param *types: Variable-length list of types. + + """ + def __init__(self, *types): + self.types = types + + def __str__(self): + return ' | '.join(map(str, self.types)) + + def validate(self, value): + for t in self.types: + if t is wtypes.text and isinstance(value, wtypes.bytes): + value = value.decode() + if isinstance(value, t): + return value + else: + raise ValueError( + "Wrong type. Expected '{type}', got '{value}'".format( + type=self.types, value=type(value))) + + +json_type = MultiType(list, dict, six.integer_types, wtypes.text) + + +class APIBase(wtypes.Base): + pass |
