1f9d4089f9
Changes: * use six.iteritems instead dict.iteritems * use urllib in CDH API client * filtering directories in HDP versionhandler because py3 creates __pycache__ directory Unit tests result: Ran: 750 tests in 13.4569 sec. - Passed: 669 - Skipped: 5 - Expected Fail: 0 - Unexpected Success: 0 - Failed: 76 Change-Id: Ib36b24f04a933c6e134bdace4994a5020ff4166b
74 lines
2.1 KiB
Python
74 lines
2.1 KiB
Python
# Copyright (c) 2013 Mirantis Inc.
|
|
#
|
|
# 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 inspect
|
|
|
|
import six
|
|
|
|
|
|
class BaseResource(object):
|
|
__resource_name__ = 'base'
|
|
__filter_cols__ = []
|
|
|
|
@property
|
|
def dict(self):
|
|
return self.to_dict()
|
|
|
|
@property
|
|
def wrapped_dict(self):
|
|
return {self.__resource_name__: self.dict}
|
|
|
|
@property
|
|
def __all_filter_cols__(self):
|
|
cls = self.__class__
|
|
if not hasattr(cls, '__mro_filter_cols__'):
|
|
filter_cols = []
|
|
for base_cls in inspect.getmro(cls):
|
|
filter_cols += getattr(base_cls, '__filter_cols__', [])
|
|
cls.__mro_filter_cols__ = set(filter_cols)
|
|
return cls.__mro_filter_cols__
|
|
|
|
def _filter_field(self, k):
|
|
return k == '_sa_instance_state' or k in self.__all_filter_cols__
|
|
|
|
def to_dict(self):
|
|
dictionary = self.__dict__.copy()
|
|
return {k: v for k, v in six.iteritems(dictionary)
|
|
if not self._filter_field(k)}
|
|
|
|
def as_resource(self):
|
|
return Resource(self.__resource_name__, self.to_dict())
|
|
|
|
|
|
class Resource(BaseResource):
|
|
def __init__(self, _name, _info):
|
|
self._name = _name
|
|
self.__resource_name__ = _name
|
|
self._info = _info
|
|
|
|
def __getattr__(self, k):
|
|
if k not in self.__dict__:
|
|
return self._info.get(k)
|
|
return self.__dict__[k]
|
|
|
|
def __repr__(self):
|
|
return '<%s %s>' % (self._name, self._info)
|
|
|
|
def __eq__(self, other):
|
|
return self._name == other._name and self._info == other._info
|
|
|
|
def to_dict(self):
|
|
return self._info.copy()
|