X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/ec4c9d6d4e2ce8c31123c48fb140b1d75e762155..30ceb98e6272767f8f271ecb0de30858e1c1a88e:/src/catalogue/utils.py?ds=sidebyside diff --git a/src/catalogue/utils.py b/src/catalogue/utils.py index d17ead0e6..ee3631c76 100644 --- a/src/catalogue/utils.py +++ b/src/catalogue/utils.py @@ -11,13 +11,15 @@ from collections import defaultdict from errno import EEXIST, ENOENT from fcntl import flock, LOCK_EX from os import mkdir, path, unlink +from urllib.parse import urljoin from zipfile import ZipFile +from django.apps import apps 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 django.utils.encoding import force_str from reporting.utils import read_chunks @@ -95,7 +97,7 @@ class LockFile(object): # @task -def create_zip(paths, zip_slug): +def create_zip(paths, zip_slug, file_contents=None): """ Creates a zip in MEDIA_ROOT/zip directory containing files from path. Resulting archive filename is ${zip_slug}.zip @@ -119,6 +121,9 @@ def create_zip(paths, zip_slug): if arcname is None: arcname = path.basename(p) zipf.write(p, arcname) + if file_contents: + for arcname, content in file_contents.items(): + zipf.writestr(arcname, content) finally: zipf.close() @@ -195,7 +200,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_text(s) + s = force_str(s) length = int(num) if length <= 0: return '' @@ -303,13 +308,29 @@ def delete_from_cache_by_language(cache, key_template): def gallery_path(slug): - return os.path.join(settings.MEDIA_ROOT, settings.IMAGE_DIR, 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 absolute_url(url): + Site = apps.get_model('sites', 'Site') + site = Site.objects.get_current() + base_url = '%s://%s' % ( + 'https' if settings.SESSION_COOKIE_SECURE else 'http', + site.domain + ) + return urljoin(base_url, url) + + def get_mp3_length(path): from mutagen.mp3 import MP3 return int(MP3(path).info.length) + + +def set_file_permissions(self, fieldfile): + if fieldfile.instance.preview: + fieldfile.set_readable(False) +