Пример #1
0
    def test_if_validation_succeeds_it_shows_a_flash_message(
            self, form_validating_to, pyramid_request):
        form.handle_form_submission(pyramid_request,
                                    form_validating_to('anything'),
                                    mock_callable(), mock.sentinel.on_failure)

        assert pyramid_request.session.peek_flash('success')
Пример #2
0
    def test_if_validation_succeeds_it_passes_on_success_result_to_to_xhr_response(
            self,
            form_validating_to,
            matchers,
            pyramid_request,
            to_xhr_response):
        """
        A result from on_success() is passed to to_xhr_response().

        If on_success() returns something other than None, it passes that
        something to to_xhr_response().

        """
        form_ = form_validating_to('anything')

        form.handle_form_submission(pyramid_request,
                                    form_,
                                    mock_callable(
                                        return_value=mock.sentinel.result),
                                    mock.sentinel.on_failure)

        to_xhr_response.assert_called_once_with(
            pyramid_request,
            mock.sentinel.result,
            form_)
Пример #3
0
    def test_it_calls_validate(self, pyramid_request):
        form_ = mock.Mock(spec_set=['validate'])

        form.handle_form_submission(pyramid_request, form_, mock_callable(),
                                    mock.sentinel.on_failure)

        form_.validate.assert_called_once_with(pyramid_request.POST.items())
Пример #4
0
    def test_if_validation_fails_it_sets_response_status_to_400(
        self, invalid_form, pyramid_request, to_xhr_response
    ):
        form.handle_form_submission(
            pyramid_request, invalid_form(), mock.sentinel.on_success, mock_callable()
        )

        assert to_xhr_response.call_args[0][0].response.status_int == 400
Пример #5
0
    def test_if_validation_fails_it_calls_on_failure(self, pyramid_request,
                                                     invalid_form):
        on_failure = mock_callable()

        form.handle_form_submission(pyramid_request, invalid_form(),
                                    mock.sentinel.on_success, on_failure)

        on_failure.assert_called_once_with()
Пример #6
0
    def test_it_calls_validate(self, pyramid_request, matchers):
        form_ = mock.Mock(spec_set=["validate"])

        form.handle_form_submission(pyramid_request, form_, mock_callable(),
                                    mock.sentinel.on_failure)

        post_items = matchers.IterableWith(list(pyramid_request.POST.items()))
        form_.validate.assert_called_once_with(post_items)
Пример #7
0
    def test_it_calls_validate(self, pyramid_request):
        form_ = mock.Mock(spec_set=['validate'])

        form.handle_form_submission(pyramid_request,
                                    form_,
                                    mock_callable(),
                                    mock.sentinel.on_failure)

        form_.validate.assert_called_once_with(pyramid_request.POST.items())
Пример #8
0
    def test_if_validation_succeeds_it_calls_on_success(
            self, form_validating_to, pyramid_request):
        form_ = form_validating_to(mock.sentinel.appstruct)
        on_success = mock_callable()

        form.handle_form_submission(pyramid_request, form_, on_success,
                                    mock.sentinel.on_failure)

        on_success.assert_called_once_with(mock.sentinel.appstruct)
Пример #9
0
    def test_it_calls_validate(self, pyramid_request, matchers):
        form_ = mock.Mock(spec_set=["validate"])

        form.handle_form_submission(
            pyramid_request, form_, mock_callable(), mock.sentinel.on_failure
        )

        post_items = matchers.IterableWith(list(pyramid_request.POST.items()))
        form_.validate.assert_called_once_with(post_items)
Пример #10
0
    def test_if_validation_succeeds_it_shows_a_flash_message(self,
                                                             form_validating_to,
                                                             pyramid_request):
        form.handle_form_submission(pyramid_request,
                                    form_validating_to('anything'),
                                    mock_callable(),
                                    mock.sentinel.on_failure)

        assert pyramid_request.session.peek_flash('success')
Пример #11
0
    def test_it_calls_validate(self, pyramid_request):
        form_ = mock.Mock(spec_set=["validate"])

        form.handle_form_submission(pyramid_request, form_, mock_callable(),
                                    mock.sentinel.on_failure)

        post_items = Any.iterable.containing(list(
            pyramid_request.POST.items())).only()
        form_.validate.assert_called_once_with(post_items)
Пример #12
0
    def test_if_validation_fails_it_calls_on_failure(
        self, pyramid_request, invalid_form
    ):
        on_failure = mock_callable()

        form.handle_form_submission(
            pyramid_request, invalid_form(), mock.sentinel.on_success, on_failure
        )

        on_failure.assert_called_once_with()
Пример #13
0
    def test_if_validation_fails_it_calls_to_xhr_response(
            self, invalid_form, pyramid_request, to_xhr_response):
        on_failure = mock_callable()
        form_ = invalid_form()

        form.handle_form_submission(pyramid_request, form_,
                                    mock.sentinel.on_success, on_failure)

        to_xhr_response.assert_called_once_with(pyramid_request,
                                                on_failure.return_value, form_)
Пример #14
0
    def test_if_validation_succeeds_it_calls_on_success(
        self, form_validating_to, pyramid_request
    ):
        form_ = form_validating_to(mock.sentinel.appstruct)
        on_success = mock_callable()

        form.handle_form_submission(
            pyramid_request, form_, on_success, mock.sentinel.on_failure
        )

        on_success.assert_called_once_with(mock.sentinel.appstruct)
Пример #15
0
    def test_if_validation_succeeds_it_calls_to_xhr_response(
            self, form_validating_to, matchers, pyramid_request,
            to_xhr_response):
        form_ = form_validating_to('anything')

        form.handle_form_submission(pyramid_request, form_,
                                    mock_callable(return_value=None),
                                    mock.sentinel.on_failure)

        to_xhr_response.assert_called_once_with(
            pyramid_request, matchers.redirect_302_to(pyramid_request.url),
            form_)
Пример #16
0
    def test_if_validation_fails_it_calls_to_xhr_response(
        self, invalid_form, pyramid_request, to_xhr_response
    ):
        on_failure = mock_callable()
        form_ = invalid_form()

        form.handle_form_submission(
            pyramid_request, form_, mock.sentinel.on_success, on_failure
        )

        to_xhr_response.assert_called_once_with(
            pyramid_request, on_failure.return_value, form_
        )
Пример #17
0
    def test_if_validation_succeeds_it_calls_to_xhr_response(
        self, form_validating_to, matchers, pyramid_request, to_xhr_response
    ):
        form_ = form_validating_to("anything")

        form.handle_form_submission(
            pyramid_request,
            form_,
            mock_callable(return_value=None),
            mock.sentinel.on_failure,
        )

        to_xhr_response.assert_called_once_with(
            pyramid_request, matchers.Redirect302To(pyramid_request.url), form_
        )
Пример #18
0
    def test_if_validation_fails_it_returns_to_xhr_response(
            self, invalid_form, pyramid_request, to_xhr_response):
        result = form.handle_form_submission(pyramid_request, invalid_form(),
                                             mock.sentinel.on_success,
                                             mock_callable())

        assert result == to_xhr_response.return_value
Пример #19
0
 def post(self):
     """Process notifications POST data."""
     return form.handle_form_submission(
         self.request,
         self.form,
         on_success=self._update_notifications,
         on_failure=self._template_data)
Пример #20
0
    def update(self):
        group = self.group

        def on_success(appstruct):
            user_svc = self.request.find_service(name='user')
            group_svc = self.request.find_service(name='group')

            group.creator = user_svc.fetch(appstruct['creator'],
                                           group.authority)
            group.description = appstruct['description']
            group.name = appstruct['name']
            group.scopes = [GroupScope(origin=o) for o in appstruct['origins']]
            group.organization = self.organizations[appstruct['organization']]

            memberids = [
                _userid(username, group.authority)
                for username in appstruct['members']
            ]
            group_svc.update_members(group, memberids)

            self.form = _create_form(self.request, self.schema, (_('Save'), ))
            self._update_appstruct()

            return self._template_context()

        return form.handle_form_submission(self.request,
                                           self.form,
                                           on_success=on_success,
                                           on_failure=self._template_context)
Пример #21
0
 def post(self):
     return form.handle_form_submission(
         self.request,
         self.form,
         on_success=self._update_user,
         on_failure=self._template_data,
     )
Пример #22
0
 def post_password_form(self):
     """Called by Pyramid when the change password form is submitted."""
     return form.handle_form_submission(
         self.request,
         self.forms['password'],
         on_success=self.update_password,
         on_failure=self._template_data)
Пример #23
0
 def post_email_form(self):
     """Called by Pyramid when the change email form is submitted."""
     return form.handle_form_submission(
         self.request,
         self.forms['email'],
         on_success=self.update_email_address,
         on_failure=self._template_data)
Пример #24
0
 def post(self):
     return form.handle_form_submission(
         self.request,
         self.form,
         on_success=self._update_group,
         on_failure=self._template_data,
     )
Пример #25
0
    def post(self):
        def on_success(appstruct):
            authority = appstruct["authority"]
            logo = appstruct["logo"]
            name = appstruct["name"]
            organization = Organization(authority=authority,
                                        name=name,
                                        logo=logo)

            self.request.db.add(organization)
            self.request.session.flash(
                # pylint:disable=consider-using-f-string
                Markup(_("Created new organization {}".format(name))),
                "success",
            )

            return HTTPFound(
                location=self.request.route_url("admin.organizations"))

        return form.handle_form_submission(
            self.request,
            self.form,
            on_success=on_success,
            on_failure=self._template_context,
        )
Пример #26
0
    def post(self):
        def on_success(appstruct):
            grant_type = appstruct['grant_type']

            if grant_type in [GrantType.jwt_bearer, GrantType.client_credentials]:
                secret = self.secret_gen()
            else:
                secret = None

            client = AuthClient(name=appstruct['name'],
                                authority=appstruct['authority'],
                                grant_type=appstruct['grant_type'],
                                response_type=_response_type_for_grant_type(grant_type),
                                secret=secret,
                                trusted=appstruct['trusted'],
                                redirect_uri=appstruct['redirect_url'])

            self.request.db.add(client)
            self.request.db.flush()

            read_url = self.request.route_url('admin_oauthclients_edit', id=client.id)
            return HTTPFound(location=read_url)

        return form.handle_form_submission(self.request, self.form,
                                           on_success=on_success,
                                           on_failure=self._template_context)
Пример #27
0
 def post_password_form(self):
     """Called by Pyramid when the change password form is submitted."""
     return form.handle_form_submission(
         self.request,
         self.forms['password'],
         on_success=self.update_password,
         on_failure=self._template_data)
Пример #28
0
 def post_email_form(self):
     """Called by Pyramid when the change email form is submitted."""
     return form.handle_form_submission(
         self.request,
         self.forms['email'],
         on_success=self.update_email_address,
         on_failure=self._template_data)
Пример #29
0
 def post(self):
     """Process notifications POST data."""
     return form.handle_form_submission(
         self.request,
         self.form,
         on_success=self._update_notifications,
         on_failure=self._template_data)
Пример #30
0
    def post(self):
        def on_success(appstruct):
            grant_type = appstruct["grant_type"]

            if grant_type in [
                    GrantType.jwt_bearer, GrantType.client_credentials
            ]:
                secret = self.secret_gen()
            else:
                secret = None

            client = AuthClient(
                name=appstruct["name"],
                authority=appstruct["authority"],
                grant_type=appstruct["grant_type"],
                response_type=_response_type_for_grant_type(grant_type),
                secret=secret,
                trusted=appstruct["trusted"],
                redirect_uri=appstruct["redirect_url"],
            )

            self.request.db.add(client)
            self.request.db.flush()

            read_url = self.request.route_url("admin.oauthclients_edit",
                                              id=client.id)
            return HTTPFound(location=read_url)

        return form.handle_form_submission(
            self.request,
            self.form,
            on_success=on_success,
            on_failure=self._template_context,
        )
Пример #31
0
    def test_if_validation_fails_it_returns_to_xhr_response(
        self, invalid_form, pyramid_request, to_xhr_response
    ):
        result = form.handle_form_submission(
            pyramid_request, invalid_form(), mock.sentinel.on_success, mock_callable()
        )

        assert result == to_xhr_response.return_value
Пример #32
0
    def test_if_validation_succeeds_it_returns_to_xhr_response(
            self, form_validating_to, pyramid_request, to_xhr_response):
        result = form.handle_form_submission(pyramid_request,
                                             form_validating_to('anything'),
                                             mock_callable(),
                                             mock.sentinel.on_failure)

        assert result == to_xhr_response.return_value
Пример #33
0
    def post(self):
        def on_success(appstruct):
            group_create_svc = self.request.find_service(name='group_create')
            group_members_svc = self.request.find_service(name='group_members')

            # Create the new group.
            creator = appstruct['creator']
            description = appstruct['description']
            name = appstruct['name']
            organization = self.organizations[appstruct["organization"]]
            origins = appstruct['origins']
            type_ = appstruct['group_type']

            userid = _userid(creator, organization.authority)

            if type_ == 'open':
                group = group_create_svc.create_open_group(
                    name=name,
                    userid=userid,
                    origins=origins,
                    description=description,
                    organization=organization)
            elif type_ == 'restricted':
                group = group_create_svc.create_restricted_group(
                    name=name,
                    userid=userid,
                    origins=origins,
                    description=description,
                    organization=organization)
            else:
                raise Exception('Unsupported group type {}'.format(type_))

            # Add members to the group
            member_userids = [
                _userid(username, organization.authority)
                for username in appstruct['members']
            ]
            group_members_svc.add_members(group, member_userids)

            # Flush changes to allocate group a pubid
            self.request.db.flush(objects=[group])

            group_url = self.request.route_url('group_read',
                                               pubid=group.pubid,
                                               slug=group.slug)
            self.request.session.flash(Markup(
                'Created new group <a href="{url}">{name}</a>'.format(
                    name=name, url=group_url)),
                                       queue='success')

            # Direct the user back to the admin page.
            return HTTPFound(location=self.request.route_url('admin.groups'))

        return form.handle_form_submission(self.request,
                                           self.form,
                                           on_success=on_success,
                                           on_failure=self._template_context)
Пример #34
0
    def test_if_validation_succeeds_it_passes_on_success_result_to_to_xhr_response(
            self, form_validating_to, matchers, pyramid_request,
            to_xhr_response):
        """
        A result from on_success() is passed to to_xhr_response().

        If on_success() returns something other than None, it passes that
        something to to_xhr_response().

        """
        form_ = form_validating_to('anything')

        form.handle_form_submission(
            pyramid_request, form_,
            mock_callable(return_value=mock.sentinel.result),
            mock.sentinel.on_failure)

        to_xhr_response.assert_called_once_with(pyramid_request,
                                                mock.sentinel.result, form_)
Пример #35
0
    def test_if_validation_succeeds_it_returns_to_xhr_response(self,
                                                               form_validating_to,
                                                               pyramid_request,
                                                               to_xhr_response):
        result = form.handle_form_submission(pyramid_request,
                                             form_validating_to('anything'),
                                             mock_callable(),
                                             mock.sentinel.on_failure)

        assert result == to_xhr_response.return_value
Пример #36
0
    def post(self):
        def on_success(appstruct):
            """Create a group on successful validation of POSTed form data"""

            organization = self.organizations[appstruct["organization"]]
            # We know this user exists because it is checked during schema validation
            creator_userid = self.user_svc.fetch(
                appstruct["creator"], organization.authority
            ).userid

            create_fns = {
                "open": self.group_create_svc.create_open_group,
                "restricted": self.group_create_svc.create_restricted_group,
            }

            type_ = appstruct["group_type"]
            if type_ not in ["open", "restricted"]:
                raise Exception("Unsupported group type {}".format(type_))

            group = create_fns[type_](
                name=appstruct["name"],
                userid=creator_userid,
                scopes=appstruct["scopes"],
                description=appstruct["description"],
                organization=organization,
                enforce_scope=appstruct["enforce_scope"],
            )

            # Add members to the group. We know that these users exist
            # because that check is part of form schema validation.
            member_userids = []
            for username in appstruct["members"]:
                member_userids.append(
                    self.user_svc.fetch(username, organization.authority).userid
                )

            self.group_members_svc.add_members(group, member_userids)

            self.request.session.flash(
                Markup('Created new group "{name}"'.format(name=group.name)),
                queue="success",
            )

            # Direct the user back to the admin page.
            return HTTPFound(location=self.request.route_url("admin.groups"))

        return form.handle_form_submission(
            self.request,
            self.form,
            on_success=on_success,
            on_failure=self._template_context,
        )
Пример #37
0
    def post(self):
        def on_success(appstruct):
            """Create a group on successful validation of POSTed form data"""

            organization = self.organizations[appstruct["organization"]]
            # We know this user exists because it is checked during schema validation
            creator_userid = self.user_svc.fetch(
                appstruct["creator"], organization.authority
            ).userid

            create_fns = {
                "open": self.group_create_svc.create_open_group,
                "restricted": self.group_create_svc.create_restricted_group,
            }

            type_ = appstruct["group_type"]
            if type_ not in ["open", "restricted"]:
                raise Exception("Unsupported group type {}".format(type_))

            group = create_fns[type_](
                name=appstruct["name"],
                userid=creator_userid,
                origins=appstruct["origins"],
                description=appstruct["description"],
                organization=organization,
                enforce_scope=appstruct["enforce_scope"],
            )

            # Add members to the group. We know that these users exist
            # because that check is part of form schema validation.
            member_userids = []
            for username in appstruct["members"]:
                member_userids.append(
                    self.user_svc.fetch(username, organization.authority).userid
                )

            self.group_members_svc.add_members(group, member_userids)

            self.request.session.flash(
                Markup('Created new group "{name}"'.format(name=group.name)),
                queue="success",
            )

            # Direct the user back to the admin page.
            return HTTPFound(location=self.request.route_url("admin.groups"))

        return form.handle_form_submission(
            self.request,
            self.form,
            on_success=on_success,
            on_failure=self._template_context,
        )
Пример #38
0
    def update(self):
        org = self.org

        def on_success(appstruct):
            org.name = appstruct['name']
            org.logo = appstruct['logo']

            self._update_appstruct()

            return self._template_context()

        return form.handle_form_submission(self.request, self.form,
                                           on_success=on_success,
                                           on_failure=self._template_context)
Пример #39
0
    def update(self):
        org = self.org

        def on_success(appstruct):
            org.name = appstruct['name']
            org.logo = appstruct['logo']

            self._update_appstruct()

            return self._template_context()

        return form.handle_form_submission(self.request, self.form,
                                           on_success=on_success,
                                           on_failure=self._template_context)
Пример #40
0
    def post(self):
        def on_success(appstruct):
            authority = appstruct['authority']
            logo = appstruct['logo']
            name = appstruct['name']
            org = Organization(authority=authority, name=name, logo=logo)

            self.request.db.add(org)
            self.request.session.flash(
                Markup(_('Created new organization {}'.format(name))), 'success')

            return HTTPFound(location=self.request.route_url('admin.organizations'))

        return form.handle_form_submission(self.request, self.form,
                                           on_success=on_success,
                                           on_failure=self._template_context)
Пример #41
0
    def post(self):
        def on_success(appstruct):
            read_url = self.request.route_url('admin_groups')
            self.request.session.flash('TODO: I will add a {gtype} group called "{name}"'
                                       ' for authority {authority}, created by {creator}'.format(
                                            gtype=appstruct['group_type'],
                                            name=appstruct['name'],
                                            authority=appstruct['authority'],
                                            creator=appstruct['creator']
                                       ), queue='success')
            response = HTTPFound(location=read_url)
            return response

        return form.handle_form_submission(self.request, self.form,
                                           on_success=on_success,
                                           on_failure=self._template_context)
Пример #42
0
    def post(self):
        def on_success(appstruct):
            authority = appstruct['authority']
            logo = appstruct['logo']
            name = appstruct['name']
            org = Organization(authority=authority, name=name, logo=logo)

            self.request.db.add(org)
            self.request.session.flash(
                Markup(_('Created new organization {}'.format(name))), 'success')

            return HTTPFound(location=self.request.route_url('admin_organizations'))

        return form.handle_form_submission(self.request, self.form,
                                           on_success=on_success,
                                           on_failure=self._template_context)
Пример #43
0
    def post(self):
        """Respond to a submission of the create group form."""
        def on_success(appstruct):
            groups_service = self.request.find_service(name='group')
            group = groups_service.create_private_group(
                name=appstruct['name'],
                description=appstruct.get('description'),
                userid=self.request.authenticated_userid)

            url = self.request.route_path('group_read',
                                          pubid=group.pubid,
                                          slug=group.slug)
            return httpexceptions.HTTPSeeOther(url)

        return form.handle_form_submission(self.request,
                                           self.form,
                                           on_success=on_success,
                                           on_failure=self._template_data)
Пример #44
0
    def update(self):
        group = self.group

        def on_success(appstruct):
            user_svc = self.request.find_service(name='user')

            group.creator = user_svc.fetch(appstruct['creator'], group.authority)
            group.description = appstruct['description']
            group.name = appstruct['name']
            group.scopes = [GroupScope(origin=o) for o in appstruct['origins']]

            self._update_appstruct()

            return self._template_context()

        return form.handle_form_submission(self.request, self.form,
                                           on_success=on_success,
                                           on_failure=self._template_context)
Пример #45
0
Файл: groups.py Проект: nlisgo/h
    def post(self):
        """Respond to a submission of the create group form."""
        def on_success(appstruct):
            groups_service = self.request.find_service(name='groups')
            group = groups_service.create(
                name=appstruct['name'],
                description=appstruct.get('description'),
                userid=self.request.authenticated_userid)

            url = self.request.route_path('group_read',
                                          pubid=group.pubid,
                                          slug=group.slug)
            return HTTPSeeOther(url)

        return form.handle_form_submission(
            self.request,
            self.form,
            on_success=on_success,
            on_failure=self._template_data)
Пример #46
0
    def post(self):
        def on_success(appstruct):
            authority = appstruct["authority"]
            logo = appstruct["logo"]
            name = appstruct["name"]
            org = Organization(authority=authority, name=name, logo=logo)

            self.request.db.add(org)
            self.request.session.flash(
                Markup(_("Created new organization {}".format(name))), "success"
            )

            return HTTPFound(location=self.request.route_url("admin.organizations"))

        return form.handle_form_submission(
            self.request,
            self.form,
            on_success=on_success,
            on_failure=self._template_context,
        )
Пример #47
0
    def update(self):
        client = self.client

        def on_success(appstruct):
            grant_type = appstruct['grant_type']

            client.authority = appstruct['authority']
            client.grant_type = grant_type
            client.name = appstruct['name']
            client.redirect_uri = appstruct['redirect_url']
            client.response_type = _response_type_for_grant_type(grant_type)
            client.trusted = appstruct['trusted']

            self._update_appstruct()

            return self._template_context()

        return form.handle_form_submission(self.request, self.form,
                                           on_success=on_success,
                                           on_failure=self._template_context)
Пример #48
0
    def update(self):
        client = self.client

        def on_success(appstruct):
            grant_type = appstruct['grant_type']

            client.authority = appstruct['authority']
            client.grant_type = grant_type
            client.name = appstruct['name']
            client.redirect_uri = appstruct['redirect_url']
            client.response_type = _response_type_for_grant_type(grant_type)
            client.trusted = appstruct['trusted']

            self._update_appstruct()

            return self._template_context()

        return form.handle_form_submission(self.request, self.form,
                                           on_success=on_success,
                                           on_failure=self._template_context)
Пример #49
0
    def post(self):
        """Respond to a submission of the create group form."""

        def on_success(appstruct):
            group_create_service = self.request.find_service(name="group_create")
            group = group_create_service.create_private_group(
                name=appstruct["name"],
                description=appstruct.get("description"),
                userid=self.request.authenticated_userid,
            )

            url = self.request.route_path(
                "group_read", pubid=group.pubid, slug=group.slug
            )
            return httpexceptions.HTTPSeeOther(url)

        return form.handle_form_submission(
            self.request,
            self.form,
            on_success=on_success,
            on_failure=self._template_data,
        )
Пример #50
0
    def update(self):
        group = self.group

        def on_success(appstruct):
            """Update the group resource on successful form validation"""

            organization = self.organizations[appstruct["organization"]]
            scopes = [GroupScope(scope=o) for o in appstruct["scopes"]]

            self.group_update_svc.update(
                group,
                organization=organization,
                creator=self.user_svc.fetch(appstruct["creator"],
                                            group.authority),
                description=appstruct["description"],
                name=appstruct["name"],
                scopes=scopes,
                enforce_scope=appstruct["enforce_scope"],
            )

            memberids = []
            for username in appstruct["members"]:
                memberids.append(
                    self.user_svc.fetch(username, group.authority).userid)

            self.group_members_svc.update_members(group, memberids)

            self.form = _create_form(self.request, self.schema, (_("Save"), ))
            self._update_appstruct()

            return self._template_context()

        return form.handle_form_submission(
            self.request,
            self.form,
            on_success=on_success,
            on_failure=self._template_context,
        )
Пример #51
0
    def post(self):
        def on_success(appstruct):
            svc = self.request.find_service(name='group')

            # Create the new group.
            creator = appstruct['creator']
            authority = appstruct['authority']
            description = appstruct['description']
            name = appstruct['name']
            origins = appstruct['origins']
            type_ = appstruct['group_type']

            userid = models.User(username=creator, authority=authority).userid

            if type_ == 'open':
                group = svc.create_open_group(name=name, userid=userid,
                                              origins=origins, description=description)
            elif type_ == 'restricted':
                group = svc.create_restricted_group(name=name, userid=userid,
                                                    origins=origins, description=description)
            else:
                raise Exception('Unsupported group type {}'.format(type_))

            # Flush changes to allocate group a pubid
            self.request.db.flush(objects=[group])

            group_url = self.request.route_url('group_read', pubid=group.pubid, slug=group.slug)
            self.request.session.flash(Markup('Created new group <a href="{url}">{name}</a>'.format(
                                        name=name, url=group_url)), queue='success')

            # Direct the user back to the admin page.
            return HTTPFound(location=self.request.route_url('admin_groups'))

        return form.handle_form_submission(self.request, self.form,
                                           on_success=on_success,
                                           on_failure=self._template_context)
Пример #52
0
    def update(self):
        group = self.group

        def on_success(appstruct):
            """Update the group resource on successful form validation"""

            organization = self.organizations[appstruct["organization"]]
            scopes = [GroupScope(scope=o) for o in appstruct["scopes"]]

            self.group_update_svc.update(
                group,
                organization=organization,
                creator=self.user_svc.fetch(appstruct["creator"], group.authority),
                description=appstruct["description"],
                name=appstruct["name"],
                scopes=scopes,
                enforce_scope=appstruct["enforce_scope"],
            )

            memberids = []
            for username in appstruct["members"]:
                memberids.append(self.user_svc.fetch(username, group.authority).userid)

            self.group_members_svc.update_members(group, memberids)

            self.form = _create_form(self.request, self.schema, (_("Save"),))
            self._update_appstruct()

            return self._template_context()

        return form.handle_form_submission(
            self.request,
            self.form,
            on_success=on_success,
            on_failure=self._template_context,
        )