コード例 #1
0
    def get(self, request, response, _appname, _modelname):
        """Return a HAL formatted version of the instance list.
        """
        root = get_slumber_root()

        hal = Builder(self())
        hal.add_link('model', root + self.model.path)

        query = self.model.model.objects
        hal_instance_list(self, request.GET, hal, query)

        response["instances"] = hal.as_object()
        response.root = 'instances'
コード例 #2
0
ファイル: organizations.py プロジェクト: dwcaraway/govly
    def get(self, id):
        """Returns a specific of Organization."""

        org = Organization.get_or_404(id)

        response = Builder(url_for("v1.OrganizationsView:get", id=id))\
            .add_curie('r', url_for('v1.LinkRelationsView:index')+"/{rel}")\
            .add_link('r:organizations', url_for("v1.OrganizationsView:index", page=1))

        for key, value in org.to_dict().iteritems():
            response.set_property(key, value)

        return response.as_object()
コード例 #3
0
ファイル: instancelist.py プロジェクト: KayEss/django-slumber
    def get(self, request, response, _appname, _modelname):
        """Return a HAL formatted version of the instance list.
        """
        root = get_slumber_root()

        hal = Builder(self())
        hal.add_link('model', root + self.model.path)

        query = self.model.model.objects
        hal_instance_list(self, request.GET, hal, query)

        response["instances"] = hal.as_object()
        response.root = 'instances'
コード例 #4
0
ファイル: test.py プロジェクト: dwcaraway/podserve
    def test_links_to_endpoints(self):
        """
        Verify that root links to the available endpoints
        """
        b = Builder('http://localhost/').add_curie(name='ep', href='/rel/{rel}')\
            .add_link('ep:user', target='/users')\
            .add_link('ep:dataset', target='/datasets')\
            .add_link('ep:organization', target='/organizations')\
            .add_link('ep:schema', target='/schema')
        expected = b.as_object()

        response = self.client.get("/")
        Document.from_object(json.loads(response.data))

        self.assertEquals(response.json, expected)
コード例 #5
0
ファイル: users.py プロジェクト: dwcaraway/govly
    def post_invitation(self, id):
        """Create a new invitation"""

        #TODO replace boilerplate with decorator
        user = User.get(id)

        if not user:
            raise NotFound()

        if current_user.id != user.id:
            raise Unauthorized('user id does not match requesting user id')
        #END boilerplate

        if len(user.invitations) >= current_app.config.get('MAX_INVITES'):
            raise Conflict("Maximum invitations reached")

        args = user_invitation_post_parser.parse_args()
        email = args.get('email')
        token = generate_invitation_token(user)

        try:
            invite = Invite.create(invitor_id=id, invitee_email=email, token=token)
        except IntegrityError as e:
            raise Conflict('%s has already been invited.' % email)

        invite_link = urljoin(current_app.config['CLIENT_DOMAIN'], '/#/register?token='+token)

        #TODO this mail send should be performed asynchronously using celery, see issue #88850472
        send_message(
            subject="You've been given early access to FogMine",
            sender="*****@*****.**",
            recipients = [user.email],
            html_body=render_template('email/invite.html', user=user, confirmation_link=invite_link),
            text_body=render_template('email/invite.txt', user=user, confirmation_link=invite_link)
        )

        schema = InviteSchema()
        jsonSerializableInvite = schema.dump(invite)[0]

        b = Builder(href=url_for('v1.UsersView:get_invitation', userid=id, inviteid=invite.id))\
            .add_curie('r', url_for('v1.LinkRelationsView:index')+"/{rel}")

        #TODO is there a simpler way to just add the whole dict here?
        for key, value in jsonSerializableInvite.iteritems():
            b.set_property(key, value)

        return b.o, 201
コード例 #6
0
def hal_instance_list(operation, control, builder, query_set, page_size=10):
    """Return a page of JSON-HAL based results across the query set.
    """
    from slumber import data_link
    starter = control.get('lpk', None)
    if starter:
        query_set = query_set.filter(pk__lt=starter)
    lpk = None
    for instance in query_set.order_by('-pk').iterator():
        if page_size == 0:
            builder.add_link('next', operation(lpk=lpk))
            return
        else:
            page_size -= 1
            lpk = instance.pk
            item = Builder(data_link(instance))
            item.set_property('display', unicode(instance))
            builder.embed('page', item)
コード例 #7
0
ファイル: instancelist.py プロジェクト: KayEss/django-slumber
def hal_instance_list(operation, control, builder, query_set, page_size=10):
    """Return a page of JSON-HAL based results across the query set.
    """
    from slumber import data_link
    starter = control.get('lpk', None)
    if starter:
        query_set = query_set.filter(pk__lt=starter)
    lpk = None
    for instance in query_set.order_by('-pk').iterator():
        if page_size == 0:
            builder.add_link('next', operation(lpk=lpk))
            return
        else:
            page_size -= 1
            lpk = instance.pk
            item = Builder(data_link(instance))
            item.set_property('display', unicode(instance))
            builder.embed('page', item)
コード例 #8
0
ファイル: organizations.py プロジェクト: dwcaraway/govly
    def index(self):
        """Returns a Collection of Organizations."""
        args = org_parser.parse_args()

        pagination = Organization.query.paginate(page=args.page, per_page=args.per_page)
        response = Builder(url_for("v1.OrganizationsView:index", page=pagination.page))\
            .add_curie('r', url_for('v1.LinkRelationsView:index')+"/{rel}")\
            .set_property('total', pagination.total)

        if pagination.has_prev:
            response = response.add_link('prev', url_for("v1.OrganizationsView:index", page=pagination.prev_num))

        if pagination.has_next:
            response = response.add_link('next', url_for("v1.OrganizationsView:index", page=pagination.next_num))

        if pagination.total > 1 and pagination.has_prev:
            response = response.add_link('first', url_for("v1.OrganizationsView:index", page=1))
        if pagination.total > 1 and pagination.has_next:
            response = response.add_link('last', url_for("v1.OrganizationsView:index", page=pagination.pages))

        for business in pagination.items:
            response = response.add_link('r:organization', url_for("v1.OrganizationsView:get", id=business.id))

        return response.as_object()