render-engine 2026.1.1a2__tar.gz → 2026.2.1a1__tar.gz

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 (141) hide show
  1. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/.github/workflows/lint.yml +3 -12
  2. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/.github/workflows/test.yml +31 -21
  3. render_engine-2026.2.1a1/.github/workflows/ty.yml +22 -0
  4. render_engine-2026.2.1a1/.github/workflows/update-security.yml +62 -0
  5. render_engine-2026.2.1a1/.markdownlint.json +8 -0
  6. render_engine-2026.2.1a1/.readthedocs.yml +24 -0
  7. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/PKG-INFO +23 -30
  8. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/README.md +22 -13
  9. render_engine-2026.2.1a1/SECURITY.md +15 -0
  10. render_engine-2026.2.1a1/coverage-badge.svg +1 -0
  11. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/archive.md +11 -6
  12. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/cli.md +2 -10
  13. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/collection.md +9 -3
  14. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/content_manager.md +4 -2
  15. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/contributing/CONTRIBUTING.md +26 -10
  16. render_engine-2026.2.1a1/docs/docs/contributing/environment_setup.md +88 -0
  17. render_engine-2026.2.1a1/docs/docs/contributing/gen_badge.md +22 -0
  18. render_engine-2026.2.1a1/docs/docs/contributing/github-actions-file-patterns.md +248 -0
  19. render_engine-2026.2.1a1/docs/docs/contributing/style-guide.md +179 -0
  20. render_engine-2026.2.1a1/docs/docs/contributing/testing.md +69 -0
  21. render_engine-2026.2.1a1/docs/docs/contributing/typechecking.md +60 -0
  22. render_engine-2026.2.1a1/docs/docs/custom_collections.md +97 -0
  23. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/feeds.md +6 -2
  24. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/getting-started/building-your-site.md +9 -3
  25. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/getting-started/creating-a-collection.md +20 -7
  26. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/getting-started/creating-a-page.md +21 -8
  27. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/getting-started/getting-started.md +9 -8
  28. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/getting-started/layout.md +37 -13
  29. render_engine-2026.2.1a1/docs/docs/page.md +138 -0
  30. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/parsers.md +17 -5
  31. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/site.md +6 -6
  32. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/templates.md +26 -9
  33. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/theme_management.md +9 -4
  34. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/mkdocs.yml +6 -1
  35. render_engine-2026.2.1a1/justfile +65 -0
  36. render_engine-2026.2.1a1/noxfile.py +19 -0
  37. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/pyproject.toml +12 -8
  38. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/__version__.py +3 -3
  39. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/collection.py +21 -8
  40. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/content_managers/base_content_manager.py +15 -1
  41. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/content_managers/file_content_manager.py +6 -9
  42. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/engine.py +21 -12
  43. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/feeds.py +7 -0
  44. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/page.py +12 -7
  45. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/plugins.py +1 -1
  46. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/render_engine_templates/base_collection_path.md +1 -1
  47. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/site.py +9 -15
  48. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/site_map.py +3 -2
  49. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/themes.py +24 -6
  50. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine.egg-info/PKG-INFO +23 -30
  51. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine.egg-info/SOURCES.txt +9 -6
  52. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine.egg-info/requires.txt +0 -17
  53. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/tests/test_site_map.py +2 -1
  54. render_engine-2026.2.1a1/uv.lock +1416 -0
  55. render_engine-2026.1.1a2/.markdownlint.json +0 -4
  56. render_engine-2026.1.1a2/.readthedocs.yml +0 -22
  57. render_engine-2026.1.1a2/CONTRIBUTING.md +0 -95
  58. render_engine-2026.1.1a2/SECURITY.md +0 -14
  59. render_engine-2026.1.1a2/docs/.markdownlint.json +0 -4
  60. render_engine-2026.1.1a2/docs/docs/contributing/environment_setup.md +0 -62
  61. render_engine-2026.1.1a2/docs/docs/custom_collections.md +0 -63
  62. render_engine-2026.1.1a2/docs/docs/page.md +0 -124
  63. render_engine-2026.1.1a2/docs/requirements.txt +0 -4
  64. render_engine-2026.1.1a2/noxfile.py +0 -20
  65. render_engine-2026.1.1a2/requirements.txt +0 -240
  66. render_engine-2026.1.1a2/src/render_engine/__main__.py +0 -6
  67. render_engine-2026.1.1a2/src/render_engine/extras/__init__.py +0 -3
  68. render_engine-2026.1.1a2/uv.lock +0 -1375
  69. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/.all-contributorsrc +0 -0
  70. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/.devcontainer/Dockerfile +0 -0
  71. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/.devcontainer/devcontainer.json +0 -0
  72. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/.devcontainer/setup.sh +0 -0
  73. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/.github/FUNDING.yml +0 -0
  74. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/.github/ISSUE_TEMPLATE/config.yaml +0 -0
  75. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/.github/ISSUE_TEMPLATE/form_issue_template.yml +0 -0
  76. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  77. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/.github/dependabot-bot.yml +0 -0
  78. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/.github/dependabot.yml +0 -0
  79. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/.github/labeler.yml +0 -0
  80. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/.github/release.yml +0 -0
  81. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/.github/workflows/devcontainer-ci.yml +0 -0
  82. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/.github/workflows/labeler.yml +0 -0
  83. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/.github/workflows/publish.yml +0 -0
  84. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/.github/workflows/scorecard.yml +0 -0
  85. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/.gitignore +0 -0
  86. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/.pre-commit-config.yaml +0 -0
  87. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/.vscode/tasks.json +0 -0
  88. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/assets/create environment vs code.gif +0 -0
  89. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/assets/create-app-help.png +0 -0
  90. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/assets/create-codespace.gif +0 -0
  91. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/assets/launching a dev container.gif +0 -0
  92. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/assets/render-engine-init-help.png +0 -0
  93. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/assets/render-engine-init.png +0 -0
  94. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/contributing/CODE_OF_CONDUCT.md +0 -0
  95. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/getting-started/creating-your-app.md +0 -0
  96. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/getting-started/installation.md +0 -0
  97. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/index.md +0 -0
  98. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/plugins.md +0 -0
  99. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/docs/docs/site_map.md +0 -0
  100. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/setup.cfg +0 -0
  101. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/.gitignore +0 -0
  102. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/__init__.py +0 -0
  103. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/_base_object.py +0 -0
  104. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/archive.py +0 -0
  105. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/blog.py +0 -0
  106. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/content_managers/__init__.py +0 -0
  107. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/hookspecs.py +0 -0
  108. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/links.py +0 -0
  109. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/parsers/markdown.py +0 -0
  110. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/py.typed +0 -0
  111. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/render_engine_templates/__init__.py +0 -0
  112. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/render_engine_templates/archive.html +0 -0
  113. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/render_engine_templates/base.html +0 -0
  114. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/render_engine_templates/base_templates/_archive.html +0 -0
  115. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/render_engine_templates/base_templates/_base.html +0 -0
  116. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/render_engine_templates/base_templates/_page.html +0 -0
  117. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/render_engine_templates/components/footer.html +0 -0
  118. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/render_engine_templates/components/page_title.html +0 -0
  119. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/render_engine_templates/page.html +0 -0
  120. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/render_engine_templates/rss2.0.xml +0 -0
  121. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/render_engine_templates/rss2.0_items.xml +0 -0
  122. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/render_engine_templates/sitemap.xml +0 -0
  123. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/render_engine_templates/sitemap_item.xml +0 -0
  124. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine/utils/__init__.py +0 -0
  125. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine.egg-info/dependency_links.txt +0 -0
  126. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/src/render_engine.egg-info/top_level.txt +0 -0
  127. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/tests/conftest.py +0 -0
  128. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/tests/test_archive.py +0 -0
  129. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/tests/test_base_object.py +0 -0
  130. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/tests/test_blog.py +0 -0
  131. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/tests/test_collections.py +0 -0
  132. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/tests/test_engine.py +0 -0
  133. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/tests/test_feeds/conftest_feed.py +0 -0
  134. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/tests/test_feeds/test_feeds.py +0 -0
  135. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/tests/test_file_content_manager.py +0 -0
  136. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/tests/test_page.py +0 -0
  137. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/tests/test_parsers_remove_2024_3_1.py +0 -0
  138. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/tests/test_plugins.py +0 -0
  139. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/tests/test_site.py +0 -0
  140. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/tests/test_templates/test_base_html.py +0 -0
  141. {render_engine-2026.1.1a2 → render_engine-2026.2.1a1}/tests/test_theme_manager.py +0 -0
@@ -35,15 +35,6 @@ jobs:
35
35
  runs-on: ubuntu-latest
36
36
  steps:
37
37
  - uses: actions/checkout@v6.0.1
38
- - name: Markdown Lint base-files
39
- uses: DavidAnson/markdownlint-cli2-action@v20
40
- with:
41
- globs: |
42
- *.md
43
- .github/**/*.md
44
- config: ./.markdownlint.json
45
- - name: Markdown Lint Docs
46
- uses: DavidAnson/markdownlint-cli2-action@v20
47
- with:
48
- globs: docs/**/*.md
49
- config: docs/.markdownlint.json
38
+ - uses: oven-sh/setup-bun@v2
39
+ - name: Lint files
40
+ run: bunx markdownlint-cli2 **/*.md
@@ -14,6 +14,27 @@ on:
14
14
  - "requirements.txt"
15
15
 
16
16
  jobs:
17
+ gen-coverage-badge:
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - uses: actions/checkout@v6
21
+ - uses: astral-sh/setup-uv@v7
22
+ with:
23
+ python-version: "3.14"
24
+ enable-cache: true
25
+
26
+ - name: run coverage and generate cov-report
27
+ run: |
28
+ uv run --dev pytest --cov-report xml
29
+ - name: genbadge coverage
30
+ run: |
31
+ uvx --with "genbadge[coverage]" genbadge coverage -i coverage.xml
32
+ - name: Commit Badge
33
+ uses: stefanzweifel/git-auto-commit-action@v7
34
+ with:
35
+ commit_message: Update coverage badge [skip ci]
36
+ file_pattern: coverage.svg
37
+
17
38
  test-against-python-matrix:
18
39
  # Only test all the supported versions when a pull request is made or the workflow is called
19
40
  if: ${{github.event_name == 'workflow_call'}} || ${{github.event_name == 'pull_request'}}
@@ -24,16 +45,14 @@ jobs:
24
45
  fail-fast: true
25
46
  steps:
26
47
  - uses: actions/checkout@v6.0.1
27
- - uses: actions/setup-python@v5
48
+ - name: Install uv
49
+ uses: astral-sh/setup-uv@v7
28
50
  with:
29
51
  python-version: ${{ matrix.python-version }}
30
- cache: "pip" # caching pip dependencies
31
- - name: Install requirements
32
- run: |
33
- python -m pip install -e .[dev]
52
+ enable-cache: true # caching dependencies
34
53
  - name: Run tests
35
54
  run: |
36
- python -m pytest
55
+ uv run --dev pytest tests
37
56
 
38
57
  test-against-latest-os:
39
58
  # Always run against the latest version on both Windows, Linux, MacOS
@@ -45,19 +64,10 @@ jobs:
45
64
  runs-on: ${{ matrix.os }}
46
65
  steps:
47
66
  - uses: actions/checkout@v6.0.1
48
- - uses: actions/setup-python@v5
49
- with:
50
- python-version: "3.12"
51
- cache: "pip" # caching pip dependencies
52
- - name: Install requirements
53
- run: |
54
- python -m pip install -e .[dev]
55
- - name: Run tests
56
- run: |
57
- python -m pytest
58
- - name: coverage
59
- uses: actions/upload-artifact@v6
67
+ - name: Install uv
68
+ uses: astral-sh/setup-uv@v7
60
69
  with:
61
- name: code-coverage-report-${{ matrix.os }}
62
- path: .coverage
63
- overwrite: true
70
+ python-version: "3.14"
71
+ enable-cache: true # caching dependencies
72
+ - name: run tests
73
+ run: uv run --dev pytest tests
@@ -0,0 +1,22 @@
1
+ name: Type Check
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ branches:
9
+ - main
10
+ paths:
11
+ - "src/**"
12
+ - "pyproject.toml"
13
+ workflow_dispatch:
14
+
15
+ jobs:
16
+ ty_check:
17
+ runs-on: ubuntu-latest
18
+ steps:
19
+ - uses: actions/checkout@v6.0.1
20
+ - uses: astral-sh/setup-uv@v7
21
+ - name: Run type (ty) check
22
+ run: uv run ty check src
@@ -0,0 +1,62 @@
1
+ name: Update SECURITY.md
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ update-security:
9
+ runs-on: ubuntu-latest
10
+ permissions:
11
+ contents: write
12
+ steps:
13
+ - name: Checkout repository
14
+ uses: actions/checkout@v6.0.1
15
+ with:
16
+ ref: main
17
+
18
+ - name: Get latest release version
19
+ id: get_version
20
+ run: |
21
+ VERSION="${{ github.event.release.tag_name }}"
22
+ echo "version=$VERSION" >> $GITHUB_OUTPUT
23
+
24
+ - name: Update SECURITY.md
25
+ run: |
26
+ VERSION="${{ steps.get_version.outputs.version }}"
27
+ # Update SECURITY.md with properly formatted table
28
+ cat >SECURITY.md <<EOF
29
+ # Security Policy
30
+
31
+ ## Supported Versions
32
+
33
+ We only support the latest version of render-engine with security updates.
34
+ Please ensure you are using the most recent release available on PyPI or GitHub.
35
+
36
+ | Version | Supported |
37
+ | ------------- | ------------------ |
38
+ | {{ VERSION }} | :white_check_mark: |
39
+ | < {{ VERSION }} | :x: |
40
+
41
+ ## Reporting a Vulnerability
42
+
43
+ Email: <kjaymiller@gmail.com>
44
+ EOF
45
+
46
+ - name: Check for changes
47
+ id: check_changes
48
+ run: |
49
+ if git diff --quiet SECURITY.md; then
50
+ echo "changed=false" >> $GITHUB_OUTPUT
51
+ else
52
+ echo "changed=true" >> $GITHUB_OUTPUT
53
+ fi
54
+
55
+ - name: Commit and push changes
56
+ if: steps.check_changes.outputs.changed == 'true'
57
+ run: |
58
+ git config --local user.email "github-actions[bot]@users.noreply.github.com"
59
+ git config --local user.name "github-actions[bot]"
60
+ git add SECURITY.md
61
+ git commit -m "Update SECURITY.md to version ${{ steps.get_version.outputs.version }}"
62
+ git push
@@ -0,0 +1,8 @@
1
+ {
2
+ "MD013": {
3
+ "line_length": 120,
4
+ "tables": false,
5
+ "code_blocks": false
6
+ },
7
+ "MD041": false
8
+ }
@@ -0,0 +1,24 @@
1
+ # .readthedocs.yaml
2
+ # Read the Docs configuration file
3
+ # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
4
+
5
+ # Required
6
+ version: 2
7
+
8
+ # Set the version of Python and other tools you might need
9
+ build:
10
+ os: ubuntu-lts-latest
11
+ tools:
12
+ python: "latest"
13
+ jobs:
14
+ pre_create_environment:
15
+ - asdf plugin add uv
16
+ - asdf install uv latest
17
+ - asdf global uv latest
18
+ create_environment:
19
+ - uv venv "${READTHEDOCS_VIRTUALENV_PATH}"
20
+ install:
21
+ - UV_PROJECT_ENVIRONMENT="${READTHEDOCS_VIRTUALENV_PATH}" uv sync --group docs
22
+
23
+ mkdocs:
24
+ configuration: docs/mkdocs.yml
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: render_engine
3
- Version: 2026.1.1a2
3
+ Version: 2026.2.1a1
4
4
  Summary: A Flexible Static Site Generator for Python
5
5
  Project-URL: homepage, https://github.com/render-engine/render-engine/
6
6
  Project-URL: repository, https://github.com/render-engine/render-engine/
@@ -21,22 +21,6 @@ Provides-Extra: cli
21
21
  Requires-Dist: render-engine-cli; extra == "cli"
22
22
  Provides-Extra: extras
23
23
  Requires-Dist: render-engine-sitemap; extra == "extras"
24
- Provides-Extra: dev
25
- Requires-Dist: cookiecutter; extra == "dev"
26
- Requires-Dist: ephemeral-port-reserve; extra == "dev"
27
- Requires-Dist: httpx; extra == "dev"
28
- Requires-Dist: mkdocs; extra == "dev"
29
- Requires-Dist: mkdocs-material; extra == "dev"
30
- Requires-Dist: mkdocstrings[python]; extra == "dev"
31
- Requires-Dist: mypy; extra == "dev"
32
- Requires-Dist: pre-commit; extra == "dev"
33
- Requires-Dist: pymdown-extensions; extra == "dev"
34
- Requires-Dist: pytest; extra == "dev"
35
- Requires-Dist: pytest-cov; extra == "dev"
36
- Requires-Dist: pytest-mock; extra == "dev"
37
- Requires-Dist: ruff; extra == "dev"
38
- Requires-Dist: toml; extra == "dev"
39
- Requires-Dist: watchfiles; extra == "dev"
40
24
 
41
25
  <!-- markdownlint-disable -->
42
26
  <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
@@ -47,6 +31,7 @@ Requires-Dist: watchfiles; extra == "dev"
47
31
  # Render Engine
48
32
 
49
33
  [![PyTest](https://github.com/kjaymiller/render_engine/actions/workflows/test.yml/badge.svg)](https://github.com/kjaymiller/render_engine/actions/workflows/test.yml)
34
+ ![genbadge-coverage](./coverage-badge.svg)
50
35
  [![Discord](https://img.shields.io/discord/1174377880118104156?label=Discord&color=purple)](https://discord.gg/2xMQ4j4d8m)
51
36
 
52
37
  ## Learn More
@@ -59,9 +44,12 @@ Requires-Dist: watchfiles; extra == "dev"
59
44
 
60
45
  ## The _3 layer_ Architecture
61
46
 
62
- - **[Page](https://render-engine.readthedocs.io/en/latest/page/)** - A single webpage item built from content, a template, raw data, or a combination of those things.
63
- - **[Collection](https://render-engine.readthedocs.io/en/latest/collection/)** - A group of webpages built from the same template, organized in a single directory
64
- - **[Site](https://render-engine.readthedocs.io/en/latest/site/)** - The container that helps to render all Pages and Collections with uniform settings and variables
47
+ - **[Page][page-docs]** - A single webpage item built from content, a template,
48
+ raw data, or a combination of those things.
49
+ - **[Collection][collection-docs]** - A group of webpages built from the same
50
+ template, organized in a single directory
51
+ - **[Site][site-docs]** - The container that helps to render all Pages and
52
+ Collections with uniform settings and variables
65
53
 
66
54
  ## Installing Render Engine
67
55
 
@@ -88,13 +76,20 @@ Check out the [Getting Started](https://render-engine.readthedocs.io/en/latest/p
88
76
 
89
77
  ## Finding Awesome Add-Ons
90
78
 
91
- We've compiled a set of [awesome add-ons](https://github.com/render-engine/render-engine-awesome-list) that you can use to make your site even better!
79
+ We've compiled a set of [awesome add-ons][awesome-list] that you can use to
80
+ make your site even better!
81
+
82
+ ## CONTRIBUTING
83
+
84
+ We encourage contributors of all skill levels.
85
+ Please review the [contributing][contributing] section of our docs for more information.
92
86
 
93
87
  ## Contributors
94
88
 
89
+ <!-- markdownlint-disable -->
95
90
  <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
96
91
  <!-- prettier-ignore-start -->
97
- <!-- markdownlint-disable -->
92
+
98
93
  <table>
99
94
  <tbody>
100
95
  <tr>
@@ -126,20 +121,18 @@ We've compiled a set of [awesome add-ons](https://github.com/render-engine/rende
126
121
  </tbody>
127
122
  </table>
128
123
 
129
- <!-- markdownlint-restore -->
130
124
  <!-- prettier-ignore-end -->
131
-
132
125
  <!-- ALL-CONTRIBUTORS-LIST:END -->
133
- <!-- prettier-ignore-start -->
134
- <!-- markdownlint-disable -->
135
-
136
126
  <!-- markdownlint-restore -->
137
- <!-- prettier-ignore-end -->
138
-
139
- <!-- ALL-CONTRIBUTORS-LIST:END -->
140
127
 
141
128
  ### Sponsors at the $20/month and Higher Level
142
129
 
143
130
  - [Brian Douglas](https://github.com/bdougie)
144
131
 
145
132
  Thank you to them and all of those who continue to support this project!
133
+
134
+ [contributing]: https://render-engine.readthedocs.io/en/latest/contributing/CONTRIBUTING/
135
+ [page-docs]: https://render-engine.readthedocs.io/en/latest/page/
136
+ [collection-docs]: https://render-engine.readthedocs.io/en/latest/collection/
137
+ [site-docs]: https://render-engine.readthedocs.io/en/latest/site/
138
+ [awesome-list]: https://github.com/render-engine/render-engine-awesome-list
@@ -7,6 +7,7 @@
7
7
  # Render Engine
8
8
 
9
9
  [![PyTest](https://github.com/kjaymiller/render_engine/actions/workflows/test.yml/badge.svg)](https://github.com/kjaymiller/render_engine/actions/workflows/test.yml)
10
+ ![genbadge-coverage](./coverage-badge.svg)
10
11
  [![Discord](https://img.shields.io/discord/1174377880118104156?label=Discord&color=purple)](https://discord.gg/2xMQ4j4d8m)
11
12
 
12
13
  ## Learn More
@@ -19,9 +20,12 @@
19
20
 
20
21
  ## The _3 layer_ Architecture
21
22
 
22
- - **[Page](https://render-engine.readthedocs.io/en/latest/page/)** - A single webpage item built from content, a template, raw data, or a combination of those things.
23
- - **[Collection](https://render-engine.readthedocs.io/en/latest/collection/)** - A group of webpages built from the same template, organized in a single directory
24
- - **[Site](https://render-engine.readthedocs.io/en/latest/site/)** - The container that helps to render all Pages and Collections with uniform settings and variables
23
+ - **[Page][page-docs]** - A single webpage item built from content, a template,
24
+ raw data, or a combination of those things.
25
+ - **[Collection][collection-docs]** - A group of webpages built from the same
26
+ template, organized in a single directory
27
+ - **[Site][site-docs]** - The container that helps to render all Pages and
28
+ Collections with uniform settings and variables
25
29
 
26
30
  ## Installing Render Engine
27
31
 
@@ -48,13 +52,20 @@ Check out the [Getting Started](https://render-engine.readthedocs.io/en/latest/p
48
52
 
49
53
  ## Finding Awesome Add-Ons
50
54
 
51
- We've compiled a set of [awesome add-ons](https://github.com/render-engine/render-engine-awesome-list) that you can use to make your site even better!
55
+ We've compiled a set of [awesome add-ons][awesome-list] that you can use to
56
+ make your site even better!
57
+
58
+ ## CONTRIBUTING
59
+
60
+ We encourage contributors of all skill levels.
61
+ Please review the [contributing][contributing] section of our docs for more information.
52
62
 
53
63
  ## Contributors
54
64
 
65
+ <!-- markdownlint-disable -->
55
66
  <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
56
67
  <!-- prettier-ignore-start -->
57
- <!-- markdownlint-disable -->
68
+
58
69
  <table>
59
70
  <tbody>
60
71
  <tr>
@@ -86,20 +97,18 @@ We've compiled a set of [awesome add-ons](https://github.com/render-engine/rende
86
97
  </tbody>
87
98
  </table>
88
99
 
89
- <!-- markdownlint-restore -->
90
100
  <!-- prettier-ignore-end -->
91
-
92
101
  <!-- ALL-CONTRIBUTORS-LIST:END -->
93
- <!-- prettier-ignore-start -->
94
- <!-- markdownlint-disable -->
95
-
96
102
  <!-- markdownlint-restore -->
97
- <!-- prettier-ignore-end -->
98
-
99
- <!-- ALL-CONTRIBUTORS-LIST:END -->
100
103
 
101
104
  ### Sponsors at the $20/month and Higher Level
102
105
 
103
106
  - [Brian Douglas](https://github.com/bdougie)
104
107
 
105
108
  Thank you to them and all of those who continue to support this project!
109
+
110
+ [contributing]: https://render-engine.readthedocs.io/en/latest/contributing/CONTRIBUTING/
111
+ [page-docs]: https://render-engine.readthedocs.io/en/latest/page/
112
+ [collection-docs]: https://render-engine.readthedocs.io/en/latest/collection/
113
+ [site-docs]: https://render-engine.readthedocs.io/en/latest/site/
114
+ [awesome-list]: https://github.com/render-engine/render-engine-awesome-list
@@ -0,0 +1,15 @@
1
+ # Security Policy
2
+
3
+ ## Supported Versions
4
+
5
+ We only support the latest version of render-engine with security updates.
6
+ Please ensure you are using the most recent release available on PyPI or GitHub.
7
+
8
+ | Version | Supported |
9
+ | ------------- | ------------------ |
10
+ | 2025.11.1 | :white_check_mark: |
11
+ | < 2025.11.1 | :x: |
12
+
13
+ ## Reporting a Vulnerability
14
+
15
+ Email: <kjaymiller@gmail.com>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="114" height="20" role="img" aria-label="coverage: 91.87%"><title>coverage: 91.87%</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="114" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="61" height="20" fill="#555"/><rect x="61" width="53" height="20" fill="#4c1"/><rect width="114" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="315" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="510">coverage</text><text x="315" y="140" transform="scale(.1)" fill="#fff" textLength="510">coverage</text><text aria-hidden="true" x="865" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="430">91.87%</text><text x="865" y="140" transform="scale(.1)" fill="#fff" textLength="430">91.87%</text></g></svg>
@@ -5,14 +5,15 @@ date: August 22, 2024
5
5
  tags: ["archive", "parameters", "collection"]
6
6
  ---
7
7
 
8
- Archives are a [`BasePage`](page.md?id=basepage) object used to display a list of [`Page`](page.md?id=page) objects in a [`Collection`](collection.md?id=collection).
8
+ Archives are a [`BasePage`][basepage-object] object used to display a list of [`Page`][page-object] objects in a
9
+ [`Collection`][collection-object].
9
10
 
10
11
  Archive objects create a customizable page that can be controlled via its parent Collection.
11
12
 
12
- Bases: [`BasePage`](page.md?id=basepage)
13
+ Bases: [`BasePage`][basepage-object]
13
14
 
14
- The Archive is a [Page](page.md?id=page) object used by the collection
15
- that focuses on presenting the Collection's pages.
15
+ The Archive is a [Page][page-object] object used by the collection that focuses on presenting the
16
+ Collection's pages.
16
17
 
17
18
  **Parameters:**
18
19
 
@@ -20,7 +21,7 @@ that focuses on presenting the Collection's pages.
20
21
 
21
22
  | Name | Type | Description | Default |
22
23
  | ---- | ---- | ---- | ---- |
23
- | `pages` | `list[`[`BasePage`](page.md?id=basepage)`]` | The list of pages to include in the archive | _required_ |
24
+ | `pages` | `list[`[`BasePage`][basepage-object]`]` | The list of pages to include in the archive | _required_ |
24
25
  | `title` | `str` | The title of the archive | _required_ |
25
26
  | `template` | `str | Template` | The template to use for the archive | "archive.html" |
26
27
  | `routes` | `list[str | Path]` | The routes for where the archive page should be generated | _required_ |
@@ -29,7 +30,7 @@ that focuses on presenting the Collection's pages.
29
30
 
30
31
  > !!! Warning Not Directly Used
31
32
  The Archive object is not meant to be used directly.
32
- It is used by the [Collection](collection.md?id=collection) object.
33
+ It is used by the [Collection][collection-object] object.
33
34
  Attributes can be used to customize.
34
35
 
35
36
  Collection.archives yields a generator of Archive objects. Each Archive object will have a `pages` attribute that is a list of Page objects referenced in that Archive Page. The number of pages is determined by the `Collection.items_per_page` attribute.
@@ -74,3 +75,7 @@ Total Pages: {{num_of_pages}}
74
75
  <button{% if page_num == archive_index %}disabled{% endif%}>page_num</span>
75
76
  {% endfor %}
76
77
  ```
78
+
79
+ [basepage-object]: page.md?id=basepage
80
+ [page-object]: page.md?id=page
81
+ [collection-object]: collection.md?id=collection
@@ -15,16 +15,8 @@ Render Engine comes with a CLI that can be used to create, build, and serve your
15
15
 
16
16
  ## pyproject.toml Configuration
17
17
 
18
- The Render Engine CLI can be configured through your `pyproject.toml` file to set default values and avoid repetitive command-line arguments.
19
-
20
- ### Configuration Structure
21
-
22
- ```toml
23
- [render-engine.cli]
24
- module = "your_module"
25
- site = "YourSiteClass"
26
- collection = "blog" # optional
27
- ```
18
+ The Render Engine CLI can be configured through your `pyproject.toml` file to set default values and avoid
19
+ repetitive command-line arguments.
28
20
 
29
21
  ### Configuration Options
30
22
 
@@ -56,7 +56,8 @@ content_manager_extras: dict[str, Any]: Configuration options to send to the `Co
56
56
 
57
57
  Returns a [Archive](archive.md) objects containing the pages from the `content_path`.
58
58
 
59
- Archives are an iterable and the individual pages are built shortly after the collection pages are built. This happens when [Site.render](site.md?id=render) is called.
59
+ Archives are an iterable and the individual pages are built shortly after the collection pages are
60
+ built. This happens when [Site.render][site-render] is called.
60
61
 
61
62
  ## Functions
62
63
 
@@ -74,7 +75,9 @@ You can access attributes from the `Collection` class inside all of its rendered
74
75
 
75
76
  To do so, you must create an attribute called `template_vars` and populate it with a dictionary of key:value pairs.
76
77
 
77
- In turn, each `Page` in the collection will have a `collection` attribute, similar to `Page.template_vars`. The dictionary includes any additional attributes you have defined within the `Collection` class.
78
+ In turn, each `Page` in the collection will have a `collection` attribute, similar to
79
+ `Page.template_vars`. The dictionary includes any additional attributes you have defined within the
80
+ `Collection` class.
78
81
 
79
82
  ```python
80
83
  from render_engine import Site, Collection
@@ -103,6 +106,9 @@ Collection archives are a special type of page that is automatically generated f
103
106
 
104
107
  You can have archives generated by setting the `has_archive` to True.
105
108
 
106
- If you call `archives` from your collection and neither `has_archive` nor `items_per_page` is set, an error will be raised and an archive containing all pages will be generated.
109
+ If you call `archives` from your collection and neither `has_archive` nor `items_per_page` is set,
110
+ an error will be raised and an archive containing all pages will be generated.
107
111
 
108
112
  For more information, see [Collection Archives](archive.md).
113
+
114
+ [site-render]: site.md?id=render
@@ -39,8 +39,8 @@ def create_entry(self, filepath: Path = None, editor: str = None, metadata: dict
39
39
  ### `pages`
40
40
 
41
41
  The `pages` property is how the `Collection` accesses its content. It is a method that _must_ be implemented by
42
- every `ContentManager`. An example `pages` implementation (from the
43
- [`FileContentManger`](https://github.com/render-engine/render-engine/blob/main/src/render_engine/content_managers/file_content_manager.py)) is:
42
+ every `ContentManager`. An example `pages` implementation (from the [`FileContentManger`][file-content-manager])
43
+ is:
44
44
 
45
45
  ```python
46
46
  @property
@@ -83,3 +83,5 @@ page: Page # The Page to update
83
83
  content: str = None # Updated content
84
84
  **kwargs: dict # The other attributes for the updated page
85
85
  ```
86
+
87
+ [file-content-manager]: https://github.com/render-engine/render-engine/blob/main/src/render_engine/content_managers/file_content_manager.py
@@ -1,9 +1,11 @@
1
1
  # Contributing to Render Engine
2
2
 
3
- This document will help you get started in contributing to the Render Engine codebase is open source and contributions are welcome.
3
+ This document will help you get started in contributing to the Render Engine codebase is open source and
4
+ contributions are welcome.
4
5
 
5
6
  > **NOTE**
6
- > This is specifically for contributing to the Render-Engine package. For help with creating a plugin, custom parser or Theme. Please check the [Render Engine Wiki](https://github.com/render-engine/.github/wiki) or the [Render Engine Docs](https://render-engine.readthedocs.org).
7
+ > This is specifically for contributing to the Render-Engine package. For help with creating a plugin, custom
8
+ > parser or Theme. Please check the [Render Engine Wiki][wiki] or the [Render Engine Docs][docs].
7
9
 
8
10
  ## Docs
9
11
 
@@ -38,16 +40,17 @@ If you see or experience a problem, please file an issue. Include any important
38
40
 
39
41
  ## Wait to be Assigned Issues
40
42
 
41
- It's important to wait to be assigned an issue before starting to work on it. This prevents [working on code that won't be merged](https://render-engine.readthedocs.io/en/latest/contributing/CONTRIBUTING/#being-assigned-an-issue).
43
+ It's important to wait to be assigned an issue before starting to work on it. This prevents
44
+ [working on code that won't be merged][being-assigned].
42
45
 
43
46
  Comment _I can work on this_ or something to that effect, and wait for one of the maintainers to assign the issue to you.
44
47
 
45
48
  ## Setup your Environment
46
49
 
47
- Once you've been [assigned an issue](https://render-engine.readthedocs.io/en/latest/contributing/contributing#being-assigned-an-issue), you can begin working on an issue either locally with:
50
+ Once you've been [assigned an issue][being-assigned], you can begin working on an issue either locally with:
48
51
 
49
- - [manual setup](https://render-engine.readthedocs.io/en/latest/contributing/environment_setup#developing-locally)
50
- - [dev container](https://render-engine.readthedocs.io/en/latest/contributing/environment_setup#developing-locally)/[GitHub Codespaces](https://render-engine.readthedocs.io/en/latest/contributing/environment_setup#using-codespaces).
52
+ - [manual setup][manual-setup]
53
+ - [dev container][dev-container]/[GitHub Codespaces][codespaces].
51
54
  - from dockerfile
52
55
 
53
56
  ### Manual Configuration
@@ -60,19 +63,21 @@ Once you've been [assigned an issue](https://render-engine.readthedocs.io/en/lat
60
63
 
61
64
  ### Dockerfile
62
65
 
63
- Our DevContainer is built primarily from a dockerfile. You can build from our Dockerfile directly which would ensure the manual configuration is ran (You will still need to fork and clone).
66
+ Our DevContainer is built primarily from a dockerfile. You can build from our Dockerfile directly which would
67
+ ensure the manual configuration is ran (You will still need to fork and clone).
64
68
 
65
69
  ## Verify Before Submitting
66
70
 
67
- Render Engine uses nox to text against all supported versions. PRs will not be approved without tests passing on all supported versions.
71
+ Render Engine uses nox to text against all supported versions. PRs will not be approved without tests passing on
72
+ all supported versions.
68
73
 
69
74
  - 🚫 changes aren't breaking existing code (failing tests)
70
75
  - 🚫 Ensure new dependencies are listed, justified, and approved to be added.
71
76
 
72
77
  ## Contributing to Documentation
73
78
 
74
- Render Engine uses [readthedocs](https://readthedocs.org) in combination with
75
- [MkDocs](https://www.mkdocs.org),[Material for MkDocs](https://squidfunk.github.io/mkdocs-material/), and [mkdocsstrings](https://mkdocsstrings.readthedocs.io/en/latest/) to generate documentation.
79
+ Render Engine uses [readthedocs][readthedocs] in combination with [MkDocs][mkdocs],
80
+ [Material for MkDocs][material], and [mkdocsstrings][mkdocsstrings] to generate documentation.
76
81
 
77
82
  - 📝 update docstrings for functions, methods, and classes.
78
83
  - 📷 add images and gifs where necessary. Assets should be stored in the `docs/docs/assets` folder.
@@ -93,3 +98,14 @@ If you're starting from a blank PR be sure to include the following:
93
98
  - issue(s)/discussions being addressed
94
99
  - Documentation or tests added/updated
95
100
  - Any follow up tasks pending
101
+
102
+ [wiki]: https://github.com/render-engine/.github/wiki
103
+ [docs]: https://render-engine.readthedocs.org
104
+ [being-assigned]: https://render-engine.readthedocs.io/en/latest/contributing/CONTRIBUTING/#being-assigned-an-issue
105
+ [manual-setup]: https://render-engine.readthedocs.io/en/latest/contributing/environment_setup#developing-locally
106
+ [dev-container]: https://render-engine.readthedocs.io/en/latest/contributing/environment_setup#developing-locally
107
+ [codespaces]: https://render-engine.readthedocs.io/en/latest/contributing/environment_setup#using-codespaces
108
+ [readthedocs]: https://readthedocs.org
109
+ [mkdocs]: https://www.mkdocs.org
110
+ [material]: https://squidfunk.github.io/mkdocs-material/
111
+ [mkdocsstrings]: https://mkdocsstrings.readthedocs.io/en/latest/