class Document( models.Model, object ): # all details comming about a particular picture uploaded # get saved in this table user = models.ForeignKey(User, on_delete=models.CASCADE) status = models.CharField(max_length=7, choices=choice1, default="PUBLIC") width = models.IntegerField(blank=True, default=500, help_text="Enter positive value ") height = models.IntegerField(blank=True, default=500, help_text="Enter positive value ") flip = models.CharField(max_length=17, choices=choice3, default="NONE") rotate = models.CharField(max_length=15, choices=choice4, default='NONE') blur = models.CharField(max_length=5, choices=choice5, default='n') effect = models.IntegerField(choices=choice6, default=1) document = models.ImageField( # upload_to=get_file_name ) uploaded_at = models.DateTimeField(auto_now_add=True) like_or_not = models.IntegerField(default=0) like_user = models.ManyToManyField(User, related_name='hello', blank=True) def __str__(self): return self.user.username def __unicode__(self): # gives a common name to objects return self.document def get_absolute_url(self): return reverse('model_form_upload', kwargs={'pk': self.pk}) def save(self): im = Image.open(self.document) #opens a particular image output = BytesIO() #file is written into memory im = im.resize((self.width, self.height)) if self.flip == 'horizon': im = im.transpose(Image.FLIP_LEFT_RIGHT) elif self.flip == 'vertical': im = im.transpose(Image.FLIP_TOP_BOTTOM) elif self.flip == 'NONE': pass if self.rotate == 'clock': im = im.rotate(270) elif self.rotate == 'anti': im = im.rotate(90) elif self.rotate == 'NONE': pass if self.blur == 'y': im = im.filter(ImageFilter.BLUR) elif self.blur == 'n': pass if self.effect == 1: im = im.convert('RGB') r, g, b = im.split() im = Image.merge('RGB', (r, g, b)) elif self.effect == 2: im = im.convert('RGB') r, g, b = im.split() im = Image.merge('RGB', (b, g, r)) elif self.effect == 3: im = im.convert('RGB') r, g, b = im.split() im = Image.merge('RGB', (g, r, b)) elif self.effect == 4: width, height = im.size for i in range(width): for j in range(height): r, g, b = im.getpixel((i, j)) c = int(round((r + g + b) / 3)) im.putpixel((i, j), (c, c, c)) elif self.effect == 5: im = im.convert('RGB') r, g, b = im.split() im = Image.merge('RGB', (r, b, g)) elif self.effect == 6: im = im.filter(ImageFilter.FIND_EDGES) elif self.effect == 7: im = ImageOps.invert(im) elif self.effect == 8: width, height = im.size for i in range(width): for j in range(height): r, g, b = im.getpixel((i, j)) c = int((round(r + g + b) / 3)) R, G, B = c + 100, c + 100, c im.putpixel((i, j), (R, G, B)) im.save(output, format='JPEG', quality=100) # saving the image into the file in memory # self.document = InMemoryUploadedFile(output, 'ImageField', "%s.jpg" % self.document.name.split('.')[0], # 'image/jpeg', sys.getsizeof(output), None) self.document = InMemoryUploadedFile( output, None, "%s.jpg" % self.document.name.split('.')[0], 'image/jpeg', sys.getsizeof(output), None) temp_name = self.document.name try: this = Document.objects.get(id=self.id) if this.document == self.document: self.document = this.document else: this.document.delete(save=False) except: pass # when new image self.document.save(temp_name, content=ContentFile(output.getvalue()), save=False) print(self.document) super(Document, self).save(force_insert=False, )
def test_update_form_edit(self): """ """ read_group = self._create_group('read') self._create_capability('Read-Scope', [], read_group) # create user and add it to the read group user = self._create_user('john', '123456') user.groups.add(read_group) # create an application self._create_application('john_app', user=user) # Test form with exact app name has error data = {'name': 'john_app'} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertNotEqual(form.errors.get('name'), None) form = CustomAdminApplicationForm(data) form.is_valid() self.assertNotEqual(form.errors.get('name'), None) # Test form with same app name and Uppercase has error data = {'name': 'John_App'} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertNotEqual(form.errors.get('name'), None) # Test form with different app name is OK data = {'name': 'Dave_app'} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertEqual(form.errors.get('name'), None) # Test form with empty app name has error. data = {'name': ''} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertNotEqual(form.errors.get('name'), None) # Test form with website_uri valid URI. data = {'website_uri': 'https://www.example.org'} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertEqual(form.errors.get('website_uri'), None) # Test form with website_uri in-valid URI. data = {'website_uri': 'xyzs:/www.example.org'} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertNotEqual(form.errors.get('website_uri'), None) # Test form with website_uri EMPTY URI is OK. data = {'website_uri': ''} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertEqual(form.errors.get('website_uri'), None) # Test form with empty description. data = {'description': ''} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertEqual(form.errors.get('description'), None) form = CustomAdminApplicationForm(data) form.is_valid() self.assertEqual(form.errors.get('description'), None) # Test form with valid description. data = {'description': 'Testing short description here!'} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertEqual(form.errors.get('description'), None) form = CustomAdminApplicationForm(data) form.is_valid() self.assertEqual(form.errors.get('description'), None) # Test form with description over 1000 characters. data = {'description': 'T' * 1001} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertNotEqual(form.errors.get('description'), None) form = CustomAdminApplicationForm(data) form.is_valid() self.assertEqual(form.errors.get('description'), None) # Test form with description exactly 1000 characters. data = {'description': 'T' * 1000} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertEqual(form.errors.get('description'), None) # Test form with HTML tags in the description. data = { 'description': '<b>Test</b> <button>Test</button> a <span>Test</span>' } form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertNotEqual(form.errors.get('description'), None) form = CustomAdminApplicationForm(data) form.is_valid() self.assertEqual(form.errors.get('description'), None) # Testing valid logo_image with max dimensions file = BytesIO() image = Image.new('RGB', size=(int(settings.APP_LOGO_WIDTH_MAX), int(settings.APP_LOGO_HEIGHT_MAX)), color='red') image.save(file, 'jpeg') file.seek(0) image = InMemoryUploadedFile(file, None, 'test.jpg', 'image/jpeg', len(file.getvalue()), None) data = {} files = {'logo_image': image} form = CustomRegisterApplicationForm(user, data, files) form.is_valid() self.assertEqual(form.errors.get('logo_image'), None) # Testing logo_image exceeding max width file = BytesIO() image = Image.new('RGB', size=(int(settings.APP_LOGO_WIDTH_MAX) + 1, int(settings.APP_LOGO_HEIGHT_MAX)), color='red') image.save(file, 'jpeg') file.seek(0) image = InMemoryUploadedFile(file, None, 'test.jpg', 'image/jpeg', len(file.getvalue()), None) data = {} files = {'logo_image': image} form = CustomRegisterApplicationForm(user, data, files) form.is_valid() self.assertNotEqual(form.errors.get('logo_image'), None) form = CustomAdminApplicationForm(data, files) form.is_valid() self.assertNotEqual(form.errors.get('logo_image'), None) # Testing logo_image exceeding max height file = BytesIO() image = Image.new('RGB', size=(int(settings.APP_LOGO_WIDTH_MAX), int(settings.APP_LOGO_HEIGHT_MAX) + 1), color='red') image.save(file, 'jpeg') file.seek(0) image = InMemoryUploadedFile(file, None, 'test.jpg', 'image/jpeg', len(file.getvalue()), None) data = {} files = {'logo_image': image} form = CustomRegisterApplicationForm(user, data, files) form.is_valid() self.assertNotEqual(form.errors.get('logo_image'), None) form = CustomAdminApplicationForm(data, files) form.is_valid() self.assertNotEqual(form.errors.get('logo_image'), None) # Testing logo_image not JPEG type file = BytesIO() image = Image.new('RGB', size=(50, 50), color='red') image.save(file, 'png') file.seek(0) image = InMemoryUploadedFile(file, None, 'test.png', 'image/png', len(file.getvalue()), None) data = {} files = {'logo_image': image} form = CustomRegisterApplicationForm(user, data, files) form.is_valid() self.assertNotEqual(form.errors.get('logo_image'), None) form = CustomAdminApplicationForm(data, files) form.is_valid() self.assertNotEqual(form.errors.get('logo_image'), None) # Test require_demographic_scopes value True data = {'require_demographic_scopes': True} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertEqual(form.errors.get('require_demographic_scopes'), None) # Test require_demographic_scopes value False data = {'require_demographic_scopes': False} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertEqual(form.errors.get('require_demographic_scopes'), None) # Test require_demographic_scopes invalid value data = {'require_demographic_scopes': None} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertNotEqual(form.errors.get('require_demographic_scopes'), None) # Base set of passing data fields passing_app_fields = { 'name': 'john_app_new', 'client_type': 'confidential', 'authorization_grant_type': 'authorization-code', 'redirect_uris': 'http://localhost:8000/social-auth/complete/oauth2io/', 'logo_uri': '', 'logo_image': '', 'website_uri': '', 'description': '', 'policy_uri': '', 'tos_uri': '', 'support_email': '', 'support_phone_number': '', 'contacts': '', 'require_demographic_scopes': True, 'agree': True } # Test that passing_app_fields are OK/valid. form = CustomRegisterApplicationForm(user, passing_app_fields) self.assertTrue(form.is_valid()) # Test client_type = 'confidential' and authorization_grant_type = 'implicit' not allowed. data = passing_app_fields data['client_type'] = 'confidential' data['authorization_grant_type'] = 'implicit' form = CustomRegisterApplicationForm(user, data) self.assertFalse(form.is_valid()) self.assertIn( 'Only a confidential client and authorization-code grant type are allowed at this time.', str(form.errors.get('__all__'))) # Test client_type = 'public' and grant_type = 'authorization-code' not allowed. data = passing_app_fields data['client_type'] = 'public' data['authorization_grant_type'] = 'authorization-code' form = CustomRegisterApplicationForm(user, data) self.assertFalse(form.is_valid()) self.assertIn( 'Only a confidential client and authorization-code grant type are allowed at this time.', str(form.errors.get('__all__'))) # Test client_type = 'public' and grant_type = 'implicit' not allowed. data = passing_app_fields data['client_type'] = 'public' data['authorization_grant_type'] = 'implicit' form = CustomRegisterApplicationForm(user, data) self.assertFalse(form.is_valid()) self.assertIn( 'Only a confidential client and authorization-code grant type are allowed at this time.', str(form.errors.get('__all__')))
def test_update_form_edit(self): """ """ read_group = self._create_group('read') self._create_capability('Read-Scope', [], read_group) # create user and add it to the read group user = self._create_user('john', '123456') user.groups.add(read_group) # create an application self._create_application('john_app', user=user) # Test form with exact app name has error data = {'name': 'john_app'} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertNotEqual(form.errors.get('name'), None) form = CustomAdminApplicationForm(data) form.is_valid() self.assertNotEqual(form.errors.get('name'), None) # Test form with same app name and Uppercase has error data = {'name': 'John_App'} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertNotEqual(form.errors.get('name'), None) # Test form with different app name is OK data = {'name': 'Dave_app'} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertEqual(form.errors.get('name'), None) # Test form with empty app name has error. data = {'name': ''} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertNotEqual(form.errors.get('name'), None) # Test form with website_uri valid URI. data = {'website_uri': 'https://www.example.org'} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertEqual(form.errors.get('website_uri'), None) # Test form with website_uri in-valid URI. data = {'website_uri': 'xyzs:/www.example.org'} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertNotEqual(form.errors.get('website_uri'), None) # Test form with website_uri EMPTY URI is OK. data = {'website_uri': ''} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertEqual(form.errors.get('website_uri'), None) # Test form with empty description. data = {'description': ''} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertEqual(form.errors.get('description'), None) form = CustomAdminApplicationForm(data) form.is_valid() self.assertEqual(form.errors.get('description'), None) # Test form with valid description. data = {'description': 'Testing short description here!'} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertEqual(form.errors.get('description'), None) form = CustomAdminApplicationForm(data) form.is_valid() self.assertEqual(form.errors.get('description'), None) # Test form with description over 1000 characters. data = {'description': 'T' * 1001} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertNotEqual(form.errors.get('description'), None) form = CustomAdminApplicationForm(data) form.is_valid() self.assertEqual(form.errors.get('description'), None) # Test form with description exactly 1000 characters. data = {'description': 'T' * 1000} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertEqual(form.errors.get('description'), None) # Test form with HTML tags in the description. data = {'description': '<b>Test</b> <button>Test</button> a <span>Test</span>'} form = CustomRegisterApplicationForm(user, data) form.is_valid() self.assertNotEqual(form.errors.get('description'), None) form = CustomAdminApplicationForm(data) form.is_valid() self.assertEqual(form.errors.get('description'), None) # Testing valid logo_image with max dimensions file = BytesIO() image = Image.new('RGB', size=(int(settings.APP_LOGO_WIDTH_MAX), int(settings.APP_LOGO_HEIGHT_MAX)), color='red') image.save(file, 'jpeg') file.seek(0) image = InMemoryUploadedFile( file, None, 'test.jpg', 'image/jpeg', len(file.getvalue()), None ) data = {} files = {'logo_image': image} form = CustomRegisterApplicationForm(user, data, files) form.is_valid() self.assertEqual(form.errors.get('logo_image'), None) # Testing logo_image exceeding max width file = BytesIO() image = Image.new('RGB', size=(int(settings.APP_LOGO_WIDTH_MAX) + 1, int(settings.APP_LOGO_HEIGHT_MAX)), color='red') image.save(file, 'jpeg') file.seek(0) image = InMemoryUploadedFile( file, None, 'test.jpg', 'image/jpeg', len(file.getvalue()), None ) data = {} files = {'logo_image': image} form = CustomRegisterApplicationForm(user, data, files) form.is_valid() self.assertNotEqual(form.errors.get('logo_image'), None) form = CustomAdminApplicationForm(data, files) form.is_valid() self.assertNotEqual(form.errors.get('logo_image'), None) # Testing logo_image exceeding max height file = BytesIO() image = Image.new('RGB', size=(int(settings.APP_LOGO_WIDTH_MAX), int(settings.APP_LOGO_HEIGHT_MAX) + 1), color='red') image.save(file, 'jpeg') file.seek(0) image = InMemoryUploadedFile( file, None, 'test.jpg', 'image/jpeg', len(file.getvalue()), None ) data = {} files = {'logo_image': image} form = CustomRegisterApplicationForm(user, data, files) form.is_valid() self.assertNotEqual(form.errors.get('logo_image'), None) form = CustomAdminApplicationForm(data, files) form.is_valid() self.assertNotEqual(form.errors.get('logo_image'), None) # Testing logo_image not JPEG type file = BytesIO() image = Image.new('RGB', size=(50, 50), color='red') image.save(file, 'png') file.seek(0) image = InMemoryUploadedFile( file, None, 'test.png', 'image/png', len(file.getvalue()), None ) data = {} files = {'logo_image': image} form = CustomRegisterApplicationForm(user, data, files) form.is_valid() self.assertNotEqual(form.errors.get('logo_image'), None) form = CustomAdminApplicationForm(data, files) form.is_valid() self.assertNotEqual(form.errors.get('logo_image'), None)
def compile_project(request, project_identifier): pdf_instances = None collection = None ctx = {} unknown_error = None if request.method == "POST": form = CollectionCreateForm(request.POST, request.FILES) if form.is_valid(): form_zip_file = request.FILES.get("zip_file") compiler = form.cleaned_data["compiler"] _md5 = hashlib.md5(form_zip_file.read()).hexdigest() zip_file_hash = "%s_%s" % (_md5, compiler) project, created = LatexProject.objects.get_or_create( identifier=project_identifier, creator=request.user) collection_qset = LatexCollection.objects.filter( project=project, zip_file_hash=zip_file_hash) collection = None pdf_instances = None if collection_qset.count(): assert collection_qset.count() == 1 collection = collection_qset[0] pdf_instances = LatexPdf.objects.filter(project=project, collection=collection) if collection is None: collection = LatexCollection(project=project, zip_file_hash=zip_file_hash) working_dir = tempfile.mkdtemp() print(working_dir) with zipfile.ZipFile(form_zip_file, "r") as zf: zf.extractall(working_dir) try: compiled_pdf_dict = unzipped_folder_to_pdf_converter( working_dir, compiler=compiler) except Exception as e: from traceback import print_exc print_exc() tp, err, __ = sys.exc_info() error_str = "%s: %s" % (tp.__name__, str(err)) if isinstance(e, LatexCompileError): collection.compile_error = error_str with atomic(): collection.save() else: unknown_error = ctx["unknown_error"] = error_str else: with atomic(): collection.save() for (filename, filepath) in compiled_pdf_dict.items(): with open(filepath, "rb") as f: buff = io.BytesIO(f.read()) pdf = InMemoryUploadedFile( file=buff, field_name='file', name=filename, content_type="application/pdf", size=buff.tell(), charset=None) mediabox = get_pdf_mediabox(filepath) print(mediabox) pdf = LatexPdf(project=project, collection=collection, name=filename, pdf=pdf, mediabox=mediabox) with atomic(): pdf.save() pdf_instances = LatexPdf.objects.filter( project=project, collection=collection) finally: shutil.rmtree(working_dir) else: form = CollectionCreateForm() ctx["form"] = form ctx["form_description"] = _("Convert Zipped LaTeX code to Pdf") ctx["collection"] = collection ctx["pdfs"] = pdf_instances render_kwargs = { "request": request, "template_name": "latex/project_update.html", "context": ctx } if collection is not None: if collection.compile_error: render_kwargs["status"] = status.HTTP_400_BAD_REQUEST if unknown_error: render_kwargs["status"] = status.HTTP_500_INTERNAL_SERVER_ERROR return render(**render_kwargs)