12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- """
- Service for tracking namechanges
- """
- from datetime import timedelta
- from django.utils import timezone
- def get_username_options(settings, user, user_acl):
- changes_left = get_left_namechanges(user, user_acl)
- next_on = get_next_available_namechange(user, user_acl, changes_left)
- return {
- "changes_left": changes_left,
- "next_on": next_on,
- "length_min": settings.username_length_min,
- "length_max": settings.username_length_max,
- }
- def get_left_namechanges(user, user_acl):
- name_changes_allowed = user_acl["name_changes_allowed"]
- if not name_changes_allowed:
- return 0
- valid_changes = get_valid_changes_queryset(user, user_acl)
- used_changes = valid_changes.count()
- if name_changes_allowed <= used_changes:
- return 0
- return name_changes_allowed - used_changes
- def get_next_available_namechange(user, user_acl, changes_left):
- name_changes_expire = user_acl["name_changes_expire"]
- if changes_left or not name_changes_expire:
- return None
- valid_changes = get_valid_changes_queryset(user, user_acl)
- name_last_changed_on = valid_changes.latest().changed_on
- return name_last_changed_on + timedelta(days=name_changes_expire)
- def get_valid_changes_queryset(user, user_acl):
- name_changes_expire = user_acl["name_changes_expire"]
- queryset = user.namechanges.filter(changed_by=user)
- if user_acl["name_changes_expire"]:
- cutoff = timezone.now() - timedelta(days=name_changes_expire)
- return queryset.filter(changed_on__gte=cutoff)
- return queryset
|