import time import gzip import shutil import hashlib from django.core.exceptions import ValidationError def format_pace_tick(x,pos=None): min=int(x/60) sec=int(x-min*60.) sec_str=str(sec).zfill(2) template='%d:%s' return template % (min,sec_str) def format_time_tick(x,pos=None): hour=int(x/3600) min=int((x-hour*3600.)/60) min_str=str(min).zfill(2) template='%d:%s' return template % (hour,min_str) def format_pace(x,pos=None): if isinf(x) or isnan(x): x=0 min=int(x/60) sec=(x-min*60.) str1 = "{min:0>2}:{sec:0>4.1f}".format( min = min, sec = sec ) return str1 def format_time(x,pos=None): min = int(x/60.) sec = int(x-min*60) str1 = "{min:0>2}:{sec:0>4.1f}".format( min=min, sec=sec, ) return str1 def validate_image_extension(value): import os ext = os.path.splitext(value.name)[1].lower() valid_extension = ['.jpg','.jpeg','.png','.gif'] if not ext in valid_extension: raise ValidationError(u'File not supported') def validate_file_extension(value): import os ext = os.path.splitext(value.name)[1] valid_extensions = ['.tcx','.csv','.TCX', '.CSV','.fit','.FIT','.zip','.ZIP', '.gz','.GZ','.xls'] if not ext in valid_extensions: raise ValidationError(u'File not supported!') def must_be_csv(value): import os ext = os.path.splitext(value.name)[1] valid_extensions = ['.csv','.CSV'] if not ext in valid_extensions: raise ValidationError(u'File not supported!') def validate_kml(value): import os ext = os.path.splitext(value.name)[1] valid_extensions = ['.kml','.KML'] if not ext in valid_extensions: raise ValidationError(u'File not supported!') def handle_uploaded_image(i): import StringIO from PIL import Image, ImageOps, ExifTags import os from django.core.files import File image_str = "" for chunk in i.chunks(): image_str += chunk imagefile = StringIO.StringIO(image_str) image = Image.open(i) try: for orientation in ExifTags.TAGS.keys(): if ExifTags.TAGS[orientation]=='Orientation': break exif=dict(image._getexif().items()) except (AttributeError, KeyError, IndexError): # cases: image don't have getexif exif = {'orientation':0} if image.mode not in ("L", "RGB"): image = image.convert("RGB") basewidth = 600 wpercent = (basewidth/float(image.size[0])) hsize = int((float(image.size[1])*float(wpercent))) image = image.resize((basewidth,hsize), Image.ANTIALIAS) if exif[orientation] == 3: image=image.rotate(180, expand=True) elif exif[orientation] == 6: image=image.rotate(270, expand=True) elif exif[orientation] == 8: image=image.rotate(90, expand=True) filename = hashlib.md5(imagefile.getvalue()).hexdigest()+'.jpg' filename2 = os.path.join('static/plots/',filename) image.save(filename2,'JPEG') return filename,filename2 def handle_uploaded_file(f): fname = f.name timestr = time.strftime("%Y%m%d-%H%M%S") fname = timestr+'-'+fname fname2 = 'media/'+fname with open(fname2,'wb+') as destination: for chunk in f.chunks(): destination.write(chunk) return fname,fname2