Exemple #1
0
def test_change_avatar_removes_the_old_one(client):
    url = reverse('users-change-avatar')
    user = f.UserFactory()

    with NamedTemporaryFile(delete=False) as avatar:
        avatar.write(DUMMY_BMP_DATA)
        avatar.seek(0)
        user.photo = File(avatar)
        user.save()
        generate_all_aliases(user.photo, include_global=True)

    with NamedTemporaryFile(delete=False) as avatar:
        thumbnailer = get_thumbnailer(user.photo)
        original_photo_paths = [user.photo.path]
        original_photo_paths += [
            th.path for th in thumbnailer.get_thumbnails()
        ]
        assert all(list(map(os.path.exists, original_photo_paths)))

        client.login(user)
        avatar.write(DUMMY_BMP_DATA)
        avatar.seek(0)
        post_data = {'avatar': avatar}
        response = client.post(url, post_data)

        assert response.status_code == 200
        assert not any(list(map(os.path.exists, original_photo_paths)))
    def handle_noargs(self, **options):
        START_TIME = time.time()
        i = 0;
        #baseline = count_objs()
        baseline = None
        #print baseline.most_common(20)
        #last = None
        for p in Photo.objects.all():
            generate_all_aliases(p.photo, include_global=True)
            cur_count = count_objs()
            #print cur_count.most_common(20)
            if baseline:
                print ("Object count:")
                print ("\n".join("  %s: %s"%(ct, tp) for (tp,ct) in
                                 (cur_count - baseline).most_common(20)))
            if not baseline:
                baseline = cur_count

            i+= 1
            usage = resource.getrusage(resource.RUSAGE_SELF)
            print("%i; RSS: %i; Unshared: %i; Obj: %i"%(i, usage.ru_maxrss, usage.ru_idrss,
                                              len(gc.get_objects())))

        print('It took %.2f seconds to generate all thumbnails and aliases.' % (time.time() - START_TIME))
        self.stdout.write('All thumbnail aliases generated succesfully.')
def test_update_project_logo(client):
    user = f.UserFactory.create(is_superuser=True)
    project = f.create_project()
    url = reverse("projects-change-logo", args=(project.id,))

    with NamedTemporaryFile(delete=False) as logo:
        logo.write(DUMMY_BMP_DATA)
        logo.seek(0)
        project.logo = File(logo)
        project.save()
        generate_all_aliases(project.logo, include_global=True)

    thumbnailer = get_thumbnailer(project.logo)
    original_photo_paths = [project.logo.path]
    original_photo_paths += [th.path for th in thumbnailer.get_thumbnails()]

    assert all(list(map(os.path.exists, original_photo_paths)))

    with NamedTemporaryFile(delete=False) as logo:
        logo.write(DUMMY_BMP_DATA)
        logo.seek(0)

        client.login(user)
        post_data = {'logo': logo}
        response = client.post(url, post_data)
        assert response.status_code == 200
        assert not any(list(map(os.path.exists, original_photo_paths)))
Exemple #4
0
def thumbnail_image(image_pk):
    try:
        img = Image.objects.get(id=image_pk)
    except Image.DoesNotExist:
        img = None
    if img:
        generate_all_aliases(img.image, include_global=True)
Exemple #5
0
def test_change_avatar_removes_the_old_one(client):
    url = reverse('users-change-avatar')
    user = f.UserFactory()

    with NamedTemporaryFile(delete=False) as avatar:
        avatar.write(DUMMY_BMP_DATA)
        avatar.seek(0)
        user.photo = File(avatar)
        user.save()
        generate_all_aliases(user.photo, include_global=True)

    with NamedTemporaryFile(delete=False) as avatar:
        thumbnailer = get_thumbnailer(user.photo)
        original_photo_paths = [user.photo.path]
        original_photo_paths += [th.path for th in thumbnailer.get_thumbnails()]
        assert all(list(map(os.path.exists, original_photo_paths)))

        client.login(user)
        avatar.write(DUMMY_BMP_DATA)
        avatar.seek(0)
        post_data = {'avatar': avatar}
        response = client.post(url, post_data)

        assert response.status_code == 200
        assert not any(list(map(os.path.exists, original_photo_paths)))
Exemple #6
0
def generate_thumbnails(model, pk, field):
    """
    Async task to generate thumbnail from file
    """
    instance = model.__default_manager.get(pk=pk)
    filefield = getattr(instance, field)
    generate_all_aliases(filefield, include_global=True)
def generate_thumbnails_task(app_label, model_name, pk, field):
    m = apps.get_model(app_label=app_label, model_name=model_name)
    instance = m._default_manager.get(pk=pk)
    fieldfile = getattr(instance, field)
    log.debug('task - generate thumbnail for {}'.format(instance))
    print(fieldfile)
    generate_all_aliases(fieldfile, include_global=True)
Exemple #8
0
def test_update_project_logo(client):
    user = f.UserFactory.create(is_superuser=True)
    project = f.create_project()
    url = reverse("projects-change-logo", args=(project.id, ))

    with NamedTemporaryFile(delete=False) as logo:
        logo.write(DUMMY_BMP_DATA)
        logo.seek(0)
        project.logo = File(logo)
        project.save()
        generate_all_aliases(project.logo, include_global=True)

    thumbnailer = get_thumbnailer(project.logo)
    original_photo_paths = [project.logo.path]
    original_photo_paths += [th.path for th in thumbnailer.get_thumbnails()]

    assert all(list(map(os.path.exists, original_photo_paths)))

    with NamedTemporaryFile(delete=False) as logo:
        logo.write(DUMMY_BMP_DATA)
        logo.seek(0)

        client.login(user)
        post_data = {'logo': logo}
        response = client.post(url, post_data)
        assert response.status_code == 200
        assert not any(list(map(os.path.exists, original_photo_paths)))
Exemple #9
0
def generate_thumbnails(model_name, pk, field):
    from .utils import load_aliases
    load_aliases()
    model = apps.get_model(model_name)
    instance = model.objects.get(pk=pk)
    fieldfile = getattr(instance, field)
    generate_all_aliases(fieldfile, include_global=True)
def generate_aliases(fieldfile, **kwargs):
    """
    A saved_file signal handler which generates thumbnails for all field,
    model, and app specific aliases matching the saved file's field.
    """
    # Avoids circular import.
    from easy_thumbnails.files import generate_all_aliases
    generate_all_aliases(fieldfile, include_global=False)
Exemple #11
0
def generate_aliases(model, pk, field):
    """ Générer les miniatures de l'image """
    try:
        instance = model.objects.get(pk=pk)
        fieldfile = getattr(instance, field)
        generate_all_aliases(fieldfile, include_global=True)
    except model.DoesNotExist:
        pass
def set_taiga_user_photo(user, photo):
    print(f"Setting avatar for Taiga user {user.username}")

    with NamedTemporaryFile(delete=True) as avatar:
        avatar.write(photo)
        avatar.seek(0)
        user.photo = File(avatar)
        user.save()
        generate_all_aliases(user.photo, include_global=True)
Exemple #13
0
def create_random_picture_aliases():
    """ Créer toutes les miniatures pour des images aléatoires """
    # TODO: Vérifier le queryset ici
    with transaction.atomic():
        pictures = Picture.objects.filter(width__in=[0, 1],
                                          height__in=[0,
                                                      1]).order_by('?')[:2048]
        for picture in pictures:
            generate_all_aliases(picture.image, include_global=True)
    return True
Exemple #14
0
 def podcast_feed(self, data):
     tree = etree.fromstring(data["content"])
     pf = PodcastFeed.objects.get(show__slug=data["show"])
     show = pf.show
     for field, value in filter(lambda x: x[0].endswith("_enabled"), vars(pf).iteritems()):
         # print field, value
         if not value:
             continue
         if field[:-8] + "_xpath" in vars(pf):
             xpath = vars(pf)[field[:-8] + "_xpath"]
             value = tree.xpath(xpath, namespaces=tree.nsmap)
             if not value:
                 continue
             value = value[0]
         regex = None
         if field[:-8] + "_regex" in vars(pf):
             regex = vars(pf)[field[:-8] + "_regex"]
         if regex:
             match = re.search(regex, value)
             if match and "value" in match.groupdict():
                 value = match.group("value")
         # print field[:-8], value
         if field[:-8] == "icon":
             headers = {}
             local_modtime = None
             if os.path.exists(show.icon.path):
                 if show.icon_url == value and show.icon_etag:
                     headers["If-None-Match"] = show.icon_etag
                 local_modtime = os.path.getmtime(show.icon.path)
                 headers["If-Modified-Since"] = time.strftime(
                     "%a, %d %b %Y %H:%M:%S GMT", time.localtime(local_modtime)
                 )
             r = requests.head(value, headers=headers)
             if r.status_code == 200:
                 if local_modtime and "last-modified" in r.headers:
                     time_s = r.headers["last-modified"]
                     time_d = dateutil.parser.parse(time_s)
                     remote_modtime = int(time_d.strftime("%s"))
                     if remote_modtime < local_modtime:
                         continue
                 r = requests.get(value, headers=headers)
                 if r.status_code != 200:
                     continue
                 img_temp = NamedTemporaryFile(delete=True)
                 img_temp.write(r.content)
                 img_temp.flush()
                 show.icon.save("%s.jpg" % show.slug, File(img_temp), save=True)
                 generate_all_aliases(show.icon, include_global=True)
                 if "etag" in r.headers:
                     show.icon_etag = r.headers["etag"]
                 show.icon_url = r.url
                 show.save()
         else:
             setattr(show, field[:-8], value)
     show.save()
Exemple #15
0
def upload_user_avatar(self, user_id: int):
    user = User.objects.get(pk=user_id)

    try:
        response = requests.get(user.avatar_url, stream=True)
        if response.status_code == 200:
            user.avatar_image.save(user.avatar_url,
                                   ContentFile(response.raw.read()))
            user.save(update_fields=['avatar_image'])

            generate_all_aliases(user.avatar_image, include_global=False)

    except requests.exceptions.Timeout:
        self.retry()
Exemple #16
0
def save_tweet(tweetobj):
    twitter_id = tweetobj["id"]
    username = tweetobj["user"]["name"]
    screenname = tweetobj["user"]["screen_name"]
    text = tweetobj["text"]
    created_at = parse_datetime(tweetobj["created_at"])
    created_at = timezone.make_aware(created_at, timezone=pytz.UTC)  # tweets are stored int UTC

    image_urls = []
    try:
        for media in tweetobj["entities"]["media"]:
            if media["type"] == "photo":
                image_urls.append(media["media_url"] + ":large")
                # cut image url  from tweet text
                text = text.replace(media["url"], "")
    except KeyError:
        pass
        # print("no picture")
        # return  # no picture

    # if len(image_list) < 2:
    #     print ("less than 2 pictures" + str(len(image_list)))
    #     return
    # create tweet
    newtweet = Tweet(
        twitter_id=twitter_id,
        username=username,
        screenname=screenname,
        text=text,
        created_at=created_at,
        from_twitter=True,
    )
    newtweet.save()
    if image_urls:
        for image_url in image_urls:
            # print(image_url)
            image = retrieve_image(image_url)
            image = process_image(image)  # returns jpg
            image_name = "tmp.jpg"  # will be renamed by model save function
            newpic = TweetPic()
            newpic.tweet = newtweet
            newpic.picture.save(image_name, image)
            newpic.save()
            generate_all_aliases(newpic.picture, include_global=True)  # create thumbnails

    print("saved tweet with id %s" % (str(twitter_id)))
Exemple #17
0
def test_remove_avatar(client):
    url = reverse('users-remove-avatar')
    user = f.UserFactory()

    with NamedTemporaryFile(delete=False) as avatar:
        avatar.write(DUMMY_BMP_DATA)
        avatar.seek(0)
        user.photo = File(avatar)
        user.save()
        generate_all_aliases(user.photo, include_global=True)

    thumbnailer = get_thumbnailer(user.photo)
    original_photo_paths = [user.photo.path]
    original_photo_paths += [th.path for th in thumbnailer.get_thumbnails()]
    assert list(map(os.path.exists, original_photo_paths)) == [True, True, True, True]

    client.login(user)
    response = client.post(url)

    assert response.status_code == 200
    assert list(map(os.path.exists, original_photo_paths)) == [False, False, False, False]
Exemple #18
0
def generate_thumbnails(pk, field, model_class=None):
    model = load_class(model_class)
    instance = model._default_manager.get(pk=pk)
    fieldfile = getattr(instance, field)

    # optimize file
    call(["/usr/bin/jpegoptim", fieldfile.path])

    generate_all_aliases(fieldfile, include_global=True)

    try:
        if model.__name__ == 'Photo':
            instance.is_processed = True
            instance.save()

            album = instance.album
            if not album.photo_set.filter(is_processed=False).count():
                album.is_processed = True
                album.save()

    except:
        pass
    def handle(self, *args, **options):

        client = login()

        directory_name = options['directory']
        set_name = options.get('set_name', directory_name)

        files = client.metadata(directory_name)

        ps, _ = PhotoSet.objects.get_or_create(name=set_name)

        for image_dict in files['contents']:
            name = image_dict['path'].rsplit("/", 1)[-1]
            print name
            f, metadata = client.get_file_and_metadata(image_dict['path'])
            sf = StringIO()
            sf.write(f.read())
            img = File(sf)
            p = Photo(title=name, photo_set=ps)
            p.image.save(name, img)
            p.save()
            generate_all_aliases(p.image, include_global=True)
Exemple #20
0
def generate_thumbnails(pk, field, model_class=None):
    model = load_class(model_class)
    instance = model._default_manager.get(pk=pk)
    fieldfile = getattr(instance, field)

    # optimize file
    call(["/usr/bin/jpegoptim", fieldfile.path])

    generate_all_aliases(fieldfile, include_global=True)

    try:
        if model.__name__ == 'Photo':
            instance.is_processed = True
            instance.save()

            album = instance.album
            if not album.photo_set.filter(is_processed=False).count():
                album.is_processed = True
                album.save()

    except:
        pass
Exemple #21
0
def generate_responsive_images(foto):
    generate_all_aliases(foto.image, True)
    foto.image_resized = True  # Marcar imagen como ya procesada
    foto.save()  # Guardar foto
Exemple #22
0
def generate_thumbnails(model, pk, field):
	instance = model._default_manager.get(pk=pk)
	fieldfile = getattr(instance, field)
	generate_all_aliases(fieldfile, include_global=True)
Exemple #23
0
def generate_thumbnails(model, pk, field):
    instance = model._default_manager.get(pk=pk)
    fieldfile = getattr(instance, field)
    generate_all_aliases(fieldfile, include_global=True)
def gen_catch_exc(field):
    try:
        generate_all_aliases(field, True)
    except InvalidImageFormatError as iife:
        logger.error("Couldn't generate thumbnail(s) for {0}: {1}".format(
            field, iife))
Exemple #25
0
def generate_responsive_images(post):
    generate_all_aliases(post.image, True)
    post.image_resized = True
    post.save()
Exemple #26
0
def generate_avatar_thumbnails(user_id):
    instance = User.objects.get(pk=user_id)
    generate_all_aliases(instance.avatar_image, include_global=False)
def gen_catch_exc(field):
    try:
        generate_all_aliases(field, True)
    except InvalidImageFormatError as iife:
        logger.error("Couldn't generate thumbnail(s) for {0}: {1}".format(
            field, iife))
def generate_responsive_images(imagen):
    generate_all_aliases(imagen.url, True)
    imagen.resized = True
    imagen.save()