14.1.1.2. reschema Module

The ServiceDef class represents a single service definition as a collection of resources and types. An instance of this class is normally created by parsing a service definition file.

14.1.1.2.1. Manual ServiceDef creation

An instance may be created directly froma file:

>>> bookstore_def = ServiceDef.create_from_file('bookstore.yaml')

This is useful for simple stand alone services. Once created, the services’ resources and types may be browsed the object used for validation:

# Get the 'author' resource
>>> author_res = bookstore_def.resources['author']

# Define an author and validate that the format is correct
>>> author = dict(id=5, name='John Doe')
>>> author_res.validate(author)

# If the format is incorrect, a ValidationError is thrown
>>> author = dict(id='5', name='John Doe')
>>> author_res.validate(author)

ValidationError: ("author.id should be a number, got '<type 'str'>'", <servicedef.Integer 'http://support.riverbed.com/apis/bookstore/1.0#/resources/author/properties/id'>)

14.1.1.2.2. Using Managers

For larger projects that span multiple services, a ServiceDefManager can be used to load service defintions on demand. This is particularly important when one service defintion references types or resources from another service definition.

# Create a ServiceDefManager to manage service definitions The
# CustomServiceDefLoader implements the ServiceDefLoadHook andmust
# be defined in order to load service definitions on this system.
>>> svcdef_mgr = ServiceDefManager()
>>> svcdef_mgr.add_load_hook(CustomServiceDefLoader)

# Load a service by looking for it by name/version
>>> bookstore_def = svcdef_mgr.find_by_name('bookstore', '1.0')

14.1.1.2.3. Classes

14.1.1.2.3.1. class ServiceDef

class reschema.servicedef.ServiceDef(manager=None)

Loads and represents the complete service definition

A ServiceDef parses the top-level service definition fields and calls reschema.schema.Schema.parse() on sub-sections that have JSON Schema-based values.

Parameters:manager – The ServiceManager, if any, that is keeping track of this particular service definition.
__init__(manager=None)
check_references()

Iterate through all schemas and check references.

Check all resources and types associated with this service defintion and verify that all references can be properly resolved. This returns an array of jsonschema.Ref instances that cannot be resolved.

find(reference)

Resolve a reference using this servicedef as a relative base

Returns a jsonschema.Schema instance

Parameters:reference – string reference to resolve

The reference may be one of three supported forms:

  • <server><path>#<fragment> - fully qualified reference
  • <path>#<fragment> - reference is resolved against the same <server> as servicedef. <path> starts with ‘/’
  • #<fragment> - reference is resolved against the same <server> and <path> as servicedef
Raises:InvalidReferencereference does not appear to be to the correct syntax
find_resource(name)

Look up and return a resource by name

find_type(name)

Look up and return a type by name

load(filename)

Loads and parses a JSON or YAML schema.

Support both JSON(.json) and YAML(.yml/.yaml) file formats as detected by filename extensions.

Parameters:filename – The path to the JSON or YAML file.
Raises:ValueError – if the file has an unsupported extension.
load_from_stream(f, format='yaml')

Loads and parses a JSON or YAML schema.

Support both JSON(.json) and YAML(.yml/.yaml) file formats as detected by filename extensions.

Parameters:f – An open file object.
Raises:ValueError – if the file has an unsupported extension.
parse(obj)

Parses a Python data object representing a schema.

Parameters:obj (dict) – The Python object containig the schema data.
parse_text(text, format='yaml')

Loads and parses a schema from a string.

Parameters:
  • text – The string containing the schema.
  • format – Either ‘json’ (the default), ‘yaml’ or ‘yml’. This much match the format of the data in the string.
resource_iter()

Generator for iterating over all resources

type_iter()

Generator for iterating over all types

14.1.1.2.3.2. class ServiceDefManager

class reschema.servicedef.ServiceDefManager

Manager for ServiceDef instances.

A ServiceDefManager manages loading and finding ServiceDef instances by id as indicated in the ‘id’ property at the top level of the schema.

__init__()
add(servicedef)

Add a new ServiceDef instance known at the given id.

add_load_hook(load_hook)

Add a callable hook to load a schema by id.

Parameters:hook – an object that implements the ServiceDefLoadHook interface

Hooks are processed in order until the first hook returns a ServiceDef instance.

clear()

Clear all known schemas.

find_by_id(id_)

Resolve an id_ to a servicedef instance.

If a service definition by this id is not yet in the cache, load hooks are invoked in order until one of them returns a instance.

Raises:InvalidServiceId – No schema found for id and could not be loaded
find_by_name(name, version, provider='riverbed')

Resolve <provider/name/version> triplet to a servicedef instance.

If a service definition by this full name is not yet in the cache, load hooks are invoked in order until one of them returns a instance.

Parameters:
  • name – the service name
  • version – the service version
  • provider – the provider of the service
Returns:

a ServiceDef instance

Raises:

InvalidServiceId – No schema found for id and could not be loaded

14.1.1.2.3.3. class ServiceDefLoadHook

class reschema.servicedef.ServiceDefLoadHook

Interface for load hooks.

See ServiceDefManager.add_hook()

__init__()

x.__init__(...) initializes x; see help(type(x)) for signature

find_by_id(id_)

Find a ServiceDef by id.

Parameters:id – the globally unique URI identifying a service definition.
Returns:a ServiceDef instance or None
find_by_name(name, version, provider)

Find a ServiceDef by <name,version,provider> triplet.

Parameters:
  • name – the service name
  • version – the service version
  • provider – the provider of the service
Returns:

a ServiceDef instance or None