utils.py
53 lines
| 1.7 KiB
| text/x-python
|
PythonLexer
/ vcsserver / utils.py
r0 | # RhodeCode VCSServer provides access to different vcs backends via network. | |||
r1126 | # Copyright (C) 2014-2023 RhodeCode GmbH | |||
r0 | # | |||
# This program is free software; you can redistribute it and/or modify | ||||
# it under the terms of the GNU General Public License as published by | ||||
# the Free Software Foundation; either version 3 of the License, or | ||||
# (at your option) any later version. | ||||
# | ||||
# This program is distributed in the hope that it will be useful, | ||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
# GNU General Public License for more details. | ||||
# | ||||
# You should have received a copy of the GNU General Public License | ||||
# along with this program; if not, write to the Free Software Foundation, | ||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||||
r381 | import logging | |||
r483 | import hashlib | |||
r381 | ||||
log = logging.getLogger(__name__) | ||||
r0 | ||||
r1060 | class AttributeDictBase(dict): | |||
def __getstate__(self): | ||||
odict = self.__dict__ # get attribute dictionary | ||||
return odict | ||||
r825 | ||||
r1060 | def __setstate__(self, dict): | |||
self.__dict__ = dict | ||||
r1048 | ||||
r407 | __setattr__ = dict.__setitem__ | |||
__delattr__ = dict.__delitem__ | ||||
r483 | ||||
r1060 | class StrictAttributeDict(AttributeDictBase): | |||
""" | ||||
Strict Version of Attribute dict which raises an Attribute error when | ||||
requested attribute is not set | ||||
""" | ||||
def __getattr__(self, attr): | ||||
try: | ||||
return self[attr] | ||||
except KeyError: | ||||
r1154 | raise AttributeError(f'{self.__class__} object has no attribute {attr}') | |||
r1060 | ||||
class AttributeDict(AttributeDictBase): | ||||
def __getattr__(self, attr): | ||||
return self.get(attr, None) | ||||
r483 | def sha1(val): | |||
return hashlib.sha1(val).hexdigest() | ||||