Skip to content

Commit

Permalink
refactor: [ACI-997] cosmetic changes
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrii committed Jun 3, 2024
1 parent 225fdd5 commit cd5ee0a
Show file tree
Hide file tree
Showing 9 changed files with 53 additions and 23 deletions.
16 changes: 2 additions & 14 deletions credentials/apps/badges/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,13 @@
from credentials.apps.badges.toggles import check_badges_enabled


class BadgesAppConfig(AppConfig):
"""
Extended application config with additional Badges-specific logic.
"""

plugin_label = "badges"

@property
def verbose_name(self):
return f"Badges: {self.plugin_label}"


class BadgesConfig(BadgesAppConfig):
class BadgesConfig(AppConfig):
"""
Core badges application configuration.
"""

default = True
name = "credentials.apps.badges"
plugin_label = "badges"
verbose_name = "Badges"

@check_badges_enabled
Expand Down
1 change: 1 addition & 0 deletions credentials/apps/badges/checks.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ def badges_checks(*args, **kwargs):
Raises compatibility Errors upon:
- BADGES_CONFIG['events'] is empty
- Credly settings are not properly configured
Returns:
List of any Errors.
Expand Down
19 changes: 12 additions & 7 deletions credentials/apps/badges/credly/webhooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,14 +59,19 @@ def post(self, request):

return Response(status=status.HTTP_204_NO_CONTENT)

@staticmethod
def _get_badge_template_from_data(data):
badge_template = data.get("data", {}).get("badge_template", {})
return badge_template

@staticmethod
def handle_badge_template_created_event(request, data):
"""
Create a new badge template.
"""
# TODO: dry it
badge_template = data.get("data", {}).get("badge_template", {})
owner = data.get("data", {}).get("badge_template", {}).get("owner", {})

badge_template = CredlyWebhook._get_badge_template_from_data(data)
owner = badge_template.get("owner", {})

organization = get_object_or_404(CredlyOrganization, uuid=owner.get("id"))

Expand All @@ -87,9 +92,9 @@ def handle_badge_template_changed_event(request, data):
"""
Change the badge template.
"""
# TODO: dry it
badge_template = data.get("data", {}).get("badge_template", {})
owner = data.get("data", {}).get("badge_template", {}).get("owner", {})

badge_template = CredlyWebhook._get_badge_template_from_data(data)
owner = badge_template.get("owner", {})

organization = get_object_or_404(CredlyOrganization, uuid=owner.get("id"))

Expand Down Expand Up @@ -117,6 +122,6 @@ def handle_badge_template_deleted_event(request, data):
Deletes the badge template by provided uuid.
"""
CredlyBadgeTemplate.objects.filter(
uuid=data.get("data", {}).get("badge_template", {}).get("id"),
uuid=CredlyWebhook._get_badge_template_from_data(data).get("id"),
site=get_current_site(request),
).delete()
23 changes: 23 additions & 0 deletions credentials/apps/badges/issuers.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,15 @@ def award(self, *, username, credential_id):
return user_credential

def revoke(self, credential_id, username):
"""
Revokes a badge.
Changes user credential status to REVOKED, for a given user.
Notifies about the revoked badge (public signal).
Returns: UserCredential
"""

credential = self.get_credential(credential_id)
user_credential = self.issue_credential(credential, username, status=UserCredentialStatus.REVOKED)

Expand Down Expand Up @@ -130,6 +139,10 @@ def issue_credly_badge(self, *, user_credential):
user_credential.save()

def revoke_credly_badge(self, credential_id, user_credential):
"""
Requests Credly service for external badge revoking based on internal user credential (CredlyBadge).
"""

credential = self.get_credential(credential_id)
credly_api = CredlyAPIClient(credential.organization.uuid)
revoke_data = {
Expand Down Expand Up @@ -165,6 +178,16 @@ def award(self, *, username, credential_id):
return credly_badge

def revoke(self, credential_id, username):
"""
Revokes a Credly badge.
- Changes user credential status to REVOKED, for a given user;
- Notifies about the revoked badge (public signal);
- Revokes external Credly badge (Credly API);
Returns: (CredlyBadge) user credential
"""

user_credential = super().revoke(credential_id, username)
if user_credential.propagated:
self.revoke_credly_badge(credential_id, user_credential)
Expand Down
15 changes: 15 additions & 0 deletions credentials/apps/badges/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -422,6 +422,10 @@ def reset_requirements(self, username: str):

@property
def is_active(self):
"""
Checks if the penalty is active.
"""

return self.template.is_active


Expand All @@ -446,6 +450,9 @@ def __str__(self):

@property
def is_active(self):
"""
Checks if the rule is active.
"""
return self.penalty.template.is_active


Expand Down Expand Up @@ -494,6 +501,10 @@ def ratio(self) -> float:

@property
def groups(self):
"""
Returns gorups and their statuses (fulfilled or not).
"""

return {
group: BadgeRequirement.is_group_fulfilled(group=group, template=self.template, username=self.username)
for group in self.template.groups
Expand All @@ -520,6 +531,10 @@ def regress(self):
notify_progress_incomplete(self, self.username, self.template.id)

def reset(self):
"""
Resets the progress.
"""

Fulfillment.objects.filter(progress=self).delete()


Expand Down
2 changes: 0 additions & 2 deletions credentials/settings/production.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,5 +63,3 @@

for override, value in DB_OVERRIDES.items():
DATABASES["default"][override] = value

add_plugins(__name__, PROJECT_TYPE, SettingsType.PRODUCTION)
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 comments on commit cd5ee0a

Please sign in to comment.