X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/b2d342589a7889a3b096e7192453d53bd28eed7d..355e42e2b2244470ac6a5b9ad056e4a3f38f838c:/src/catalogue/utils.py diff --git a/src/catalogue/utils.py b/src/catalogue/utils.py index e79b4392c..ec938eabb 100644 --- a/src/catalogue/utils.py +++ b/src/catalogue/utils.py @@ -2,23 +2,24 @@ # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # -from collections import defaultdict import hashlib +import os.path import random import re import time from base64 import urlsafe_b64encode - -from django.http import HttpResponse -from django.core.files.uploadedfile import UploadedFile -from django.core.files.storage import DefaultStorage -from django.utils.encoding import force_unicode -from django.conf import settings -from os import mkdir, path, unlink +from collections import defaultdict from errno import EEXIST, ENOENT from fcntl import flock, LOCK_EX +from os import mkdir, path, unlink from zipfile import ZipFile +from django.conf import settings +from django.core.files.storage import DefaultStorage +from django.core.files.uploadedfile import UploadedFile +from django.http import HttpResponse +from django.utils.encoding import force_text + from reporting.utils import read_chunks # Use the system (hardware-based) random number generator if it exists. @@ -26,14 +27,19 @@ if hasattr(random, 'SystemRandom'): randrange = random.SystemRandom().randrange else: randrange = random.randrange -MAX_SESSION_KEY = 18446744073709551616L # 2 << 63 +MAX_SESSION_KEY = 18446744073709551616 # 2 << 63 def get_random_hash(seed): - sha_digest = hashlib.sha1('%s%s%s%s' % ( - randrange(0, MAX_SESSION_KEY), time.time(), unicode(seed).encode('utf-8', 'replace'), settings.SECRET_KEY) - ).digest() - return urlsafe_b64encode(sha_digest).replace('=', '').replace('_', '-').lower() + sha_digest = hashlib.sha1(( + '%s%s%s%s' % ( + randrange(0, MAX_SESSION_KEY), + time.time(), + str(seed).encode('utf-8', 'replace'), + settings.SECRET_KEY + ) + ).encode('utf-8')).digest() + return urlsafe_b64encode(sha_digest).decode('latin1').replace('=', '').replace('_', '-').lower() def split_tags(*tag_lists): @@ -84,7 +90,7 @@ class LockFile(object): try: unlink(self.lockname) except OSError as oe: - if oe.errno != EEXIST: + if oe.errno != ENOENT: raise oe self.lock.close() @@ -240,7 +246,7 @@ def truncate_html_words(s, num, end_text='...'): This is just a version of django.utils.text.truncate_html_words with no space before the end_text. """ - s = force_unicode(s) + s = force_text(s) length = int(num) if length <= 0: return u'' @@ -345,3 +351,16 @@ class AppSettings(object): def delete_from_cache_by_language(cache, key_template): cache.delete_many([key_template % lc for lc, ln in settings.LANGUAGES]) + + +def gallery_path(slug): + return os.path.join(settings.MEDIA_ROOT, settings.IMAGE_DIR, slug) + + +def gallery_url(slug): + return '%s%s%s/' % (settings.MEDIA_URL, settings.IMAGE_DIR, slug) + + +def get_mp3_length(path): + from mutagen.mp3 import MP3 + return int(MP3(path).info.length)