4242from apps .integration_configs import WebIntegrationConfig
4343from emails .sender import EmailSender
4444from emails .templates .factory import EmailTemplateFactory
45- from processors .models import ApiBackend
45+ from processors .models import ApiBackend , ApiProvider
4646from processors .models import Endpoint
4747from base .models import Profile
48+ from apps .yaml_loader import get_app_template_by_slug , get_app_templates_from_contrib
4849
4950logger = logging .getLogger (__name__ )
5051
@@ -205,15 +206,36 @@ def getCloneableApps(self, request, uid=None):
205206 def getTemplates (self , request , slug = None ):
206207 json_data = None
207208 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
213223 else :
214224 queryset = AppTemplate .objects .all ().order_by ('order' )
215225 serializer = AppTemplateSerializer (queryset , many = True )
216226 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+
217239 return DRFResponse (json_data )
218240
219241 def publish (self , request , uid ):
@@ -302,12 +324,12 @@ def delete(self, request, uid):
302324 # Cleanup app run_graph
303325 run_graph_entries = app .run_graph .all ()
304326 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 )))))
306328
307- # Cleanup rungraph
329+ # Cleanup rungraph
308330 # Delete all the run_graph entries
309331 run_graph_entries .delete ()
310-
332+
311333 # Delete all the endpoint entries
312334 for entry in endpoint_entries :
313335 EndpointViewSet .delete (self , request , id = str (
@@ -418,7 +440,8 @@ def patch(self, request, uid):
418440
419441 def post (self , request ):
420442 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' ])
422445 app_name = request .data ['name' ]
423446 app_description = request .data ['description' ] if 'description' in request .data else ''
424447 app_config = request .data ['config' ] if 'config' in request .data else {}
@@ -435,9 +458,18 @@ def post(self, request):
435458 # Iterate over processors and create an endpoint for each using api_backend
436459 # and then use that to create AppRunGraphEntry to create the graph
437460 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+ )
441473 endpoint = Endpoint .objects .create (
442474 name = f'{ app_name } :{ api_backend_obj .name } ' ,
443475 owner = owner ,
@@ -485,9 +517,10 @@ def post(self, request):
485517 edge .save ()
486518 graph_edges .append (edge )
487519
520+ template_slug = request .data ['template_slug' ] if 'template_slug' in request .data else None
488521 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
491524
492525 app = App .objects .create (
493526 name = app_name ,
@@ -500,6 +533,7 @@ def post(self, request):
500533 output_template = app_output_template ,
501534 data_transformer = app_data_transformer ,
502535 template = template ,
536+ template_slug = template_slug ,
503537 )
504538 app .run_graph .set (graph_edges )
505539 app .save ()
0 commit comments