Skip to content

Commit 48916fa

Browse files
committed
[WIP] Issue #390 add openeo.processes docs
1 parent 858c06d commit 48916fa

File tree

8 files changed

+923
-487
lines changed

8 files changed

+923
-487
lines changed

docs/api-processes.rst

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
==========================
2+
API: ``openeo.processes``
3+
==========================
4+
5+
The ``openeo.processes`` module contains helper to build call
6+
7+
8+
``openeo.processes`` functions
9+
-------------------------------
10+
11+
.. automodule:: openeo.processes
12+
:members:
13+
:exclude-members: ProcessBuilder
14+
15+
16+
``openeo.processes.ProcessBuilder``
17+
------------------------------------
18+
19+
.. automodule:: openeo.processes
20+
:members: ProcessBuilder

docs/api.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
===
2-
API
3-
===
1+
=============
2+
API: General
3+
=============
44

55
High level Interface
66
--------------------

docs/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ Table of contents
6060
configuration
6161
cookbook/index
6262
api
63+
api-processes
6364
process_mapping
6465
development
6566
best_practices

docs/process_mapping.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ def main():
3939
- openEO Python Client Method
4040
"""))
4141

42+
import openeo.rest.datacube
43+
import openeo.rest.vectorcube
44+
import openeo.rest.mlmodel
45+
import openeo.processes
46+
4247
for process_id in sorted(_process_registry.keys()):
4348
functions = [x[0] for x in _process_registry[process_id]]
4449
refs = [

docs/process_mapping.rst

Lines changed: 240 additions & 56 deletions
Large diffs are not rendered by default.

openeo/internal/documentation.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from functools import partial
77
from typing import Callable, Optional
88

9+
910
# TODO: give this a proper public API?
1011
_process_registry = collections.defaultdict(list)
1112

openeo/internal/processes/generator.py

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import sys
44
import textwrap
55
from pathlib import Path
6-
from typing import Union, List, Iterator
6+
from typing import Union, List, Iterator, Optional
77

88
from openeo.internal.processes.parse import Process, parse_all_from_dir
99

@@ -13,18 +13,20 @@ class PythonRenderer:
1313
DEFAULT_WIDTH = 115
1414

1515
def __init__(
16-
self,
17-
oo_mode=False,
18-
indent=" ",
19-
body_template="return _process({id!r}, {args})",
20-
optional_default="None",
21-
return_type_hint: str = None
16+
self,
17+
oo_mode: bool = False,
18+
indent: str = " ",
19+
body_template: str = "return _process({id!r}, {args})",
20+
optional_default="None",
21+
return_type_hint: Optional[str] = None,
22+
decorator: Optional[str] = None,
2223
):
2324
self.oo_mode = oo_mode
2425
self.indent = indent
2526
self.body_template = body_template
2627
self.optional_default = optional_default
2728
self.return_type_hint = return_type_hint
29+
self.decorator = decorator
2830

2931
def render_process(self, process: Process, prefix: str = None, width: int = DEFAULT_WIDTH) -> str:
3032
if prefix is None:
@@ -45,11 +47,12 @@ def render_process(self, process: Process, prefix: str = None, width: int = DEFA
4547
id=process.id, safe_name=self._safe_name(process.id), args=call_args
4648
)
4749

48-
return textwrap.indent("\n".join([
50+
lines = ([self.decorator] if self.decorator else []) + [
4951
def_line,
5052
self.render_docstring(process, width=width - len(prefix), prefix=self.indent),
5153
body
52-
]), prefix=prefix)
54+
]
55+
return textwrap.indent("\n".join(lines), prefix=prefix)
5356

5457
def _safe_name(self, name: str) -> str:
5558
if keyword.iskeyword(name):
@@ -106,45 +109,58 @@ def collect_processes(sources: List[Union[Path, str]]) -> List[Process]:
106109

107110

108111
def generate_process_py(processes: List[Process], output=sys.stdout, argv=None):
109-
oo_src = textwrap.dedent("""
112+
oo_src = textwrap.dedent(
113+
"""
110114
import builtins
111115
from openeo.internal.processes.builder import ProcessBuilderBase, UNSET
116+
from openeo.internal.documentation import openeo_process
112117
113118
114119
class ProcessBuilder(ProcessBuilderBase):
115120
116121
_ITERATION_LIMIT = 100
117122
123+
@openeo_process(process_id="add", mode="operator")
118124
def __add__(self, other) -> 'ProcessBuilder':
119125
return self.add(other)
120126
127+
@openeo_process(process_id="add", mode="operator")
121128
def __radd__(self, other) -> 'ProcessBuilder':
122129
return add(other, self)
123130
131+
@openeo_process(process_id="subtract", mode="operator")
124132
def __sub__(self, other) -> 'ProcessBuilder':
125133
return self.subtract(other)
126134
135+
@openeo_process(process_id="subtract", mode="operator")
127136
def __rsub__(self, other) -> 'ProcessBuilder':
128137
return subtract(other, self)
129138
139+
@openeo_process(process_id="multiply", mode="operator")
130140
def __mul__(self, other) -> 'ProcessBuilder':
131141
return self.multiply(other)
132142
143+
@openeo_process(process_id="multiply", mode="operator")
133144
def __rmul__(self, other) -> 'ProcessBuilder':
134145
return multiply(other, self)
135146
147+
@openeo_process(process_id="divide", mode="operator")
136148
def __truediv__(self, other) -> 'ProcessBuilder':
137149
return self.divide(other)
138150
151+
@openeo_process(process_id="divide", mode="operator")
139152
def __rtruediv__(self, other) -> 'ProcessBuilder':
140153
return divide(other, self)
141154
155+
@openeo_process(process_id="multiply", mode="operator")
142156
def __neg__(self) -> 'ProcessBuilder':
143157
return self.multiply(-1)
144158
159+
@openeo_process(process_id="power", mode="operator")
145160
def __pow__(self, other) -> 'ProcessBuilder':
146161
return self.power(other)
147162
163+
@openeo_process(process_id="array_element", mode="operator")
148164
def __getitem__(self, key) -> 'ProcessBuilder':
149165
if isinstance(key, builtins.int):
150166
if key > self._ITERATION_LIMIT:
@@ -157,43 +173,54 @@ def __getitem__(self, key) -> 'ProcessBuilder':
157173
else:
158174
return self.array_element(label=key)
159175
176+
@openeo_process(process_id="eq", mode="operator")
160177
def __eq__(self, other) -> 'ProcessBuilder':
161178
return eq(self, other)
162179
180+
@openeo_process(process_id="neq", mode="operator")
163181
def __ne__(self, other) -> 'ProcessBuilder':
164182
return neq(self, other)
165183
184+
@openeo_process(process_id="lt", mode="operator")
166185
def __lt__(self, other) -> 'ProcessBuilder':
167186
return lt(self, other)
168187
188+
@openeo_process(process_id="lte", mode="operator")
169189
def __le__(self, other) -> 'ProcessBuilder':
170190
return lte(self, other)
171191
192+
@openeo_process(process_id="ge", mode="operator")
172193
def __ge__(self, other) -> 'ProcessBuilder':
173194
return gte(self, other)
174195
196+
@openeo_process(process_id="gt", mode="operator")
175197
def __gt__(self, other) -> 'ProcessBuilder':
176198
return gt(self, other)
177199
178-
""")
179-
fun_src = textwrap.dedent("""
200+
"""
201+
)
202+
fun_src = textwrap.dedent(
203+
"""
180204
# Public shortcut
181205
process = ProcessBuilder.process
182206
# Private shortcut that has lower chance to collide with a process argument named `process`
183207
_process = ProcessBuilder.process
184208
185209
186-
""")
210+
"""
211+
)
187212
fun_renderer = PythonRenderer(
188213
body_template="return _process({id!r}, {args})",
189214
optional_default="UNSET",
190-
return_type_hint="ProcessBuilder"
215+
return_type_hint="ProcessBuilder",
216+
decorator="@openeo_process",
191217
)
192218
oo_renderer = PythonRenderer(
193219
oo_mode=True,
194220
body_template="return {safe_name}({args})",
195221
optional_default="UNSET",
196-
return_type_hint="'ProcessBuilder'"
222+
return_type_hint="'ProcessBuilder'",
223+
decorator="@openeo_process",
197224
)
198225
for p in processes:
199226
fun_src += fun_renderer.render_process(p) + "\n\n\n"

0 commit comments

Comments
 (0)