88
99from openeo .api .process import Parameter
1010from openeo .internal .process_graph_visitor import ProcessGraphVisitor
11- from openeo .util import legacy_alias
11+ from openeo .util import legacy_alias , dict_no_none
1212
1313
1414class PGNode :
@@ -24,7 +24,7 @@ class PGNode:
2424
2525 """
2626
27- def __init__ (self , process_id : str , arguments : dict = None , ** kwargs ):
27+ def __init__ (self , process_id : str , arguments : dict = None , namespace : Union [ str , None ] = None , ** kwargs ):
2828 self ._process_id = process_id
2929 # Merge arguments dict and kwargs
3030 arguments = dict (** (arguments or {}), ** kwargs )
@@ -34,6 +34,7 @@ def __init__(self, process_id: str, arguments: dict = None, **kwargs):
3434 arguments [arg ] = {"from_node" : value }
3535 # TODO: use a frozendict of some sort to ensure immutability?
3636 self ._arguments = arguments
37+ self ._namespace = namespace
3738
3839 def __repr__ (self ):
3940 return "<{c} {p!r} at 0x{m:x}>" .format (c = self .__class__ .__name__ , p = self .process_id , m = id (self ))
@@ -46,6 +47,10 @@ def process_id(self) -> str:
4647 def arguments (self ) -> dict :
4748 return self ._arguments
4849
50+ @property
51+ def namespace (self ) -> Union [str , None ]:
52+ return self ._namespace
53+
4954 def to_dict (self ) -> dict :
5055 """
5156 Convert process graph to a nested dictionary structure.
@@ -55,7 +60,7 @@ def to_dict(self) -> dict:
5560 def _deep_copy (x ):
5661 """PGNode aware deep copy helper"""
5762 if isinstance (x , PGNode ):
58- return { " process_id" : x .process_id , " arguments" : _deep_copy (x .arguments )}
63+ return dict_no_none ( process_id = x .process_id , arguments = _deep_copy (x .arguments ), namespace = x . namespace )
5964 if isinstance (x , Parameter ):
6065 return {"from_parameter" : x .name }
6166 elif isinstance (x , dict ):
@@ -201,20 +206,21 @@ def accept_node(self, node: PGNode):
201206 # Process reused nodes only first time and remember node id.
202207 node_id = id (node )
203208 if node_id not in self ._node_cache :
204- super ()._accept_process (process_id = node .process_id , arguments = node .arguments )
209+ super ()._accept_process (process_id = node .process_id , arguments = node .arguments , namespace = node . namespace )
205210 self ._node_cache [node_id ] = self ._last_node_id
206211 else :
207212 self ._last_node_id = self ._node_cache [node_id ]
208213
209- def enterProcess (self , process_id : str , arguments : dict ):
214+ def enterProcess (self , process_id : str , arguments : dict , namespace : Union [ str , None ] ):
210215 self ._argument_stack .append ({})
211216
212- def leaveProcess (self , process_id : str , arguments : dict ):
217+ def leaveProcess (self , process_id : str , arguments : dict , namespace : Union [ str , None ] ):
213218 node_id = self ._node_id_generator .generate (process_id )
214- self ._flattened [node_id ] = {
215- "process_id" : process_id ,
216- "arguments" : self ._argument_stack .pop ()
217- }
219+ self ._flattened [node_id ] = dict_no_none (
220+ process_id = process_id ,
221+ arguments = self ._argument_stack .pop (),
222+ namespace = namespace ,
223+ )
218224 self ._last_node_id = node_id
219225
220226 def _store_argument (self , argument_id : str , value ):
0 commit comments