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\'.')
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:
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,))