deb-sahara/sahara/utils/resources.py
Sergey Reshetnyak 1f9d4089f9 Improve compatible with python3
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
2015-05-11 11:40:23 +03:00

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()