lemoncurry/entries/kinds.py

89 lines
1.6 KiB
Python

from django.urls import reverse
class Entry:
def __init__(self, id, plural, icon, on_home=True, slug=False):
self.id = id
self.plural = plural
self.icon = icon
self.on_home = on_home
self.slug = slug
@property
def index(self):
return self.index_page()
def index_page(self, page=0):
kwargs = {"kind": self}
if page > 1:
kwargs["page"] = page
return reverse("entries:index", kwargs=kwargs)
@property
def entry(self):
return self.plural + "_entry"
@property
def atom(self):
return reverse("entries:atom_by_kind", kwargs={"kind": self})
@property
def rss(self):
return reverse("entries:rss_by_kind", kwargs={"kind": self})
Note = Entry(
id="note",
icon="fas fa-paper-plane",
plural="notes",
)
Article = Entry(
id="article",
icon="fas fa-file-alt",
plural="articles",
slug=True,
)
Photo = Entry(
id="photo",
icon="fas fa-camera",
plural="photos",
)
Reply = Entry(
id="reply",
icon="fas fa-comment",
plural="replies",
on_home=False,
)
Like = Entry(
id="like",
icon="fas fa-heart",
plural="likes",
on_home=False,
)
Repost = Entry(
id="repost",
icon="fas fa-retweet",
plural="reposts",
)
all = (Note, Article, Photo)
on_home = {k.id for k in all if k.on_home}
from_id = {k.id: k for k in all}
from_plural = {k.plural: k for k in all}
class EntryKindConverter:
regex = "|".join(k.plural for k in all)
def to_python(self, plural):
return from_plural[plural]
def to_url(self, k):
return k.plural