15
15
ActionFormValuesSerializer ,
16
16
ActionResultSerializer ,
17
17
)
18
- from forestadmin .rpc_common .serializers .aes import aes_decrypt , aes_encrypt
19
18
from forestadmin .rpc_common .serializers .collection .aggregation import AggregationSerializer
20
19
from forestadmin .rpc_common .serializers .collection .filter import (
21
20
FilterSerializer ,
@@ -42,6 +41,7 @@ def __init__(self, options: RpcOptions):
42
41
43
42
@web .middleware
44
43
async def hmac_middleware (self , request : web .Request , handler ):
44
+ # TODO: handle HMAC like ruby agent
45
45
if request .method == "POST" :
46
46
body = await request .read ()
47
47
if not is_valid_hmac (
@@ -51,20 +51,21 @@ async def hmac_middleware(self, request: web.Request, handler):
51
51
return await handler (request )
52
52
53
53
def setup_routes (self ):
54
+ self .app .router .add_route ("GET" , "/" , lambda _ : web .Response (text = "OK" )) # type: ignore
54
55
self .app .router .add_route ("GET" , "/sse" , self .sse_handler )
55
56
self .app .router .add_route ("GET" , "/schema" , self .schema )
56
- self . app . router . add_route ( "POST" , "/collection/list" , self . collection_list )
57
- self .app .router .add_route ("POST" , "/collection/create " , self .collection_create )
58
- self .app .router .add_route ("POST" , "/collection/update " , self .collection_update )
59
- self . app . router . add_route ( "POST" , "/collection/delete" , self . collection_delete )
60
- self .app .router .add_route ("POST" , "/collection/aggregate " , self .collection_aggregate )
61
- self .app .router .add_route ("POST" , "/collection/get-form " , self .collection_get_form )
62
- self .app .router .add_route ("POST" , "/collection/execute " , self .collection_execute )
63
- self .app .router .add_route ("POST" , "/collection/render-chart " , self .collection_render_chart )
64
-
65
- self .app .router .add_route ("POST" , "/execute-native-query " , self .native_query )
66
- self .app .router .add_route ("POST" , "/render-chart " , self .render_chart )
67
- self .app .router .add_route ("GET " , "/" , lambda _ : web . Response ( text = "OK" )) # type: ignore
57
+
58
+ # self.app.router.add_route("POST", "/execute-native-query ", self.native_query )
59
+ self .app .router .add_route ("POST" , "/forest/rpc/datasource-chart " , self .render_chart )
60
+
61
+ self .app .router .add_route ("POST" , "/forest/rpc/{collection_name}/list " , self .collection_list )
62
+ self .app .router .add_route ("POST" , "/forest/rpc/{collection_name}/create " , self .collection_create )
63
+ self .app .router .add_route ("POST" , "/forest/rpc/{collection_name}/update " , self .collection_update )
64
+ self .app .router .add_route ("POST" , "/forest/rpc/{collection_name}/delete " , self .collection_delete )
65
+ self . app . router . add_route ( "POST" , "/forest/rpc/{collection_name}/aggregate" , self . collection_aggregate )
66
+ self .app .router .add_route ("POST" , "/forest/rpc/{collection_name}/action-form " , self .collection_get_form )
67
+ self .app .router .add_route ("POST" , "/forest/rpc/{collection_name}/action-execute " , self .collection_execute )
68
+ self .app .router .add_route ("POST " , "/forest/rpc/{collection_name}/chart " , self . collection_render_chart )
68
69
69
70
async def sse_handler (self , request : web .Request ) -> web .StreamResponse :
70
71
async with sse_response (request ) as resp :
@@ -83,7 +84,7 @@ async def schema(self, request):
83
84
async def collection_list (self , request : web .Request ):
84
85
body_params = await request .json ()
85
86
ds = await self .customizer .get_datasource ()
86
- collection = ds .get_collection (body_params [ "collectionName " ])
87
+ collection = ds .get_collection (request . match_info [ "collection_name " ])
87
88
caller = CallerSerializer .deserialize (body_params ["caller" ])
88
89
filter_ = PaginatedFilterSerializer .deserialize (body_params ["filter" ], collection ) # type:ignore
89
90
projection = ProjectionSerializer .deserialize (body_params ["projection" ])
@@ -97,7 +98,7 @@ async def collection_create(self, request: web.Request):
97
98
body_params = json .loads (body_params )
98
99
ds = await self .customizer .get_datasource ()
99
100
100
- collection = ds .get_collection (body_params [ "collectionName " ])
101
+ collection = ds .get_collection (request . match_info [ "collection_name " ])
101
102
caller = CallerSerializer .deserialize (body_params ["caller" ])
102
103
data = [RecordSerializer .deserialize (r , collection ) for r in body_params ["data" ]] # type:ignore
103
104
@@ -110,7 +111,7 @@ async def collection_update(self, request: web.Request):
110
111
body_params = json .loads (body_params )
111
112
112
113
ds = await self .customizer .get_datasource ()
113
- collection = ds .get_collection (body_params [ "collectionName " ])
114
+ collection = ds .get_collection (request . match_info [ "collection_name " ])
114
115
caller = CallerSerializer .deserialize (body_params ["caller" ])
115
116
filter_ = FilterSerializer .deserialize (body_params ["filter" ], collection ) # type:ignore
116
117
patch = RecordSerializer .deserialize (body_params ["patch" ], collection ) # type:ignore
@@ -121,7 +122,7 @@ async def collection_update(self, request: web.Request):
121
122
async def collection_delete (self , request : web .Request ):
122
123
body_params = await request .json ()
123
124
ds = await self .customizer .get_datasource ()
124
- collection = ds .get_collection (body_params [ "collectionName " ])
125
+ collection = ds .get_collection (request . match_info [ "collection_name " ])
125
126
caller = CallerSerializer .deserialize (body_params ["caller" ])
126
127
filter_ = FilterSerializer .deserialize (body_params ["filter" ], collection ) # type:ignore
127
128
@@ -131,7 +132,7 @@ async def collection_delete(self, request: web.Request):
131
132
async def collection_aggregate (self , request : web .Request ):
132
133
body_params = await request .json ()
133
134
ds = await self .customizer .get_datasource ()
134
- collection = ds .get_collection (body_params [ "collectionName " ])
135
+ collection = ds .get_collection (request . match_info [ "collection_name " ])
135
136
caller = CallerSerializer .deserialize (body_params ["caller" ])
136
137
filter_ = FilterSerializer .deserialize (body_params ["filter" ], collection ) # type:ignore
137
138
aggregation = AggregationSerializer .deserialize (body_params ["aggregation" ])
@@ -144,7 +145,7 @@ async def collection_get_form(self, request: web.Request):
144
145
body_params = json .loads (body_params )
145
146
146
147
ds = await self .customizer .get_datasource ()
147
- collection = ds .get_collection (body_params [ "collectionName " ])
148
+ collection = ds .get_collection (request . match_info [ "collection_name " ])
148
149
149
150
caller = CallerSerializer .deserialize (body_params ["caller" ])
150
151
action_name = body_params ["actionName" ]
@@ -163,7 +164,7 @@ async def collection_execute(self, request: web.Request):
163
164
body_params = json .loads (body_params )
164
165
165
166
ds = await self .customizer .get_datasource ()
166
- collection = ds .get_collection (body_params [ "collectionName " ])
167
+ collection = ds .get_collection (request . match_info [ "collection_name " ])
167
168
168
169
caller = CallerSerializer .deserialize (body_params ["caller" ])
169
170
action_name = body_params ["actionName" ]
@@ -181,7 +182,7 @@ async def collection_render_chart(self, request: web.Request):
181
182
body_params = json .loads (body_params )
182
183
183
184
ds = await self .customizer .get_datasource ()
184
- collection = ds .get_collection (body_params [ "collectionName " ])
185
+ collection = ds .get_collection (request . match_info [ "collection_name " ])
185
186
186
187
caller = CallerSerializer .deserialize (body_params ["caller" ])
187
188
name = body_params ["name" ]
@@ -220,17 +221,18 @@ async def render_chart(self, request: web.Request):
220
221
result = await ds .render_chart (caller , name )
221
222
return web .json_response (result )
222
223
223
- async def native_query (self , request : web .Request ):
224
- body_params = await request .text ()
225
- body_params = json .loads (body_params )
224
+ # TODO: speak about; it's currently not implemented in ruby
225
+ # async def native_query(self, request: web.Request):
226
+ # body_params = await request.text()
227
+ # body_params = json.loads(body_params)
226
228
227
- ds = await self .customizer .get_datasource ()
228
- connection_name = body_params ["connectionName" ]
229
- native_query = body_params ["nativeQuery" ]
230
- parameters = body_params ["parameters" ]
229
+ # ds = await self.customizer.get_datasource()
230
+ # connection_name = body_params["connectionName"]
231
+ # native_query = body_params["nativeQuery"]
232
+ # parameters = body_params["parameters"]
231
233
232
- result = await ds .execute_native_query (connection_name , native_query , parameters )
233
- return web .json_response (result )
234
+ # result = await ds.execute_native_query(connection_name, native_query, parameters)
235
+ # return web.json_response(result)
234
236
235
237
def start (self ):
236
238
web .run_app (self .app , host = self .listen_addr , port = int (self .listen_port ))
0 commit comments