picata 0.0.1__py3-none-any.whl → 0.0.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. README.md +7 -57
  2. manage.py +1 -1
  3. picata/__init__.py +1 -1
  4. picata/apps.py +6 -6
  5. picata/blocks.py +3 -2
  6. picata/helpers/wagtail.py +1 -1
  7. picata/middleware.py +1 -1
  8. picata/migrations/0001_initial.py +77 -211
  9. picata/models.py +6 -5
  10. picata/settings/base.py +15 -15
  11. picata/settings/dev.py +4 -2
  12. picata/templates/picata/base.html +3 -3
  13. picata/templates/picata/previews/theme_gallery.html +1 -1
  14. picata/templatetags/absolute_static.py +1 -1
  15. picata/templatetags/menu_tags.py +26 -12
  16. picata/transformers.py +1 -1
  17. picata/typing/__init__.py +1 -1
  18. picata/typing/wagtail.py +1 -1
  19. picata/urls.py +2 -2
  20. picata/views.py +3 -2
  21. picata/wagtail_hooks.py +1 -1
  22. picata/wsgi.py +2 -2
  23. picata-0.0.2.dist-info/METADATA +37 -0
  24. picata-0.0.2.dist-info/RECORD +73 -0
  25. picata/migrations/0002_alter_article_content_alter_basicpage_content.py +0 -112
  26. picata/migrations/0003_alter_article_content_alter_basicpage_content.py +0 -104
  27. picata/migrations/0004_alter_article_content_alter_basicpage_content.py +0 -105
  28. picata/migrations/0005_socialsettings.py +0 -48
  29. picata/migrations/0006_alter_article_content.py +0 -71
  30. picata/migrations/0007_splitviewpage.py +0 -69
  31. picata/migrations/0008_alter_splitviewpage_content.py +0 -96
  32. picata/migrations/0009_alter_splitviewpage_content.py +0 -111
  33. picata/migrations/0010_alter_splitviewpage_content.py +0 -105
  34. picata/migrations/0011_alter_splitviewpage_options_and_more.py +0 -113
  35. picata/migrations/0012_alter_splitviewpage_content.py +0 -109
  36. picata/migrations/0013_alter_article_content.py +0 -43
  37. picata/migrations/0014_alter_article_content_alter_article_summary.py +0 -24
  38. picata/migrations/0015_alter_article_options_article_tagline_and_more.py +0 -28
  39. picata/migrations/0016_alter_article_options_alter_articletag_options_and_more.py +0 -33
  40. picata/migrations/0017_articletagrelation_alter_article_tags_and_more.py +0 -35
  41. picata/migrations/0018_rename_articletag_pagetag_and_more.py +0 -21
  42. picata/migrations/0019_rename_name_plural_articletype__name_plural.py +0 -18
  43. picata/migrations/0020_rename__name_plural_articletype__pluralised_name.py +0 -18
  44. picata/migrations/0021_rename_article_type_article_page_type.py +0 -18
  45. picata/migrations/0022_homepage.py +0 -28
  46. picata-0.0.1.dist-info/METADATA +0 -87
  47. picata-0.0.1.dist-info/RECORD +0 -94
  48. {picata-0.0.1.dist-info → picata-0.0.2.dist-info}/WHEEL +0 -0
  49. {picata-0.0.1.dist-info → picata-0.0.2.dist-info}/licenses/LICENSE.md +0 -0
picata/settings/dev.py CHANGED
@@ -31,7 +31,9 @@ ALLOWED_HOSTS += CLASS_C_NETWORK_ADDR
31
31
 
32
32
  if getenv("DJANGO_MANAGEMENT_COMMAND", "").startswith("runserver"):
33
33
  logger.warning(
34
- f"Loading hpk.settings.dev…\nINTERNAL_IPS = {INTERNAL_IPS}\nALLOWED_HOSTS = {ALLOWED_HOSTS}"
34
+ "Loading picata.settings.dev…\n"
35
+ f"INTERNAL_IPS = {INTERNAL_IPS}\n"
36
+ f"ALLOWED_HOSTS = {ALLOWED_HOSTS}"
35
37
  )
36
38
 
37
39
  RUNSERVERPLUS_POLLER_RELOADER_TYPE = "watchdog"
@@ -80,7 +82,7 @@ LOGGING["loggers"]["gunicorn"] = {
80
82
  "propagate": False,
81
83
  }
82
84
 
83
- LOGGING["loggers"]["hpk"]["level"] = "DEBUG"
85
+ LOGGING["loggers"]["picata"]["level"] = "DEBUG"
84
86
 
85
87
  LOGGING["loggers"]["django"]["level"] = "DEBUG"
86
88
  LOGGING["loggers"]["django.db.backends"] = {"level": "INFO"}
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, viewport-fit=cover" />
6
- <title>{% block document_title %}{% if title %}{{ title }} · {% endif %}hpk.io{% endblock %}</title>
6
+ <title>{% block document_title %}{% if title %}{{ title }} · {% endif %}[Example Site]{% endblock %}</title>
7
7
 
8
8
  <style>
9
9
  @font-face { font-family: 'Sacramento'; src: url("{% static 'fonts/Sacramento-Regular.ttf' %}") format("truetype"); font-weight: 400; font-style: normal; }
@@ -25,7 +25,7 @@
25
25
 
26
26
  <meta property="og:title" content="{% block og_title %}Hpk.io{% endblock %}">
27
27
  <meta property="og:description" content="{% block og_description %}Ada Wrights's website - Hpk.io{% endblock %}">
28
- <meta property="og:image" content="{% block og_image %}{% if settings.hpk.SocialSettings.default_social_image %}{{ request.scheme }}://{{ request.get_host }}/{% image_url settings.hpk.SocialSettings.default_social_image 'fill-1200x630' %}{% else %}{% absolute_static 'ada-social-bear.jpg' %}{% endif %}{% endblock %}">
28
+ <meta property="og:image" content="{% block og_image %}{% if settings.picata.SocialSettings.default_social_image %}{{ request.scheme }}://{{ request.get_host }}/{% image_url settings.hpk.SocialSettings.default_social_image 'fill-1200x630' %}{% else %}{% absolute_static 'ada-social-bear.jpg' %}{% endif %}{% endblock %}">
29
29
  <meta property="og:url" content="{{ request.build_absolute_uri }}">
30
30
  <meta property="og:type" content="{% block og_type %}website{% endblock %}">
31
31
 
@@ -35,7 +35,7 @@
35
35
  "@type": "{% block ld_type %}WebPage{% endblock %}",
36
36
  "name": "{{ page.get_social_title }}",
37
37
  "description": "{{ page.get_social_description }}",
38
- "image": "{% block ld_image %}{% if settings.hpk.SocialSettings.default_social_image %}{{ request.scheme }}://{{ request.get_host }}/{% image_url settings.hpk.SocialSettings.default_social_image 'fill-1200x630' %}{% else %}{% absolute_static 'ada-social-bear.jpg' %}{% endif %}{% endblock %}",
38
+ "image": "{% block ld_image %}{% if settings.picata.SocialSettings.default_social_image %}{{ request.scheme }}://{{ request.get_host }}/{% image_url settings.picata.SocialSettings.default_social_image 'fill-1200x630' %}{% else %}{% absolute_static 'ada-social-bear.jpg' %}{% endif %}{% endblock %}",
39
39
  "url": "{{ request.build_absolute_uri }}"
40
40
  }
41
41
  </script>
@@ -5,7 +5,7 @@
5
5
  {% block title %}Theme gallery{% endblock %}
6
6
 
7
7
  {% block article %}
8
- <img src="{% if settings.hpk.SocialSettings.default_social_image %}{% image_url settings.hpk.SocialSettings.default_social_image 'fill-1200x630' %}{% endif %}" width="1200" height="630" />
8
+ <img src="{% if settings.picata.SocialSettings.default_social_image %}{% image_url settings.picata.SocialSettings.default_social_image 'fill-1200x630' %}{% endif %}" width="1200" height="630" />
9
9
  <div class="mx-8 my-8">
10
10
  <div class="grid grid-cols-2 gap-2 md:grid-cols-4">
11
11
  <button class="btn">Default</button>
@@ -3,7 +3,7 @@
3
3
  from django import template
4
4
  from django.templatetags.static import static
5
5
 
6
- from hpk.typing import Context
6
+ from picata.typing import Context
7
7
 
8
8
  register = template.Library()
9
9
 
@@ -3,40 +3,54 @@
3
3
  # NB: Django's meta-class shenanigans over-complicate type hinting when QuerySets get involved.
4
4
  # pyright: reportAttributeAccessIssue=false
5
5
 
6
- from typing import TypedDict
6
+ from typing import TYPE_CHECKING, TypedDict
7
7
 
8
8
  from django import template
9
- from django.http import HttpRequest
10
- from hpk.typing import Context
11
9
  from wagtail.models import Page, Site
12
10
 
11
+ from picata.typing import Context
12
+
13
+ if TYPE_CHECKING:
14
+ from django.http import HttpRequest
15
+
13
16
  register = template.Library()
14
17
 
15
18
 
16
19
  class SiteMenuContext(TypedDict):
17
20
  """Context returned from `render_site_menu` for `site_menu.html`."""
18
21
 
19
- root_page: Page
20
22
  menu_pages: list[Page]
21
- request: HttpRequest
23
+ current_section: Page | None
22
24
 
23
25
 
24
26
  @register.inclusion_tag("picata/tags/site_menu.html", takes_context=True)
25
27
  def render_site_menu(context: Context) -> SiteMenuContext:
26
28
  """Fetch the site root and its child pages for the site menu."""
29
+ current_page: Page | None = context.get("self")
30
+ active_section = None
31
+
27
32
  request: HttpRequest = context["request"]
28
33
  current_site = Site.find_for_request(request)
29
34
  if not current_site:
30
35
  raise ValueError("No Wagtail Site found for the current request.")
31
36
 
37
+ # Get menu pages as a list of pages starting with the root, followed by its children
32
38
  root_page = current_site.root_page.specific
33
39
 
34
- menu_pages = root_page.get_children().in_menu()
40
+ top_pages = root_page.get_children().in_menu()
35
41
  if not request.user.is_authenticated:
36
- menu_pages = menu_pages.live()
42
+ top_pages = top_pages.live()
43
+ top_pages = top_pages.specific()
44
+
45
+ menu_pages = [root_page, *top_pages]
46
+
47
+ # Find which page in the set of menu pages that the current page is a descendant of
48
+ if current_page == root_page:
49
+ active_section = root_page
50
+ else:
51
+ for page in top_pages:
52
+ if current_page and (current_page == page or current_page.is_descendant_of(page)):
53
+ active_section = page
54
+ break
37
55
 
38
- return {
39
- "root_page": root_page,
40
- "menu_pages": menu_pages.specific(),
41
- "request": request,
42
- }
56
+ return {"menu_pages": menu_pages, "current_section": active_section}
picata/transformers.py CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  from lxml import etree
4
4
 
5
- from hpk.helpers import ALPHANUMERIC_REGEX, get_full_text
5
+ from picata.helpers import ALPHANUMERIC_REGEX, get_full_text
6
6
 
7
7
 
8
8
  def add_heading_ids(tree: etree._Element) -> None:
picata/typing/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
- """Reusable types for the hpk project."""
1
+ """Reusable types for the Picata project."""
2
2
 
3
3
  from typing import Any, TypedDict
4
4
 
picata/typing/wagtail.py CHANGED
@@ -1,6 +1,6 @@
1
1
  """Types for Wagtail.
2
2
 
3
- NB: This module split the hpk.typing module into a package in order to avoid
3
+ NB: This module split the picata.typing module into a package in order to avoid
4
4
  circular imports during program initialisation, with the `from wagtail` imports.
5
5
  """
6
6
 
picata/urls.py CHANGED
@@ -10,7 +10,7 @@ from wagtail.contrib.sitemaps.views import sitemap
10
10
  from wagtail.documents import urls as wagtaildocs_urls
11
11
  from wagtail.images.views.serve import ServeView
12
12
 
13
- from hpk.views import search
13
+ from picata.views import search
14
14
 
15
15
  urlpatterns = [
16
16
  path("django-admin/", admin.site.urls), # Django Admin
@@ -29,7 +29,7 @@ if settings.DEBUG:
29
29
  from django.contrib.staticfiles.urls import staticfiles_urlpatterns
30
30
  from django.views.generic import RedirectView
31
31
 
32
- from hpk.views import debug_shell, preview
32
+ from picata.views import debug_shell, preview
33
33
 
34
34
  # Serve static and media files from development server
35
35
  urlpatterns += staticfiles_urlpatterns()
picata/views.py CHANGED
@@ -8,13 +8,14 @@ from typing import TYPE_CHECKING, NoReturn
8
8
 
9
9
  from django.http import HttpRequest, HttpResponse
10
10
  from django.shortcuts import render
11
- from hpk.helpers.wagtail import (
11
+
12
+ from picata.helpers.wagtail import (
12
13
  filter_pages_by_tags,
13
14
  filter_pages_by_type,
14
15
  page_preview_data,
15
16
  visible_pages_qs,
16
17
  )
17
- from hpk.models import ArticleType
18
+ from picata.models import ArticleType
18
19
 
19
20
  if TYPE_CHECKING:
20
21
  from wagtail.query import PageQuerySet
picata/wagtail_hooks.py CHANGED
@@ -13,7 +13,7 @@ from wagtail import hooks
13
13
  from wagtail.models import Page
14
14
  from wagtail.snippets.views.snippets import SnippetViewSet
15
15
 
16
- from hpk.models import PageTag
16
+ from picata.models import PageTag
17
17
 
18
18
  logger = logging.getLogger(__name__)
19
19
 
picata/wsgi.py CHANGED
@@ -1,4 +1,4 @@
1
- """WSGI config for the hpk project.
1
+ """WSGI config for the Picata project.
2
2
 
3
3
  It exposes the WSGI callable as a module-level variable named ``application``.
4
4
 
@@ -10,6 +10,6 @@ import os
10
10
 
11
11
  from django.core.wsgi import get_wsgi_application
12
12
 
13
- os.environ.setdefault("DJANGO_SETTINGS_MODULE", "hpk.settings.prod")
13
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "picata.settings.prod")
14
14
 
15
15
  application = get_wsgi_application()
@@ -0,0 +1,37 @@
1
+ Metadata-Version: 2.4
2
+ Name: picata
3
+ Version: 0.0.2
4
+ Summary: Ada's Wagtail-based CMS & blog
5
+ Project-URL: Documentation, https://github.com/hipikat/picata#readme
6
+ Project-URL: Issues, https://github.com/hipikat/picata/issues
7
+ Project-URL: Source, https://github.com/hipikat/picata
8
+ Author-email: Ada Wright <ada@hpk.io>
9
+ License-Expression: MIT
10
+ License-File: LICENSE.md
11
+ Keywords: blog,cms,django,wagtail
12
+ Classifier: Development Status :: 2 - Pre-Alpha
13
+ Classifier: Framework :: Django CMS
14
+ Classifier: Framework :: Wagtail :: 6
15
+ Classifier: Programming Language :: Python
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Programming Language :: Python :: Implementation :: CPython
18
+ Requires-Python: >=3.13
19
+ Requires-Dist: gunicorn~=23.0.0
20
+ Requires-Dist: lxml~=5.3.0
21
+ Requires-Dist: psutil~=6.1.0
22
+ Requires-Dist: psycopg~=3.2.3
23
+ Requires-Dist: pygments~=2.18.0
24
+ Requires-Dist: python-slugify~=8.0.4
25
+ Requires-Dist: wagtail-modeladmin~=2.1.0
26
+ Requires-Dist: wagtail~=6.2
27
+ Description-Content-Type: text/markdown
28
+
29
+ # Picata
30
+
31
+ **This project is very much pre-alpha**
32
+
33
+ Picata is the CMS & blog application I've forked off from my personal website.
34
+ It's effectively a ton of pre-made Wagtail "stuff" (models, views, templatetags,
35
+ middleware, hooks, etc.), made generic enough that you can include this app
36
+ in your `INSTALLED_APPS` and have a CMS/blog up-and-running without having to
37
+ spend weeks or months tailoring Wagtail to your needs.
@@ -0,0 +1,73 @@
1
+ LICENSE.md,sha256=Bv8sMyZI5NI6DMrfiAvCwIFRLSfJkimLF2KVcUMteKU,1103
2
+ README.md,sha256=AfAF_bV1vYiJSwkGTWpdW6_OO55EgkzRGbW0b8aiLRI,420
3
+ entrypoint.tsx,sha256=Tk6L2rCk0KrE5kaSL0GFuL3S19yG-BsUgvNAGe32uy8,8820
4
+ manage.py,sha256=BkGWS_zb8HTvlrOxDiBaQoahUEJGCoV5ePhX-P6jIaw,426
5
+ pygments.sass,sha256=zbDYpWda3EoGmjoC3JshZy-_CECNf6WU9abYPF8EHms,6369
6
+ styles.sass,sha256=4Jb-Gxn9AP09pZzwLlCGGfeacCyrncpJAOCYcy-dyB4,8486
7
+ components/HelloWorld.tsx,sha256=Kp7gvhGehfrX1mw0jgr2_D6AueFgqgfMYGkyQgvWekg,180
8
+ picata/__init__.py,sha256=ZCIoFQ_z3ias_sP4C77EU2IUJnyv4qR0xUdJ3PIdLLM,48
9
+ picata/apps.py,sha256=r5UQNm2CDP5tq22vQ_j6KuD6AGU3ODkvEQUeRvzJW0k,1259
10
+ picata/blocks.py,sha256=iVNxJM_uWlQIqZA-9Nao4svkG26oK5DQEogK0q_F2Po,5286
11
+ picata/log_utils.py,sha256=BRdB3PqpFx1XAhIyAzIOyQKiqrjbT3PBmkhH6-wAWJg,1555
12
+ picata/middleware.py,sha256=BbAifo--C4VYg1VhU8_qbdDcJUD9zYdbxU_9nqGpMa8,2067
13
+ picata/models.py,sha256=2EDMt5rV7mKmB5D6lNJmY6LhbDZwjtgDQZNlmJ0lKPI,15884
14
+ picata/transformers.py,sha256=CBnbIX3dnFV_gfp4TDTMPA_jGD8V_E4onodxWqbsjyY,2212
15
+ picata/urls.py,sha256=SAbmFKAgrM80LREULczs64hExbwmLOlsflXlo7qjzsc,1834
16
+ picata/validators.py,sha256=X4wdIxbCdmuU-gJv45ptTFB7kHR166jkSQBJiTzP3ZU,1517
17
+ picata/views.py,sha256=N6RYLDOTHAGBv0cYxese3T0gOvI6C99_q_Lv-3zbjrc,2881
18
+ picata/wagtail_hooks.py,sha256=R1YgJwp_ZvYm65b_xvLS8HiBWxflXFXSB4SksbJxW3k,1500
19
+ picata/wsgi.py,sha256=5vKFvebtHzxKb3BRVqps6SEKjWmOecBIkTwf4LqWJ0Q,398
20
+ picata/helpers/__init__.py,sha256=acN445qKCuRVfInCEyCtx5W1BggloOSrawzdQ-c9m7s,2427
21
+ picata/helpers/wagtail.py,sha256=ZJUqA31PBIu2lFtwfeEax3xu2UON0Yoa4cca79xdCc0,2111
22
+ picata/migrations/0001_initial.py,sha256=GnAiniyc1E9JsR-dYrEoVimvuIftazhfxEFCGJElKko,11943
23
+ picata/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
+ picata/settings/__init__.py,sha256=5qI40E9aCWsFanUxAnruZi1wXrad3oAwnusglycfPsk,47
25
+ picata/settings/base.py,sha256=_H0C0nEDK9ayVjPD9t0kWpLz-9jEhF65vfliKl2KCB8,9329
26
+ picata/settings/dev.py,sha256=qaRPpg1LlmNDbk8Kj1CffSxY_2hhgms_PLdRucUTi6Y,2825
27
+ picata/settings/mypy.py,sha256=M-_KU9Qi4twjCHwwuhFbGz9hnIU3TXLH0Sg3XionVNY,148
28
+ picata/settings/prod.py,sha256=iPsqLOdinblT_ayqMW2_GqpNccsXJlWA9-kA015X7Vo,474
29
+ picata/settings/test.py,sha256=H_Wkn_gjsIV0r5HsU-s5HLhW_Oi63VQp4Afj2TIgRhI,244
30
+ picata/static/picata/ada-profile.jpg,sha256=HlewC8MPH_zSr--pUXV5JCEE0emOrn8BIKCQv41WidA,209953
31
+ picata/static/picata/ada-social-bear.jpg,sha256=3jH2kf57boRLS5AD7M-qW-xsBP84didfeM1KN5Xp4tc,128453
32
+ picata/static/picata/favicon.ico,sha256=MJLjMSsDpx9Mjb1v7y8V5oPMX3gLtD4cIDmNAdOgHC8,15406
33
+ picata/static/picata/icons.svg,sha256=LRLgy8bHyZKorDyPxkO2mMdbevKs40sCnhdWoO29pdY,11320
34
+ picata/static/picata/fonts/Bitter-Light.ttf,sha256=JCgJXY06RiEONk2htx2bitpL3zqeGGJ01Z81fwRTwAo,182212
35
+ picata/static/picata/fonts/Bitter-LightItalic.ttf,sha256=A6oI_l_kGd2F9-V0eOYMoydigDPRdahO6aUKMvQXddY,181412
36
+ picata/static/picata/fonts/FiraCode-Light.ttf,sha256=bKCGEsYc36CaTQ_0-STZkfU7PDJXZpyQQDfQD7oJyTQ,188708
37
+ picata/static/picata/fonts/FiraCode-SemiBold.ttf,sha256=BsEuLjCqZkqwFH0_iBxrWH1hrdhDZa9cNM61DkA5hiE,188848
38
+ picata/static/picata/fonts/Sacramento-Regular.ttf,sha256=pbneZ75FSoJrRthYUS4y7sjDAxK-tMT4ZK7iOQQU6cU,64808
39
+ picata/static/picata/fonts/ZillaSlab-Bold.ttf,sha256=7Fo-wbzMoTThzw3ivb2PiLNcB1atOZdGClX22mwHu_Q,248052
40
+ picata/static/picata/fonts/ZillaSlab-BoldItalic.ttf,sha256=xra8p0e0zYZ5gyu5w6BeR8fnOJbZkeoIRFZuRm-FpEI,255272
41
+ picata/static/picata/fonts/ZillaSlab-Light.ttf,sha256=x9c6KiQ-iPpyqCDb2yYgDqi0GW-DNM8YIyTXqehumJ8,239836
42
+ picata/static/picata/fonts/ZillaSlab-LightItalic.ttf,sha256=8pgf5nlQb5DBqfaNKDj2P7iDMRwaW80YjaC3hXb72PA,245200
43
+ picata/static/picata/fonts/ZillaSlabHighlight-Bold.ttf,sha256=MbNNCVxe1Kt-j8rJpognUmTZrh9R9je-35MgwoeL7eU,245180
44
+ picata/templates/picata/3_column.html,sha256=4SYfqTbmAtYICEulpx1RWocBCQUUn32EnZJrcxfVWwA,790
45
+ picata/templates/picata/404.html,sha256=4q8kKGGHWDk9Z8ThW2rP70T3SQrGNGRf153pvYcV7VE,230
46
+ picata/templates/picata/500.html,sha256=1xvvK2uoiZKkc2EuVVnbfg69KmrCJUdplR0vvFtWvKo,369
47
+ picata/templates/picata/_post_list.html,sha256=JpvNAOGmupLQIC6lTyjoyNOyRGMUQwOqEvEaZgSPrsM,915
48
+ picata/templates/picata/article.html,sha256=NBwXpicb_oL2xy3FN8_6KJNbrrQD2rTrNIu1ngOietk,794
49
+ picata/templates/picata/base.html,sha256=HUzVThUqYeyeY9GGIapcWAwiBJxJ32mDFQb7Jn5yf94,8157
50
+ picata/templates/picata/basic_page.html,sha256=1FS_xdL6erskk9T-_TP3JWARczVstOLzs2ttvkbPbdk,173
51
+ picata/templates/picata/dl_view.html,sha256=epAV72HR2f0I3GWBEngUtYOQnHSsXs_SsNlhH7u-JbU,494
52
+ picata/templates/picata/home_page.html,sha256=nVDZwlsXfKtdSwQR80e0cHtiX7hf91ws5tYhu_ug_gU,635
53
+ picata/templates/picata/post_listing.html,sha256=3aSWYdPfwvYblE4s7b2P_dOLiiCWcrT1uvXRuDBak5Y,428
54
+ picata/templates/picata/search_results.html,sha256=P5HwdkLX2iQjZFEtD4YOp4Mun17btshjKBw__z6q8Hs,957
55
+ picata/templates/picata/split_view.html,sha256=DqRUKT5wc_-ByibQRZoyDU91omK6TgK7wC3Rp72bbgM,402
56
+ picata/templates/picata/blocks/icon_link_item.html,sha256=t-9LoA00Nv-H031yIL8es89zevbn315jlr5LTiAyM_o,301
57
+ picata/templates/picata/blocks/icon_link_list.html,sha256=7KU-hLOhAdKnoecLcugqWNzO5SgPnN9XfTDs1y60f0c,261
58
+ picata/templates/picata/blocks/icon_link_list_stream.html,sha256=B7yz5Ss_dT_5NIMsVwggnGFGmRgawNQrvnowaJUSUnw,69
59
+ picata/templates/picata/previews/3col.html,sha256=CwnWJpK5dvmVxqhBuu0QSFHWKhZlnc3xEowMQk3ltBo,4473
60
+ picata/templates/picata/previews/dl.html,sha256=ANOqlD3nlj5NF-4sPmya3eo0CNwmxgmUXswmz22Bh30,2095
61
+ picata/templates/picata/previews/split.html,sha256=hqv27u4wKTX8jJiNMazXioyRU9Uajpys_7LVQeI3NtE,2106
62
+ picata/templates/picata/previews/theme_gallery.html,sha256=A3HRSP5mc5FbpN9VXcZxgof-4sGR8Ylv6hXHY6Y_Ydo,8013
63
+ picata/templates/picata/tags/site_menu.html,sha256=Tb_BjV88ZH-nRb76alzSXPVUokPC9O2mVByKmeAgQWA,223
64
+ picata/templatetags/__init__.py,sha256=YNGfxmI00gewcJkkUlH219BHimHD_4p5Lz-zXPvgO-U,47
65
+ picata/templatetags/absolute_static.py,sha256=YpkPQhquvk2dRcnGy4g2yeLEBzRirOaQNs8AlGyM8tc,457
66
+ picata/templatetags/menu_tags.py,sha256=QBv2HNA-phOedijP2YErBkO067oHZUD8Bh80SaGwjdY,1844
67
+ picata/templatetags/stringify.py,sha256=QxStfcCgn29IGinH_bdsZoaiTLL7pz30ObDitlagecs,850
68
+ picata/typing/__init__.py,sha256=7qXco9cqvbveKX0Xprrc8DmgXa3MpkIQXtFsHDe77os,405
69
+ picata/typing/wagtail.py,sha256=V0n9GYYb_CM5ic54lcRtpN6lhN37-QdRzz2mGKm3Cwc,664
70
+ picata-0.0.2.dist-info/METADATA,sha256=Z0T9lYMlMULCxqwNCKz4I3WH1lj4n2kfWtH8MKGCh94,1426
71
+ picata-0.0.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
72
+ picata-0.0.2.dist-info/licenses/LICENSE.md,sha256=Bv8sMyZI5NI6DMrfiAvCwIFRLSfJkimLF2KVcUMteKU,1103
73
+ picata-0.0.2.dist-info/RECORD,,
@@ -1,112 +0,0 @@
1
- # Generated by Django 5.1.4 on 2024-12-19 22:18
2
-
3
- import wagtail.fields
4
- from django.db import migrations
5
-
6
-
7
- class Migration(migrations.Migration):
8
- dependencies = [
9
- ("hpk", "0001_initial"),
10
- ]
11
-
12
- operations = [
13
- migrations.AlterField(
14
- model_name="article",
15
- name="content",
16
- field=wagtail.fields.StreamField(
17
- [("section", 5), ("code", 8), ("image", 3)],
18
- blank=True,
19
- block_lookup={
20
- 0: (
21
- "wagtail.blocks.CharBlock",
22
- (),
23
- {"help_text": "Heading for this section.", "required": True},
24
- ),
25
- 1: (
26
- "wagtail.blocks.IntegerBlock",
27
- (),
28
- {
29
- "help_text": "Heading level",
30
- "max_value": 6,
31
- "min_value": 1,
32
- "required": True,
33
- },
34
- ),
35
- 2: (
36
- "wagtail.blocks.RichTextBlock",
37
- (),
38
- {"features": ["bold", "italic", "link", "ul", "ol", "document-link"]},
39
- ),
40
- 3: ("wagtail.images.blocks.ImageChooserBlock", (), {}),
41
- 4: (
42
- "wagtail.blocks.StreamBlock",
43
- [[("rich_text", 2), ("image", 3)]],
44
- {"help_text": "Content blocks for this section.", "required": False},
45
- ),
46
- 5: (
47
- "wagtail.blocks.StructBlock",
48
- [[("heading", 0), ("level", 1), ("content", 4)]],
49
- {},
50
- ),
51
- 6: (
52
- "wagtail.blocks.TextBlock",
53
- (),
54
- {"help_text": "Paste your code here.", "required": True},
55
- ),
56
- 7: (
57
- "wagtail.blocks.ChoiceBlock",
58
- [],
59
- {
60
- "choices": [
61
- ("python", "Python"),
62
- ("javascript", "JavaScript"),
63
- ("html", "HTML"),
64
- ("css", "CSS"),
65
- ("bash", "Bash"),
66
- ("plaintext", "Plain Text"),
67
- ],
68
- "help_text": "Select the language for syntax highlighting.",
69
- "required": False,
70
- },
71
- ),
72
- 8: ("wagtail.blocks.StructBlock", [[("code", 6), ("language", 7)]], {}),
73
- },
74
- help_text="Main content for the article.",
75
- ),
76
- ),
77
- migrations.AlterField(
78
- model_name="basicpage",
79
- name="content",
80
- field=wagtail.fields.StreamField(
81
- [("rich_text", 0), ("code", 3), ("image", 4)],
82
- blank=True,
83
- block_lookup={
84
- 0: ("wagtail.blocks.RichTextBlock", (), {}),
85
- 1: (
86
- "wagtail.blocks.TextBlock",
87
- (),
88
- {"help_text": "Paste your code here.", "required": True},
89
- ),
90
- 2: (
91
- "wagtail.blocks.ChoiceBlock",
92
- [],
93
- {
94
- "choices": [
95
- ("python", "Python"),
96
- ("javascript", "JavaScript"),
97
- ("html", "HTML"),
98
- ("css", "CSS"),
99
- ("bash", "Bash"),
100
- ("plaintext", "Plain Text"),
101
- ],
102
- "help_text": "Select the language for syntax highlighting.",
103
- "required": False,
104
- },
105
- ),
106
- 3: ("wagtail.blocks.StructBlock", [[("code", 1), ("language", 2)]], {}),
107
- 4: ("wagtail.images.blocks.ImageChooserBlock", (), {}),
108
- },
109
- help_text="Main content for the page.",
110
- ),
111
- ),
112
- ]
@@ -1,104 +0,0 @@
1
- # Generated by Django 5.1.4 on 2024-12-19 22:21
2
-
3
- import wagtail.fields
4
- from django.db import migrations
5
-
6
-
7
- class Migration(migrations.Migration):
8
- dependencies = [
9
- ("hpk", "0002_alter_article_content_alter_basicpage_content"),
10
- ]
11
-
12
- operations = [
13
- migrations.AlterField(
14
- model_name="article",
15
- name="content",
16
- field=wagtail.fields.StreamField(
17
- [("section", 5), ("code", 8), ("image", 3)],
18
- blank=True,
19
- block_lookup={
20
- 0: (
21
- "wagtail.blocks.CharBlock",
22
- (),
23
- {"help_text": "Heading for this section.", "required": True},
24
- ),
25
- 1: (
26
- "wagtail.blocks.IntegerBlock",
27
- (),
28
- {
29
- "help_text": "Heading level",
30
- "max_value": 6,
31
- "min_value": 1,
32
- "required": True,
33
- },
34
- ),
35
- 2: (
36
- "wagtail.blocks.RichTextBlock",
37
- (),
38
- {"features": ["bold", "italic", "link", "ul", "ol", "document-link"]},
39
- ),
40
- 3: ("wagtail.images.blocks.ImageChooserBlock", (), {}),
41
- 4: (
42
- "wagtail.blocks.StreamBlock",
43
- [[("rich_text", 2), ("image", 3)]],
44
- {"help_text": "Content blocks for this section.", "required": False},
45
- ),
46
- 5: (
47
- "wagtail.blocks.StructBlock",
48
- [[("heading", 0), ("level", 1), ("content", 4)]],
49
- {},
50
- ),
51
- 6: ("wagtail.blocks.TextBlock", (), {"help_text": None, "required": True}),
52
- 7: (
53
- "wagtail.blocks.ChoiceBlock",
54
- [],
55
- {
56
- "choices": [
57
- ("python", "Python"),
58
- ("javascript", "JavaScript"),
59
- ("html", "HTML"),
60
- ("css", "CSS"),
61
- ("bash", "Bash"),
62
- ("plaintext", "Plain Text"),
63
- ],
64
- "help_text": "Select the language for syntax highlighting.",
65
- "required": False,
66
- },
67
- ),
68
- 8: ("wagtail.blocks.StructBlock", [[("code", 6), ("language", 7)]], {}),
69
- },
70
- help_text="Main content for the article.",
71
- ),
72
- ),
73
- migrations.AlterField(
74
- model_name="basicpage",
75
- name="content",
76
- field=wagtail.fields.StreamField(
77
- [("rich_text", 0), ("code", 3), ("image", 4)],
78
- blank=True,
79
- block_lookup={
80
- 0: ("wagtail.blocks.RichTextBlock", (), {}),
81
- 1: ("wagtail.blocks.TextBlock", (), {"help_text": None, "required": True}),
82
- 2: (
83
- "wagtail.blocks.ChoiceBlock",
84
- [],
85
- {
86
- "choices": [
87
- ("python", "Python"),
88
- ("javascript", "JavaScript"),
89
- ("html", "HTML"),
90
- ("css", "CSS"),
91
- ("bash", "Bash"),
92
- ("plaintext", "Plain Text"),
93
- ],
94
- "help_text": "Select the language for syntax highlighting.",
95
- "required": False,
96
- },
97
- ),
98
- 3: ("wagtail.blocks.StructBlock", [[("code", 1), ("language", 2)]], {}),
99
- 4: ("wagtail.images.blocks.ImageChooserBlock", (), {}),
100
- },
101
- help_text="Main content for the page.",
102
- ),
103
- ),
104
- ]
@@ -1,105 +0,0 @@
1
- # Generated by Django 5.1.4 on 2024-12-19 22:23
2
-
3
- import wagtail.fields
4
- from django.db import migrations
5
-
6
-
7
- class Migration(migrations.Migration):
8
- dependencies = [
9
- ("hpk", "0003_alter_article_content_alter_basicpage_content"),
10
- ]
11
-
12
- operations = [
13
- migrations.AlterField(
14
- model_name="article",
15
- name="content",
16
- field=wagtail.fields.StreamField(
17
- [("section", 5), ("code", 8), ("image", 3)],
18
- blank=True,
19
- block_lookup={
20
- 0: (
21
- "wagtail.blocks.CharBlock",
22
- (),
23
- {
24
- "help_text": 'Heading for this section, included in "page contents".',
25
- "required": True,
26
- },
27
- ),
28
- 1: (
29
- "wagtail.blocks.IntegerBlock",
30
- (),
31
- {
32
- "help_text": "Heading level",
33
- "max_value": 6,
34
- "min_value": 1,
35
- "required": True,
36
- },
37
- ),
38
- 2: (
39
- "wagtail.blocks.RichTextBlock",
40
- (),
41
- {"features": ["bold", "italic", "link", "ul", "ol", "document-link"]},
42
- ),
43
- 3: ("wagtail.images.blocks.ImageChooserBlock", (), {}),
44
- 4: (
45
- "wagtail.blocks.StreamBlock",
46
- [[("rich_text", 2), ("image", 3)]],
47
- {"help_text": None, "required": False},
48
- ),
49
- 5: (
50
- "wagtail.blocks.StructBlock",
51
- [[("heading", 0), ("level", 1), ("content", 4)]],
52
- {},
53
- ),
54
- 6: ("wagtail.blocks.TextBlock", (), {"help_text": None, "required": True}),
55
- 7: (
56
- "wagtail.blocks.ChoiceBlock",
57
- [],
58
- {
59
- "choices": [
60
- ("python", "Python"),
61
- ("javascript", "JavaScript"),
62
- ("html", "HTML"),
63
- ("css", "CSS"),
64
- ("bash", "Bash"),
65
- ("plaintext", "Plain Text"),
66
- ],
67
- "required": False,
68
- },
69
- ),
70
- 8: ("wagtail.blocks.StructBlock", [[("code", 6), ("language", 7)]], {}),
71
- },
72
- help_text="Main content for the article.",
73
- ),
74
- ),
75
- migrations.AlterField(
76
- model_name="basicpage",
77
- name="content",
78
- field=wagtail.fields.StreamField(
79
- [("rich_text", 0), ("code", 3), ("image", 4)],
80
- blank=True,
81
- block_lookup={
82
- 0: ("wagtail.blocks.RichTextBlock", (), {}),
83
- 1: ("wagtail.blocks.TextBlock", (), {"help_text": None, "required": True}),
84
- 2: (
85
- "wagtail.blocks.ChoiceBlock",
86
- [],
87
- {
88
- "choices": [
89
- ("python", "Python"),
90
- ("javascript", "JavaScript"),
91
- ("html", "HTML"),
92
- ("css", "CSS"),
93
- ("bash", "Bash"),
94
- ("plaintext", "Plain Text"),
95
- ],
96
- "required": False,
97
- },
98
- ),
99
- 3: ("wagtail.blocks.StructBlock", [[("code", 1), ("language", 2)]], {}),
100
- 4: ("wagtail.images.blocks.ImageChooserBlock", (), {}),
101
- },
102
- help_text="Main content for the page.",
103
- ),
104
- ),
105
- ]