Skip to content

Commit

Permalink
[Chore #12629770] Remove unused library references
Browse files Browse the repository at this point in the history
  • Loading branch information
Nwuguru Sunday committed Jul 15, 2016
1 parent 73cb479 commit 647d92a
Show file tree
Hide file tree
Showing 17 changed files with 93 additions and 246 deletions.
48 changes: 34 additions & 14 deletions app/photos/api/image_edit.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
from PIL import Image, ImageFilter, ImageOps, ImageStat, ImageEnhance, ImageDraw, ImageFont
import base64, cStringIO, os
from PIL import (
Image, ImageFilter,
ImageOps, ImageStat,
ImageEnhance, ImageDraw,
ImageFont
)
import base64
import cStringIO
import os


class ImageEdit:
Expand Down Expand Up @@ -53,23 +60,30 @@ def filter(self, filter_type):
self.output = self.output.filter(self.filters[filter_type])

def enhance(self, enhance_type, value):
""" Used to enhance image brightness, color, contrast and sharpness. """
method = getattr(ImageEnhance,enhance_type)
"""
Used to enhance image brightness,
color, contrast and sharpness.
"""
method = getattr(ImageEnhance, enhance_type)
if method:
actual_value = (value/100) * self.max_enhance
enhancement = method(self.output)
self.output = enhancement.enhance(actual_value)

def quantize(self, value=256):
""" Convert the image to 'P' mode with the specified number of colors. """
actual_value = float(value)/100 * 256;
"""
Convert the image to 'P' mode with the
specified number of colors.
"""
actual_value = float(value)/100 * 256
self.output = self.output.quantize(int(actual_value))
self.output = self.output.convert('RGB')

def gaussian_blur(self, radius):
""" Gaussian blur filter. """
actual_value = float(radius)/100 * 20
self.output = self.output.filter(ImageFilter.GaussianBlur(int(actual_value)))
self.output = self.output.filter(
ImageFilter.GaussianBlur(int(actual_value)))

def auto_contrast(self, cutoff=0):
""" Normalize image contrast. """
Expand All @@ -95,7 +109,7 @@ def solarize(self, threshold=128):

def remove_border(self, border_size=0):
""" Remove border from image. """
actual_value = float(border_size)/100 * 200;
actual_value = float(border_size)/100 * 200
self.output = ImageOps.crop(self.output, int(actual_value))

def rotate(self, value):
Expand All @@ -122,22 +136,26 @@ def mirror(self):
self.output = ImageOps.mirror(self.output)

def set_font(self, font='Honey-I-spilt-Verdana.ttf', font_size=100):
fonts_path = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), 'static/fonts')
fonts_path = os.path.join(
os.path.dirname(os.path.dirname(
os.path.dirname(__file__))), 'static/fonts')
self.font = ImageFont.truetype(fonts_path + '/' + font, font_size)

def text(self, text, x, y, fill=(255,255,255)):
def text(self, text, x, y, fill=(255, 255, 255)):
draw = ImageDraw.Draw(self.output)
if not self.font:
self.set_font()
draw.text((x,y), text, font=self.font, fill=fill)
draw.text((x, y), text, font=self.font, fill=fill)
del draw

def line(self, start_x=0, end_x=100, start_y=0, end_y=100, fill="#fff", width=50):
def line(self, start_x=0, end_x=100, start_y=0,
end_y=100, fill="#fff", width=50):
draw = ImageDraw.Draw(self.output)
draw.line((start_x, start_y, end_x, end_y), fill=fill, width=width)
del draw

def rectangle(self, start_x=0, end_x=100, start_y=0, end_y=100, fill="#fff"):
def rectangle(self, start_x=0, end_x=100,
start_y=0, end_y=100, fill="#fff"):
draw = ImageDraw.Draw(self.output)
draw.rectangle((start_x, start_y, end_x, end_y), fill=fill)
del draw
Expand All @@ -149,7 +167,9 @@ def preview(self):

def save(self):
path = self.path.replace('main', 'edited')
edit_path = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), 'media_cdn/edited')
edit_path = os.path.join(
os.path.dirname(os.path.dirname(
os.path.dirname(__file__))), 'media_cdn/edited')
if not os.path.exists(edit_path):
os.makedirs(edit_path)
self.output.save(path, format=self.image_format)
6 changes: 4 additions & 2 deletions app/photos/api/image_processor.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from image_edit import *


class ImageProcessor:

def __init__(self, photo):
self.image = photo.image
self.image_editor = ImageEdit(photo.image.path)
Expand All @@ -22,7 +24,8 @@ def save(self):

def enhance(self, effect_data):
for effect_data_type in effect_data:
self.image_editor.enhance(effect_data_type, float(effect_data[effect_data_type]))
self.image_editor.enhance(
effect_data_type, float(effect_data[effect_data_type]))

def filter(self, effect_data):
for effect_data_type in effect_data:
Expand All @@ -39,4 +42,3 @@ def effect(self, effect_data):
method = getattr(self.image_editor, effect_data_type)
if method:
method(effect_data[effect_data_type])

6 changes: 2 additions & 4 deletions app/photos/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
)

from photos.models import *
import cloudinary


class UserSerializer(ModelSerializer):
Expand Down Expand Up @@ -36,6 +35,7 @@ def create(self, validated_data):

class FolderSerializer(ModelSerializer):
photos = SerializerMethodField()

class Meta:
model = Folder
fields = [
Expand All @@ -49,7 +49,6 @@ class Meta:
extra_kwargs = {'date_created': {'read_only': True},
'date_modified': {'read_only': True}}


def get_photos(self, obj):
serialized_photos = []
photos = obj.photo_set.all()
Expand Down Expand Up @@ -98,7 +97,6 @@ class Meta:
extra_kwargs = {'date_created': {'read_only': True},
'date_modified': {'read_only': True}}


def get_folder_name(self, obj):
try:
return obj.folder.name
Expand All @@ -114,6 +112,6 @@ def get_file_size(self, obj):
def get_detail(self, obj):
detail = PhotoDetail.objects.filter(photo=obj).first()
if(not detail):
return {};
return {}
serializer = PhotoDetailSerializer(detail)
return serializer.data
36 changes: 20 additions & 16 deletions app/photos/api/views.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from django.contrib.auth.models import User
import json, cloudinary
from django.shortcuts import get_object_or_404
from django.views.generic import View
from django.http import HttpResponse, HttpResponseNotFound
import json
import time
from rest_framework.generics import (
ListCreateAPIView,
RetrieveUpdateDestroyAPIView,
Expand All @@ -19,7 +20,7 @@
from .serializers import *
from .permissions import IsOwner
from image_processor import *
import time


class RegistrationApiView(CreateAPIView):
queryset = User.objects.all()
Expand All @@ -28,6 +29,7 @@ class RegistrationApiView(CreateAPIView):


class LoginApiView(View):

def post(self, request, *args, **kwargs):
username = request.POST.get('username', '')
password = request.POST.get('password', '')
Expand All @@ -37,36 +39,39 @@ def post(self, request, *args, **kwargs):
if user.is_active:
login(request, user)
response_data.update(
{'login':True, 'user': user.username}
{'login': True, 'user': user.username}
)
else:
response_data.update(
{'login':False, 'message': 'User inactive'}
{'login': False, 'message': 'User inactive'}
)
else:
response_data.update(
{'login':False, 'message': 'Invalid credentials'}
{'login': False, 'message': 'Invalid credentials'}
)

response_json = json.dumps(response_data)
return HttpResponse(response_json, content_type="application/json")


class PhotoPreview(View):

def post(self, request, *args, **kwargs):
photo_id = request.POST.get('photo_id', 0)
effects = request.POST.get('effects', '')
effect_obj = json.loads(effects)
photo = Photo.objects.filter(id=photo_id).first()
response_data = {'image':''}
response_data = {'image': ''}
if photo:
image_processor = ImageProcessor(photo)
image_processor.process(effect_obj)
response_data = {'image':image_processor.preview()}
response_data = {'image': image_processor.preview()}
response_json = json.dumps(response_data)
return HttpResponse(response_json, content_type="application/json")


class PhotoShare(View):

def get(self, request, *args, **kwargs):
share_id = request.GET.get('share_id', None)
response_data = {}
Expand Down Expand Up @@ -109,6 +114,7 @@ def get_queryset(self):
queryset = Folder.objects.filter(user=self.request.user)
return queryset


class PhotoApiView(ListCreateAPIView):

"""
Expand All @@ -133,25 +139,26 @@ class PhotoApiView(ListCreateAPIView):
# before create
def perform_create(self, serializer):
folder_id = self.request.POST.get('folder_id', 0)
folder = Folder.objects.filter(user=self.request.user, id=folder_id).first()
folder = Folder.objects.filter(
user=self.request.user, id=folder_id).first()
code = int(time.time())
if folder is not None:
instance = serializer.save(user=self.request.user, folder=folder, share_code=code)
instance = serializer.save(
user=self.request.user, folder=folder, share_code=code)
else:
instance = serializer.save(user=self.request.user, share_code=code)

detail = PhotoDetail(photo=instance)
detail.save()



def get_queryset(self):
folder_id = self.kwargs.get('id', -1)
if int(folder_id) == 0:
return Photo.objects.filter(user=self.request.user, folder=0)
folder = Folder.objects.filter(id=folder_id)
if(folder):
queryset = Photo.objects.filter(user=self.request.user, folder=folder)
queryset = Photo.objects.filter(
user=self.request.user, folder=folder)
else:
queryset = Photo.objects.filter(user=self.request.user)
return queryset
Expand Down Expand Up @@ -182,7 +189,6 @@ class SingleFolderAPIView(RetrieveUpdateDestroyAPIView):
lookup_field = 'id'



class SinglePhotoAPIView(RetrieveUpdateDestroyAPIView):

"""
Expand Down Expand Up @@ -238,11 +244,9 @@ def perform_update(self, serializer):
effect_obj = json.loads(instance.effects)
image_processor.process(effect_obj)
edited_path = image_processor.save()
photo.edited_image = edited_path;
photo.edited_image = edited_path
photo.save()



def get_queryset(self):
photo = Photo.objects.filter(id=self.kwargs.get('id', 0)).first()
return PhotoDetail.objects.filter(photo=photo)
32 changes: 31 additions & 1 deletion app/photos/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-07-01 09:13
# Generated by Django 1.9.2 on 2016-07-15 12:05
from __future__ import unicode_literals

from django.conf import settings
Expand Down Expand Up @@ -30,4 +30,34 @@ class Migration(migrations.Migration):
'ordering': ['-date_created'],
},
),
migrations.CreateModel(
name='Photo',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('image', models.ImageField(blank=True, null=True, upload_to='main')),
('edited_image', models.CharField(default='', max_length=255)),
('share_code', models.CharField(default='', max_length=50)),
('date_modified', models.DateTimeField(auto_now=True)),
('date_created', models.DateTimeField(auto_now_add=True)),
('folder', models.ForeignKey(default=0, on_delete=django.db.models.deletion.CASCADE, to='photos.Folder')),
('user', models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
options={
'ordering': ['-date_created'],
},
),
migrations.CreateModel(
name='PhotoDetail',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(default='', max_length=100)),
('effects', models.TextField(default='')),
('date_modified', models.DateTimeField(auto_now=True)),
('date_created', models.DateTimeField(auto_now_add=True)),
('photo', models.ForeignKey(default=0, on_delete=django.db.models.deletion.CASCADE, to='photos.Photo')),
],
options={
'ordering': ['-date_created'],
},
),
]
32 changes: 0 additions & 32 deletions app/photos/migrations/0002_photo.py

This file was deleted.

20 changes: 0 additions & 20 deletions app/photos/migrations/0003_photo_title.py

This file was deleted.

Loading

0 comments on commit 647d92a

Please sign in to comment.