def project_detail(request, project_id): project = get_object_or_404(Project, id=project_id) if not project.can_view(request): return HttpResponseForbidden('<h1>Access Denied</h1>') form = AddPersonForm(request.POST or None) if request.method == 'POST': # Post means adding a user to this project if form.is_valid(): person = form.cleaned_data['person'] add_user_to_project(person, project) messages.success( request, "User '%s' was added to %s succesfully" % (person, project)) return HttpResponseRedirect(project.get_absolute_url()) return render(template_name='karaage/projects/project_detail.html', context={ 'project': project, 'form': form, 'can_edit': project.can_edit(request) }, request=request)
def user_detail(request, username): person = get_object_or_404(Person, user__username=username) my_projects = person.project_set.all() my_pids = [p.pid for p in my_projects] not_project_list = Project.active.exclude(pid__in=my_pids) #Add to project form if request.method == 'POST' and 'project-add' in request.POST: # Post means adding this user to a project data = request.POST.copy() project = Project.objects.get(pk=data['project']) no_account_error = '' for mc in project.machine_categories.all(): if not person.has_account(mc): no_account_error = "%s has no account on %s. Please create one first" % (person, project.machine_category) break if not no_account_error: add_user_to_project(person, project) messages.success(request, "User '%s' was added to %s succesfully" % (person, project)) log(request.user, project, 2, '%s added to project' % person) #change shell form shell_form = ShellForm() try: shell_form.initial = {'shell': person.loginShell()} except: pass return render_to_response('people/person_detail.html', locals(), context_instance=RequestContext(request))
def test_default_project(self): project_orig = ProjectFactory() account = AccountFactory(default_project=project_orig) ProjectQuotaFactory(project=project_orig, machine_category=account.machine_category) project = ProjectFactory() ProjectQuotaFactory(project=project, machine_category=account.machine_category) # TODO (RS) why the hell isn't this account a member of the # default project? add_user_to_project(account.person, project_orig) add_user_to_project(account.person, project) self.client.login(username=account.person.username, password='******') response = self.client.get(reverse('kg_user_profile_projects')) self.assertEqual(response.status_code, 200) self.assertTrue(re.search(r'<strong>Default:</strong>[\s]+%s' % project_orig.name, response.content, re.MULTILINE)) response = self.client.post(reverse('kg_account_set_default', args=(account.id, project.pid)), {'next': reverse('kg_user_profile_projects')}, follow=True) self.assertEqual(response.status_code, 200) self.assertEqual(response.redirect_chain, [('http://testserver/profile/projects/', 302)]) self.assertTrue(re.search(r'<strong>Default:</strong>[\s]+%s' % project.name, response.content, re.MULTILINE))
def project_detail(request, project_id): project = get_object_or_404(Project, id=project_id) if not project.can_view(request): return HttpResponseForbidden('<h1>Access Denied</h1>') form = AddPersonForm(request.POST or None) if request.method == 'POST': # Post means adding a user to this project if form.is_valid(): person = form.cleaned_data['person'] add_user_to_project(person, project) messages.success( request, "User '%s' was added to %s succesfully" % (person, project)) return HttpResponseRedirect(project.get_absolute_url()) return render( template_name='karaage/projects/project_detail.html', context={ 'project': project, 'form': form, 'can_edit': project.can_edit(request) }, request=request)
def project_detail(request, project_id): project = get_object_or_404(Project, pid=project_id) allocations = Allocation.objects.filter(grant__project=project) if not project.can_view(request): return HttpResponseForbidden('<h1>Access Denied</h1>') form = AddPersonForm(request.POST or None) if request.method == 'POST': # Post means adding a user to this project if form.is_valid(): person = form.cleaned_data['person'] add_user_to_project(person, project) messages.success( request, "User '%s' was added to %s succesfully" % (person, project)) return HttpResponseRedirect(project.get_absolute_url()) return render_to_response( 'karaage/projects/project_detail.html', { 'allocations': allocations, 'project': project, 'form': form, 'can_edit': project.can_edit(request) }, context_instance=RequestContext(request) )
def simple_account(institute=None): if not institute: institute = InstituteFactory() person = PersonFactory(institute=institute) project = ProjectFactory(pid=fuzzy_lower_text(prefix='proj-default-'), institute=institute, approved_by=person) account = AccountFactory(person=person, default_project=project) add_user_to_project(account.person, project) return account
def approve(self): person = super(UserApplication, self).approve() if self.needs_account: from karaage.projects.utils import add_user_to_project add_user_to_project(person, self.project) else: self.project.users.add(person) self.project.save() if self.make_leader: self.project.leaders.add(person) self.save() return person
def simple_account(institute=None, machine_category=None): if not machine_category: machine_category = MachineCategoryFactory() if not institute: institute = InstituteFactory() person = PersonFactory(institute=institute) project = ProjectFactory(pid=fuzzy_lower_text(prefix='proj-default-'), institute=institute, approved_by=person) account = AccountFactory(machine_category=machine_category, person=person, default_project=project) ProjectQuotaFactory(project=project, machine_category=machine_category) add_user_to_project(account.person, project) return account
def save(self, person=None): data = self.cleaned_data if person is None: person = create_new_user(data) # Since adding with this method is only done with admin person.activate() if data['needs_account'] and data['project']: add_user_to_project(person, data['project']) person = super(self.__class__, self).save(person) return person
def save(self): data = self.cleaned_data person = self.instance person.username = data['username'] person.is_admin = data['is_admin'] person.is_active = True person.approved_by = get_current_person() super(AddPersonForm, self).save() person.set_password(data['password2']) if data['needs_account'] and data['project']: add_user_to_project(person, data['project']) return person
def simple_account(institute=None, machine_category=None): if not machine_category: machine_category = MachineCategoryFactory() if not institute: institute = InstituteFactory() person = PersonFactory(institute=institute) project = ProjectFactory(pid=FuzzyLowerText(prefix='proj-default-'), institute=institute, approved_by=person) account = AccountFactory(machine_category=machine_category, person=person, default_project=project) ProjectQuotaFactory(project=project, machine_category=machine_category) add_user_to_project(account.person, project) return account
def project_detail(request, project_id): project = get_object_or_404(Project, pid=project_id) form = AddPersonForm(request.POST or None) if request.method == 'POST': # Post means adding a user to this project if form.is_valid(): person = form.cleaned_data['person'] add_user_to_project(person, project) messages.success(request, "User '%s' was added to %s succesfully" % (person, project)) return HttpResponseRedirect(project.get_absolute_url()) return render_to_response('projects/project_detail.html', {'project': project, 'form': form}, context_instance=RequestContext(request))
def save(self, commit=True): assert commit is True data = self.cleaned_data person = super(AddPersonForm, self).save(commit=False) person.username = data['username'] person.is_admin = data['is_admin'] person.is_active = True person.approved_by = get_current_person() person.set_password(data['password2']) person.save() if data['needs_account'] and data['project']: add_user_to_project(person, data['project']) return person
def add_project(request, username): person = get_object_or_404(Person, username=username) # Add to project form form = AddProjectForm(request.POST or None) if request.method == 'POST': # Post means adding this user to a project if form.is_valid(): project = form.cleaned_data['project'] add_user_to_project(person, project) messages.success( request, "User '%s' was added to %s succesfully" % (person, project)) return HttpResponseRedirect(person.get_absolute_url()) return render_to_response('karaage/machines/person_add_project.html', locals(), context_instance=RequestContext(request))
def project_detail(request, project_id): project = get_object_or_404(Project, pk=project_id) user_list = Person.active.select_related() form = UsageSearchForm() if request.method == 'POST': # Post means adding a user to this project if not request.user.has_perm('projects.change_project'): return HttpResponseForbidden('<h1>Access Denied</h1>') data = request.POST.copy() if data['person']: person = Person.objects.get(pk=data['person']) add_user_to_project(person, project) return HttpResponseRedirect(project.get_absolute_url()) return render_to_response('projects/project_detail.html', locals(), context_instance=RequestContext(request))
def add_project(request, username): person = get_object_or_404(Person, username=username) # Add to project form form = AddProjectForm(request.POST or None) if request.method == 'POST': # Post means adding this user to a project if form.is_valid(): project = form.cleaned_data['project'] add_user_to_project(person, project) messages.success( request, "User '%s' was added to %s succesfully" % (person, project)) return HttpResponseRedirect(person.get_absolute_url()) return render_to_response( 'karaage/machines/person_add_project.html', locals(), context_instance=RequestContext(request))
def user_detail(request, username): person = get_object_or_404(Person, username=username) my_projects = person.projects.all() my_pids = [p.pid for p in my_projects] #Add to project form form = AddProjectForm(request.POST or None) if request.method == 'POST': # Post means adding this user to a project if form.is_valid(): project = form.cleaned_data['project'] add_user_to_project(person, project) messages.success(request, "User '%s' was added to %s succesfully" % (person, project)) log(request.user, project, 2, '%s added to project' % person) return HttpResponseRedirect(person.get_absolute_url()) return render_to_response('people/person_detail.html', locals(), context_instance=RequestContext(request))
def create_account(self, person, default_project): """Creates a UserAccount (if needed) and activates user. Keyword arguments: person_id -- Person id project_id -- Project id """ ua = UserAccount.objects.create( user=person, username=person.username, machine_category=self.machine_category, default_project=default_project, date_created=datetime.datetime.today()) if default_project is not None: from karaage.projects.utils import add_user_to_project add_user_to_project(person, default_project) log(get_current_user(), ua.user, 1, 'Created account on %s' % self.machine_category) return ua
def approve(self, pid=None): person = super(ProjectApplication, self).approve() from karaage.projects.utils import add_user_to_project, get_new_pid project = Project( pid=pid or get_new_pid(self.institute), name=self.name, description=self.description, institute=self.institute, additional_req=self.additional_req, start_date=datetime.datetime.today(), end_date=datetime.datetime.today() + datetime.timedelta(days=365), ) project.machine_category = MachineCategory.objects.get_default() project.save() project.leaders.add(person) for mc in self.machine_categories.all(): project.machine_categories.add(mc) project.activate() if self.needs_account: add_user_to_project(person, project) self.project = project self.save() return project
def handle(self, csvfile, **options): verbosity = int(options.get('verbosity', 1)) try: data = DictReader(open(csvfile)) except: sys.stderr.write("ERROR: Failed to read CSV file.\n") sys.exit(1) success = 0 fail_count = 0 skip = 0 for user in data: fail = False if verbosity >= 1: print("Attempting to import user '%s'" % user['username']) if 'username' not in user: sys.stderr.write("Error: Failed to find username column.\n") fail = True if 'password' not in user: sys.stderr.write("Error: Failed to find password column.\n") fail = True if 'short_name' not in user: sys.stderr.write("Error: Failed to find short_name column.\n") fail = True if 'full_name' not in user: sys.stderr.write("Error: Failed to find full_name column.\n") fail = True if 'email' not in user: sys.stderr.write("Error: Failed to find email column.\n") fail = True if 'institute' not in user: sys.stderr.write("Error: Failed to find institute column.\n") fail = True if 'project' not in user: sys.stderr.write("Error: Failed to find project column.\n") fail = True if not RE_VALID_USERNAME.match(user['username']): sys.stderr.write( "Error: Username is invalid. " "Use only letters, digits and underscores.\n") fail = True try: validate_email(user['email']) except exceptions.ValidationError: sys.stderr.write( "Error: E-mail address '%s' is invalid.\n" % user['email']) fail = True if fail: sys.stderr.write( "Skipping row for username '%s' due to errors\n" % user['username']) fail_count += 1 continue try: Person.objects.get(username=user['username']) sys.stderr.write( "Error: Username '%s' exists. Skipping\n" % user['username']) skip += 1 continue except Person.DoesNotExist: pass try: institute = Institute.objects.get(name=user['institute']) user['institute'] = institute except Institute.DoesNotExist: sys.stderr.write( "Error: Institute '%s' does not exist. Skipping\n" % user['institute']) fail_count += 1 continue project = None if user['project']: try: project = Project.objects.get(pid=user['project']) except Project.DoesNotExist: sys.stderr.write( "Error: Project '%s' does not exist. Skipping\n" % user['project']) fail_count += 1 continue user['password1'] = user['password'] person = Person.objects.create_user(**user) print("Successfully added user '%s'" % person) if project: add_user_to_project(person, project) success += 1 print('') print('Added: %s' % success) print('Skipped: %s' % skip) print('Failed: %s' % fail_count) sys.exit(0)
def handle(self, csvfile, **options): verbosity = int(options.get('verbosity', 1)) try: data = DictReader(open(csvfile)) except FileNotFoundError: sys.stderr.write("ERROR: Failed to read CSV file.\n") sys.exit(1) success = 0 fail_count = 0 skip = 0 for user in data: fail = False if verbosity >= 1: print("Attempting to import user '%s'" % user['username']) if 'username' not in user: sys.stderr.write("Error: Failed to find username column.\n") fail = True if 'password' not in user: sys.stderr.write("Error: Failed to find password column.\n") fail = True if 'short_name' not in user: sys.stderr.write("Error: Failed to find short_name column.\n") fail = True if 'full_name' not in user: sys.stderr.write("Error: Failed to find full_name column.\n") fail = True if 'email' not in user: sys.stderr.write("Error: Failed to find email column.\n") fail = True if 'institute' not in user: sys.stderr.write("Error: Failed to find institute column.\n") fail = True if 'project' not in user: sys.stderr.write("Error: Failed to find project column.\n") fail = True if not RE_VALID_USERNAME.match(user['username']): sys.stderr.write("Error: Username is invalid. " "Use only letters, digits and underscores.\n") fail = True try: validate_email(user['email']) except exceptions.ValidationError: sys.stderr.write("Error: E-mail address '%s' is invalid.\n" % user['email']) fail = True if fail: sys.stderr.write( "Skipping row for username '%s' due to errors\n" % user['username']) fail_count += 1 continue try: Person.objects.get(username=user['username']) sys.stderr.write("Error: Username '%s' exists. Skipping\n" % user['username']) skip += 1 continue except Person.DoesNotExist: pass try: institute = Institute.objects.get(name=user['institute']) user['institute'] = institute except Institute.DoesNotExist: sys.stderr.write( "Error: Institute '%s' does not exist. Skipping\n" % user['institute']) fail_count += 1 continue project = None if user['project']: try: project = Project.objects.get(pid=user['project']) except Project.DoesNotExist: sys.stderr.write( "Error: Project '%s' does not exist. Skipping\n" % user['project']) fail_count += 1 continue user['password1'] = user['password'] person = Person.objects.create_user(**user) print("Successfully added user '%s'" % person) if project: add_user_to_project(person, project) success += 1 print('') print('Added: %s' % success) print('Skipped: %s' % skip) print('Failed: %s' % fail_count) sys.exit(0)