2025.12.26 20:48:46 (cachyos.cmoser.eu)

This commit is contained in:
2025-12-26 20:48:46 +01:00
parent 88b09d08b3
commit f9b46d5fe9
4 changed files with 51 additions and 43 deletions

3
.flake8 Normal file
View File

@@ -0,0 +1,3 @@
[flake8]
exclude = .git, __pycache__, docs, old, build, dist, django_project, migrations
max-line-length = 100

View File

@@ -20,19 +20,20 @@ from environ import Env
BASE_DIR = Path(__file__).resolve().parent.parent BASE_DIR = Path(__file__).resolve().parent.parent
LOCAL_DIR = Path(__file__).resolve().parent / "local" LOCAL_DIR = Path(__file__).resolve().parent / "local"
DEFAULT_SQLITE_DATABASE = str(BASE_DIR / 'db.sqlite3').replace('\\', '/')
ENV = Env( ENV = Env(
DEBUG=(bool,False), DEBUG=(bool, False),
DOTENV=(Path,LOCAL_DIR/'.env'), DOTENV=(Path, LOCAL_DIR/'.env'),
DOTENV_PROD=(Path,LOCAL_DIR/'.env.prod'), DOTENV_PROD=(Path, LOCAL_DIR/'.env.prod'),
DOTENV_DEVEL=(Path,LOCAL_DIR/'.env.dev'), DOTENV_DEVEL=(Path, LOCAL_DIR/'.env.dev'),
DATABASE_URL=(str,f"sqlite:///{str(BASE_DIR/"db.sqlite3").replace("\\","/")}"), DATABASE_URL=(str, f"sqlite:///{DEFAULT_SQLITE_DATABASE}"),
ALLOWED_HOSTS=(list,['*']), ALLOWED_HOSTS=(list, ['*']),
STATIC_URL=(str,"static/"), STATIC_URL=(str, "static/"),
STATIC_ROOT=(Path,BASE_DIR/".static"), STATIC_ROOT=(Path, BASE_DIR/".static"),
MEDIA_URL=(str,"media/"), MEDIA_URL=(str, "media/"),
MEDIA_ROOT=(Path,BASE_DIR/".media"), MEDIA_ROOT=(Path, BASE_DIR/".media"),
SECRET_KEY=(str,'django-insecure-tqis9c9@z_=cq36ic4h-l7h!ln8*@_*+e96z0m^-^mx_avdcw*'), SECRET_KEY=(str, 'django-insecure-tqis9c9@z_=cq36ic4h-l7h!ln8*@_*+e96z0m^-^mx_avdcw*'),
EMAIL_BACKEND=(str,"console"), EMAIL_BACKEND=(str, "console"),
) )
_env_file = Path(ENV.path("DOTENV")) _env_file = Path(ENV.path("DOTENV"))

View File

@@ -20,7 +20,7 @@ def render_url(tag_name: str, value, options, parent, context) -> str:
if settings.USE_BOOTSTRAP: if settings.USE_BOOTSTRAP:
if ['noicon in options']: if ['noicon in options']:
return f"<a href=\"{url}\" referrer-policy=\"no-referrer\" rel=\"noreferrer noopener\">{value}</a>" # noqa: E501 return f"<a href=\"{url}\" referrer-policy=\"no-referrer\" rel=\"noreferrer noopener\">{value}</a>" # noqa: E501
return f"<a href=\"{url}\" class=\"icon-link icon-link-hover\" referrer-policy=\"no-referrer\" rel=\"noreferrer noopener\">{value}<svg class=\"bi\"><use xlink:href=\"{settings.settings.STATIC_URL + "tinywiki/icons/bootstrap-icons.svg"}#box-arrow-up-right\"></use></svg></a>" # noqa: E501 return f"<a href=\"{url}\" class=\"icon-link icon-link-hover\" referrer-policy=\"no-referrer\" rel=\"noreferrer noopener\">{value}<svg class=\"bi\"><use xlink:href=\"{settings.settings.STATIC_URL + 'tinywiki/icons/bootstrap-icons.svg'}#box-arrow-up-right\"></use></svg></a>" # noqa: E501
return f"<a href=\"{url}\" referrer-policy=\"no-referrer\" rel=\"noreferrer noopener\">{value}</a>" # noqa: E501 return f"<a href=\"{url}\" referrer-policy=\"no-referrer\" rel=\"noreferrer noopener\">{value}</a>" # noqa: E501
@@ -178,16 +178,16 @@ def render_image(tag_name: str, value, options, parent, context) -> str:
classes += ["mx-auto","d-block"] classes += ["mx-auto","d-block"]
if styles: if styles:
style = f"style=\"{"".join(styles)}\"" style = f'style=\"{" ".join(styles)}\"'
else: else:
style = "" style = ""
if fig_styles: if fig_styles:
fig_style = f'style="{"".join(fig_styles)}"' fig_style = f'style="{" ".join(fig_styles)}"'
else: else:
fig_style = "" fig_style = ""
if settings.USE_BOOTSTRAP: if settings.USE_BOOTSTRAP:
return f'<figure class="{" ".join(fig_classes)} {fig_style}"><img src="{options[tag_name]}" class="{' '.join(classes)}" alt="{alt}" {style}><figcaption class="figure-caption text-end">{value}</figcaption></figure>' # noqa: E501 return f'<figure class="{" ".join(fig_classes)} {fig_style}"><img src="{options[tag_name]}" class="{" ".join(classes)}" alt="{alt}" {style}><figcaption class="figure-caption text-end">{value}</figcaption></figure>' # noqa: E501
else: else:
return f'<figure {fig_style}><img src="{options[tag_name]}" {style}><figcaption>{value}</figcaption></figure>' # noqa: E501 return f'<figure {fig_style}><img src="{options[tag_name]}" {style}><figcaption>{value}</figcaption></figure>' # noqa: E501
@@ -265,17 +265,17 @@ def render_wiki_image(tag_name: str, value, options, parent, context):
fig_classes += ["mx-auto", "d-block"] fig_classes += ["mx-auto", "d-block"]
if styles: if styles:
style = f"style=\"{"".join(styles)}\"" style = f"style=\"{' '.join(styles)}\""
else: else:
style = "" style = ""
if fig_styles: if fig_styles:
fig_style = f'style="{"".join(fig_styles)}"' fig_style = f'style="{" ".join(fig_styles)}"'
else: else:
fig_style = "" fig_style = ""
if settings.USE_BOOTSTRAP: if settings.USE_BOOTSTRAP:
return f'<figure class="{" ".join(fig_classes)}" {fig_style}><img src="{image.image.url}" alt="{image.alt}" class="{' '.join(classes)}" {style}><figcaption class="figure-caption text-end">{image.description_html}</figcaption></figure>' # noqa: E501 return f'<figure class="{" ".join(fig_classes)}" {fig_style}><img src="{image.image.url}" alt="{image.alt}" class="{" ".join(classes)}" {style}><figcaption class="figure-caption text-end">{image.description_html}</figcaption></figure>' # noqa: E501
else: else:
return f'<figure {fig_style}><img src="{image.image.url}" alt="{image.alt}" {style}><figcaption>{image.description}</figcaption></figure>' # noqa: E501 return f'<figure {fig_style}><img src="{image.image.url}" alt="{image.alt}" {style}><figcaption>{image.description}</figcaption></figure>' # noqa: E501
@@ -311,7 +311,7 @@ def render_table(tag_name: str, value, options, parent, context) -> str:
): ):
classes.append(f"table-{options[tag_name]}") classes.append(f"table-{options[tag_name]}")
return f"<table class=\"{" ".join(classes)}\">{value}</table>" return f"<table class=\"{' '.join(classes)}\">{value}</table>"
return f"<table>{value}</table>" return f"<table>{value}</table>"
@@ -330,7 +330,7 @@ def render_table_row(tag_name: str, value, options, parent, context) -> str:
"dark" "dark"
): ):
classes.append(f"table-{options[tag_name]}") classes.append(f"table-{options[tag_name]}")
class_attr = f"class=\"{" ".join(classes)}\"" if classes else "" class_attr = f"class=\"{' '.join(classes)}\"" if classes else ""
return f"<tr {class_attr}>{value}</tr>" return f"<tr {class_attr}>{value}</tr>"
@@ -354,8 +354,8 @@ def render_table_header(tag_name: str, value, options, parent, context) -> str:
"dark" "dark"
): ):
classes.append(f"table-{options[tag_name]}") classes.append(f"table-{options[tag_name]}")
class_attr = f"class=\"{" ".join(classes)}\"" if classes else "" class_attr = f"class=\"{' '.join(classes)}\"" if classes else ""
return f"<th {class_attr} {" ".join(extra_attributes)}>{value}</th>" return f"<th {class_attr} {' '.join(extra_attributes)}>{value}</th>"
def render_table_data(tag_name: str, value, options, parent, context) -> str: def render_table_data(tag_name: str, value, options, parent, context) -> str:
extra_attributes = [] extra_attributes = []
@@ -377,8 +377,8 @@ def render_table_data(tag_name: str, value, options, parent, context) -> str:
"dark" "dark"
): ):
classes.append(f"table-{options[tag_name]}") classes.append(f"table-{options[tag_name]}")
class_attr = f"class=\"{" ".join(classes)}\"" if classes else "" class_attr = f"class=\"{' '.join(classes)}\"" if classes else ""
return f"<td {class_attr} {" ".join(extra_attributes)}>{value}</td>" return f"<td {class_attr} {' '.join(extra_attributes)}>{value}</td>"
def render_youtube_video(tag_name: str, value, options, parent, context): def render_youtube_video(tag_name: str, value, options, parent, context):
@@ -466,7 +466,7 @@ def render_youtube_video(tag_name: str, value, options, parent, context):
#classes += ["mx-auto", "d-block"] #classes += ["mx-auto", "d-block"]
if styles: if styles:
style = f"style=\"{"".join(styles)}\"" style = f"style=\"{' '.join(styles)}\""
else: else:
style = "" style = ""

View File

@@ -29,26 +29,28 @@ class HomeView(View):
page = None page = None
if self.user_can_create_system_pages: if self.user_can_create_system_pages:
if settings.USE_BOOTSTRAP: if settings.USE_BOOTSTRAP:
create_tw_home = f"<a class=\"icon-link icon-link-hover\" href={reverse("tinywiki:page",kwargs={'slug':'tw-home'})}>{_('create a new page with the slug <i>tw-home</i>')}<svg class=\"bi\"><use xlink:href=\"{settings.settings.STATIC_URL + 'tinywiki/icons/bootstrap-icons.svg' }#house-add\" ></use></svg></a>" create_tw_home = f"<a class=\"icon-link icon-link-hover\" href={reverse('tinywiki:page', kwargs={'slug': 'tw-home'})}>{_('create a new page with the slug <i>tw-home</i>')}<svg class=\"bi\"><use xlink:href=\"{settings.settings.STATIC_URL + 'tinywiki/icons/bootstrap-icons.svg'}#house-add\" ></use></svg></a>" # noqa: E501
else: else:
create_tw_home = f"<a href={reverse("tinywiki:page",kwargs={'slug':'tw-home'})}>{_('create a new page with the slug <i>tw-home</i>')}</a>" create_tw_home = f"<a href={reverse('tinywiki:page', kwargs={'slug': 'tw-home'})}>{_('create a new page with the slug <i>tw-home</i>')}</a>" # noqa: E501
else: else:
create_tw_home = "create a new page with the slug <i>tw-home</i>" create_tw_home = "create a new page with the slug <i>tw-home</i>"
if settings.USE_BOOTSTRAP: if settings.USE_BOOTSTRAP:
markdown_guide = f"<a class=\"icon-link icon-link-hover\" href={reverse('tinywiki:page',kwargs={'slug':'tw-markdown'})}>{_('Guide for markdown used by TinyWiki')}<svg class=\"bi\"><use xlink:href=\"{settings.settings.STATIC_URL + 'tinywiki/icons/bootstrap-icons.svg' }#journal\"></use></svg></a>" markdown_guide = f"<a class=\"icon-link icon-link-hover\" href={reverse('tinywiki:page', kwargs={'slug': 'tw-markdown'})}>{_('Guide for markdown used by TinyWiki')}<svg class=\"bi\"><use xlink:href=\"{settings.settings.STATIC_URL + 'tinywiki/icons/bootstrap-icons.svg' }#journal\"></use></svg></a>" # noqa: E501
bbcode_guide = f"<a class=\"icon-link icon-link-hover\" href={reverse('tinywiki:page',kwargs={'slug':'tw-bbcode'})}>{_('Guide for BBCode used by TinyWiki')}<svg class=\"bi\"><use xlink:href=\"{settings.settings.STATIC_URL + 'tinywiki/icons/bootstrap-icons.svg' }#journal\"></use></svg></a>" bbcode_guide = f"<a class=\"icon-link icon-link-hover\" href={reverse('tinywiki:page', kwargs={'slug': 'tw-bbcode'})}>{_('Guide for BBCode used by TinyWiki')}<svg class=\"bi\"><use xlink:href=\"{settings.settings.STATIC_URL + 'tinywiki/icons/bootstrap-icons.svg' }#journal\"></use></svg></a>" # noqa: E501
else: else:
markdown_guide = f"<a class=\"icon-link icon-link-hover\" href={reverse('tinywiki:page',kwargs={'slug':'tw-markdown'})}>{_('Guide for markdown used by TinyWiki')}</a>" markdown_guide = f"<a class=\"icon-link icon-link-hover\" href={reverse('tinywiki:page', kwargs={'slug': 'tw-markdown'})}>{_('Guide for markdown used by TinyWiki')}</a>" # noqa: E501
bbcode_guide = f"<a class=\"icon-link icon-link-hover\" href={reverse('tinywiki:page',kwargs={'slug':'tw-bbcode'})}>{_('Guide for BBCode used by TinyWiki')}</a>" bbcode_guide = f"<a class=\"icon-link icon-link-hover\" href={reverse('tinywiki:page', kwargs={'slug': 'tw-bbcode'})}>{_('Guide for BBCode used by TinyWiki')}</a>" # noqa: E501
return render(request, return render(request,
self.get_template_name(), self.get_template_name(),
self.get_context_data(page=page, self.get_context_data(
page=page,
user_can_create_system_pages=self.user_can_create_system_pages, user_can_create_system_pages=self.user_can_create_system_pages,
create_tw_home=mark_safe(create_tw_home), create_tw_home=mark_safe(create_tw_home),
markdown_guide=mark_safe(markdown_guide), markdown_guide=mark_safe(markdown_guide),
bbcode_guide=mark_safe(bbcode_guide))) bbcode_guide=mark_safe(bbcode_guide)))
class TocView(View): class TocView(View):
template_name = "tinywiki/home/wiki-content.html" template_name = "tinywiki/home/wiki-content.html"
bs_template_name = "tinywiki/home/bs-wiki-content.html" bs_template_name = "tinywiki/home/bs-wiki-content.html"
@@ -59,9 +61,11 @@ class TocView(View):
return cls.bs_template_name return cls.bs_template_name
return cls.template_name return cls.template_name
def get(self,request): def get(self, request):
def mkdict(page:Page): def mkdict(page: Page):
return {'slug':page.slug,'title':page.title, 'is_system':page.slug.startswith('tw-')} return {'slug': page.slug,
'title': page.title,
'is_system': page.slug.startswith('tw-')}
user = self.request.user user = self.request.user
if (user.is_staff or user.has_perm('page.read_all')): if (user.is_staff or user.has_perm('page.read_all')):
@@ -107,12 +111,12 @@ class TocView(View):
else: else:
toc_section = f"{key}..." toc_section = f"{key}..."
toc_section = ngettext("{toc_section} ({n} page)","{toc_section} ({n} pages)", count).format( toc_section = ngettext("{toc_section} ({n} page)", "{toc_section} ({n} pages)", count).format(
toc_section=toc_section, toc_section=toc_section,
n=count, n=count,
) )
toc.append((toc_section,pages_0,pages_1)) toc.append((toc_section, pages_0, pages_1))
return render(request, return render(request,
self.get_template_name(), self.get_template_name(),
self.get_context_data(toc=toc,subtitle=_("Table of Contents"))) self.get_context_data(toc=toc, subtitle=_("Table of Contents")))