Resource Examples¶
URL construction¶
from ripozo import ResourceBase
class MyResource(ResourceBase):
pks = ['id']
>>> print(MyResource.base_url)
/my_resource/<id>
>>> resource = MyResource(properties={'id': 1})
>>> print(resource.url)
/my_resource/1
URL construction 2¶
from ripozo import ResourceBase
class MyResource(ResourceBase):
namespace = '/api'
pks = ['id']
resource_name = 'resource/'
>>> print(MyResource.base_url)
/api/resource/<id>
>>> resource = MyResource(properties={'id': 1})
>>> print(resource.url)
/api/resource/1
Minimal Request¶
from ripozo import RequestContainer, ResourceBase, apimethod
class MyResource(ResourceBase):
namespace = '/api'
pks = ['id']
resource_name = 'resource'
@apimethod(methods=['GET'])
def hello_world(cls, request):
id = request.url_params['id']
return cls(properties={'id': id, 'hello': 'world'})
>>> request = RequestContainer(url_params={'id': 2})
>>> resource = MyResource.hello_world(request)
>>> print(resource.url)
/api/resource/2
>>> resource.properties
{'id': 2, 'hello': 'world'}
Using Fields¶
from ripozo import apimethod, translate, fields, ResourceBase
class MyResource(ResourceBase):
namespace = '/api'
pks = ['id']
resource_name = 'resource'
@apimethod(methods=['GET'])
@translate(fields=[fields.IntegerField('id', required=True)], validate=True)
def hello_world(cls, request):
id = request.url_params['id']
return cls(properties={'id': id, 'hello': 'world'})
>>> from ripozo import RequestContainer
>>> request = RequestContainer()
>>> resource = MyResource.hello_world(request)
Traceback (most recent call last):
...
ValidationException: The field "id" is required and cannot be None
Relationships¶
from ripozo import apimethod, translate, fields, ResourceBase, Relationship
class MyResource(ResourceBase):
namespace = '/api'
pks = ['id']
resource_name = 'resource'
_relationships = [
Relationship('related', relation='RelatedResource')
]
@apimethod(methods=['GET'])
@translate(fields=[fields.IntegerField('id', required=True)], validate=True)
def hello_world(cls, request):
id = request.url_params['id']
return cls(properties={'id': id, 'hello': 'world'})
class RelatedResource(ResourceBase):
pks = ['pk']
>>> properties = dict(id=1, related=dict(pk=2))
>>> resource = MyResource(properties=properties)
>>> resource.properties
{'id': 1}
>>> print(resource.related_resources[0].name)
related
>>> related_resource = resource.related_resources[0].resource
>>> related_resource.properties
{'pk': 2}
>>> print(related_resource.url)
/related_resource/2