fix findable
[wolnelektury.git] / src / catalogue / utils.py
index ca8ec0d..ee3631c 100644 (file)
@@ -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 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 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.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
 
 
 from reporting.utils import read_chunks
 
@@ -95,7 +97,7 @@ class LockFile(object):
 
 
 # @task
 
 
 # @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
     """
     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 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()
 
             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.
     """
 
     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 ''
     length = int(num)
     if length <= 0:
         return ''
@@ -310,6 +315,16 @@ def gallery_url(slug):
     return '%s%s%s/' % (settings.MEDIA_URL, settings.IMAGE_DIR, 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 get_mp3_length(path):
     from mutagen.mp3 import MP3
     return int(MP3(path).info.length)