Skip to content

Commit cd40631

Browse files
committed
EP-4011 add ProcessBuilder support for eq/neq through ==/!= operators
1 parent 1fe248f commit cd40631

File tree

5 files changed

+90
-0
lines changed

5 files changed

+90
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1616
- Add `Connection.load_result()` (EP-4008)
1717
- Add proper support for child callbacks in `fit_curve` and `predict_curve` ([#229](https://github.com/Open-EO/openeo-python-client/issues/229))
1818
- `ProcessBuilder`: Add support for `array_element(data, n)` through `data[n]` syntax ([#228](https://github.com/Open-EO/openeo-python-client/issues/228))
19+
- `ProcessBuilder`: Add support for `eq` and `neq` through `==` and `!=` operators (EP-4011)
1920

2021

2122
### Changed

openeo/internal/processes/generator.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,12 @@ def __getitem__(self, key) -> 'ProcessBuilder':
149149
else:
150150
return self.array_element(label=key)
151151
152+
def __eq__(self, other) -> 'ProcessBuilder':
153+
return eq(self, other)
154+
155+
def __ne__(self, other) -> 'ProcessBuilder':
156+
return neq(self, other)
157+
152158
""")
153159
fun_src = textwrap.dedent("""
154160
# Public shortcut

openeo/processes.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,12 @@ def __getitem__(self, key) -> 'ProcessBuilder':
4646
else:
4747
return self.array_element(label=key)
4848

49+
def __eq__(self, other) -> 'ProcessBuilder':
50+
return eq(self, other)
51+
52+
def __ne__(self, other) -> 'ProcessBuilder':
53+
return neq(self, other)
54+
4955
def absolute(self) -> 'ProcessBuilder':
5056
"""
5157
Absolute value
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
{
2+
"loadcollection1": {
3+
"process_id": "load_collection",
4+
"arguments": {
5+
"id": "S2",
6+
"spatial_extent": null,
7+
"temporal_extent": null,
8+
"properties": {
9+
"provider": {
10+
"process_graph": {
11+
"eq1": {
12+
"process_id": "eq",
13+
"arguments": {
14+
"x": {
15+
"from_parameter": "value"
16+
},
17+
"y": "ESA"
18+
},
19+
"result": true
20+
}
21+
}
22+
}
23+
}
24+
},
25+
"result": true
26+
}
27+
}

tests/rest/datacube/test_processbuilder.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,3 +460,53 @@ def callback(data: ProcessBuilder):
460460
"result": True
461461
}
462462
}
463+
464+
465+
def test_load_collection_properties_eq_process(con100):
466+
from openeo.processes import eq
467+
cube = con100.load_collection("S2", properties={"provider": lambda v: eq(v, "ESA")})
468+
expected = load_json_resource('data/1.0.0/load_collection_properties_eq.json')
469+
assert cube.flat_graph() == expected
470+
471+
# Hack to swap x and y args in expected result
472+
args = expected["loadcollection1"]["arguments"]["properties"]["provider"]["process_graph"]["eq1"]["arguments"]
473+
args["x"], args["y"] = args["y"], args["x"]
474+
cube = con100.load_collection("S2", properties={"provider": lambda v: eq("ESA", v)})
475+
assert cube.flat_graph() == expected
476+
477+
478+
def test_load_collection_properties_eq_operator(con100):
479+
cube = con100.load_collection("S2", properties={"provider": lambda v: v == "ESA"})
480+
expected = load_json_resource('data/1.0.0/load_collection_properties_eq.json')
481+
assert cube.flat_graph() == expected
482+
483+
cube = con100.load_collection("S2", properties={"provider": lambda v: "ESA" == v})
484+
assert cube.flat_graph() == expected
485+
486+
487+
def test_load_collection_properties_neq_process(con100):
488+
from openeo.processes import neq
489+
cube = con100.load_collection("S2", properties={"provider": lambda v: neq(v, "ESA")})
490+
expected = load_json_resource(
491+
'data/1.0.0/load_collection_properties_eq.json',
492+
preprocess=lambda s: s.replace('"eq', '"neq')
493+
)
494+
assert cube.flat_graph() == expected
495+
496+
# Hack to swap x and y args in expected result
497+
args = expected["loadcollection1"]["arguments"]["properties"]["provider"]["process_graph"]["neq1"]["arguments"]
498+
args["x"], args["y"] = args["y"], args["x"]
499+
cube = con100.load_collection("S2", properties={"provider": lambda v: neq("ESA", v)})
500+
assert cube.flat_graph() == expected
501+
502+
503+
def test_load_collection_properties_neq_operator(con100):
504+
cube = con100.load_collection("S2", properties={"provider": lambda v: v != "ESA"})
505+
expected = load_json_resource(
506+
'data/1.0.0/load_collection_properties_eq.json',
507+
preprocess=lambda s: s.replace('"eq', '"neq')
508+
)
509+
assert cube.flat_graph() == expected
510+
511+
cube = con100.load_collection("S2", properties={"provider": lambda v: "ESA" != v})
512+
assert cube.flat_graph() == expected

0 commit comments

Comments
 (0)