Summary
Unify the local and deployed service configuration process and generally improve the experience of using the SDK to run services.
<!--- SKIP AUTOGENERATED NOTES --->
Contents ([360](https://github.com/octue/octue-sdk-python/pull/360))
**IMPORTANT:** There are 2 breaking changes.
Enhancements
- **BREAKING CHANGE:** Split configuration into service configuration (`octue.yaml`) and application configuration (location specified in `octue.yaml`)
- Unify the configuration-loading process for services run locally from CLI and in the cloud
- Return `GCPPubSubBackend` from `get_backend` by default
- Raise error if `project_name` is `None` in `GCPPubSubBackend`
- Give more useful name to service instance used by `Child` class
- Check topic/subscription exist before attempting deletion
- Remove `path_from` parameter from `Dataset`, decoupling its path from its `Manifest`'s path
- Add cloud and local existence checks to `Dataset`
- Support `Hashable` instances as dictionary values when hashing
- Allow `Identifiable` instances to have their names set after instantiation
- Always log starting of service
- Return `None` from `Dataset.to_cloud`
- Retrieve `Dataset` metadata during `Manifest` instantiation
Deprecations
- **BREAKING CHANGE:** Remove support for credentials environment variable names for children
- Deprecate the `store_datasets` parameter of `Manifest.to_cloud`
Fixes
- Ensure topic and subscription are deleted when requested in `Service.serve`
- Set cloud path and relative download paths correctly
- Set dataset path to cloud path during `Dataset.to_cloud`
- Use end of cloud path as `Dataset` name if available
Dependencies
- Use `twined==0.2.1`
Testing
- Add mock class for mocking `open` with different contents for different file paths
- Ensure `MockService` can access service args and kwargs
<!--- END AUTOGENERATED NOTES --->