Exemple #1
0
 def get_context_data(self, **kwargs):
     context = super(ChangesetList, self).get_context_data(**kwargs)
     user = self.request.user.schemanizer_user
     changeset_qs = self.get_queryset()
     changeset_list = []
     for changeset in changeset_qs:
         extra=dict(
             can_apply=privileges_logic.can_user_apply_changeset(user, changeset),
             can_review=privileges_logic.can_user_review_changeset(user, changeset))
         changeset_list.append(dict(changeset=changeset, extra=extra))
     context['changeset_list'] = changeset_list
     return context
def start_changeset_review_thread(changeset, schema_version, user):
    """Reviews changeset."""

    changeset = get_model_instance(changeset, Changeset)
    schema_version = get_model_instance(
        schema_version, SchemaVersion)
    user = get_model_instance(user, User)

    #if changeset_can_be_reviewed_by_user(changeset, user):
    #    thread = ReviewThread(changeset, schema_version, request_id, user, server)
    #    thread.start()
    #    return thread
    if privileges_logic.can_user_review_changeset(user, changeset):
        thread = ChangesetReviewThread(changeset, schema_version, user)
        thread.start()
        return thread
    else:
        raise PrivilegeError(
            u'User is not allowed to set review status to \'in_progress\'.')
Exemple #3
0
def changeset_view(request, id, template='changesets/changeset_view.html'):
    user_has_access = False
    try:
        user = request.user.schemanizer_user
        user_has_access = user.role.name in (
            users_models.Role.NAME.developer,
            users_models.Role.NAME.dba,
            users_models.Role.NAME.admin)

        if user_has_access:
            id = int(id)
            changeset = models.Changeset.objects.select_related().get(id=id)

            if request.method == 'POST':
                try:
                    if u'submit_update' in request.POST:
                        #
                        # Update changeset
                        #
                        return redirect(
                            'changesets_changeset_update', changeset.id)

                    elif u'submit_review' in request.POST:
                        #
                        # Set changeset review status to 'in_progress'
                        #
                        return redirect(
                            'changesetreviews_changeset_review',
                            changeset.id)

                    elif u'submit_approve' in request.POST:
                        #
                        # Approve changeset.
                        #
                        changeset_functions.approve_changeset(
                            changeset=changeset, approved_by=user,
                            request=request)
                        return redirect(
                            'changesets_changeset_view', changeset.pk)

                    elif u'submit_reject' in request.POST:
                        #
                        # Reject changeset.
                        #
                        changeset_functions.reject_changeset(
                            changeset=changeset, rejected_by=user,
                            request=request)
                        return redirect(
                            'changesets_changeset_view', changeset.pk)

                    elif u'submit_delete' in request.POST:
                        #
                        # Delete changeset.
                        #
                        return redirect(
                            'changesets_changeset_soft_delete',
                            changeset.id)

                    elif u'submit_apply' in request.POST:
                        #
                        # Apply changeset
                        #
                        return redirect(
                            'changesetapplies_changeset_apply',
                            changeset.id)

                    else:
                        messages.error(request, u'Unknown command.')
                        log.error(
                            u'Invalid post.\nrequest.POST=\n%s' % (
                                pformat(request.POST),))

                except Exception, e:
                    log.exception('EXCEPTION')
                    messages.error(request, u'%s' % (e,))

            changeset_applies = (
                changesetapplies_models.ChangesetApply.objects.filter(
                    changeset=changeset))

            changeset_action_qs = models.ChangesetAction.objects.filter(
                changeset=changeset)
            changeset_actions = []
            for changeset_action in changeset_action_qs:
                changeset_action_server_map_qs = (
                    models.ChangesetActionServerMap.objects.filter(
                        changeset_action=changeset_action))
                changeset_action_server_map = None
                if changeset_action_server_map_qs.exists():
                    changeset_action_server_map = (
                        changeset_action_server_map_qs[0])
                type_col = changeset_action.type

                changeset_applies_url = None
                changeset_apply_qs = changesetapplies_models.ChangesetApply.objects.filter(
                    changeset_action=changeset_action)
                if changeset_apply_qs.exists():
                    changeset_apply = changeset_apply_qs[0]
                    if changeset_apply.task_id:
                        changeset_applies_url = '%s?%s' % (
                            reverse('changesetapplies_changeset_applies'),
                            urllib.urlencode(
                                dict(task_id=changeset_apply.task_id)))

                if (
                        type_col == models.ChangesetAction.TYPE_APPLIED and
                        changeset_action_server_map):
                    server = changeset_action_server_map.server
                    server_name = server.name
                    environment_name = None
                    if server.environment:
                        environment_name = server.environment.name
                    type_col = (
                        u'%s (server: %s, environment: %s)' % (
                            type_col, server_name, environment_name))
                elif(
                        type_col == models.ChangesetAction.TYPE_APPLIED_FAILED and
                        changeset_action_server_map):
                    server = changeset_action_server_map.server
                    server_name = server.name
                    environment_name = None
                    if server.environment:
                        environment_name = server.environment.name
                    type_col = (
                        u'%s (server: %s, environment: %s)' % (
                            type_col, server_name, environment_name))


                changeset_actions.append(
                    dict(
                        changeset_action=changeset_action,
                        changeset_action_server_map=
                        changeset_action_server_map,
                        type=type_col,
                        changeset_applies_url=changeset_applies_url))

            user_privileges = privileges_logic.UserPrivileges(user)
            can_update = user_privileges.can_update_changeset(changeset)
            can_set_review_status_to_in_progress = (
                privileges_logic.can_user_review_changeset(user, changeset))
            can_approve = user_privileges.can_approve_changeset(changeset)
            can_reject = user_privileges.can_reject_changeset(changeset)
            can_soft_delete = (
                privileges_logic.UserPrivileges(user)
                .can_soft_delete_changeset(changeset))
            can_apply = privileges_logic.can_user_apply_changeset(
                user, changeset)

            if (
                    changeset.review_status in [
                        models.Changeset.REVIEW_STATUS_IN_PROGRESS,
                        models.Changeset.REVIEW_STATUS_APPROVED,
                        models.Changeset.REVIEW_STATUS_REJECTED]
                    ):
                show_changeset_detail_test_status = True

        else:
Exemple #4
0
def changeset_review(request, changeset_id, template="changesetreviews/changeset_review.html"):
    user_has_access = False
    try:
        request_id = helpers.generate_request_id(request)
        changeset = changesets_models.Changeset.objects.get(pk=int(changeset_id))
        user = request.user.schemanizer_user
        user_has_access = privileges_logic.can_user_review_changeset(user, changeset)
        schema_version = request.GET.get("schema_version", None)
        if schema_version:
            schema_version = schemaversions_models.SchemaVersion.objects.get(pk=int(schema_version))

        if user_has_access:
            if request.method == "POST":

                if u"select_schema_version_form_submit" in request.POST:
                    #
                    # process select schema version form submission
                    #
                    select_schema_version_form = forms.SelectSchemaVersionForm(
                        request.POST, database_schema=changeset.database_schema
                    )
                    if select_schema_version_form.is_valid():
                        schema_version_pk = int(select_schema_version_form.cleaned_data["schema_version"])
                        schema_version = schemaversions_models.SchemaVersion.objects.get(pk=schema_version_pk)
                        changeset.review_version = schema_version
                        changeset.save()

                        tasks.review_changeset.delay(
                            changeset_pk=changeset.pk, schema_version_pk=schema_version.pk, reviewed_by_user_pk=user.pk
                        )
                        messages.info(
                            request,
                            u"Changeset review has been started, email will "
                            u"be sent to interested parties when review "
                            u"procedure is completed.",
                        )

                        return redirect("changesetreviews_changeset_reviews")

                else:
                    #
                    # Invalid POST.
                    #
                    messages.error(request, u"Unknown command.")

            else:
                # #
                # # GET
                # #
                #
                # if schema_version:
                #     #
                #     # User has selected a schema version already,
                #     # proceed with changeset review.
                #     #
                #     thread = changeset_review_logic.start_changeset_review_thread(
                #         changeset, schema_version, user)
                #     review_threads[request_id] = thread
                #     thread_started = True
                #
                # else:
                #     #
                #     # No schema version was selected yet,
                #     # ask one from user
                #     #
                select_schema_version_form = forms.SelectSchemaVersionForm(database_schema=changeset.database_schema)

        else:
            messages.error(request, MSG_USER_NO_ACCESS)

    except Exception, e:
        log.exception("EXCEPTION")
        messages.error(request, u"%s" % (e,))