taskapp/forms/user.py
changeset 206 85660d75683d
parent 141 2489392ffb56
child 213 a01078a9bbcf
--- a/taskapp/forms/user.py	Thu Mar 04 19:08:47 2010 +0530
+++ b/taskapp/forms/user.py	Fri Mar 05 15:13:37 2010 +0530
@@ -1,5 +1,10 @@
 #!/usr/bin/python2.5
 
+import os
+import PIL
+
+from pytask.taskapp.utilities.helper import get_key
+
 from django import forms
 from pytask.taskapp.models import GENDER_CHOICES, Profile
 from registration.forms import RegistrationFormUniqueEmail
@@ -12,6 +17,28 @@
         model = Profile
         exclude = ('user','rights','dob','credits')
 
+    def clean_photo(self):
+        uploaded_photo = self.data.get('photo', None)
+        prev_photo = self.instance.photo
+        if uploaded_photo:
+            if uploaded_photo.size > 1048576:
+                raise forms.ValidationError('Images only smaller than 1MB allowed')
+            tmp_im_path = '/tmp/'+get_key()
+            tmp_file = open(tmp_im_path, 'w')
+            tmp_file.write(uploaded_photo.read())
+            tmp_file.close()
+            try:
+                PIL.Image.open(tmp_im_path)
+            except IOError:
+                raise forms.ValidationError('Image format unknown')
+            os.remove(tmp_im_path)
+
+            if prev_photo: os.remove(prev_photo.path)
+            return uploaded_photo
+        else:
+            return prev_photo
+
+
 class RegistrationFormCustom(RegistrationFormUniqueEmail):
     """Used instead of RegistrationForm used by default django-registration backend, this adds date of birth and gender to the default django-registration RegistrationForm"""