1+ from ..models .register_nodes_request import RegisterNodesRequestModel
2+ from ..models .register_nodes_response import RegisterNodesResponseModel , RegisteredNodeModel
3+ from ..models .db .registered_node import RegisteredNode
4+
5+ from app .singletons .logs_manager import LogsManager
6+ from beanie .operators import Set
7+
8+ logger = LogsManager ().get_logger ()
9+
10+
11+ async def register_nodes (namespace_name : str , body : RegisterNodesRequestModel , x_exosphere_request_id : str ) -> RegisterNodesResponseModel :
12+
13+ try :
14+ logger .info (f"Registering nodes for namespace { namespace_name } " , x_exosphere_request_id = x_exosphere_request_id )
15+
16+ # Check if nodes already exist and update them, or create new ones
17+ registered_nodes = []
18+
19+ for node_data in body .nodes :
20+ # Check if node already exists
21+ existing_node = await RegisteredNode .find_one (
22+ RegisteredNode .name == node_data .name ,
23+ RegisteredNode .namespace == node_data .namespace
24+ )
25+
26+ if existing_node :
27+ # Update existing node
28+ await existing_node .update (
29+ Set ({
30+ RegisteredNode .runtime_name : body .runtime_name ,
31+ RegisteredNode .runtime_namespace : body .runtime_namespace ,
32+ RegisteredNode .inputs_schema : node_data .inputs_schema , # type: ignore
33+ RegisteredNode .outputs_schema : node_data .outputs_schema # type: ignore
34+ }))
35+ logger .info (f"Updated existing node { node_data .name } in namespace { namespace_name } " , x_exosphere_request_id = x_exosphere_request_id )
36+ else :
37+ # Create new node
38+ new_node = RegisteredNode (
39+ name = node_data .name ,
40+ namespace = node_data .namespace ,
41+ runtime_name = body .runtime_name ,
42+ runtime_namespace = body .runtime_namespace ,
43+ inputs_schema = node_data .inputs_schema ,
44+ outputs_schema = node_data .outputs_schema
45+ )
46+ inserted_node = await new_node .insert ()
47+ logger .info (f"Created new node { node_data .name } in namespace { namespace_name } " , x_exosphere_request_id = x_exosphere_request_id )
48+
49+ registered_nodes .append (
50+ RegisteredNodeModel (
51+ name = node_data .name ,
52+ namespace = node_data .namespace
53+ )
54+ )
55+
56+ response = RegisterNodesResponseModel (
57+ runtime_name = body .runtime_name ,
58+ runtime_namespace = body .runtime_namespace ,
59+ registered_nodes = registered_nodes ,
60+ )
61+
62+ logger .info (f"Successfully registered { len (registered_nodes )} nodes for namespace { namespace_name } " , x_exosphere_request_id = x_exosphere_request_id )
63+ return response
64+
65+ except Exception as e :
66+ logger .error (f"Error registering nodes for namespace { namespace_name } " , x_exosphere_request_id = x_exosphere_request_id , error = e )
67+ raise e
0 commit comments