/usr/lib/python2.7/dist-packages/rosetta/poutil.py is in python-django-rosetta 0.7.2-1.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | from datetime import datetime
from django.conf import settings
from django.core.cache import get_cache
from rosetta.conf import settings as rosetta_settings
import django
import os
try:
from django.utils import timezone
except:
timezone = None
try:
set
except NameError:
from sets import Set as set # Python 2.3 fallback
cache = get_cache(rosetta_settings.ROSETTA_CACHE_NAME)
def timestamp_with_timezone(dt=None):
"""
Return a timestamp with a timezone for the configured locale. If all else
fails, consider localtime to be UTC.
"""
dt = dt or datetime.now()
if timezone is None:
return dt.strftime('%Y-%m-%d %H:%M%z')
if not dt.tzinfo:
tz = timezone.get_current_timezone()
if not tz:
tz = timezone.utc
dt = dt.replace(tzinfo=timezone.get_current_timezone())
return dt.strftime("%Y-%m-%d %H:%M%z")
def find_pos(lang, project_apps=True, django_apps=False, third_party_apps=False):
"""
scans a couple possible repositories of gettext catalogs for the given
language code
"""
paths = []
# project/locale
parts = settings.SETTINGS_MODULE.split('.')
project = __import__(parts[0], {}, {}, [])
abs_project_path = os.path.normpath(os.path.abspath(os.path.dirname(project.__file__)))
if project_apps:
if os.path.exists(os.path.abspath(os.path.join(os.path.dirname(project.__file__), 'locale'))):
paths.append(os.path.abspath(os.path.join(os.path.dirname(project.__file__), 'locale')))
if os.path.exists(os.path.abspath(os.path.join(os.path.dirname(project.__file__), '..', 'locale'))):
paths.append(os.path.abspath(os.path.join(os.path.dirname(project.__file__), '..', 'locale')))
# django/locale
if django_apps:
django_paths = cache.get('rosetta_django_paths')
if django_paths is None:
django_paths = []
for root, dirnames, filename in os.walk(os.path.abspath(os.path.dirname(django.__file__))):
if 'locale' in dirnames:
django_paths.append(os.path.join(root, 'locale'))
continue
cache.set('rosetta_django_paths', django_paths, 60 * 60)
paths = paths + django_paths
# settings
for localepath in settings.LOCALE_PATHS:
if os.path.isdir(localepath):
paths.append(localepath)
# project/app/locale
for appname in settings.INSTALLED_APPS:
if rosetta_settings.EXCLUDED_APPLICATIONS and appname in rosetta_settings.EXCLUDED_APPLICATIONS:
continue
p = appname.rfind('.')
if p >= 0:
app = getattr(__import__(appname[:p], {}, {}, [str(appname[p + 1:])]), appname[p + 1:])
else:
app = __import__(appname, {}, {}, [])
apppath = os.path.normpath(os.path.abspath(os.path.join(os.path.dirname(app.__file__), 'locale')))
# django apps
if 'contrib' in apppath and 'django' in apppath and not django_apps:
continue
# third party external
if not third_party_apps and abs_project_path not in apppath:
continue
# local apps
if not project_apps and abs_project_path in apppath:
continue
if os.path.isdir(apppath):
paths.append(apppath)
ret = set()
langs = [lang, ]
if u'-' in lang:
_l, _c = map(lambda x: x.lower(), lang.split(u'-'))
langs += [u'%s_%s' % (_l, _c), u'%s_%s' % (_l, _c.upper()), ]
elif u'_' in lang:
_l, _c = map(lambda x: x.lower(), lang.split(u'_'))
langs += [u'%s-%s' % (_l, _c), u'%s-%s' % (_l, _c.upper()), ]
paths = map(os.path.normpath, paths)
paths = list(set(paths))
for path in paths:
for lang_ in langs:
dirname = os.path.join(path, lang_, 'LC_MESSAGES')
#print dirname
for fn in ('django.po', 'djangojs.po',):
filename = os.path.join(dirname, fn)
if os.path.isfile(filename):
ret.add(os.path.abspath(filename))
return list(sorted(ret))
def pagination_range(first, last, current):
r = []
r.append(first)
if first + 1 < last:
r.append(first + 1)
if current - 2 > first and current - 2 < last:
r.append(current - 2)
if current - 1 > first and current - 1 < last:
r.append(current - 1)
if current > first and current < last:
r.append(current)
if current + 1 < last and current + 1 > first:
r.append(current + 1)
if current + 2 < last and current + 2 > first:
r.append(current + 2)
if last - 1 > first:
r.append(last - 1)
r.append(last)
r = list(set(r))
r.sort()
prev = 10000
for e in r[:]:
if prev + 1 < e:
try:
r.insert(r.index(e), '...')
except ValueError:
pass
prev = e
return r
|