Adapters

Tornado adapter

class parameter.adapter.TornadoAdapter(handler)[source]

Tornado adapter.

Usage:

from tornado import web

from parameter import Model, Argument, types
from parameter.adapter import TornadoAdapter


class UserEntity(Model):
    username = Argument("username", types.String, max_len=100)
    password = Argument("password", types.String, max_len=64)
    name = Argument("name", types.Unicode, max_len=50)
    arg = Argument("age", types.Integer, default=18)


class DemoHandler(web.RequestHandler):
    def get(self):
        entity = UserEntity(TornadoAdapter(self))

        self.write({
            "name": entity.name,
            "age": entity.age,
        })

JSON adapter

class parameter.adapter.JSONAdapter(data)[source]

JSON adapter to get arguments from a JSON object.

Usage:

from parameter import Model, Argument, types
from parameter.adapter import JSONAdapter

data = {"a": 1, "b": 2}

class DataEntity(Model):
    a = Argument("a", types.Integer)
    b = Argument("b", types.Integer)

adapter = JSONAdapter(data)
entity = DataEntity(adapter)

print(entity.a)         # 1
print(entity.b)         # 2

Nested:

from parameter import Model, Argument, types
from parameter.adapter import JSONAdapter

data = {"a": 1, "b": 2, "person": {"age": 18, "name": "Gray"}}

class PersonEntity(Model):
    are = Argument("age", types.Integer)
    name = Argument("name", types.Unicode)

class DataEntity(Model):
    a = Argument("a", types.Integer)
    b = Argument("b", types.Integer)
    person = Argument("person", types.Nested(PersonEntity))

adapter = JSONAdapter(data)
entity = DataEntity(adapter)

print(entity.a)         # 1
print(entity.b)         # 2
print(entity.person.age)    # 18
print(entity.person.name)   # Gray

Add custom adapter

class parameter.model.BaseAdapter[source]

To implement your own adapter, you need inherit from BaseAdapter.

There two methods must be overwirtten:

  • get_argument: Returns a single value
  • get_arguments: Returns a sequence of values.

Example:

from parameter.model import BaseAdapter


class DemoAdapter(BaseAdapter):
    "demo adapter"
    def __init__(self, arguments):
        self.arguments = arguments

    def get_argument(self, name, default):
        return self.arguments.get(name, default)

    def get_arguments(self, name):
        return self.arguments.getlist(name)

If you want your adapter to support nested, you need to override the spawn method, this method use the given value to return an new instance of the current adapter.

from parameter.model import BaseAdapter


class DemoAdapter(BaseAdapter):
    # see above
    def spawn(self, arguments):
        return DemoAdapter(arguments)
get_argument(name, default, *args, **kwargs)[source]

Returns the argument’s value via name.

Parameters:
  • name – The name of the argument.
  • default – The default value.
Raises:

ArgumentMissError

Raises:

ArgumentInvalidError

get_arguments(name, *args, **kwargs)[source]

Returns the argument’s values via name.

Parameters:name – The name of the argument.
Raises:ArgumentMissError
Raises:ArgumentInvalidError
static spawn(val)[source]

Use the new value to spawn an new adapter of this adapter.