1111from django .utils .safestring import mark_safe
1212from django .utils .translation import gettext_lazy as _
1313
14+ from credentials .apps .badges .exceptions import BadgeProviderError
1415from credentials .apps .badges .admin_forms import (
1516 BadgePenaltyForm ,
1617 BadgeRequirementForm ,
3839from credentials .apps .badges .toggles import is_badges_enabled
3940
4041
42+ ADMIN_CHANGE_VIEW_REVERSE_NAMES = {
43+ CredlyBadgeTemplate .ORIGIN : "admin:badges_credlybadgetemplate_change" ,
44+ AccredibleGroup .ORIGIN : "admin:badges_accrediblegroup_change" ,
45+ }
46+
4147class BadgeRequirementInline (admin .TabularInline ):
4248 """
4349 Badge template requirement inline setup.
@@ -388,14 +394,19 @@ def template_link(self, instance):
388394 """
389395 Interactive link to parent (badge template).
390396 """
391- url = reverse ("admin:badges_credlybadgetemplate_change" , args = [instance .template .pk ])
397+ reverse_name = ADMIN_CHANGE_VIEW_REVERSE_NAMES .get (instance .template .origin , "admin:index" )
398+ reverse_args = [] if reverse_name == "admin:index" else [instance .template .pk ]
399+
400+ url = reverse (reverse_name , args = reverse_args )
392401 return format_html ('<a href="{}">{}</a>' , url , instance .template )
393402
394403 template_link .short_description = _ ("badge template" )
395404
396405 def response_change (self , request , obj ):
397406 if "_save" in request .POST :
398- return HttpResponseRedirect (reverse ("admin:badges_credlybadgetemplate_change" , args = [obj .template .pk ]))
407+ reverse_name = ADMIN_CHANGE_VIEW_REVERSE_NAMES .get (obj .template .origin , "admin:index" )
408+ reverse_args = [] if reverse_name == "admin:index" else [obj .template .pk ]
409+ return HttpResponseRedirect (reverse (reverse_name , args = reverse_args ))
399410 return super ().response_change (request , obj )
400411
401412
@@ -445,7 +456,9 @@ def template_link(self, instance):
445456 """
446457 Interactive link to parent (badge template).
447458 """
448- url = reverse ("admin:badges_credlybadgetemplate_change" , args = [instance .template .pk ])
459+ reverse_name = ADMIN_CHANGE_VIEW_REVERSE_NAMES .get (instance .template .origin , "admin:index" )
460+ reverse_args = [] if reverse_name == "admin:index" else [instance .template .pk ]
461+ url = reverse (reverse_name , args = reverse_args )
449462 return format_html ('<a href="{}">{}</a>' , url , instance .template )
450463
451464 template_link .short_description = _ ("badge template" )
@@ -460,7 +473,9 @@ def formfield_for_manytomany(self, db_field, request, **kwargs):
460473
461474 def response_change (self , request , obj ):
462475 if "_save" in request .POST :
463- return HttpResponseRedirect (reverse ("admin:badges_credlybadgetemplate_change" , args = [obj .template .pk ]))
476+ reverse_name = ADMIN_CHANGE_VIEW_REVERSE_NAMES .get (obj .template .origin , "admin:index" )
477+ reverse_args = [] if reverse_name == "admin:index" else [obj .template .pk ]
478+ return HttpResponseRedirect (reverse (reverse_name , args = reverse_args ))
464479 return super ().response_change (request , obj )
465480
466481
@@ -562,11 +577,15 @@ def sync_groups(self, request, queryset):
562577 """
563578 site = get_current_site (request )
564579 for api_config in queryset :
565- call_command (
566- "sync_accredible_groups" ,
567- api_config_id = api_config .id ,
568- site_id = site .id ,
569- )
580+ try :
581+ call_command (
582+ "sync_accredible_groups" ,
583+ api_config_id = api_config .id ,
584+ site_id = site .id ,
585+ )
586+ except BadgeProviderError as exc :
587+ messages .set_level (request , messages .ERROR )
588+ messages .error (request , _ ("Failed to sync groups for API config: {}. {}" ).format (api_config .name , exc ))
570589
571590 messages .success (request , _ ("Accredible groups were successfully updated." ))
572591
0 commit comments