Skip to content

Commit 207ae36

Browse files
committed
fix: fix accredible models redirect and handle errors on sync
1 parent c366335 commit 207ae36

File tree

6 files changed

+40
-11
lines changed

6 files changed

+40
-11
lines changed

credentials/apps/badges/admin.py

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from django.utils.safestring import mark_safe
1212
from django.utils.translation import gettext_lazy as _
1313

14+
from credentials.apps.badges.exceptions import BadgeProviderError
1415
from credentials.apps.badges.admin_forms import (
1516
BadgePenaltyForm,
1617
BadgeRequirementForm,
@@ -38,6 +39,11 @@
3839
from 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+
4147
class 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

credentials/apps/badges/base_api_client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ def _raise_for_error(self, response):
6262
try:
6363
response.raise_for_status()
6464
except HTTPError:
65-
logger.error(f"Error while processing request: {response.status_code} - {response.text}")
66-
raise BadgeProviderError(f"{self.PROVIDER_NAME} API:{response.text}({response.status_code})")
65+
logger.error(f"Error while processing {self.PROVIDER_NAME} request: {response.status_code} - {response.text}")
66+
raise BadgeProviderError(f"{response.text} Status({response.status_code})")
6767

6868
@property
6969
def base_api_url(self):
198 Bytes
Binary file not shown.

credentials/conf/locale/eo/LC_MESSAGES/django.po

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@ msgstr ""
7777
msgid "badge template"
7878
msgstr "ßädgé témpläté Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт#"
7979

80+
#: apps/badges/admin.py
81+
msgid "Failed to sync groups for API config: {}. {}"
82+
msgstr ""
83+
"Fäïléd tö sýnç gröüps för ÀPÌ çönfïg: {}. {} Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, "
84+
"¢σηѕє¢тєтυя #"
85+
8086
#: apps/badges/admin.py
8187
msgid "Accredible groups were successfully updated."
8288
msgstr ""
130 Bytes
Binary file not shown.

credentials/conf/locale/rtl/LC_MESSAGES/django.po

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ msgstr "Ⱥɔʇᴉʌǝ bɐdƃǝ ʇǝɯdlɐʇǝ ɯnsʇ ɥɐʌǝ ɐʇ lǝɐsʇ øn
6767
msgid "badge template"
6868
msgstr "bɐdƃǝ ʇǝɯdlɐʇǝ"
6969

70+
#: apps/badges/admin.py
71+
msgid "Failed to sync groups for API config: {}. {}"
72+
msgstr "Fɐᴉlǝd ʇø sʎnɔ ƃɹønds ɟøɹ ȺⱣƗ ɔønɟᴉƃ: {}. {}"
73+
7074
#: apps/badges/admin.py
7175
msgid "Accredible groups were successfully updated."
7276
msgstr "Ⱥɔɔɹǝdᴉblǝ ƃɹønds ʍǝɹǝ snɔɔǝssɟnllʎ nddɐʇǝd."

0 commit comments

Comments
 (0)