11
11
from django .utils .safestring import mark_safe
12
12
from django .utils .translation import gettext_lazy as _
13
13
14
+ from credentials .apps .badges .exceptions import BadgeProviderError
14
15
from credentials .apps .badges .admin_forms import (
15
16
BadgePenaltyForm ,
16
17
BadgeRequirementForm ,
38
39
from credentials .apps .badges .toggles import is_badges_enabled
39
40
40
41
42
+ ADMIN_CHANGE_VIEW_REVERSE_NAMES = {
43
+ CredlyBadgeTemplate .ORIGIN : "admin:badges_credlybadgetemplate_change" ,
44
+ AccredibleGroup .ORIGIN : "admin:badges_accrediblegroup_change" ,
45
+ }
46
+
41
47
class BadgeRequirementInline (admin .TabularInline ):
42
48
"""
43
49
Badge template requirement inline setup.
@@ -388,14 +394,19 @@ def template_link(self, instance):
388
394
"""
389
395
Interactive link to parent (badge template).
390
396
"""
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 )
392
401
return format_html ('<a href="{}">{}</a>' , url , instance .template )
393
402
394
403
template_link .short_description = _ ("badge template" )
395
404
396
405
def response_change (self , request , obj ):
397
406
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 ))
399
410
return super ().response_change (request , obj )
400
411
401
412
@@ -445,7 +456,9 @@ def template_link(self, instance):
445
456
"""
446
457
Interactive link to parent (badge template).
447
458
"""
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 )
449
462
return format_html ('<a href="{}">{}</a>' , url , instance .template )
450
463
451
464
template_link .short_description = _ ("badge template" )
@@ -460,7 +473,9 @@ def formfield_for_manytomany(self, db_field, request, **kwargs):
460
473
461
474
def response_change (self , request , obj ):
462
475
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 ))
464
479
return super ().response_change (request , obj )
465
480
466
481
@@ -562,11 +577,15 @@ def sync_groups(self, request, queryset):
562
577
"""
563
578
site = get_current_site (request )
564
579
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 ))
570
589
571
590
messages .success (request , _ ("Accredible groups were successfully updated." ))
572
591
0 commit comments