This release breaks binary compatibility and may break source compatibility with C++ hosts and managers. In addition, this release may break source compatibility for Python hosts. See breaking changes section for more details.
-
Removed official support for Python 3.7 and 3.9. The minimum supported Python version is now Python 3.10. This includes PyPI packages. #1365 #1389
-
Removed deprecated type aliases
openassetio.TraitsData
,openassetio.BatchElementError
andopenassetio.BatchElementException
. Removed the deprecated explicit*BatchElementException
exception subtypes under the top-levelopenassetio
namespace. Removed the deprecated Pythonopenassetio.exceptions
module. Removed the deprecatedkField_*
constants. #1311 -
Marked as "final" several C++ Python bindings of classes that do not support Python inheritance, such that an error will be encountered at import time if an attempt is made to inherit from them. #1357
-
Updated the API contract to no longer require that managers throw an exception when an unrecognized setting is given during initialization. The
openassetio.test.manager
API Compliance test suite no longer asserts that this is the case. #1202 -
Switched from
std::unordered_set
tostd::set
for trait sets (viaTraitSet
alias) in C++. This allows C++std
algorithm set operations to work. Python is unaffected. This is mostly a source-compatible change, provided theTraitSet
alias is used in consuming code, and nounordered_set
-specific API is used (e.g.reserve(...)
). #1339 -
Source values for
BatchElementError
error codes changed to an internally-namespacedenum
rather than global macros. #1060 -
Removed
OPENASSETIO_GLIBCXX_USE_CXX11_ABI
CMake build option. Builds will use the system default libstdc++ ABI, rather than defaulting to the old ABI. #1353
-
Added SimpleCppManager - a minimal C++ manager and plugin example implementation, useful for testing C++ plugin support in hosts. This has minimal API support, so Basic Asset Library (BAL) should still be preferred as a test manager when Python is available. #1324
-
For Windows users, added
OPENASSETIO_DLL_PATH
environment variable to allow non-standard Python installations to locateopenassetio.dll
, if required. #1340 -
Added
kAuthError
to the set of possibleBatchElementError
error codes. #1009
-
Added singular overload of
managementPolicy
for convenience. #856 -
Updated the
simpleResolver
example host to support C++ plugins. #1324 -
Added a type hint for the
Manager
instance injected into theopenassetio.test.manager
API Compliance test harness, to aid in IDE code completion when writing test cases for manager plugins. -
importlib_metadata
is no longer a dependency for Python manager plugins to make use of Python entry point hooks. #1389
-
Modified OpenAssetIO Python distributions (e.g. installed with
pip install
) to allow C++ plugins to load. OpenAssetIO is now bundled as multiple shared libraries, allowing external libraries to link. #1340 -
Fixed Python wheel builds to use the new libstdc++ ABI, reflecting their associated VFX Reference Platform version. #1352
-
Fixed the (Python-only)
terminology.Mapper
class such that its terminology dict can be updated by the manager. #1356
This release introduces new features, and remains source compatible.
The addition of a new virtual method,
LoggerInterface.isSeverityLogged
, makes this release a binary incompatibility.
-
Many types are now printable, with
<<
operators available in C++, andstr
andrepr
functions available in python. Notably, this includesTraitsData
, which when printed now displays all the properties contained within the traits, rather than simply a list of trait ids.Note: Due to this, some runtime string output may have slightly changed, and tests may need to be adjusted. #1307
-
Added a C++ plugin system. In particular, hosts can use the
CppPluginSystemManagerImplementationFactory
class (as a drop-in replacement forPythonPluginSystemManagerImplementationFactory
) in order to load C++ manager plugins. Manager plugin authors provide a shared library that exposes anopenassetioPlugin
function that returns aPluginFactory
function pointer, which in turn returns aCppPluginSystemManagerPlugin
object. #1115 -
openassetio.test.manager
, notably used for Api Compliance tests, updated to automatically load C++ plugins if a python plugin of the requested identifier cannot be found. #1294 -
Added
LoggerInterface.isSeverityLogged
to allow users to short-circuit log message construction if the logger indicates the intended severity will be filtered. UpdatedSeverityFilter
to use the most pessimistic of its own severity and that of the wrapped logger. #1014 -
Added
utils.substitute
providing a common string substitution format using named placeholders in libfmt/Python format string style syntax. #1213
-
Added
getRelationship(s)
andentityExists
overloads for convenience, providing alternatives to the core callback-based workflow. Includes more direct methods for singular queries, as well as exception vs. result object workflows. #973 #1169 -
Added
.pyi
stub files to the Python package to aid IDE code completion for Python bindings of C++ types. #1252
- Deprecated top level
plugin
variable for python plugins in favour ofopenassetioPlugin
, in order to reduce risk of conflict with other plugin systems, and maintain consistency with the C++ plugin system. #1290
-
Updated
FileUrlPathConverter.pathFromUrl
to automatically convert long Windows paths, which exceed the WindowsMAX_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
toResolveAccess.kManagerDriven
. This is then consistent with the newly addedmanagementPolicy
access mode. #1209 -
Access policy keyword argument names in the Python bindings for
ManagerInterface
has changed to"resolveAccess"
forresolve
and"policyAccess"
formanagementPolicy
, in order to conform to the corresponding C++ argument names.
-
Added convenience
utils.FileUrlPathConverter
utility class for convertingfile://
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 akRequired
access mode; and support for querying traits whose properties the manager wishes to dictate when publishing, via akManagerDriven
access mode. #1209
-
Added the string representation of an
EntityReference
whenrepr
'd in Python. #1186 -
Added basic string representation of a
TraitsData
whenrepr
'd in Python. #1209
-
Throw an exception when attempting to copy-construct a null
TraitsData
. #1153 -
Modified no-argument constructor of
Context
to create an empty (but non-null)locale
. #1153
Note The following deprecated code paths are still available in this release, but will be removed in a future version.
-
Moved
TraitsData
into thetrait
namespace along with its peer container/type definitions. #1127 -
Removed python
exceptions
module in favour of newerrors
module. #1071 -
Moved
BatchElementError
andBatchElementException
into theerrors
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:- Pre-initialization methods are a no-op or return empty data.
- Post-initialization methods raise a
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 avoidNotImplementedException
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 thePaged
suffix.PagedRelationshipSuccessCallback
has been renamed toRelationshipQuerySuccessCallback
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 forhasTrait
/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 toerrors/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 instd::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
andkManagementPolicyQuery
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 variableOPENASSETIO_ENABLE_PYTHON_INSTALL_DIST_INFO
to disable this feature. #1088 -
Manager.createContext
does not callManagerInterface.createState
if manager is not capable ofkStatefulContexts
, in which case theContext
is returned without amanagerState
. #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 providedTraitsData
elements must match. This allows batched publishing of heterogeneous entity types. #1029 -
Removed
cpython
dependency fromconanfile.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
anddefaultEntityReference
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
andkReadMultiple
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
andInvalidTraitSetBatchElementException
. #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
andConstPtr
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
intogetWithRelationship
andgetWithRelationships
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 generalresolve
andgetWithRelationship
methods. See DR017 for details. #980 -
Updated
castToPyObject
to convert anullptr
input to a PythonNone
, 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 - theconstants
module must be imported wholesale. #998
- Renamed manager info dictionary key constants, which were prefixed
with
kField_
, to use anInfoKey_
prefix instead. The deprecated constant variables will be removed in a future release. #998
-
Added paged implementations of
getWithRelationship
andgetWithRelationships
, calledgetWithRelationshipPaged
andgetWithRelationshipsPaged
. These methods are the equivalent of the non-paged versions, but provide anEntityReferencePager
object, rather than a direct list of results, allowing for correct handling of extremely large/unbounded data sets. #971 -
Added default implementations of
getWithRelationship
andgetWithRelationships
that return empty lists, making these methods opt-in for manager implementations. #163 -
Added coverage of the
getWithRelationship[s]
andgetWithRelationship[s]Paged
methods of theManagerInterface
to theopenassetio.manager.test
harness. #914 #972 -
Added
requireEntityReferenceFixture
andrequireEntityReferencesFixture
utility methods for cases written for theopenassetio.test.manager
(akaapiComplianceSuite
) test harness. These convert a string fixture into anEntityReference
object, or a list-of-strings fixture into a list ofEntityReference
objects, respectively. #914 -
Migrated the
ManagerInterface
/Manager
flushCaches
method to C++ with Python bindings. #994 -
Added a call to
flushCaches
after everyopenassetio.test.manager
(akaapiComplianceSuite
) test case, giving the manager plugin a chance to clean up between tests. #994
- Reintroduced the optional optimized entity reference prefix check
for
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 bydefaultManagerForInterface
. 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 theopenassetio.test.manager
test harness. The locale now contains only a single"openassetio:test.locale"
trait with a"case"
property giving the name of theunittest
test case. #835 -
Removed the
TraitBase
andSpecificationBase
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
andResolveSuccessCallback
from reference types to value types. #858
- Added utility methods
castToPyObject
andcastFromPyObject
toopenassetio-python-bridge
to facilitate converting between C++ and Python objects for hosts seeking to support mixed language workflows. Note : Some methods onManager
andManagerInterface
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 fromcastToPyObject
. #798
-
Added support for running
ctest
when a python venv is used to determine which Python distribution to build against. -
HostSession
methodslogger
andhost
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 withformat
,print
, and others. #573 -
Added
Ptr
/ConstPtr
alias members to all appropriate C++ classes, aliasing the associatedshared_ptr
of that class. #918 -
Added support for building for Python 3.11 #683
-
Renamed
TraitBase.isValid
toisImbued
for symmetry withimbue
/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 levelopenassetio
namespace to theopenassetio::hostApi::Manager
namespace. #849 -
Removed the
entityName
andentityDisplayName
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 aTraitsData
is imbued with a trait. #815 -
Added
resolve
,preflight
andregister
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. #874
- Removed
nodiscard
fromTraitsData::getTraitProperty
, andTraitBase::getTraitProperty
, to allow "value or default" style use cases. #825
- Disabled the (nascent) C bindings by default. To enable, the
OPENASSETIO_ENABLE_C
CMake option must be explicitly set toON
.
- The
FixtureAugmentedTestCase
class of theopenassetio.test.manager.harness
can now be configured to create a new, uninitialized manager instance for each test case, by setting theshareManger
class variable or derived classes toFalse
. 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
- The
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
-
OpenAssetIO now has a soft dependency on the
importlib_metadata
Python package (>=3.6.0). If you have been installing the project manually by extendingPYTHONPATH
(instead of usingpip
) you may also need to additionally satisfy this dependency if you wish to make use of entry point based discovery of Python plugins. #762 -
The
PythonPluginSystem
no longer clears existing plugin registrations whenscan
is called. ThePythonPluginSystemManagerImplementationFactory
has been updated to callreset
itself, so this change only affects any direct use of thePythonPluginSystem
by third party code. #703 -
The
PythonPluginSystemManagerImplementationFactory
now checks fall-back environment variables during construction, rather than the first time plugins are queried. This means changes to the environment made after a factory has been created will not affect that factory. #762 -
Removed references to
openassetio-traitgen
from codebase, is now in own repository #715 -
Removed
toml++
as vendored library. Is now an external dependency similar to other external dependencies. -
Moved
setup.py
andpyproject.toml
under the Python component's directory, i.e.src/openassetio-python
. This means the minimum version ofpip
used to build wheels (or install from source) is now 21.3, where in-tree builds are the default. #728 -
Updated various Python method argument names to match their C++ equivalent. Specifically this affects
Manager
/ManagerInterface.managementPolicy
,SeverityFilter.setSeverity
,TraitsData.hasTrait
/.addTrait
/.addTraits
/.setTraitProperty
/.getTraitProperty
/.traitPropertyKeys
/ copy-constructor. #743
- Added entry point based discovery of Python manager plugins. This
allows pure Python manager plugins to be deployed and managed as
Python packages, without the need to wrangle
OPENASSETIO_PLUGIN_PATH
. Theopenassetio.manager_plugin
entry point should expose a module providing a top-levelplugin
variable, holding aManagerPlugin
derived class. This can be disabled by setting theOPENASSETIO_DISABLE_ENTRYPOINTS_PLUGINS
env var to any value. #762
-
Added
openassetio-build
docker image. This is an extension of the already used ASFW CY22 docker image, but with the additional OpenAssetIO dependencies installed into it. As we have also installed test dependencies into this image, this unlocks out-of-the-box sandboxed testing workflows via docker. #716 -
Reorganized the directory structure to better reflect the fact that the project is split into distinct components, and that it is primarily a CMake-driven project with optional Python component. #655
-
Improved documentation for users that wish to build/release OpenAssetIO. #624 #716 #749
-
Improved support for consumption of OpenAssetIO by downstream CMake projects.
OpenAssetIOConfig.cmake
provides variables for locating the installation location of binaries and Python sources. When used as a CMake subproject, namespacedALIAS
targets match the exported targets, and the build-tree hasRPATH
support. #675
-
Fixed various broken URLs in markdown docs. #744
-
Fixed unnecessary link dependencies on Python and pybind11 when building and linking to the
openassetio-python-bridge
library. #675 -
Fixed the file extension for Windows debug builds of the
_openassetio
Python extension module. #675 -
Fixed
.pdb
debug symbol files installation location on Windows. #675
-
Renamed the
Trait
Python class toTraitBase
for consistency with other classes. #703 -
Renamed the
openassetio-codegen
tool toopenassetio-traitgen
to avoid ambiguity. #646 -
The BasicAssetLibrary test-harness manager plugin has been extracted into its own repository to simplify its ongoing development and version management. #672
- Added compatibility with Python 3.7. #660
-
Added
[[nodiscard]]
attribute to variousmake
factory functions, may generate additional compiler warnings in your project. -
Removed predownload of test dependencies, meaning contributors must reuse their python environments in order to run tests offline. #629
-
Changed location of python virtual environment created by
openassetio-python-venv
CMake build target to be outside of the CMake install tree. This target is executed during test runs ifOPENASSETIO_ENABLE_PYTHON_TEST_VENV
is enabled. #629 -
Changed
--install-folder
location of conan install in bootstrap scripts from$CONAN_USER_HOME
to$WORKSPACE/.conan
. Users who have been using the bootstrap scripts directly may need to update their toolchain CMake arguments.
-
Added
simpleResolver.py
example host (underresources/examples
), that provides a basic CLI to resolve Entity References for a supplied Trait Set. -
Added CMake option
OPENASSETIO_ENABLE_PYTHON_TEST_VENV
, allowing the user to configure whether a python virtual environment is automatically created duringctest
execution, along with a new CMake presettest-custom-python-env
that disables this option.
-
Added Python sources to the CMake install tree (rather than requiring a separate
pip install
for the pure Python component), effectively creating a complete bundle that can be used directly or packaged. #629 -
Updated
setup.py
to build the Python extension module. Assuming CMake'sfind_package
can locate dependencies, thenpip install .
is all that is needed to build and install OpenAssetIO into a Python environment. #630 -
Added 'unstable' warning to docs to notify of python api that has not yet been updated for the C++ api, and is thus inherently unstable. #600
-
Changed CMake configuration so that
openassetio-python-venv
target now automatically installs python dependencies of enabled components. #629 -
Added convenience methods
debugApi
,debug
,info
,progress
,warning
,error
,critical
toLoggerInterface
to log messages of the respective severity. -
Added
OPENASSETIO_CONAN_SKIP_CPYTHON
environment variable to prevent conan installing its own python version. This is to support workflows where the user is bringing their own python environment, and does not want python installations to conflict. #653 -
Bleeding edge python wheels are now downloadable as artifacts from the
Build wheels
github actions workflow. #653
-
Added checks to the
test.manager.apiComplianceSuite
to ensure the correct handling of malformed references. -
Reordered
BatchElementError.ErrorCode
constants to allow grouping of entity-related errors. #587 -
Migrated
Manager.preflight
andManager.register
to use the new callback based batch API. #587 -
Renamed
apiComplianceSuite
fixtures to disambiguate their use:a_malformed_reference
->an_invalid_reference
a_malformed_entity_reference
->a_malformed_refrence
#585
-
Renamed
ResolveErrorCallback
toBatchElementErrorCallback
for use more widely in callback based API functions. #588
-
Added basic publishing support to the
BasicAssetLibrary
(BAL) example manager plugin. This allows rudimentary entity creation workflows to be explored. Initially, support is limited to the simple in-memory creation/update of entities, with verbatim store/recall of the supplied traits data. #585 -
Added the
$OPENASSETIO_DEFAULT_CONFIG
mechanism, that allows the API to be bootstrapped from a simple TOML file referenced by this env var. Presently, this is exposed via theManagerFactory.createDefaultManagerForInterface
method, which reads the manager identifier/settings from this file and returns a suitably configured instance of that manager. #494
-
Added new
BatchElementError.ErrorCode
constants:kMalformedEntityReference
When an entity reference is valid, but malformed for the calling context and target entity.kEntityAccessError
When the supplied context's access is the specific cause of the error. #587
-
Added (protected)
ManagerInterface.createEntityReference
method to facilitate the creation ofEntityReference
values as required by a manager's implementation. #549 -
Added
TraitsData.traitPropertyKeys
to return a set of the property keys for a given trait. #498 -
Migrated the
preflight
andregister
ManagerInterface
methods to C++. #588 -
Migrated the
preflight
andregister
Manager
methods to C++. #588 -
Reformatted the Python codebase using black, and added CI checks to enforce Python formatting going forward.
-
Fixed
Manager.resolve
success callback such that the trait data provided is compatible with C++ trait views. #605 -
Fixed the
RetainPyArgs
Python binding helper to work with functions that takeshared_ptr
s by const reference, as well as by value. This affected the Python bindings ofcreateManagerForInterface
, which would allow the Python objects given to it to go out of scope and be destroyed, despite the associated C++ objects remaining alive. #620
- Added boolean comparison based on content to
EntityReference
types.
- Fixed calling
Manager.resolve
from C++, when the manager implementation is written in Python. #582
-
Scoped
Context
constants foraccess
andretention
values underContext.Access
andContext.Retention
, respectively, rather than polluting theContext
namespace with two distinct sets of unrelated constants. This uses the more modernenum class
scoped enumeration type in C++. #568 -
Scoped
LoggerInterface
severity constants underLoggerInterface.Severity
, for consistency with enumerated constants, e.g.Context
andBatchElementError
, where enums have their own child scope. This uses the more modernenum class
scoped enumeration type in C++. #568 -
Changed
resolve
to use a callback-based API, rather than returning a list of results. #530 -
Removed the
Manager
/ManagerInterface
prefetch
method, which is redundant now the API is batch-first. #511 -
Added
EntityReference
type to encapsulate a validated string so it can be used with entity-related API methods. These should always be created with eitherManager.createEntityReference
orManager.createEntityReferenceIfValid
. Updated the signature ofManager
andManagerInterface
methods to takeEntityReference
object arguments, rather than entity reference strings. #549 -
Renamed
isEntityReference
toisEntityReferenceString
to avoid ambiguity when also working with the newEntityReference
type. #549 -
Made
isEntityReferenceString
a non-batch method to simplify common usage, as it is always in-process. #549 -
Reversed the order of logging severity constants, such that the numerical value of the constant increases with the logical severity (i.e.
kDebugApi
is now0
andkCritical
is now6
). #516 -
Removed the logging abstraction in
HostSession
. Thelog
method has been replaced with thelogger
accessor that provides the sessionsLoggerInterface
derived class directly. #531 -
Swapped the order of
severity
andmessage
in theLoggerInterface::log
method. #531 -
Removed the
Session
Python class in favour of theManagerFactory
C++/Python class. #430 #445 #331 #507 #510 -
Removed redundant
ManagerIntefaceFactoryInterface
methodsmanagers
andmanagerRegistered
, whose functionality has been migrated toManagerFactory
. RemovedinstantiateUIDelegate
until UI layer work is underway. #505 -
Redesigned the manager initialization workflow, such that
ManagerInterface
/Manager.setSettings
andinitialize
are no longer independent calls. Specifically,setSettings
is removed andinitialize
now takes settings as an argument. This also entailed renamingManagerInterface
/Manager.getSettings
tosettings
. #503 -
Redesigned
managementPolicy
to return aTraitsData
rather than a bitfield for specifying the policy of the manager for a given trait set. This deprecated themanagementPolicy
constants, which have been removed. #458 -
Removed thumbnail support from the core API and updated docs to make use of an imagined
WantsThumbnailTrait
policy trait, since this is an industry-specific feature. #458 -
Renamed the manager/host namespaces to
managerApi
andhostApi
for consistency with the rest of the codebase. #457 -
Renamed both
ManagerFactoryInterface
as well as the subclassPluginSystemManagerFactory
toManagerImplementationFactoryInterface
andPythonPluginSystemManagerImplementationFactory
, respectively, to avoid potential ambiguity. I.e. that they instantiate (Python) instances ofManagerInterface
rather thanManager
. For consistency and clarity, also prefixed other Python plugin system classes withPythonPluginSystem
. #506 #508 -
Renamed the
LoggerInterface
constantkDebugAPI
tokDebugApi
. #457 -
Removed the
LoggerInterface.progress()
method as it requires some careful thought how best to implement, and in the meantime is unused and only complicates the C++ migration. #504 -
Split
Specification
class intoSpecificationBase
andTraitsData
This properly defines the separation of the generic data container from the strongly typed views used to get/set well known traits and their properties. #348 -
Switched the C/C++ symbol namespace to use a separate ABI version. The version is defined by the major version component of the last release in which the ABI changed. #377
-
Renamed the following trait related types and variables to better align with the concepts of the API: #340
SpecificationBase.kTraitIds
tokTraitSet
.TraitsData::TraitIds
toTraitSet
TraitsData::traitIds()
totraitSet()
-
Removed the Transactions API, including the
ManagerInterface
methods, andTransactionCoordinator
helpers. #421 -
Added
createContext
,createChildContext
,persistenceTokenForContext
andcontextFromPersistenceToken
methods to theManager
class to facilitate context creation and the serialization of a manager's state for persistence or distribution. #421, #430 #452 -
Renamed the
ManagerInterface
methodsfreezeState
andthawState
topersistenceTokenForState
andstateFromPersistenceToken
to better describe their behavior. #452 -
Marked
Host
class asfinal
in both Python and C++ and so it cannot be subclassed. #331 -
Removed
Context.managerOptions
. #291 -
Renamed
Context.managerInterfaceState
toContext.managerState
. #291 -
Changed
Context.kOther
tokUnknown
, and changed the default context access tokUnknown
. This better describes its use, and encourages hosts to properly configure the context before use. -
Changed
Context
access and retention constants toenum
s in C++ that are bound to Python as opaque instances (viapybind11::enum_
), rather than strings and integers, respectively. #291 -
Split
ManagerInterface::createState
intocreateState
andcreateChildState
to more explicitly state intent, and simplify language bindings. #445 -
Amended the behaviour of
ManagerInterface
such that derived classes who implement thecreateState
method must also implementcreateChildState
,persistenceTokenForState
andstateFromPersistenceToken
. Checks have been added to theopenassetio.test.manager
apiComplianceSuite
to validate manager implementations against this requirement. -
Made the constructors of the following classes private:
Context
,Host
,HostSession
,Manager
,TraitsData
. The staticmake
methods should be used to construct new instances. #481 -
Removed the
makeShared
pointer factory. The per-class staticmake
methods should be used instead. #481
- Added
openassetio-codegen
tool to auto-generateTrait
andSpecification
classes from simple YAML descriptions. #415
-
Added
kEntityResolutionError
andkInvalidEntityReference
batch element error codes, to mirror theEntityResolutionError
andInvalidEntityReference
exception classes, respectively. #530 -
Added
openassetio-python
C++-to-Python bridge library, providing acreatePythonPluginSystemManagerImplementationFactory
function, which allows a C++ host to load managers using the Python plugin system. #508 -
Made
LogggerInterface::log
non-const. -
Added
MangerFactory
as a new, simpler, mechanism for querying for and instantiating available managers, intended to replaceSession
. #507 -
Added
ManagerInterfaceState
abstract base class, that should be used as a base for all instances returned fromManagerInterface::createState()
. #291 -
Added short-form macros for C API symbols, so that, for example,
oa_symbolName
can be used instead of wrapping every reference in the namespacing macro, i.e.OPENASSETIO_NS(symbolName)
. #370 -
Migrated the following classes to C++:
Context
,Host
,HostInterface
,HostSession
andLoggerInterface
,ConsoleLogger
SeverityFilter
andManagerImplementationFactoryInterface
. Debug and audit functionality is left for future work. #291 #331 #455 #504 #507 -
Migrated the following
ManagerInterface
methods to C++initialize
,managementPolicy
,createState
,createChildState
,persistenceTokenForState
,stateFromPersistenceToken
,isEntityReferenceString
,resolve
. #455 #458 #445 #549 #530 -
Migrated the following
Manager
methods to C++initialize
managementPolicy
,createContext
,createChildContext
,persistenceTokenForContext
,contextFromPersistenceToken
,isEntityReferenceString
,resolve
. #455 #458 #445 #549 #530 -
Switched to preferring un-versioned
clang-tidy
executables when theOPENASSETIO_ENABLE_CLANG_TIDY
build option is enabled. We currently target LLVM v12, earlier or later versions may yield new or false-positive warnings. #392 -
Added CMake presets for development and testing. #315
-
Added
OPENASSETIO_PYTHON_PIP_TIMEOUT
CMake cache variable to allow customisingpip install
socket timeout. Useful if working offline with dependencies already downloaded. #407 -
Updated the machine image bootstrap scripts in
resources/build
to use the$WORKSPACE
env var instead of$GITHUB_WORKSPACE
to determine the root of a checkout when configuring the environment. -
Added
resources/build/requirements.txt
covering build toolchain requirements. -
Bumped conan version installed by bootstrap scripts to
1.48.1
#401 -
Updated the Ubuntu bootstrap script to ensure
clang-format
andclang-tidy
use the v12 alternatives. -
Added support for customisable
managementPolicy
responses to theBasicAssetLibrary
example/test manager. See:resources/examples/manager/BasicAssetLibrary/schema.json
#459
-
Python objects that inherit from a C++ base class, and are held by a C++ object as a C++ base class pointer, will no longer be destroyed prematurely. See pybind/1333. #523
-
The CMake
clean
target no longer breaks subsequent builds, including offline builds. #311 -
C headers are now C99 compliant. In particular, they no longer
#include
C++-specific headers. #337
Initial alpha release.