42
42
from apps .integration_configs import WebIntegrationConfig
43
43
from emails .sender import EmailSender
44
44
from emails .templates .factory import EmailTemplateFactory
45
- from processors .models import ApiBackend
45
+ from processors .models import ApiBackend , ApiProvider
46
46
from processors .models import Endpoint
47
47
from base .models import Profile
48
+ from apps .yaml_loader import get_app_template_by_slug , get_app_templates_from_contrib
48
49
49
50
logger = logging .getLogger (__name__ )
50
51
@@ -205,15 +206,36 @@ def getCloneableApps(self, request, uid=None):
205
206
def getTemplates (self , request , slug = None ):
206
207
json_data = None
207
208
if slug :
208
- object = get_object_or_404 (AppTemplate , slug = slug )
209
- serializer = AppTemplateSerializer (
210
- instance = object , context = {'hide_details' : False },
211
- )
212
- json_data = serializer .data
209
+ object = get_app_template_by_slug (slug )
210
+ if object :
211
+ object_dict = object .dict ()
212
+ # For backward compatibility with old app templates
213
+ for page in object_dict ['pages' ]:
214
+ page ['schema' ] = page ['input_schema' ]
215
+ page ['ui_schema' ] = page ['input_ui_schema' ]
216
+ json_data = object_dict
217
+ else :
218
+ object = get_object_or_404 (AppTemplate , slug = slug )
219
+ serializer = AppTemplateSerializer (
220
+ instance = object , context = {'hide_details' : False },
221
+ )
222
+ json_data = serializer .data
213
223
else :
214
224
queryset = AppTemplate .objects .all ().order_by ('order' )
215
225
serializer = AppTemplateSerializer (queryset , many = True )
216
226
json_data = serializer .data
227
+
228
+ # Add app templates from contrib
229
+ app_template_slugs = list (map (lambda x : x ['slug' ], json_data ))
230
+ app_templates_from_yaml = get_app_templates_from_contrib ()
231
+ for app_template in app_templates_from_yaml :
232
+ if app_template .slug not in app_template_slugs :
233
+ # When listing, do not show pages and app
234
+ app_template_dict = app_template .dict ()
235
+ app_template_dict .pop ('pages' )
236
+ app_template_dict .pop ('app' )
237
+ json_data .append (app_template_dict )
238
+
217
239
return DRFResponse (json_data )
218
240
219
241
def publish (self , request , uid ):
@@ -302,12 +324,12 @@ def delete(self, request, uid):
302
324
# Cleanup app run_graph
303
325
run_graph_entries = app .run_graph .all ()
304
326
endpoint_entries = list (filter (lambda x : x != None , set (list (map (lambda x : x .entry_endpoint , run_graph_entries )) +
305
- list (map (lambda x : x .exit_endpoint , run_graph_entries )))))
327
+ list (map (lambda x : x .exit_endpoint , run_graph_entries )))))
306
328
307
- # Cleanup rungraph
329
+ # Cleanup rungraph
308
330
# Delete all the run_graph entries
309
331
run_graph_entries .delete ()
310
-
332
+
311
333
# Delete all the endpoint entries
312
334
for entry in endpoint_entries :
313
335
EndpointViewSet .delete (self , request , id = str (
@@ -418,7 +440,8 @@ def patch(self, request, uid):
418
440
419
441
def post (self , request ):
420
442
owner = request .user
421
- app_type = get_object_or_404 (AppType , id = request .data ['app_type' ])
443
+ app_type = get_object_or_404 (AppType , id = request .data ['app_type' ]) if 'app_type' in request .data else get_object_or_404 (
444
+ AppType , slug = request .data ['app_type_slug' ])
422
445
app_name = request .data ['name' ]
423
446
app_description = request .data ['description' ] if 'description' in request .data else ''
424
447
app_config = request .data ['config' ] if 'config' in request .data else {}
@@ -435,9 +458,18 @@ def post(self, request):
435
458
# Iterate over processors and create an endpoint for each using api_backend
436
459
# and then use that to create AppRunGraphEntry to create the graph
437
460
for processor in processors :
438
- api_backend_obj = get_object_or_404 (
439
- ApiBackend , id = processor ['api_backend' ],
440
- )
461
+ api_backend_obj = None
462
+ if 'processor_slug' in processor and 'provider_slug' in processor :
463
+ provider = get_object_or_404 (
464
+ ApiProvider , slug = processor ['provider_slug' ],
465
+ )
466
+ api_backend_obj = get_object_or_404 (
467
+ ApiBackend , slug = processor ['processor_slug' ], api_provider = provider ,
468
+ )
469
+ else :
470
+ api_backend_obj = get_object_or_404 (
471
+ ApiBackend , id = processor ['api_backend' ],
472
+ )
441
473
endpoint = Endpoint .objects .create (
442
474
name = f'{ app_name } :{ api_backend_obj .name } ' ,
443
475
owner = owner ,
@@ -485,9 +517,10 @@ def post(self, request):
485
517
edge .save ()
486
518
graph_edges .append (edge )
487
519
520
+ template_slug = request .data ['template_slug' ] if 'template_slug' in request .data else None
488
521
template = AppTemplate .objects .filter (
489
- slug = request . data [ ' template_slug' ] ,
490
- ).first () if ' template_slug' in request . data else None
522
+ slug = template_slug ,
523
+ ).first () if template_slug else None
491
524
492
525
app = App .objects .create (
493
526
name = app_name ,
@@ -500,6 +533,7 @@ def post(self, request):
500
533
output_template = app_output_template ,
501
534
data_transformer = app_data_transformer ,
502
535
template = template ,
536
+ template_slug = template_slug ,
503
537
)
504
538
app .run_graph .set (graph_edges )
505
539
app .save ()
0 commit comments