Example #1
0
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__')))
Example #3
0
    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)
Example #4
0
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)