Пример #1
0
 def form_valid(self, form):
     """Override form_valid to perform additional actions on new entries."""
     codename_verified = False
     while not codename_verified:
         new_codename = codenames.codename(uppercase=True)
         try:
             Client.objects.filter(codename__iequal=new_codename)
         except Exception:
             codename_verified = True
     form.instance.codename = new_codename
     return super().form_valid(form)
Пример #2
0
def assign_project_codename(request, pk):
    """View function for assigning a codename to a project."""
    project_instance = Project.objects.get(id=pk)
    codename_verified = False
    while not codename_verified:
        new_codename = codenames.codename(uppercase=True)
        try:
            Project.objects.filter(codename__iequal=new_codename)
        except Exception:
            codename_verified = True
    project_instance.codename = new_codename
    project_instance.save()
    # Redirect to the project's details page
    return HttpResponseRedirect(reverse('rolodex:project_detail', args=(pk, )))
Пример #3
0
    def form_valid(self, form):
        # Generate and assign a unique codename to the project
        codename_verified = False
        while not codename_verified:
            new_codename = codenames.codename(uppercase=True)
            try:
                Project.objects.filter(codename__iequal=new_codename)
            except Exception:
                codename_verified = True
        form.instance.codename = new_codename

        # Get form context data – used for validation of inline forms
        ctx = self.get_context_data()
        objectives = ctx["objectives"]
        assignments = ctx["assignments"]

        # Now validate inline formsets
        # Validation is largely handled by the custom base formset, ``BaseProjectInlineFormSet``
        try:
            with transaction.atomic():
                # Save the parent form – will rollback if a child fails validation
                self.object = form.save()

                objectives_valid = objectives.is_valid()
                if objectives_valid:
                    objectives.instance = self.object
                    objectives_object = objectives.save()

                assignments_valid = assignments.is_valid()
                if assignments_valid:
                    assignments.instance = self.object
                    assignments.save()

                if form.is_valid() and objectives_valid and assignments_valid:
                    return super().form_valid(form)
                else:
                    # Raise an error to rollback transactions
                    raise forms.ValidationError(_("Invalid form data"))
        # Otherwise return `form_invalid` and display errors
        except Exception as exception:
            template = "An exception of type {0} occurred. Arguments:\n{1!r}"
            message = template.format(type(exception).__name__, exception.args)
            logger.error(message)
            return super(ProjectCreate, self).form_invalid(form)
Пример #4
0
    def post(self, *args, **kwargs):
        self.object = self.get_object()
        try:
            old_codename = self.object.codename
            codename_verified = False
            while not codename_verified:
                new_codename = codenames.codename(uppercase=True)
                try:
                    Project.objects.filter(codename__iequal=new_codename)
                except Exception:
                    codename_verified = True
            self.object.codename = new_codename
            self.object.save()
            data = {
                "result": "success",
                "message": "Codename successfuly updated",
                "codename": new_codename,
            }
            logger.info(
                "Updated codename of %s %s from %s to %s by request of %s",
                self.object.__class__.__name__,
                self.object.id,
                old_codename,
                new_codename,
                self.request.user,
            )
        except Exception as exception:
            template = "An exception of type {0} occurred. Arguments:\n{1!r}"
            log_message = template.format(
                type(exception).__name__, exception.args)
            logger.error(log_message)
            data = {
                "result": "error",
                "message": "Could not update project's codename"
            }

        return JsonResponse(data)