# Enable reads (GET), inserts (POST) and DELETE for resources/collections # (if you omit this line, the API will default to ['GET'] and provide # read-only access to the endpoint). RESOURCE_METHODS = ['GET', 'POST', 'DELETE'] # Enable reads (GET), edits (PATCH), replacements (PUT) and deletes of # individual items (defaults to read-only item access). ITEM_METHODS = ['GET', 'PATCH', 'PUT', 'DELETE'] schema = { # Schema definition, based on Cerberus grammar. Check the Cerberus project # (https://github.com/nicolaiarocci/cerberus) for details. 'firstname': { 'type': 'string', 'minlength': 1, 'maxlength': 10, }, 'lastname': { 'type': 'string', 'minlength': 1, 'maxlength': 15, 'required': True, # talk about hard constraints! For the purpose of the demo # 'lastname' is an API entry-point, so we need it to be unique. 'unique': True, }, # 'role' is a list, and can only contain values from 'allowed'. 'role': { 'type': 'list', 'allowed': ["author", "contributor", "copy"], }, # An embedded 'strongly-typed' dictionary. 'location': { 'type': 'dict', 'schema': { 'address': {'type': 'string'}, 'city': {'type': 'string'} }, }, 'born': { 'type': 'datetime', }, } nodes_schema = { 'name': { 'type': 'string', 'minlength': 1, 'maxlength': 128, }, 'parent': { 'type': 'objectid', # 'data_relation': { # 'resource': 'node', # 'field': '_id', # }, }, 'node_type' : { 'type' : 'string', 'validcf' : True, }, # 'custom_fields' : { # 'type' : 'dict' # } } nodes = { # We choose to override global cache-control directives for this resource. 'cache_control': 'max-age=10,must-revalidate', 'cache_expires': 10, # most global settings can be overridden at resource level 'resource_methods': ['GET', 'POST'], 'schema': nodes_schema } people = { # 'title' tag used in item links. Defaults to the resource title minus # the final, plural 's' (works fine in most cases but not for 'people') 'item_title': 'person', # by default the standard item entry point is defined as # '/people/'. We leave it untouched, and we also enable an # additional read-only entry point. This way consumers can also perform # GET requests at '/people/'. 'additional_lookup': { 'url': 'regex("[\w]+")', 'field': 'lastname' }, # We choose to override global cache-control directives for this resource. 'cache_control': 'max-age=10,must-revalidate', 'cache_expires': 10, # most global settings can be overridden at resource level 'resource_methods': ['GET', 'POST'], 'schema': schema } DOMAIN = { 'people': people, 'nodes' : nodes }