def import_path(path, parent_category=None):
    category_name = os.path.basename(path)
    if not category_name:
        path = os.path.dirname(path)
        category_name = os.path.basename(path)

    if parent_category and parent_category.parent:
        parent_category = parent_category.parent

    try:
        category = Category.objects.filter(title=category_name, parent=parent_category)[0]
    except IndexError:
        category = Category(title=category_name, parent=parent_category)
        category.save()

    for item in os.listdir(path):
        subpath = os.path.join(path, item)
        if os.path.isdir(subpath):
            import_path(subpath, parent_category=category)
        elif item.startswith('.'):
            # ignore . files
            pass
        else:
            content = ContentFile(open(subpath).read())
            media_file = MediaFile()
            media_file.save()
            media_file.categories.add(category)
            media_file.file.save(media_file.file.storage.get_valid_name(item), content)
Ejemplo n.º 2
0
def bulk_upload(request):
    from django.core.urlresolvers import reverse
    from os import path

    if request.method == 'POST' and 'data' in request.FILES:

        category = None
        if request.POST.get('category'):
            category = Category.objects.get(pk=int(request.POST.get('category')))
            
        from django.template.defaultfilters import slugify
        from django.core.files.base import ContentFile
        
        for uploaded_file in request.FILES.getlist('data'):
            fname, ext = path.splitext(uploaded_file.name)
            target_fname = slugify(fname) + ext.lower()
            
            mf = MediaFile()
            mf.file.save(target_fname, uploaded_file)
            mf.save()
    
            if category:
                mf.categories.add(category)
    
            mt = MediaFileTranslation()
            mt.parent  = mf
            mt.caption = fname.replace('_', ' ')
            mt.save()

        messages.info(request, _("%d files imported") % len(request.FILES.getlist('data')))
    else:
        messages.error(request, _("No input file given"))
            
    return HttpResponseRedirect(reverse('admin:medialibrary_mediafile_changelist'))
Ejemplo n.º 3
0
class PdfTest(TestCase):
    def setUp(self):
        self.pdf = MediaFile(file=File(open('testapp/fixtures/rst-cheatsheet.pdf')))
        self.pdf.save()

    def tearDown(self):
        pdf_variations = Variation.objects.filter(
            content_type = ContentType.objects.get_for_model(self.pdf),
            object_id = self.pdf.pk
        )

        for variation in pdf_variations:
            variation.delete()

        self.pdf.delete()

    def test_page_range(self):
        from pyPdf import PdfFileReader

        self.variation = Variation(
            content_object = self.pdf,
            spec = 'mediavariations.contrib.pypdf.specs.PageRange',
            options = simplejson.dumps({
                'start' : 0,
                'stop' : 1
            })
        )
        self.variation.save()

        reader = PdfFileReader(self.variation.file.file)

        self.assertEqual(reader.getNumPages(), 1)
Ejemplo n.º 4
0
class BlitlineTest(TestCase):
    def setUp(self):
        self.mediafile = MediaFile(file=File(open('testapp/fixtures/elephant_test_image.jpeg')))
        self.mediafile.save()

    def tearDown(self):
        """
        delete the mediafile
        """

        mediafile_variations = Variation.objects.filter(
            content_type = ContentType.objects.get_for_model(self.mediafile),
            object_id = self.mediafile.pk
        )

        for variation in mediafile_variations:
            variation.delete()

        self.mediafile.delete()

    def test_setup(self):
        self.assertEqual(self.mediafile.type, 'image')
        self.assertEqual(get_image_dimensions(self.mediafile.file), (404, 346))

    def test_blitline(self):
        self.variation = Variation(
            content_object=self.mediafile,
            spec = 'mediavariations.contrib.blitline.specs.Generic',
            options = '''
                {"functions":
                    [{ "name": "crop",
                       "params" : { "x": 5, "y": 5, "width": 40,"height": 40 }
                    }]
                }
            '''
        )
        self.variation.save()

        # auto medialfield discovery
        self.assertEqual(self.variation.field, 'file')

        # wait for image to be processed
        while (not self.variation.processed):
            self.variation.get_progress()
            sleep(1)

        # test image
        self.assertEqual(get_image_dimensions(self.variation.file), (40, 40))

    def test_templatetag(self):
        from mediavariations.templatetags.mediavariations import mediavariation

        self.variated_url = mediavariation(self.mediafile, 'blitline')

        path, filename = os.path.split(self.mediafile.file.name)
        basename, ext = os.path.splitext(filename)
        
        self.assertTrue(basename in self.variated_url)
Ejemplo n.º 5
0
 def _saveSplash(self, vidFile, thumbURL, mediaPath):
     thumbMediaPath = os.path.join(mediaPath, '%s.jpg' % vidFile)
     
     thumbRealPath = os.path.join(settings.MEDIA_ROOT, thumbMediaPath)
     subprocess.call(['wget', '-O', thumbRealPath, thumbURL])
     
     try:
         mf = MediaFile.objects.get(file=thumbMediaPath)
     except MediaFile.DoesNotExist:
         mf = MediaFile(file=thumbMediaPath)
     mf.save()
Ejemplo n.º 6
0
    def _saveSplash(self, vidFile, thumbURL, mediaPath):
        thumbMediaPath = os.path.join(mediaPath, '%s.jpg' % vidFile)

        thumbRealPath = os.path.join(settings.MEDIA_ROOT, thumbMediaPath)
        subprocess.call(['wget', '-O', thumbRealPath, thumbURL])

        try:
            mf = MediaFile.objects.get(file=thumbMediaPath)
        except MediaFile.DoesNotExist:
            mf = MediaFile(file=thumbMediaPath)
        mf.save()
Ejemplo n.º 7
0
 def _processDownloadedFile(self, vidFile, title, desc, mediaPath):
     orig = os.path.join(self.tmp, vidFile)
     new = os.path.join(settings.MEDIA_ROOT, mediaPath, vidFile)
     subprocess.call(['yamdi', '-i', orig, '-o', new])
     try:
         mf = MediaFile.objects.get(file=os.path.join(mediaPath, vidFile))
     except MediaFile.DoesNotExist:
         mf = MediaFile(file=os.path.join(mediaPath, vidFile))
     mf.save()
     tr = mf.get_translation()
     if tr == None:        
         tr = MediaFileTranslation(parent=mf, language_code='cs')
     tr.caption = mark_safe(title)
     tr.description = mark_safe(desc)
     tr.save()
Ejemplo n.º 8
0
 def _processDownloadedFile(self, vidFile, title, desc, mediaPath):
     orig = os.path.join(self.tmp, vidFile)
     new = os.path.join(settings.MEDIA_ROOT, mediaPath, vidFile)
     subprocess.call(['yamdi', '-i', orig, '-o', new])
     try:
         mf = MediaFile.objects.get(file=os.path.join(mediaPath, vidFile))
     except MediaFile.DoesNotExist:
         mf = MediaFile(file=os.path.join(mediaPath, vidFile))
     mf.save()
     tr = mf.get_translation()
     if tr == None:
         tr = MediaFileTranslation(parent=mf, language_code='cs')
     tr.caption = mark_safe(title)
     tr.description = mark_safe(desc)
     tr.save()
Ejemplo n.º 9
0
def upload_image(request):
    """
    image upload handler
    Returns a HttpResponse whose content is JSON.
    """
    result = {"result": False}

    if request.method == "POST" and request.FILES:
        if request.FILES["file"]:
            # TODO: use form (validation)
            file = request.FILES["file"]
            mf = MediaFile()
            mf.file.save(file.name, ContentFile(file.file.read()))
            mf.save()

            result = {"result": True}
            result["location"] = mf.get_absolute_url()

    return HttpResponse(dumps(result), content_type="application/json")
Ejemplo n.º 10
0
def bulk_upload(request):
    from django.core.urlresolvers import reverse
    from os import path

    if request.method == 'POST' and 'data' in request.FILES:

        category = None
        if request.POST.get('category'):
            category = Category.objects.get(
                pk=int(request.POST.get('category')))

        from django.template.defaultfilters import slugify
        from django.core.files.base import ContentFile

        for uploaded_file in request.FILES.getlist('data'):
            fname, ext = path.splitext(uploaded_file.name)
            target_fname = slugify(fname) + ext.lower()

            mf = MediaFile()
            mf.file.save(target_fname, uploaded_file)
            mf.save()

            if category:
                mf.categories.add(category)

            mt = MediaFileTranslation()
            mt.parent = mf
            mt.caption = fname.replace('_', ' ')
            mt.save()

        messages.info(
            request,
            _("%d files imported") % len(request.FILES.getlist('data')))
    else:
        messages.error(request, _("No input file given"))

    return HttpResponseRedirect(
        reverse('admin:medialibrary_mediafile_changelist'))
Ejemplo n.º 11
0
 def setUp(self):
     from extensions import media_variation
     MediaFile.register_extension(media_variation)
     mediafile = MediaFile(file=File(open('feinheit/media_variations/fixtures/elephant_test_image.jpeg')))
     mediafile.save()
     self.image = mediafile