diff --git a/credentials/apps/badges/admin.py b/credentials/apps/badges/admin.py
index 0f0ba07ab9..3ee41a2fc6 100644
--- a/credentials/apps/badges/admin.py
+++ b/credentials/apps/badges/admin.py
@@ -21,6 +21,7 @@
PenaltyDataRuleForm,
PenaltyDataRuleFormSet,
)
+from credentials.apps.badges.exceptions import BadgeProviderError
from credentials.apps.badges.models import (
AccredibleAPIConfig,
AccredibleBadge,
@@ -38,6 +39,12 @@
from credentials.apps.badges.toggles import is_badges_enabled
+ADMIN_CHANGE_VIEW_REVERSE_NAMES = {
+ CredlyBadgeTemplate.ORIGIN: "admin:badges_credlybadgetemplate_change",
+ AccredibleGroup.ORIGIN: "admin:badges_accrediblegroup_change",
+}
+
+
class BadgeRequirementInline(admin.TabularInline):
"""
Badge template requirement inline setup.
@@ -388,14 +395,19 @@ def template_link(self, instance):
"""
Interactive link to parent (badge template).
"""
- url = reverse("admin:badges_credlybadgetemplate_change", args=[instance.template.pk])
+ reverse_name = ADMIN_CHANGE_VIEW_REVERSE_NAMES.get(instance.template.origin, "admin:index")
+ reverse_args = [] if reverse_name == "admin:index" else [instance.template.pk]
+
+ url = reverse(reverse_name, args=reverse_args)
return format_html('{}', url, instance.template)
template_link.short_description = _("badge template")
def response_change(self, request, obj):
if "_save" in request.POST:
- return HttpResponseRedirect(reverse("admin:badges_credlybadgetemplate_change", args=[obj.template.pk]))
+ reverse_name = ADMIN_CHANGE_VIEW_REVERSE_NAMES.get(obj.template.origin, "admin:index")
+ reverse_args = [] if reverse_name == "admin:index" else [obj.template.pk]
+ return HttpResponseRedirect(reverse(reverse_name, args=reverse_args))
return super().response_change(request, obj)
@@ -445,7 +457,9 @@ def template_link(self, instance):
"""
Interactive link to parent (badge template).
"""
- url = reverse("admin:badges_credlybadgetemplate_change", args=[instance.template.pk])
+ reverse_name = ADMIN_CHANGE_VIEW_REVERSE_NAMES.get(instance.template.origin, "admin:index")
+ reverse_args = [] if reverse_name == "admin:index" else [instance.template.pk]
+ url = reverse(reverse_name, args=reverse_args)
return format_html('{}', url, instance.template)
template_link.short_description = _("badge template")
@@ -460,7 +474,9 @@ def formfield_for_manytomany(self, db_field, request, **kwargs):
def response_change(self, request, obj):
if "_save" in request.POST:
- return HttpResponseRedirect(reverse("admin:badges_credlybadgetemplate_change", args=[obj.template.pk]))
+ reverse_name = ADMIN_CHANGE_VIEW_REVERSE_NAMES.get(obj.template.origin, "admin:index")
+ reverse_args = [] if reverse_name == "admin:index" else [obj.template.pk]
+ return HttpResponseRedirect(reverse(reverse_name, args=reverse_args))
return super().response_change(request, obj)
@@ -562,11 +578,15 @@ def sync_groups(self, request, queryset):
"""
site = get_current_site(request)
for api_config in queryset:
- call_command(
- "sync_accredible_groups",
- api_config_id=api_config.id,
- site_id=site.id,
- )
+ try:
+ call_command(
+ "sync_accredible_groups",
+ api_config_id=api_config.id,
+ site_id=site.id,
+ )
+ except BadgeProviderError as exc:
+ messages.set_level(request, messages.ERROR)
+ messages.error(request, _("Failed to sync groups for API config: {}. {}").format(api_config.name, exc))
messages.success(request, _("Accredible groups were successfully updated."))
diff --git a/credentials/apps/badges/base_api_client.py b/credentials/apps/badges/base_api_client.py
index b578c1375f..082bdaf07b 100644
--- a/credentials/apps/badges/base_api_client.py
+++ b/credentials/apps/badges/base_api_client.py
@@ -62,8 +62,10 @@ def _raise_for_error(self, response):
try:
response.raise_for_status()
except HTTPError:
- logger.error(f"Error while processing request: {response.status_code} - {response.text}")
- raise BadgeProviderError(f"{self.PROVIDER_NAME} API:{response.text}({response.status_code})")
+ logger.error(
+ f"Error while processing {self.PROVIDER_NAME} request: {response.status_code} - {response.text}"
+ )
+ raise BadgeProviderError(f"{response.text} Status({response.status_code})")
@property
def base_api_url(self):
diff --git a/credentials/conf/locale/eo/LC_MESSAGES/django.mo b/credentials/conf/locale/eo/LC_MESSAGES/django.mo
index e091fd348c..2304494283 100644
Binary files a/credentials/conf/locale/eo/LC_MESSAGES/django.mo and b/credentials/conf/locale/eo/LC_MESSAGES/django.mo differ
diff --git a/credentials/conf/locale/eo/LC_MESSAGES/django.po b/credentials/conf/locale/eo/LC_MESSAGES/django.po
index 6a0f7a36c2..a074ad03ce 100644
--- a/credentials/conf/locale/eo/LC_MESSAGES/django.po
+++ b/credentials/conf/locale/eo/LC_MESSAGES/django.po
@@ -77,6 +77,12 @@ msgstr ""
msgid "badge template"
msgstr "ßädgé témpläté Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт#"
+#: apps/badges/admin.py
+msgid "Failed to sync groups for API config: {}. {}"
+msgstr ""
+"Fäïléd tö sýnç gröüps för ÀPÌ çönfïg: {}. {} Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, "
+"¢σηѕє¢тєтυя #"
+
#: apps/badges/admin.py
msgid "Accredible groups were successfully updated."
msgstr ""
diff --git a/credentials/conf/locale/rtl/LC_MESSAGES/django.mo b/credentials/conf/locale/rtl/LC_MESSAGES/django.mo
index 85afd802e7..281448727b 100644
Binary files a/credentials/conf/locale/rtl/LC_MESSAGES/django.mo and b/credentials/conf/locale/rtl/LC_MESSAGES/django.mo differ
diff --git a/credentials/conf/locale/rtl/LC_MESSAGES/django.po b/credentials/conf/locale/rtl/LC_MESSAGES/django.po
index 5427279734..ddc422f24f 100644
--- a/credentials/conf/locale/rtl/LC_MESSAGES/django.po
+++ b/credentials/conf/locale/rtl/LC_MESSAGES/django.po
@@ -67,6 +67,10 @@ msgstr "Ⱥɔʇᴉʌǝ bɐdƃǝ ʇǝɯdlɐʇǝ ɯnsʇ ɥɐʌǝ ɐʇ lǝɐsʇ øn
msgid "badge template"
msgstr "bɐdƃǝ ʇǝɯdlɐʇǝ"
+#: apps/badges/admin.py
+msgid "Failed to sync groups for API config: {}. {}"
+msgstr "Fɐᴉlǝd ʇø sʎnɔ ƃɹønds ɟøɹ ȺⱣƗ ɔønɟᴉƃ: {}. {}"
+
#: apps/badges/admin.py
msgid "Accredible groups were successfully updated."
msgstr "Ⱥɔɔɹǝdᴉblǝ ƃɹønds ʍǝɹǝ snɔɔǝssɟnllʎ nddɐʇǝd."