diff --git a/rhodecode/lib/__init__.py b/rhodecode/lib/__init__.py --- a/rhodecode/lib/__init__.py +++ b/rhodecode/lib/__init__.py @@ -10,10 +10,10 @@ :copyright: (C) 2009-2010 Marcin Kuzminski :license: GPLv3, see COPYING for more details. """ -# 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; version 2 -# of the License or (at your opinion) any later version of the license. +# 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 @@ -21,22 +21,23 @@ # 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. +# along with this program. If not, see . -def str2bool(v): - if isinstance(v, (str, unicode)): - obj = v.strip().lower() - if obj in ['true', 'yes', 'on', 'y', 't', '1']: - return True - elif obj in ['false', 'no', 'off', 'n', 'f', '0']: - return False - else: - raise ValueError("String is not true/false: %r" % obj) - return bool(v) +def str2bool(s): + if s is None: + return False + if s in (True, False): + return s + s = str(s).strip().lower() + return s in ('t', 'true', 'y', 'yes', 'on', '1') def generate_api_key(username, salt=None): + """ + Generates uniq API key for given username + + :param username: username as string + :param salt: salt to hash generate KEY + """ from tempfile import _RandomNameSequence import hashlib @@ -44,3 +45,24 @@ def generate_api_key(username, salt=None salt = _RandomNameSequence().next() return hashlib.sha1(username + salt).hexdigest() + +def safe_unicode(_str): + """ + safe unicode function. In case of UnicodeDecode error we try to return + unicode with errors replace, if this fails we return unicode with + string_escape decoding + """ + + if isinstance(_str, unicode): + return _str + + try: + u_str = unicode(_str) + except UnicodeDecodeError: + try: + u_str = _str.decode('utf-8', 'replace') + except UnicodeDecodeError: + #incase we have a decode error just represent as byte string + u_str = unicode(_str.encode('string_escape')) + + return u_str \ No newline at end of file