Skip to content

Commit

Permalink
black formatting
Browse files Browse the repository at this point in the history
  • Loading branch information
KommuSoft committed Feb 17, 2025
1 parent e9df165 commit aa2c5e5
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 28 deletions.
23 changes: 13 additions & 10 deletions django_user_pinned/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,27 +9,30 @@ def get_queryset(self, request):
return super().get_queryset(request).with_pinned(request.user).with_pins()

def get_list_display(self, request):
return [*super().get_list_display(request), 'pin_star']
return [*super().get_list_display(request), "pin_star"]

def _get_base_actions(self):
return [*super()._get_base_actions(), *filter(None, map(self.get_action, ('pin', 'unpin')))]
return [
*super()._get_base_actions(),
*filter(None, map(self.get_action, ("pin", "unpin"))),
]

@admin.action(description=_("Pin items"), permissions=['pin'])
@admin.action(description=_("Pin items"), permissions=["pin"])
def pin(self, request, queryset):
model_name = self.model._meta.model_name
getattr(request.user, f'pinned_{model_name}s').add(*queryset)
getattr(request.user, f"pinned_{model_name}s").add(*queryset)

def has_pin_permission(self, request):
opts = self.opts
codename = get_permission_codename('pin', opts)
return request.user.has_perm(f'{opts.app_label}.{codename}')
codename = get_permission_codename("pin", opts)
return request.user.has_perm(f"{opts.app_label}.{codename}")

@admin.action(description=_("Unpin items"), permissions=['unpin'])
@admin.action(description=_("Unpin items"), permissions=["unpin"])
def unpin(self, request, queryset):
model_name = self.model._meta.model_name
getattr(request.user, f'pinned_{model_name}s').remove(*queryset)
getattr(request.user, f"pinned_{model_name}s").remove(*queryset)

def has_unpin_permission(self, request):
opts = self.opts
codename = get_permission_codename('unpin', opts)
return request.user.has_perm(f'{opts.app_label}.{codename}')
codename = get_permission_codename("unpin", opts)
return request.user.has_perm(f"{opts.app_label}.{codename}")
2 changes: 1 addition & 1 deletion django_user_pinned/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ class SingleSessionConfig(AppConfig):

name = "django_user_pinned"
verbose_name = "django user pinned"
default_auto_field = "django.db.models.BigAutoField"
default_auto_field = "django.db.models.BigAutoField"
44 changes: 27 additions & 17 deletions django_user_pinned/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from django.utils.translation import gettext as _


STAR_CHARS = '☆★'
STAR_CHARS = "☆★"


class PinnableQuerySet(models.QuerySet):
Expand All @@ -17,44 +17,54 @@ def with_pinned(self, user, *users):
junction = rel.through
rel_name = rel.rel.model._meta.model_name
if users:
rel_name = f'{rel_name}__in'
rel_name = f"{rel_name}__in"
user = (user, *users)
return self.annotate(
is_pinned=Exists(junction.objects.filter(
Q((self.model._meta.model_name, OuterRef('pk')),
Q((rel_name, user))
)))
is_pinned=Exists(
junction.objects.filter(
Q(
(self.model._meta.model_name, OuterRef("pk")),
Q((rel_name, user)),
)
)
)
)

def with_pinned_sorted(self, user, *users):
return self.get_pinned(user, *users).order_by('-is_pinned')
return self.get_pinned(user, *users).order_by("-is_pinned")

def with_pins(self):
return self.annotate(_pins=Count('pinned_by', distinct=True))
return self.annotate(_pins=Count("pinned_by", distinct=True))

def with_pins_sorted(self):
return self.with_pins().order_by('-_pins')
return self.with_pins().order_by("-_pins")


class PinnableModel(models.Model):
pinned_by = models.ManyToManyField(settings.AUTH_USER_MODEL, symmetrical=False, related_name='pinned_%(class)ss', blank=True, editable=False)
pinned_by = models.ManyToManyField(
settings.AUTH_USER_MODEL,
symmetrical=False,
related_name="pinned_%(class)ss",
blank=True,
editable=False,
)
objects = PinnableQuerySet.as_manager()

@property
def pins(self):
pins = getattr(self, '_pins', None)
pins = getattr(self, "_pins", None)
if pins is None:
self._pins = pins = self.pinned_by.count()
return pins

@property
def pin_star_char(self):
return STAR_CHARS[bool(getattr(self, 'is_pinned', False))]
return STAR_CHARS[bool(getattr(self, "is_pinned", False))]

@property
@admin.display(description='pins', ordering='_pins')
@admin.display(description="pins", ordering="_pins")
def pin_star(self):
return f'{self.pins} {self.pin_star_char}'
return f"{self.pins} {self.pin_star_char}"

def pin(self, user, *users):
self.pinned_by.add(user, *users)
Expand All @@ -65,6 +75,6 @@ def unpin(self, user, *users):
class Meta:
abstract = True
permissions = [
('pin', _('a user can add an object to their selection')),
('unpin', _('a user can remove an object from their selection')),
]
("pin", _("a user can add an object to their selection")),
("unpin", _("a user can remove an object from their selection")),
]

0 comments on commit aa2c5e5

Please sign in to comment.