Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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))
Ejemplo n.º 3
0
    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))
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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)
    )
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
 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
Ejemplo n.º 9
0
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
Ejemplo n.º 10
0
    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
Ejemplo n.º 11
0
    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
Ejemplo n.º 12
0
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
Ejemplo n.º 13
0
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))
Ejemplo n.º 14
0
    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
Ejemplo n.º 15
0
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))
Ejemplo n.º 16
0
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))
Ejemplo n.º 17
0
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))
Ejemplo n.º 18
0
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))
Ejemplo n.º 19
0
    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
Ejemplo n.º 20
0
 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)
Ejemplo n.º 22
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)