Skip to content

Commit 6f8d0c8

Browse files
Peter Van Bouwelpvbouwel
authored andcommitted
doc: CHANGELOG + explicit warning for backend providers
1 parent 50389c0 commit 6f8d0c8

File tree

2 files changed

+11
-93
lines changed

2 files changed

+11
-93
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
### Added
1111

12+
- Initial/experimental implementation of artifact upload helper ([Open-EO/openeo-api#566](https://github.com/Open-EO/openeo-api/issues/566))
13+
1214
### Changed
1315

1416
### Removed

docs/api-artifacts.rst

Lines changed: 9 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
====================================
44
API: openeo.extra.artifacts
55
====================================
6+
.. versionadded:: 0.45.0
67

78
.. warning::
89
This is a new experimental API, subject to change.
@@ -46,7 +47,7 @@ Note:
4647
to limit the time window in which the URI can be used.
4748

4849
* The openEO backend must expose additional metadata in its capabilities doc to make this possible. Implementers of a
49-
backend can check the extra documentation :ref:`advertising-capabilities`.
50+
backend can check the extra documentation :ref:`for-backend-providers`.
5051

5152

5253
User facing API
@@ -79,101 +80,16 @@ How does it work ?
7980
support handling of internal references. presigned URLs should work in any tool).
8081

8182

82-
Documentation for backend providers
83-
===================================
84-
85-
This section and its subsection is for engineers who operate an openEO backend. If you are a user of an openEO platform
86-
this is unlikely to be of value to you.
87-
88-
.. _advertising-capabilities:
89-
90-
Advertising capabilities from the backend
91-
-----------------------------------------
92-
93-
It is expected that the backend advertises in its capabilities a section on artifacts. The following is an example
94-
for the S3STSConfig (of the :py:mod:`openeo.extra.artifacts._s3sts` package).
95-
96-
.. code-block:: json
97-
98-
{
99-
// ...
100-
"artifacts": {
101-
"providers": [
102-
{
103-
// This id is a logical name
104-
"id": "s3",
105-
// The config type of the ArtifactHelper
106-
"type": "S3STSConfig"
107-
// The config block its keys can differ for other config types
108-
"config": {
109-
// The bucket where the artifacts will be stored
110-
"bucket": "openeo-artifacts",
111-
// The role that will be assumed via STS
112-
"role": "arn:aws:iam::000000000000:role/S3Access",
113-
// Where S3 API calls are sent
114-
"s3_endpoint": "https://my.s3.test",
115-
// Where STS API calls are sent
116-
"sts_endpoint": "https://my.sts.test"
117-
},
118-
}
119-
]
120-
},
121-
// ...
122-
}
123-
124-
125-
Extending support for other types of artifacts
126-
----------------------------------------------
83+
.. _for-backend-providers:
12784

128-
.. warning::
129-
This is a section for developers of the `openeo-python-client` Python package. If you want to walk this road it is
130-
best to create an issue on github and detail what support you are planning to add to get input on feasibility and
131-
whether it will be mergeable early on.
132-
133-
Ideally the user-interface is simple and stable. Unfortunately implementations themselves come with more complexity.
134-
This section explains what is needed to provide support for additional types of artifacts. Below the steps we show
135-
the API that is involved.
136-
137-
1. Create another internal package for the implementation. The following steps should be done inside that package.
138-
This package resides under :py:mod:`openeo.extra.artifacts`
139-
2. Create a config implementation which extends :py:class:`openeo.extra.artifacts._config.ArtifactsStorageConfigABC`
140-
and should be a frozen dataclass. This class implements the logic to determine the configuration used by the
141-
implementation `_load_connection_provided_config(self, provider_config: ProviderConfig) -> None` is used for that.
142-
143-
When this method is called explicit config is already put in place and if not provided default config is put in
144-
place.
145-
Because frozen dataclasses are used for config `object.__setattr__(self, ...)` must be used to manipulate the
146-
values.
147-
148-
So per attribute the same pattern is used. For example an attribute `foo` which has a default `bar` that can be kept
149-
constant would be:
150-
151-
.. code-block:: python
152-
153-
if self.foo is None:
154-
try:
155-
object.__setattr__(self, "foo", provider_config["foo"])
156-
except NoDefaultConfig:
157-
object.__setattr__(self, "foo", "bar")
158-
159-
Here we use :py:exc:`openeo.extra.artifacts.exceptions.NoDefaultConfig`
85+
For backend providers
86+
=====================
16087

161-
3. Create an implementation of :py:class:`openeo.extra.artifacts._uri.StorageURI` to model the internal URIs to the
162-
stored artifact
163-
4. Create an ArtifactHelper implementation which extends :py:class:`openeo.extra.artifacts._artifact_helper_abc.ArtifactHelperABC`
164-
5. Add a key value pair to the :py:obj:`openeo.extra.artifacts.artifact_helper.config_to_helper` dictionary. The key is
165-
the class created in 2 and the value is the class created in step 3
166-
167-
.. autoclass:: openeo.extra.artifacts._config.ArtifactsStorageConfigABC
168-
:members:
169-
:private-members: _load_connection_provided_config
170-
171-
.. autoclass:: openeo.extra.artifacts._artifact_helper_abc.ArtifactHelperABC
172-
:members:
173-
:private-members: _get_default_storage_config, _from_openeo_connection
88+
.. warning::
89+
Investigation is ongoing whether this would be a good fit for the workspace extension
90+
https://github.com/Open-EO/openeo-api/issues/566 which would mean a big overhaul for backend implementations. If you
91+
are a backend provider and interested in this feature please create an issue to allow collaboration.
17492

175-
.. autoclass:: openeo.extra.artifacts._uri.StorageURI
176-
:members:
17793

17894

17995
Artifacts exceptions

0 commit comments

Comments
 (0)