# RhodeCode VCSServer provides access to different vcs backends via network. # Copyright (C) 2014-2020 RhodeCode GmbH # # 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 import logging import hashlib log = logging.getLogger(__name__) def safe_int(val, default=None): """ Returns int() of val if val is not convertable to int use default instead :param val: :param default: """ try: val = int(val) except (ValueError, TypeError): val = default return val def safe_str(unicode_, to_encoding=None): """ safe str function. Does few trick to turn unicode_ into string :param unicode_: unicode to encode :param to_encoding: encode to this type UTF8 default :rtype: str :returns: str object """ to_encoding = to_encoding or ['utf8'] # if it's not basestr cast to str if not isinstance(unicode_, basestring): return str(unicode_) if isinstance(unicode_, str): return unicode_ if not isinstance(to_encoding, (list, tuple)): to_encoding = [to_encoding] for enc in to_encoding: try: return unicode_.encode(enc) except UnicodeEncodeError: pass return unicode_.encode(to_encoding[0], 'replace') def safe_unicode(str_, from_encoding=None): """ safe unicode function. Does few trick to turn str_ into unicode :param str_: string to decode :param from_encoding: encode from this type UTF8 default :rtype: unicode :returns: unicode object """ from_encoding = from_encoding or ['utf8'] if isinstance(str_, unicode): return str_ if not isinstance(from_encoding, (list, tuple)): from_encoding = [from_encoding] try: return unicode(str_) except UnicodeDecodeError: pass for enc in from_encoding: try: return unicode(str_, enc) except UnicodeDecodeError: pass return unicode(str_, from_encoding[0], 'replace') class AttributeDict(dict): def __getattr__(self, attr): return self.get(attr, None) __setattr__ = dict.__setitem__ __delattr__ = dict.__delitem__ def sha1(val): return hashlib.sha1(val).hexdigest()