def processInspectionFields(self, request): post_request = request.POST ro_number = request.POST.get("ro_number") category_items_dict = {} try: ro = RO.objects.get(ro_number=ro_number) ro.inspector = request.user ro.inspection_status = "Completed" ro.save() for key, value in post_request.iteritems(): if key == "ro_number" or key == "package": continue attr, category_id, item_id = key.split("_") if category_id + "_" + item_id in category_items_dict: category_items_dict[category_id + "_" + item_id][attr] = value else: category_items_dict[category_id + "_" + item_id] = { attr: value } for key, value in category_items_dict.iteritems(): category_id, item_id = key.split("_") category_item = InspectionCategoriesItems.objects.get( category__id=category_id, item__id=item_id) ro_inspection = RoInspection.objects.filter( inspection=category_item, ro=ro) if len(ro_inspection) < 1: ro_inspection = RoInspection() ro_inspection.inspection = category_item ro_inspection.ro = ro else: ro_inspection = ro_inspection[0] for attr, val in value.iteritems(): if attr == "image": import uuid val = ContentFile(b64decode(val.split(",")[1]), uuid.uuid1().hex + ".png") ro_inspection.__setattr__(attr, val) ro_inspection.save() # postRequset = request.POST # user = request.user # post_dict ={} # # print request.POST # try: # for key,value in postRequset.iteritems(): # if key =="roNumber": # continue # id,val =key.split("_")[1:] # if int(id) in post_dict: # post_dict.get(int(id)).update({val : value}) # else: # post_dict[int(id)] = {val : value} # self.getInspectionCategoriesObjectsById(post_dict) # self.saveRoInspection(post_dict,postRequset.get("roNumber"),user) except Exception as e: print e
def from_native(self, data): if isinstance(data, basestring) and data.startswith('data:application/pdf'): pdfformat, pdfstr = data.split(';base64,') # format ~= data:image/X, ext = pdfformat.split('/')[-1] # guess file extension data = ContentFile(base64.b64decode(pdfstr), name=str(uuid.uuid4()) + "." + ext) if isinstance(data, basestring) and data.startswith('data:image'): # base64 encoded image - decode format, imgstr = data.split(';base64,') # format ~= data:image/X, ext = format.split('/')[-1] # guess file extension raw_data = ContentFile(base64.b64decode(imgstr), name='temp.' + ext) img = Image.open(raw_data) output = StringIO.StringIO() #temporarily mess w/ image in memory t_dim = (1600,1600) i_dim = img.size compare_image_to_thumb = [(i_dim > t_dim) for i_dim, t_dim in zip(i_dim,t_dim)] if True in compare_image_to_thumb: t_dim = (1600,1600) #TODO: Remove stupid repeat variable img.thumbnail(t_dim, Image.ANTIALIAS) # try to get image exif and flip here on the server try: for orientation in ExifTags.TAGS.keys() : if ExifTags.TAGS[orientation] == 'Orientation' : break imgExif = img._getexif() if imgExif is not None : exif = dict(imgExif.items()) if exif[orientation] == 3 : img = img.rotate(180, expand=True) elif exif[orientation] == 6 : img = img.rotate(-90, expand=True) elif exif[orientation] == 8 : img = img.rotate(90, expand=True) except: traceback.print_exc() img.save(output,'png') output.seek(0) converted_data = output.read() data = ContentFile(converted_data, name=str(uuid.uuid4()) + "." + ext) return super(Base64FileField, self).from_native(data)
def to_python(self, data): if data: data = ContentFile(base64.b64decode(data.split(',')[1])) data.name = 'Image.png' return super(PhotoField, self).to_python(data)