Python API

The Python package is a typed wrapper over the installed C ABI.

Python access to the public PostProject C ABI.

class postproject.Activity(id: 'ActivityId', kind: 'str', started_at_unix_micros: 'int | None', finished_at_unix_micros: 'int | None', tool: 'ToolIdentity | None', agent: 'AgentIdentity | None', inputs: 'tuple[ActivityEdge, ...]', outputs: 'tuple[ActivityEdge, ...]')

Bases: object

agent: AgentIdentity | None
finished_at_unix_micros: int | None
id: ActivityId
inputs: tuple[ActivityEdge, ...]
kind: str
outputs: tuple[ActivityEdge, ...]
started_at_unix_micros: int | None
tool: ToolIdentity | None
class postproject.ActivityCreatedEvent(activity_id: 'ActivityId', kind: 'str')

Bases: object

activity_id: ActivityId
kind: str
class postproject.ActivityEdge(representation_id: 'RepresentationId', role: 'str | None' = None)

Bases: object

representation_id: RepresentationId
role: str | None
class postproject.ActivityId(value: UUID)

Bases: _TypedId

Stable identity of one provenance activity.

class postproject.ActivityInputAddedEvent(activity_id: 'ActivityId', representation_id: 'RepresentationId', role: 'str | None' = None)

Bases: object

activity_id: ActivityId
representation_id: RepresentationId
role: str | None
class postproject.ActivityOutputAddedEvent(activity_id: 'ActivityId', representation_id: 'RepresentationId', role: 'str | None' = None)

Bases: object

activity_id: ActivityId
representation_id: RepresentationId
role: str | None
class postproject.ActivitySpec(kind: 'str', outputs: 'tuple[ActivityEdge, ...]', inputs: 'tuple[ActivityEdge, ...]' = (), started_at_unix_micros: 'int | None' = None, finished_at_unix_micros: 'int | None' = None, tool: 'ToolIdentity | None' = None, agent: 'AgentIdentity | None' = None)

Bases: object

agent: AgentIdentity | None
finished_at_unix_micros: int | None
inputs: tuple[ActivityEdge, ...]
kind: str
outputs: tuple[ActivityEdge, ...]
started_at_unix_micros: int | None
tool: ToolIdentity | None
class postproject.AgentIdentity(name: 'str | None' = None, identifier: 'ExternalIdentifier | None' = None)

Bases: object

identifier: ExternalIdentifier | None
name: str | None
exception postproject.AlreadyExistsError(code: int, message: str)

Bases: PostProjectError

A unique production object or attachment already exists.

exception postproject.AmbiguousResolutionError(code: int, message: str)

Bases: PostProjectError

A mutation requires an explicit choice between resolution candidates.

class postproject.Asset(id: AssetId, created_at_unix_micros: int, display_name: str | None, import_source: str | None)

Bases: object

Immutable logical asset summary.

created_at_unix_micros: int
display_name: str | None
id: AssetId
import_source: str | None
class postproject.AssetId(value: UUID)

Bases: _TypedId

Stable identity of one logical asset.

class postproject.AssetImportedEvent(asset_id: 'AssetId')

Bases: object

asset_id: AssetId
class postproject.AvailabilityIssue(resource_id: 'ResourceId', required: 'bool', kind: 'AvailabilityIssueKind', frames: 'tuple[int, ...]')

Bases: object

frames: tuple[int, ...]
kind: AvailabilityIssueKind
required: bool
resource_id: ResourceId
class postproject.AvailabilityIssueKind(*values)

Bases: Enum

Machine-readable category of a representation availability issue.

AMBIGUOUS_RESOURCE = 'ambiguous_resource'
MISSING_FRAMES = 'missing_frames'
OFFLINE_RESOURCE = 'offline_resource'
RESOURCE_ERROR = 'resource_error'
exception postproject.ConflictError(code: int, message: str)

Bases: PostProjectError

An operation conflicts with current transaction or production state.

class postproject.ContentStructureKind(*values)

Bases: Enum

Structural shape used to realize a representation.

IMAGE_SEQUENCE = 'image_sequence'
ORDERED_PARTS = 'ordered_parts'
PACKAGE = 'package'
SINGLE_RESOURCE = 'single_resource'
class postproject.EvidenceKind(*values)

Bases: Enum

Machine-readable reason supporting or opposing a candidate.

CONFLICTING_CANDIDATE = 'conflicting_candidate'
DISCOVERY_ERROR = 'discovery_error'
EXACT_FINGERPRINT_MATCH = 'exact_fingerprint_match'
FILE_NAME_MATCH = 'file_name_match'
FILE_SIZE_MATCH = 'file_size_match'
FULL_HASH_MATCH = 'full_hash_match'
KNOWN_LOCATOR_AVAILABLE = 'known_locator_available'
MEDIA_ROOT_RELATION = 'media_root_relation'
MEDIA_ROOT_UNAVAILABLE = 'media_root_unavailable'
MEDIA_ROOT_UNMAPPED = 'media_root_unmapped'
PARTIAL_FINGERPRINT_MATCH = 'partial_fingerprint_match'
RELATIVE_PATH_SIMILARITY = 'relative_path_similarity'
class postproject.ExternalIdentifier(scheme: str, value: str, qualifier: str | None = None)

Bases: object

Opaque external identity preserved exactly as supplied.

qualifier: str | None
scheme: str
value: str
class postproject.ExternalIdentifierAddedEvent(target: 'ObjectReference', identifier: 'ExternalIdentifier')

Bases: object

identifier: ExternalIdentifier
target: ProductionId | AssetId | RepresentationId | ResourceId | ActivityId
class postproject.ExternalIdentifierRemovedEvent(target: 'ObjectReference', identifier: 'ExternalIdentifier')

Bases: object

identifier: ExternalIdentifier
target: ProductionId | AssetId | RepresentationId | ResourceId | ActivityId
class postproject.FileResourceInput(path: str, role: str, required: bool = True)

Bases: object

Filesystem source and membership semantics for a compound member.

path: str
required: bool
role: str
class postproject.Fingerprint(algorithm: str, version: int, value: bytes)

Bases: object

Versioned, opaque content-identity evidence.

algorithm: str
value: bytes
version: int
exception postproject.FingerprintError(code: int, message: str)

Bases: PostProjectError

Media fingerprinting failed.

class postproject.HostObjectBinding(production_id: ProductionId, object: ProductionId | AssetId | RepresentationId | ResourceId | ActivityId)

Bases: object

Portable production-scoped reference stored by a host application.

object: ProductionId | AssetId | RepresentationId | ResourceId | ActivityId
production_id: ProductionId
class postproject.ImageSequenceDescriptor(prefix: str, suffix: str, padding: int, start: int, end: int, step: int, rate_numerator: int, rate_denominator: int, missing_frames: tuple[int, ...])

Bases: object

Compact patterned description of an image sequence.

end: int
missing_frames: tuple[int, ...]
padding: int
prefix: str
rate_denominator: int
rate_numerator: int
start: int
step: int
suffix: str
class postproject.ImageSequenceInput(directory: str, prefix: str, suffix: str, padding: int, start: int, end: int, step: int, rate_numerator: int, rate_denominator: int, missing_frames: tuple[int, ...] = ())

Bases: object

Filesystem source and compact descriptor for a new image sequence.

directory: str
end: int
missing_frames: tuple[int, ...]
padding: int
prefix: str
rate_denominator: int
rate_numerator: int
start: int
step: int
suffix: str
exception postproject.InternalError(code: int, message: str)

Bases: PostProjectError

The native library reported an internal invariant failure.

exception postproject.InvalidArgumentError(code: int, message: str)

Bases: PostProjectError, ValueError

An argument violates the public domain contract.

exception postproject.IoError(code: int, message: str)

Bases: PostProjectError, OSError

A filesystem or operating-system operation failed.

class postproject.Locator(id: 'LocatorId', uri: 'str', availability: 'LocatorAvailability', last_seen_unix_micros: 'int | None')

Bases: object

availability: LocatorAvailability
id: LocatorId
last_seen_unix_micros: int | None
uri: str
class postproject.LocatorAddedEvent(resource_id: 'ResourceId', locator_id: 'LocatorId')

Bases: object

locator_id: LocatorId
resource_id: ResourceId
class postproject.LocatorAvailability(*values)

Bases: Enum

Last observed availability of a resource locator.

OFFLINE = 'offline'
ONLINE = 'online'
UNKNOWN = 'unknown'
class postproject.LocatorId(value: UUID)

Bases: _TypedId

Stable identity of one resource locator.

class postproject.LocatorRetiredEvent(resource_id: 'ResourceId', locator_id: 'LocatorId')

Bases: object

locator_id: LocatorId
resource_id: ResourceId
class postproject.MediaRoot(id: MediaRootId, name: str, label: str | None, legacy_uri: str | None, priority: int, enabled: bool)

Bases: object

Immutable configured resolver root.

enabled: bool
id: MediaRootId
label: str | None
legacy_uri: str | None
name: str
priority: int
class postproject.MediaRootAddedEvent(media_root_id: 'MediaRootId')

Bases: object

media_root_id: MediaRootId
class postproject.MediaRootEnabledChangedEvent(media_root_id: 'MediaRootId', enabled: 'bool')

Bases: object

enabled: bool
media_root_id: MediaRootId
class postproject.MediaRootId(value: UUID)

Bases: _TypedId

Stable identity of one configured media root.

class postproject.MediaRootRemovedEvent(media_root_id: 'MediaRootId')

Bases: object

media_root_id: MediaRootId
class postproject.MetadataAddedOrReplacedEvent(target: 'ObjectReference', property: 'MetadataProperty')

Bases: object

property: MetadataProperty
target: ProductionId | AssetId | RepresentationId | ResourceId | ActivityId
class postproject.MetadataAssertion(target: 'ObjectReference', property: 'MetadataProperty', value: 'MetadataValue')

Bases: object

property: MetadataProperty
target: ProductionId | AssetId | RepresentationId | ResourceId | ActivityId
value: MetadataString | MetadataLanguageString | MetadataI64 | MetadataU64 | MetadataDecimal | MetadataBool | MetadataTimestamp | MetadataUri | MetadataBytes | MetadataRational | MetadataList | MetadataStruct | MetadataReference
class postproject.MetadataBool(value: 'bool')

Bases: object

value: bool
class postproject.MetadataBytes(value: 'bytes')

Bases: object

value: bytes
class postproject.MetadataDecimal(coefficient: 'int', scale: 'int')

Bases: object

coefficient: int
scale: int
class postproject.MetadataI64(value: 'int')

Bases: object

value: int
class postproject.MetadataLanguageString(value: 'str', language: 'str')

Bases: object

language: str
value: str
class postproject.MetadataList(values: 'tuple[MetadataValue, ...]')

Bases: object

values: tuple[MetadataString | MetadataLanguageString | MetadataI64 | MetadataU64 | MetadataDecimal | MetadataBool | MetadataTimestamp | MetadataUri | MetadataBytes | MetadataRational | MetadataList | MetadataStruct | MetadataReference, ...]
class postproject.MetadataProperty(vocabulary: str, property: str)

Bases: object

Vocabulary-qualified metadata property identity.

property: str
vocabulary: str
class postproject.MetadataRational(numerator: 'int', denominator: 'int')

Bases: object

denominator: int
numerator: int
class postproject.MetadataReference(target: 'ObjectReference')

Bases: object

target: ProductionId | AssetId | RepresentationId | ResourceId | ActivityId
class postproject.MetadataRemovedEvent(target: 'ObjectReference', property: 'MetadataProperty')

Bases: object

property: MetadataProperty
target: ProductionId | AssetId | RepresentationId | ResourceId | ActivityId
class postproject.MetadataString(value: 'str')

Bases: object

value: str
class postproject.MetadataStruct(fields: 'tuple[MetadataStructField, ...]')

Bases: object

fields: tuple[MetadataStructField, ...]
class postproject.MetadataStructField(name: 'str', value: 'MetadataValue')

Bases: object

name: str
value: MetadataString | MetadataLanguageString | MetadataI64 | MetadataU64 | MetadataDecimal | MetadataBool | MetadataTimestamp | MetadataUri | MetadataBytes | MetadataRational | MetadataList | MetadataStruct | MetadataReference
class postproject.MetadataTimestamp(unix_micros: 'int')

Bases: object

unix_micros: int
class postproject.MetadataU64(value: 'int')

Bases: object

value: int
class postproject.MetadataUri(value: 'str')

Bases: object

value: str
exception postproject.MigrationError(code: int, message: str)

Bases: PostProjectError

A production schema could not be migrated safely.

class postproject.NativeLibrary(path: str | PathLike[str] | None = None)

Bases: object

One explicitly located PostProject shared library.

check(status: int, error: _Pointer[Error]) None

Release an optional native error and raise its Python equivalent.

exception postproject.NotFoundError(code: int, message: str)

Bases: PostProjectError

A requested production object does not exist.

class postproject.OriginIdentity(name: str, version: str | None = None, uri: str | None = None)

Bases: object

Integrating application or process identity, not an authenticated user.

name: str
uri: str | None
version: str | None
exception postproject.PostProjectError(code: int, message: str)

Bases: RuntimeError

Base error reported by the native PostProject library.

class postproject.Production(native: NativeLibrary, handle: _Pointer[NativeProduction])

Bases: object

An owned native production handle supporting concurrent operations.

Calls may run from multiple threads, but close() must not overlap them.

property activities: tuple[Activity, ...]

Return every provenance activity in deterministic order.

property activities_consuming: _ActivitiesByRepresentation

Return consuming activities keyed by representation identity.

property activities_producing: _ActivitiesByRepresentation

Return producing activities keyed by representation identity.

property assets: _Assets

Return an iterable asset collection with identity membership checks.

changes_since(sequence: int, limit: int) tuple[Revision, ...]

Return a bounded ascending page of revisions after sequence.

close() None

Release the native handle. Repeated calls are harmless.

classmethod create(path: str | PathLike[str], display_name: str | None = None, *, library_path: str | PathLike[str] | None = None) Self

Create a new production without overwriting an existing path.

property external_identifiers: _ExternalIdentifiers

Return external identifiers keyed by their target object.

property host_bindings: _HostBindings

Return the portable host-binding formatter and parser.

property id: ProductionId

Return this production’s stable identity.

property latest_revision: Revision | None

Return the newest committed revision, if one exists.

property media_roots: tuple[MediaRoot, ...]

Return configured resolver roots in priority order.

property metadata: _Metadata

Return metadata assertions keyed by their target object.

property metadata_by_property: _MetadataByProperty

Return metadata assertions keyed by vocabulary-qualified property.

property objects_by_external_identifier: _ObjectsByExternalIdentifier

Return object matches keyed by (scheme, value).

classmethod open(path: str | PathLike[str], *, library_path: str | PathLike[str] | None = None) Self

Open an existing production.

property provenance_ancestors: _ProvenanceRepresentations

Return transitive ancestors keyed by representation identity.

property provenance_descendants: _ProvenanceRepresentations

Return transitive descendants keyed by representation identity.

property representations: _Representations

Return immutable representation snapshots keyed by asset identity.

property resolutions: _Resolutions

Return representation-resolution results keyed by asset identity.

resolve(asset_id: AssetId, root_mappings: Mapping[str, str | PathLike[str]] | None = None) tuple[RepresentationResolution, ...]

Resolve an asset using optional machine-local root mappings.

property revision_events: _RevisionEvents

Return semantic event lists keyed by revision identity.

transaction(*, origin: OriginIdentity | str | None = None, message: str | None = None) Transaction

Begin a transaction that commits on a clean context-manager exit.

class postproject.ProductionId(value: UUID)

Bases: _TypedId

Stable identity of one PostProject production.

class postproject.Representation(id: 'RepresentationId', asset_id: 'AssetId', kind: 'RepresentationKind', structure_kind: 'ContentStructureKind', members: 'tuple[RepresentationMember, ...]', image_sequence: 'ImageSequenceDescriptor | None', fingerprints: 'tuple[Fingerprint, ...]', resources: 'tuple[Resource, ...]')

Bases: object

asset_id: AssetId
fingerprints: tuple[Fingerprint, ...]
id: RepresentationId
image_sequence: ImageSequenceDescriptor | None
kind: RepresentationKind
members: tuple[RepresentationMember, ...]
resources: tuple[Resource, ...]
structure_kind: ContentStructureKind
class postproject.RepresentationAddedEvent(asset_id: 'AssetId', representation_id: 'RepresentationId')

Bases: object

asset_id: AssetId
representation_id: RepresentationId
class postproject.RepresentationAvailability(*values)

Bases: Enum

Aggregate availability of a complete representation.

AMBIGUOUS = 'ambiguous'
ERROR = 'error'
OFFLINE = 'offline'
ONLINE = 'online'
PARTIAL = 'partial'
class postproject.RepresentationId(value: UUID)

Bases: _TypedId

Stable identity of one usable asset representation.

class postproject.RepresentationKind(*values)

Bases: Enum

Semantic role of an asset representation.

DERIVED = 'derived'
OPTIMIZED = 'optimized'
ORIGINAL = 'original'
PROXY = 'proxy'
class postproject.RepresentationMember(resource_id: 'ResourceId', role: 'str | None', required: 'bool')

Bases: object

required: bool
resource_id: ResourceId
role: str | None
class postproject.RepresentationResolution(representation_id: 'RepresentationId', availability: 'RepresentationAvailability', resources: 'tuple[ResourceResolution, ...]', issues: 'tuple[AvailabilityIssue, ...]')

Bases: object

availability: RepresentationAvailability
issues: tuple[AvailabilityIssue, ...]
representation_id: RepresentationId
resources: tuple[ResourceResolution, ...]
class postproject.RepresentationResourceAddedEvent(representation_id: 'RepresentationId', resource_id: 'ResourceId', structural_position: 'int')

Bases: object

representation_id: RepresentationId
resource_id: ResourceId
structural_position: int
class postproject.ResolutionCandidate(uri: 'str', confidence_basis_points: 'int', evidence: 'tuple[ResolutionEvidence, ...]')

Bases: object

confidence_basis_points: int
evidence: tuple[ResolutionEvidence, ...]
uri: str
class postproject.ResolutionEvidence(kind: 'EvidenceKind', detail: 'str | None' = None)

Bases: object

detail: str | None
kind: EvidenceKind
class postproject.Resource(id: 'ResourceId', file_size: 'int | None', modified_at_unix_micros: 'int | None', fingerprints: 'tuple[Fingerprint, ...]', locators: 'tuple[Locator, ...]')

Bases: object

file_size: int | None
fingerprints: tuple[Fingerprint, ...]
id: ResourceId
locators: tuple[Locator, ...]
modified_at_unix_micros: int | None
class postproject.ResourceAddedEvent(resource_id: 'ResourceId')

Bases: object

resource_id: ResourceId
class postproject.ResourceId(value: UUID)

Bases: _TypedId

Stable identity of one storage resource.

class postproject.ResourceResolution(resource_id: 'ResourceId', state: 'ResourceResolutionState', candidates: 'tuple[ResolutionCandidate, ...]', evidence: 'tuple[ResolutionEvidence, ...]')

Bases: object

candidates: tuple[ResolutionCandidate, ...]
evidence: tuple[ResolutionEvidence, ...]
resource_id: ResourceId
state: ResourceResolutionState
class postproject.ResourceResolutionState(*values)

Bases: Enum

Outcome of resolving one storage resource.

AMBIGUOUS = 'ambiguous'
ERROR = 'error'
OFFLINE = 'offline'
ONLINE_AT_KNOWN_LOCATOR = 'online_at_known_locator'
RESOLVED_EXACT = 'resolved_exact'
RESOLVED_PROBABLE = 'resolved_probable'
class postproject.Revision(id: RevisionId, sequence: int, transaction_id: TransactionId, committed_at_unix_micros: int, origin: OriginIdentity | None, message: str | None)

Bases: object

One committed production mutation transaction.

committed_at_unix_micros: int
id: RevisionId
message: str | None
origin: OriginIdentity | None
sequence: int
transaction_id: TransactionId
class postproject.RevisionContext(origin: OriginIdentity | None = None, message: str | None = None)

Bases: object

Optional context applied to a transaction’s future revision.

message: str | None
origin: OriginIdentity | None
class postproject.RevisionEvent(position: int, payload: AssetImportedEvent | RepresentationAddedEvent | ResourceAddedEvent | RepresentationResourceAddedEvent | LocatorAddedEvent | LocatorRetiredEvent | MediaRootAddedEvent | MediaRootEnabledChangedEvent | MediaRootRemovedEvent | ExternalIdentifierAddedEvent | ExternalIdentifierRemovedEvent | MetadataAddedOrReplacedEvent | MetadataRemovedEvent | ActivityCreatedEvent | ActivityInputAddedEvent | ActivityOutputAddedEvent)

Bases: object

One ordered semantic event within a revision.

payload: AssetImportedEvent | RepresentationAddedEvent | ResourceAddedEvent | RepresentationResourceAddedEvent | LocatorAddedEvent | LocatorRetiredEvent | MediaRootAddedEvent | MediaRootEnabledChangedEvent | MediaRootRemovedEvent | ExternalIdentifierAddedEvent | ExternalIdentifierRemovedEvent | MetadataAddedOrReplacedEvent | MetadataRemovedEvent | ActivityCreatedEvent | ActivityInputAddedEvent | ActivityOutputAddedEvent
position: int
class postproject.RevisionId(value: UUID)

Bases: _TypedId

Stable identity of one committed revision.

exception postproject.StorageError(code: int, message: str)

Bases: PostProjectError

Persistent production data could not be read or written safely.

class postproject.ToolIdentity(name: 'str', version: 'str | None' = None, uri: 'str | None' = None)

Bases: object

name: str
uri: str | None
version: str | None
class postproject.Transaction(native: NativeLibrary, handle: _Pointer[NativeTransaction])

Bases: object

A caller-serialized transaction with context-manager semantics.

add_external_identifier(target: ProductionId | AssetId | RepresentationId | ResourceId | ActivityId, identifier: ExternalIdentifier) None

Stage an external identifier attachment.

add_image_sequence_representation(asset_id: AssetId, kind: RepresentationKind, source: ImageSequenceInput) RepresentationId

Stage one compact image-sequence representation.

add_media_root(name: str, label: str | None = None, priority: int = 0) MediaRootId

Stage a portable logical root used for resource discovery.

add_metadata(target: ProductionId | AssetId | RepresentationId | ResourceId | ActivityId, property: MetadataProperty, value: MetadataString | MetadataLanguageString | MetadataI64 | MetadataU64 | MetadataDecimal | MetadataBool | MetadataTimestamp | MetadataUri | MetadataBytes | MetadataRational | MetadataList | MetadataStruct | MetadataReference) None

Stage one typed metadata assertion.

add_ordered_parts_representation(asset_id: AssetId, kind: RepresentationKind, members: tuple[FileResourceInput, ...]) RepresentationId

Stage an ordered, fully required multi-file representation.

add_package_representation(asset_id: AssetId, kind: RepresentationKind, members: tuple[FileResourceInput, ...]) RepresentationId

Stage a role-bearing package representation.

add_single_file_representation(asset_id: AssetId, kind: RepresentationKind, path: str | PathLike[str]) RepresentationId

Stage one single-file representation for an existing asset.

close() None

Release the handle, implicitly rolling back if still open.

commit() None

Atomically persist every staged mutation.

confirm_locator(resource_id: ResourceId, uri: str) None

Stage explicit confirmation of one resource candidate URI.

create_activity(spec: ActivitySpec) ActivityId

Stage one complete provenance activity.

import_media(path: str | PathLike[str], display_name: str | None = None) AssetId

Prepare and stage one original-media import.

remove_external_identifier(target: ProductionId | AssetId | RepresentationId | ResourceId | ActivityId, identifier: ExternalIdentifier) None

Stage removal of one exact external identifier attachment.

remove_media_root(root_id: MediaRootId) None

Stage removal of one resolver root.

remove_metadata_property(target: ProductionId | AssetId | RepresentationId | ResourceId | ActivityId, property: MetadataProperty) None

Stage removal of every assertion for one target and property.

retire_locator(locator_id: LocatorId) None

Stage retirement of one superseded resource locator.

rollback() None

Discard every staged mutation.

set_media_root_enabled(root_id: MediaRootId, enabled: bool) None

Stage a resolver root’s enabled state.

set_revision_context(context: RevisionContext) None

Set optional origin and message fields for the future revision.

class postproject.TransactionId(value: UUID)

Bases: _TypedId

Stable identity of the transaction that produced a revision.

exception postproject.UnsupportedError(code: int, message: str)

Bases: PostProjectError

The requested operation is not supported by the current ABI.