##// END OF EJS Templates
Imported some of the GPLv3'd changes from RhodeCode v2.2.5....
Imported some of the GPLv3'd changes from RhodeCode v2.2.5. This imports changes between changesets 21af6c4eab3d and 6177597791c2 in RhodeCode's original repository, including only changes to Python files and HTML. RhodeCode clearly licensed its changes to these files under GPLv3 in their /LICENSE file, which states the following: The Python code and integrated HTML are licensed under the GPLv3 license. (See: https://code.rhodecode.com/rhodecode/files/v2.2.5/LICENSE or http://web.archive.org/web/20140512193334/https://code.rhodecode.com/rhodecode/files/f3b123159901f15426d18e3dc395e8369f70ebe0/LICENSE for an online copy of that LICENSE file) Conservancy reviewed these changes and confirmed that they can be licensed as a whole to the Kallithea project under GPLv3-only. While some of the contents committed herein are clearly licensed GPLv3-or-later, on the whole we must assume the are GPLv3-only, since the statement above from RhodeCode indicates that they intend GPLv3-only as their license, per GPLv3ยง14 and other relevant sections of GPLv3.

File last commit:

r3885:712610e0 beta
r4116:ffd45b18 rhodecode-2.2.5-gpl
Show More
__init__.py
188 lines | 4.7 KiB | text/x-python | PythonLexer
Added VCS into rhodecode core for faster and easier deployments of new versions
r2007 """
This module provides some useful tools for ``vcs`` like annotate/diff html
output. It also includes some internal helpers.
"""
import sys
import time
import datetime
def makedate():
lt = time.localtime()
if lt[8] == 1 and time.daylight:
tz = time.altzone
else:
tz = time.timezone
return time.mktime(lt), tz
synced vcs with upstream...
r3797 def aslist(obj, sep=None, strip=True):
"""
Returns given string separated by sep as list
:param obj:
:param sep:
:param strip:
"""
if isinstance(obj, (basestring)):
lst = obj.split(sep)
if strip:
lst = [v.strip() for v in lst]
return lst
elif isinstance(obj, (list, tuple)):
return obj
elif obj is None:
return []
else:
return [obj]
Added VCS into rhodecode core for faster and easier deployments of new versions
r2007 def date_fromtimestamp(unixts, tzoffset=0):
"""
Makes a local datetime object out of unix timestamp
:param unixts:
:param tzoffset:
"""
return datetime.datetime.fromtimestamp(float(unixts))
synced vcs with upstream...
r3797 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
implements #212 moved default encoding variable into rhodecode-config. It's now possible to change...
r2016 def safe_unicode(str_, from_encoding=None):
Added VCS into rhodecode core for faster and easier deployments of new versions
r2007 """
safe unicode function. Does few trick to turn str_ into unicode
In case of UnicodeDecode error we try to return it with encoding detected
by chardet library if it fails fallback to unicode with errors replaced
:param str_: string to decode
:rtype: unicode
:returns: unicode object
"""
if isinstance(str_, unicode):
return str_
Implemented #647, option to pass list of default encoding used to encode to/decode from unicode
r3008
synced vcs with upstream...
r3797 if not from_encoding:
from rhodecode.lib.vcs.conf import settings
from_encoding = settings.DEFAULT_ENCODINGS
if not isinstance(from_encoding, (list, tuple)):
from_encoding = [from_encoding]
Added VCS into rhodecode core for faster and easier deployments of new versions
r2007 try:
return unicode(str_)
except UnicodeDecodeError:
pass
synced vcs with upstream...
r3797 for enc in from_encoding:
try:
return unicode(str_, enc)
except UnicodeDecodeError:
pass
Added VCS into rhodecode core for faster and easier deployments of new versions
r2007
try:
import chardet
encoding = chardet.detect(str_)['encoding']
if encoding is None:
raise Exception()
return str_.decode(encoding)
except (ImportError, UnicodeDecodeError, Exception):
synced vcs with upstream...
r3797 return unicode(str_, from_encoding[0], 'replace')
Added VCS into rhodecode core for faster and easier deployments of new versions
r2007
implements #212 moved default encoding variable into rhodecode-config. It's now possible to change...
r2016 def safe_str(unicode_, to_encoding=None):
Added VCS into rhodecode core for faster and easier deployments of new versions
r2007 """
safe str function. Does few trick to turn unicode_ into string
In case of UnicodeEncodeError we try to return it with encoding detected
by chardet library if it fails fallback to string with errors replaced
:param unicode_: unicode to encode
:rtype: str
:returns: str object
"""
synced vcs with upstream...
r3797
# if it's not basestr cast to str
if not isinstance(unicode_, basestring):
return str(unicode_)
Added VCS into rhodecode core for faster and easier deployments of new versions
r2007
if isinstance(unicode_, str):
return unicode_
Implemented #647, option to pass list of default encoding used to encode to/decode from unicode
r3008
synced vcs with upstream...
r3797 if not to_encoding:
from rhodecode.lib.vcs.conf import settings
to_encoding = settings.DEFAULT_ENCODINGS
if not isinstance(to_encoding, (list, tuple)):
to_encoding = [to_encoding]
for enc in to_encoding:
try:
return unicode_.encode(enc)
except UnicodeEncodeError:
pass
Added VCS into rhodecode core for faster and easier deployments of new versions
r2007
try:
import chardet
encoding = chardet.detect(unicode_)['encoding']
if encoding is None:
raise UnicodeEncodeError()
return unicode_.encode(encoding)
except (ImportError, UnicodeEncodeError):
synced vcs with upstream...
r3797 return unicode_.encode(to_encoding[0], 'replace')
Added VCS into rhodecode core for faster and easier deployments of new versions
r2007
def author_email(author):
"""
returns email address of given author.
If any of <,> sign are found, it fallbacks to regex findall()
and returns first found result or empty string
Regex taken from http://www.regular-expressions.info/email.html
"""
import re
r = author.find('>')
l = author.find('<')
if l == -1 or r == -1:
# fallback to regex match of email out of a string
email_re = re.compile(r"""[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!"""
r"""#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z"""
r"""0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]"""
r"""*[a-z0-9])?""", re.IGNORECASE)
m = re.findall(email_re, author)
return m[0] if m else ''
return author[l + 1:r].strip()
def author_name(author):
"""
get name of author, or else username.
It'll try to find an email in the author string and just cut it off
to get the username
"""
if not '@' in author:
return author
else:
return author.replace(author_email(author), '').replace('<', '')\
.replace('>', '').strip()