Skip to main content
Version: 12 - TBD

PythonModule

class resources.python_module.PythonModule

Base class: Resource

A shared Python module that flow-scripts can import.

Unlike a flow, a python-module is not executable on its own: it has no execution semantics. It holds reusable helper functions and constants that flow-scripts import by the module's name, running inline in the importing execution.

See the corresponding Flow Api class at PythonModule

PropertyDescriptionTypeImport/Export
bundle_idReference to the bundle this record is associated with. Allowed for BUNDLE_REPOSITORY, CONNECTOR, CUSTOM_OBJECT, DASHBOARD, DEVOLUTIONS_CONFIG, EXECUTION, FILE, FLOW, LDAP_CONFIG, MCP_USER_TOOL, MESSAGE, OBJECT_TEMPLATE, PLUGIN, PYTHON_MODULE, ROLE, SCHEDULE, SCHEDULER, SCHEMA, SETTING, SYNC_CONFIG, TAG, VAULT_CONFIG, WEBHOOK, WRAPPER. Not allowed for BUNDLE, ORGANIZATION, PROCESS, PROJECT, USER, WORKSPACE. Mutually exclusive with project_idUUID(as_uuid=False)both
bundle_nameThe name of the bundle. Will look up the bundle and set bundle_id.String(length=128)import only
childrenSubrecords to create in the SAME transaction as the record, as a mapping of {subrecord_type: [ {column: value, ...}, ... ]}. A generic, schema-derived create-with-children: a key is accepted iff it names a subrecord type whose parent is one of this record's ancestor tables — e.g. an object_template with object_template_attribute rows, a role with role_permission rows, or a flow with resource_wrapper rows. The parent foreign key (<parent>_id) is auto-wired to the new record; each child is validated by its own subrecord create-path. Passing children inline makes the record and its subrecords atomic (any child failure rolls the whole create/update back), replacing a create-then-add-N sequence with one round-trip. Exposed identically on REST create/update bodies and the GraphQL create_<type>/update_<type> mutation input (as an arbitrary-JSON scalar), and via MCP create_record/update_record, since it is a single schema-derived column with no per-surface code. Accepted on both create and update. Nesting to arbitrary depth IS supported: a child entry may itself carry a children key, validated recursively against THAT child subrecord type's own ancestor tables and created depth-first in the same transaction. (Under the current subrecord model the only externally-creatable chains happen to be one level deep — subrecords are not record-backed, so e.g. a record_metadata cannot be nested under an object_template_attribute — but the recursion is applied generically so any deeper externally-creatable chain works with no per-type code.) On read the children are exposed via their subrecord lists, not this field.JSONEncodedData()neither
commit_messageThe commit message for this change.Text()import only
created_atDateTime(timezone=True)export only
created_byUUID(as_uuid=False)export only
deleted_atWhen the record was moved to the trashbin. Null while the record is active.DateTime(timezone=True)import only
deleted_byUUID(as_uuid=False)import only
descriptionA multiline description of what this record is and does.Text()both
has_deprecationBoolean()export only
has_syntax_errorBoolean()export only
idUUID(as_uuid=False)neither
is_bundle_contentA flag to control if the resource is considered bundle content. Changes in bundle content mark the bundle as modified. Updating the bundle will modify the bundle content.Boolean()both
is_bundle_readonlyBoolean()neither
is_deletedWhether the record has been permanently deleted. Records in the trashbin are indicated by deleted_at instead.Boolean()export only
is_project_readonlyBoolean()neither
is_readonlyA flag to control if the record can be modified. Allowed for BUNDLE, BUNDLE_REPOSITORY, CONNECTOR, CUSTOM_OBJECT, DASHBOARD, DEVOLUTIONS_CONFIG, FILE, FLOW, MCP_USER_TOOL, OBJECT_TEMPLATE, PLUGIN, PROJECT, PYTHON_MODULE, ROLE, SCHEDULE, SCHEDULER, SCHEMA, SETTING, SYNC_CONFIG, TAG, VAULT_CONFIG, WEBHOOK, WRAPPER. Not allowed for EXECUTION, LDAP_CONFIG, MESSAGE, ORGANIZATION, PROCESS, USER, WORKSPACEBoolean()both
location_inheritanceControls the project/bundle association of a newly created record when no project_id/project_name/bundle_id/bundle_name is specified in the create request. Depending on the record type different options are available:
location_inheritance record types description
created_by all use the same location as the identity which creates the record
default all use the "Default project" where applicable or "Workspace" for record types which cannot be in a project
wrapped_resource execution use the same location as the innermost resource which is wrapped
resource execution use the same location as the resource on which the execution is based on
Notes:
  • If a project_id/project_name/bundle_id/bundle_name is specified in the request, it always takes precedence.
  • The options wrapped_resource and resource only work with executions which are based on a resource, not with ad-hoc connections or executions of type "SCRIPT". If used with ad-hoc connections or "SCRIPT" it will fall back to default.
  • If the record being created cannot be associated with the specified location, the fallback to default will be used.
  • If location_inheritance is unset, the default value used depends on the type of identity which creates the record as well as the type of record which is created. If an execution is created by any identity which is not an execution, it defaults to wrapped_resource. In all other cases it defaults to created_by.
String(length=128)import only
modified_atDateTime(timezone=True)neither
modified_byUUID(as_uuid=False)neither
nameThe name of this record. Must be unique across a workspace.String(length=128)both
organization_idUUID(as_uuid=False)export only
pending_delete_commitBoolean()neither
pending_delete_identity_idUUID(as_uuid=False)neither
pending_operation_idUUID(as_uuid=False)neither
pending_restore_commitBoolean()neither
pending_restore_identity_idUUID(as_uuid=False)neither
pending_trash_commitBoolean()neither
pending_trash_identity_idUUID(as_uuid=False)neither
project_idReference to the project this record is associated with. Allowed for CONNECTOR, CUSTOM_OBJECT, DASHBOARD, DEVOLUTIONS_CONFIG, EXECUTION, FILE, FLOW, MCP_USER_TOOL, MESSAGE, OBJECT_TEMPLATE, PLUGIN, PYTHON_MODULE, SCHEDULE, SCHEDULER, SCHEMA, SETTING, SYNC_CONFIG, TAG, VAULT_CONFIG, WEBHOOK, WRAPPER. Not allowed for BUNDLE, BUNDLE_REPOSITORY, LDAP_CONFIG, ORGANIZATION, PROCESS, PROJECT, ROLE, USER, WORKSPACE. Mutually exclusive with bundle_id.UUID(as_uuid=False)both
project_nameThe name of the project. Will look up the project and set project_id.String(length=128)import only
record_metadataRecord metadata to attach in the SAME transaction as the record create/update, as a mapping of {key: data} (key: string up to 128 chars, data: arbitrary JSON). Each entry is written as a record_metadata subrecord, upserted by (record_id, key). This removes the create-then-add race: without it a flow/API must first create the record and then add its metadata in a second call, leaving a window where the record exists un-marked (and may already be committed to git before the marker lands). Passing record_metadata inline makes the record and its metadata atomic. Accepted (and applied) on both create and update. On read the metadata is exposed via the record_metadata subrecord list, not this field.JSONEncodedData()neither
record_typeEnum('EXECUTION', 'MESSAGE', 'PROCESS', 'BUNDLE', 'BUNDLE_REPOSITORY', 'CONNECTOR', 'CUSTOM_OBJECT', 'DASHBOARD', 'DEVOLUTIONS_CONFIG', 'FILE', 'FLOW', 'LDAP_CONFIG', 'MCP_USER_TOOL', 'OBJECT_TEMPLATE', 'ORGANIZATION', 'PLUGIN', 'PROJECT', 'PYTHON_MODULE', 'ROLE', 'SCHEDULE', 'SCHEDULER', 'SCHEMA', 'SETTING', 'SYNC_CONFIG', 'TAG', 'USER', 'VAULT_CONFIG', 'WEBHOOK', 'WORKSPACE', 'WRAPPER', name='recordtype')neither
record_versionOptimistic-concurrency version token. Read-only, computed on read from modified_at at full (microsecond) precision (request it by name; not in the default summary). Pass the value you last read back as expected_version on update to guard against lost updates: if the record changed meanwhile the write is rejected with HTTP 409 (StaleWrite) carrying the current record and token. Not stored; not exported.Text()neither
recurse_pending_deleteBoolean()neither
recurse_pending_restoreBoolean()neither
recurse_pending_trashBoolean()neither
repository_pathThe path to the storing repository, relative to GIT_REPOSITORY_SAVE_PATHString(length=256)neither
resolved_iconThe record's resolved display icon: the concrete subtype's own icon column (dashboard/project/bundle/object_template/workspace/user/plugin_action), or NULL when the subtype carries no icon. Read-only, computed on read (request it by name; not in the default summary); not stored, not exported. Lets the polymorphic base record expose a per-record icon (sidebar quick-access, quick-search, generic record lists) without shadowing the subtype icon columns. Named resolved_icon, not icon, for the same reason record_version is not version: a base virtual column named icon would override the subtype icon columns in their own all_columns (ancestors overwrite descendants), turning them read-only and non-exporting.Text()neither
resource_typeEnum('BUNDLE', 'BUNDLE_REPOSITORY', 'CONNECTOR', 'CUSTOM_OBJECT', 'DASHBOARD', 'DEVOLUTIONS_CONFIG', 'FILE', 'FLOW', 'LDAP_CONFIG', 'MCP_USER_TOOL', 'OBJECT_TEMPLATE', 'ORGANIZATION', 'PLUGIN', 'PROJECT', 'PYTHON_MODULE', 'ROLE', 'SCHEDULE', 'SCHEDULER', 'SCHEMA', 'SETTING', 'SYNC_CONFIG', 'TAG', 'USER', 'VAULT_CONFIG', 'WEBHOOK', 'WORKSPACE', 'WRAPPER', name='resourcetype')neither
schema_versionString(length=128)both
scriptThe shared Python module source.Text()both
script_char_countComputed on read: the chars of script. A cheap size gate so callers can decide whether to fetch the full content body. Read-only; not stored; not exported.BigInteger()neither
script_line_countComputed on read: the lines of script. A cheap size gate so callers can decide whether to fetch the full content body. Read-only; not stored; not exported.BigInteger()neither
script_size_bytesComputed on read: the bytes of script. A cheap size gate so callers can decide whether to fetch the full content body. Read-only; not stored; not exported.BigInteger()neither
track_in_gitShould new records automatically be tracked in git.Boolean()both
workspace_idUUID(as_uuid=False)export only