An open-source interoperability standard for tools and content management systems used in media production.
Updated FileUrlPathConverter.pathFromUrl
to automatically convert long Windows paths, which exceed the Windows MAX_PATH
limit, to UNC non-normalised device paths (i.e. \\?\
-prefixed). #1257
Added entityTraits
overloads for convenience, providing alternatives to the core callback-based workflow. Includes a more direct method for resolving a single entity reference, and exception vs. result object workflows. #1217
Added new required core API method Manager
/ManagerInterface.entityTraits
, which can be used to determine the traits that an existing entity has, or that a new entity must have, for a given entity reference. #31
Renamed access policy for resolving future entities, ResolveAccess.kWrite
to ResolveAccess.kManagerDriven
. This is then consistent with the newly added managementPolicy
access mode. #1209
Access policy keyword argument names in the Python bindings for ManagerInterface
has changed to "resolveAccess"
for resolve
and "policyAccess"
for managementPolicy
, in order to conform to the corresponding C++ argument names.
Added convenience utils.FileUrlPathConverter
utility class for converting file://
URLs to and from paths. Both POSIX and Windows paths (including UNC) are supported in a platform-agnostic way (i.e. Windows paths can be processed on POSIX hosts and vice versa). #1117
Propagate OpenAssetIOException
-derived Python exceptions as a corresponding C++ exception if a Python method implementation raises when transparently called from C++. #947
Add version accessor methods to allow runtime introspection of OpenAssetIO library version. version.h
header distributed with install to allow compile time introspection. #1173
Add managementPolicy
support for querying traits whose required properties must be set in order for a publish to succeed, via a kRequired
access mode; and support for querying traits whose properties the manager wishes to dictate when publishing, via a kManagerDriven
access mode. #1209
Added the string representation of an EntityReference
when repr
'd in Python. #1186
Added basic string representation of a TraitsData
when repr
'd in Python. #1209
Note The following deprecated code paths are still available in this release, but will be removed in a future version.
Moved TraitsData
into the trait
namespace along with its peer container/type definitions. #1127
Removed python exceptions
module in favour of new errors
module. #1071
Moved BatchElementError
and BatchElementException
into the errors
namespace. #1071 #1073
Removed all subtypes of BatchElementException
, in favour of a single exception type for batch errors raised by the exception throwing convenience overloads. #1073
Updated ManagerInterface
to reflect which methods are required and which are optional, default method implementations have been updated:
NotImplementedException
.Note that in order to support multi-language plugins, pure virtual/ABC is not used to denote required methods in all cases. See the class API documentation for more details. #163
Added the (required) Manager
/ManagerInterface
hasCapability
method. A mechanism to query which particular capabilities a manager implements. This allows a Host to avoid NotImplementedException
s when a specific capability has not been implemented by any given manager. #DR022, #1113
Removed non-paged versions of the Manager
/ManagerInterface
relationship query methods and renamed the paged methods to remove the Paged
suffix. PagedRelationshipSuccessCallback
has been renamed to RelationshipQuerySuccessCallback
to better reflect the default of pagination, and reduce ambiguity when relationship creation methods are added in the future. #1125
Attempting to retrieve a trait property with TraitsData.getTraitProperty
or using trait view classes no longer raises an exception if the trait itself is missing. This simplifies many common access patterns, and can remove the need for hasTrait
/isImbuedTo
checks. #970
Removed const
from the majority of interface methods to allow implementations to make use of private state for efficiency reasons. #518
errors.h
renamed to errors/errorCodes.h
#1073
Removed the "Sample Asset Manager" example, which was wholly out of date, and has been superseded by the standalone manager template repository.
Changed success/return type of defaultEntityReference
to wrap in std::optional
. Updated expected manager response such that an optional without a value signals that no default is available for an otherwise valid query. Changed default implementation to respond with an empty optional in the success callback, rather than error. #1100
The middleware will validate that the manager's implementation provides the kEntityReferenceIdentification
and kManagementPolicyQuery
capabilities upon initialization. #1148
Added new exception types, allowing all OpenAssetIO exceptions to share a common base. #1071
Exceptional conveniences now provide additional information such as entityReference, index, access, and error type in the message of the exception. #1073
Modified Python bindings for all non-trivial methods such that they release the GIL before calling any underlying C++ implementation. #554
Improved error messaging when defaultManagerForInterface
points to a directory not a file.
Added some protection for accidental overwrites of a CMake installed openassetio
Python package, by installing a .dist-info
metadata directory alongside the package. pip install
will then fail/warn against accidental overwrites/overrides. Added a CMake variable OPENASSETIO_ENABLE_PYTHON_INSTALL_DIST_INFO
to disable this feature. #1088
Manager.createContext
does not call ManagerInterface.createState
if manager is not capable of kStatefulContexts
, in which case the Context
is returned without a managerState
. #163
Removed the unused PythonPluginSystemManagerPlugin.uiDelegate
method, along with associated UI related documentation that referenced non-existent functionality. #1150
Clarified ManagerInterface
documentation around the relative "stateless" nature of the API and its reentrant design. #1143
Warning
Removed
Context.Access
and instead added per-workflow access mode enumerations under anaccess
namespace. Added these enums as required arguments to various API functions, replacing the usage ofContext.Access
. #1054Changed signature of
preflight
to accept aTraitsData
per reference, rather than a single trait set. The host is now expected to communicate any relevant information that it owns and is known atpreflight
time. #1028
Relaxed the restriction on register
that all trait sets of the provided TraitsData
elements must match. This allows batched publishing of heterogeneous entity types. #1029
Removed cpython
dependency from conanfile.py
. When building OpenAssetIO, it is now expected that a development install of the appropriate Python version is discoverable on the system. #1038
Migrated manager methods entityExists
and defaultEntityReference
to C++ with Python bindings, and redesigned to use a callback based batch API. #992 #993
Migrated ManagerInterface
/Manager
updateTerminology
to C++ with Python bindings. Tweaked interface to be returned based rather than out-param based. #996
Removed kWriteMultiple
and kReadMultiple
access patterns, due to not having coherent use cases. #1016
Removed Context.Retention
due to not having coherent use cases. #1048
Added kCreateRelated
access pattern, to indicate when a workflow specifically creates a new entity as a relation to an existing one. #1016
Added BatchElementError.ErrorCode.kInvalidTraitSet
and InvalidTraitSetBatchElementException
. #992
Increased verbosity when running the openassetio.test.manager
API compliance suite test harness. The report includes tests that were skipped, helping to detect accidentally omitted fixtures. 1032
Added some aliases to the Doxygen API documentation. In particular, Ptr
and ConstPtr
aliases are now cross-referencable.
Altered the fixture that causes a skip in relationship based API compliance tests, to be the more specific relationship traitset. #1022
Set the correct context for various tests in the API Compliance openassetio.manager.test
test harness.
Refactored getRelatedReferences
into getWithRelationship
and getWithRelationships
to better define the two possible batch-axis, and simplify implementation on both sides of the API. This also changes the methods over to callback signatures for consistency with the rest of the API, and migrates them to C++ with Python bindings. #847 #919 #913
Removed version query APIs (entityVersion
, entityVersions
, finalizedEntityVersion
) in favour of use of the more general resolve
and getWithRelationship
methods. See DR017 for details. #980
Updated castToPyObject
to convert a nullptr
input to a Python None
, rather than throwing an exception. #988
Removed out of date constants from the Python openassetio.constants
module. These have been replaced by domain-specific traits and specifications defined in their own repositories, such as OpenAssetIO-MediaCreation.
Migrated remaining constants to C++ with Python bindings. This means that from openassetio.constants import <name>
no longer works - the constants
module must be imported wholesale. #998
kField_
, to use an InfoKey_
prefix instead. The deprecated constant variables will be removed in a future release. #998
Added paged implementations of getWithRelationship
and getWithRelationships
, called getWithRelationshipPaged
and getWithRelationshipsPaged
. These methods are the equivalent of the non-paged versions, but provide an EntityReferencePager
object, rather than a direct list of results, allowing for correct handling of extremely large/unbounded data sets. #971
Added default implementations of getWithRelationship
and getWithRelationships
that return empty lists, making these methods opt-in for manager implementations. #163
Added coverage of the getWithRelationship[s]
and getWithRelationship[s]Paged
methods of the ManagerInterface
to the openassetio.manager.test
harness. #914 #972
Added requireEntityReferenceFixture
and requireEntityReferencesFixture
utility methods for cases written for the openassetio.test.manager
(aka apiComplianceSuite
) test harness. These convert a string fixture into an EntityReference
object, or a list-of-strings fixture into a list of EntityReference
objects, respectively. #914
Migrated the ManagerInterface
/Manager
flushCaches
method to C++ with Python bindings. #994
Added a call to flushCaches
after every openassetio.test.manager
(aka apiComplianceSuite
) test case, giving the manager plugin a chance to clean up between tests. #994
isEntityReferenceString
, allowing the plugin's implementation to be short-circuited. In particular, if the plugin's implementation is written in Python, then a prefix check short-circuits the need for a costly Python function call for this hot code path. #566
Added an overload of ManagerFactory.defaultManagerForInterface
that takes a config file path string argument, rather than using an
environment variable. #937
Added support for ${config_dir}
interpolation within manager string settings retrieved from the TOML config file used by defaultManagerForInterface
. This token expands to the absolute directory of the TOML config file. #804
Manager.createChildContext
now deep-copies the parent locale to prevent subsequent modifications of the locale of one context from affecting the other. #896
Removed ManagerInterface.setRelatedReferences
pending re-design. #16
Simplified the locale TraitsData
provided to API compliance tests via the openassetio.test.manager
test harness. The locale now contains only a single "openassetio:test.locale"
trait with a "case"
property giving the name of the unittest
test case. #835
Removed the TraitBase
and SpecificationBase
classes. Trait and specification view classes are no longer part of the core API and are instead auto-generated by the OpenAssetIO-TraitGen tool. #835
Changed the arguments of BatchElementErrorCallback
and ResolveSuccessCallback
from reference types to value types. #858
castToPyObject
and castFromPyObject
to openassetio-python-bridge
to facilitate converting between C++ and Python objects for hosts seeking to support mixed language workflows. Note : Some methods on Manager
and ManagerInterface
are currently implemented in python, pending imminent port to C++. Due to this, these methods will not yet be available for use on a python object returned from castToPyObject
. #798
Added support for running ctest
when a python venv is used to determine which Python distribution to build against.
HostSession
methods logger
and host
now return a const reference to the held pointer rather than a copy. #815 #904
Contexts are now created with an empty TraitsData
in their locale, this makes testing for imbued traits easier as it can be assumed that the pointer is never null. #903
EntityReference
objects are now coercible to strings in Python, allowing more intuitive use with format
, print
, and others. #573
Added Ptr
/ConstPtr
alias members to all appropriate C++ classes, aliasing the associated shared_ptr
of that class. #918
Added support for building for Python 3.11 #683
Renamed TraitBase.isValid
to isImbued
for symmetry with imbue
/imbueTo
methods. #815
Changed the host identifier, and removed the custom locale from the simpleResolver
example as they did not follow best practice.
BatchElementErrorCallback
moved from the top level openassetio
namespace to the openassetio::hostApi::Manager
namespace. #849
Removed the entityName
and entityDisplayName
methods in favour of resolvable traits to minimize API calls and allow industry specific flexibility. See OpenAssetIO-MediaCreation. #837
Added TraitBase.isImbuedTo
static/class method, giving a cheaper mechanism for testing whether a TraitsData
is imbued with a trait. #815
Added resolve
, preflight
and register
overloads for convenience, providing alternatives to the core callback-based workflow. Includes a more direct method for resolving a single entity reference, and exception vs. result object workflows. #849 #850 #851 #852 #853 #854
Improved the documentation for the simpleResolver
example, to provide more context when using it as a starting point for an OpenAssetIO integration.
Update the pybind dependency version to 2.10.1. #863
Made BatchElementError
a copyable type in the C++ API. #849
Added equality/inequality comparison operators to BatchElementError
. #862
Made the C++ codebase compliant with Clang-Tidy v15. Note that this is not yet enforced on CI. #847
nodiscard
from TraitsData::getTraitProperty
, and TraitBase::getTraitProperty
, to allow "value or default" style use cases. #825
OPENASSETIO_ENABLE_C
CMake option must be explicitly set to ON
.FixtureAugmentedTestCase
class of the openassetio.test.manager.harness
can now be configured to create a new, uninitialized manager instance for each test case, by setting the shareManger
class variable or derived classes to False
. This facilitates testing of a manager's initialization behavior. BAL#26
Ensured that the Python GIL is acquired within createPythonPluginSystemManagerImplementationFactory
, so that it is no longer necessary to acquire externally by the calling (host) thread. #797
Fixed use-after-free issue in hybrid C++/Python applications, where the Python interpreter is destroyed before OpenAssetIO objects are cleaned up. This could manifest as segfaults or hangs at program exit. #805
openassetio.traits
module has been removed. OpenAssetIO itself no longer contains any trait definitions. Integrations of the API should use the established standards particular to the area of use. See OpenAssetIO-MediaCreation for traits previously included here. #717