Skip to main content
Version: 8 - Apfelstrudel

Data Model

The data-model of Cloudomation Engine helps understand the relationships between objects in Engine. It also helps understand how access objects through the flow_api.

Colour coding

Boxes

The boxes display records in the data-model. Each box lists their respective fields e.g. a webhook has the field flow_id.

ColourMeaningExplanation
Dark OrangeMeta TypeA record that serves as a base class for other records e.g. identity. Usually, you don't directly interact with them with the flow_api.
BlueSpecific TypeA record that derives from a meta type e.g. flow. Most of the cases these are the types you interact with via the flow_api.
OrangeSubrecordA record that does not derive from a meta type. They can serve as N-to-N mappings between other types e.g. mapping static wrappers to flows.

Arrows

The arrows show the relationships between types.

Types that derive from another type inherit their fields and foreign key references e.g. an activity inherits all fields of a record.

ColourMeaningExplanation
OrangePoint to the Meta TypeIf a box points to a meta type with an orange arrow, it means that it's derived from that meta type e.g. activity is derived from record.
BlackForeign KeyIf a box points to another box with a black arrow, it signalizes a reference to that object (subrecord or type) e.g. webhook points to flow, meaning that the webhook has a reference to a flow in the form of the flow_id field.

Flow Api Classes

The classes of the flow_api are automatically derived from the data-model.

The class name is the "camel-case" version of the type name. For example: the class for plugin_action is flow_api.plugin_action.PluginAction.

important

While you can instanciate the classes directly, you should instead rely on the methods of flow_api.System to do so.

So instead of this:

import flow_api

def handler(system: flow_api.System, this: flow_api.Execution, inputs: dict):
plugin_action = flow_api.plugin_action.PluginAction(...)

return this.success('all done')

you should do this:

import flow_api

def handler(system: flow_api.System, this: flow_api.Execution, inputs: dict):
plugin_action = system.plugin_action(...)

return this.success('all done')

Object References

Methods for navigating between objects in the flow_api are automatically derived from the data-model.

Outbound Reference

You can access an object that is referenced by another object through a foreign key.

For example if a webhook references a flow, a flow method exists so you can access the referenced flow.

import flow_api

def handler(system: flow_api.System, this: flow_api.Execution, inputs: dict):
flow = system.webhook(...).flow()

return this.success('all done')

Inbound Reference

If an object can be referenced by other objects through a foreign key, you can list those objects.

For example if a flow is referenced by one or more webhook(s), a flow_list method exists so you can access the webhook(s) that reference the flow.

import flow_api

def handler(system: flow_api.System, this: flow_api.Execution, inputs: dict):
webhook_list = system.flow(...).webhook_list()

return this.success('all done')

Creating References

If an object can reference another object through a foreign key, you can create and reference the object.

For example if a webhook can reference a resource_wrapper, an add_resource_wrapper method exists so you can and a reference to a wrapper.

import flow_api

def handler(system: flow_api.System, this: flow_api.Execution, inputs: dict):
resource_wrapper = system.webhook(...).add_resource_wrapper()

return this.success('all done')

Graphical Data Model

Below is a drawing of Cloudomation Engine's data-model.

tip

Right-click the image and select "Open image in new tab".