Clio Models

The next step is to define Clio models. A Clio model is a class that is going to be mapped to a table by the SQLAlchemy ORM. A Clio model also has a number of special methods that can be used to drive the workflow process and that will be described later.

It is easy to create a Clio-based model, just subclass from clio.Model:

import clio

class Address(clio.Model):
    pass

In many cases, a clio.Model needs to define its own __init__. This looks like this:

class Address(clio.Model):
    def __init__(self, code, street, city, country):
        super(Address, self).__init__(code)
        self.street = street
        self.city = city
        self.country = country

Note that it is required to call the superclass and pass it the code.

Mapping

After definining the tables and the model classes, we use the normal SQLAlchemy object relational mapper to map the classes to the tables:

from sqlalchemy.orm import mapper

mapper(Address, address_table)

This is standard SQLAlchemy, and we have seen everything needed to create a Clio-managed model. The situation becomes a bit more involved when we want to create relations between models.

Workflow properties

The Clio table columns described earlier will exist on the mapped instances. The following properties are available:

id
An integer attribute uniquely identifying the record underlying the instance. Will be automatically set by the system.
code
An integer that uniquely identifies the actual information managed this object. Other versions of this object in other workflow states will have the same code, but not the same id.
status
An integer that indicates the workflow status that the particular version is in.
workflow_timestamp
The moment this version last underwent a workflow transition.
creation_timestamp
The moment this object was created.

Table Of Contents

Previous topic

Clio Tables

Next topic

Relations

This Page