def _clone_database(request, database): can_be_cloned, error = database.can_be_cloned() if error: messages.add_message(request, messages.ERROR, error) return if 'clone_name' not in request.POST: messages.add_message(request, messages.ERROR, 'Destination is required') return if 'clone_env' not in request.POST: messages.add_message(request, messages.ERROR, 'Environment is required') return if 'clone_plan' not in request.POST: messages.add_message(request, messages.ERROR, 'Plan is required') return name = request.POST['clone_name'] environment = Environment.objects.get(id=request.POST['clone_env']) plan = Plan.objects.get(id=request.POST['clone_plan']) current = len(database.team.databases_in_use_for(environment)) if current >= database.team.database_alocation_limit: messages.add_message( request, messages.ERROR, 'The database allocation limit of %s has been exceeded for the ' 'team: {} => {}'.format( current, database.team.database_alocation_limit ) ) return if name in database.infra.get_driver().RESERVED_DATABASES_NAME: messages.add_message( request, messages.ERROR, '{} is a reserved database name'.format(name) ) return if len(name) > 40: messages.add_message(request, messages.ERROR, 'Database name too long') return if Database.objects.filter(name=name, environment=environment): messages.add_message( request, messages.ERROR, 'There is already a database called {} on {}'.format( name, environment ) ) return Database.clone( database=database, clone_name=name, plan=plan, environment=environment, user=request.user )
def _clone_database(request, database): can_be_cloned, error = database.can_be_cloned() if error: messages.add_message(request, messages.ERROR, error) return if 'clone_name' not in request.POST: messages.add_message(request, messages.ERROR, 'Destination is required') return if 'clone_env' not in request.POST: messages.add_message(request, messages.ERROR, 'Environment is required') return if 'clone_plan' not in request.POST: messages.add_message(request, messages.ERROR, 'Plan is required') return name = request.POST['clone_name'] environment = Environment.objects.get(id=request.POST['clone_env']) plan = Plan.objects.get(id=request.POST['clone_plan']) current = len(database.team.databases_in_use_for(environment)) if current >= database.team.database_alocation_limit: messages.add_message( request, messages.ERROR, 'The database allocation limit of %s has been exceeded for the ' 'team: {} => {}'.format( current, database.team.database_alocation_limit ) ) return if name in database.infra.get_driver().RESERVED_DATABASES_NAME: messages.add_message( request, messages.ERROR, '{} is a reserved database name'.format(name) ) return if len(name) > 40: messages.add_message(request, messages.ERROR, 'Database name too long') return if Database.objects.filter(name=name, environment=environment): messages.add_message( request, messages.ERROR, 'There is already a database called {} on {}'.format( name, environment ) ) return Database.clone( database=database, clone_name=name, plan=plan, environment=environment, user=request.user )
def clone_view(self, request, database_id): database = Database.objects.get(id=database_id) can_be_cloned, error = database.can_be_cloned() if not can_be_cloned: self.message_user(request, error, level=messages.ERROR) url = reverse('admin:logical_database_changelist') return HttpResponseRedirect(url) if database.is_beeing_used_elsewhere(): self.message_user( request, "Database cannot be cloned because it is in use by another task.", level=messages.ERROR) url = reverse('admin:logical_database_changelist') return HttpResponseRedirect(url) form = None if request.method == 'POST': # If the form has been submitted... # A form bound to the POST data form = CloneDatabaseForm(request.POST) if form.is_valid(): # All validation rules pass # Process the data in form.cleaned_data database_clone = form.cleaned_data['database_clone'] plan = form.cleaned_data['plan'] environment = form.cleaned_data['environment'] Database.clone(database=database, clone_name=database_clone, plan=plan, environment=environment, user=request.user) url = reverse('admin:notification_taskhistory_changelist') # Redirect after POST return HttpResponseRedirect(url + "?user=%s" % request.user.username) else: form = CloneDatabaseForm( initial={"origin_database_id": database_id}) # An unbound form return render_to_response("logical/database/clone.html", locals(), context_instance=RequestContext(request))