djangocms-custom-content 0.5.0__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 (133) hide show
  1. djangocms_custom_content-0.5.0/.editorconfig +34 -0
  2. djangocms_custom_content-0.5.0/.github/dependabot.yml +9 -0
  3. djangocms_custom_content-0.5.0/.github/workflows/codecov.yml +70 -0
  4. djangocms_custom_content-0.5.0/.github/workflows/docs.yml +62 -0
  5. djangocms_custom_content-0.5.0/.github/workflows/lint-pr.yml +20 -0
  6. djangocms_custom_content-0.5.0/.github/workflows/publish-to-live-pypi.yml +41 -0
  7. djangocms_custom_content-0.5.0/.github/workflows/publish-to-test-pypi.yml +44 -0
  8. djangocms_custom_content-0.5.0/.gitignore +35 -0
  9. djangocms_custom_content-0.5.0/.pre-commit-config.yaml +33 -0
  10. djangocms_custom_content-0.5.0/.readthedocs.yaml +20 -0
  11. djangocms_custom_content-0.5.0/LICENSE +29 -0
  12. djangocms_custom_content-0.5.0/MANIFEST.in +8 -0
  13. djangocms_custom_content-0.5.0/PKG-INFO +165 -0
  14. djangocms_custom_content-0.5.0/README.rst +130 -0
  15. djangocms_custom_content-0.5.0/conftest.py +23 -0
  16. djangocms_custom_content-0.5.0/djangocms_custom_content/__init__.py +1 -0
  17. djangocms_custom_content-0.5.0/djangocms_custom_content/admin.py +59 -0
  18. djangocms_custom_content-0.5.0/djangocms_custom_content/apps.py +8 -0
  19. djangocms_custom_content-0.5.0/djangocms_custom_content/cms_config.py +162 -0
  20. djangocms_custom_content-0.5.0/djangocms_custom_content/cms_plugins.py +2 -0
  21. djangocms_custom_content-0.5.0/djangocms_custom_content/cms_toolbars.py +149 -0
  22. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/__init__.py +5 -0
  23. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/blog/__init__.py +0 -0
  24. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/blog/admin.py +21 -0
  25. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/blog/apps.py +9 -0
  26. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/blog/cms_plugins.py +21 -0
  27. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/blog/migrations/0001_initial.py +59 -0
  28. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/blog/migrations/0002_blogpostauthorsrelation.py +30 -0
  29. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/blog/migrations/0003_blogpostcategoriesrelation.py +28 -0
  30. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/blog/migrations/__init__.py +0 -0
  31. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/blog/models.py +55 -0
  32. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/blog/templates/blog/detail.html +11 -0
  33. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/categories/__init__.py +0 -0
  34. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/categories/admin.py +11 -0
  35. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/categories/apps.py +9 -0
  36. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/categories/cms_plugins.py +26 -0
  37. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/categories/migrations/0001_initial.py +55 -0
  38. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/categories/migrations/0002_delete_flatcategoryrelation.py +16 -0
  39. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/categories/migrations/__init__.py +0 -0
  40. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/categories/models.py +30 -0
  41. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/people/__init__.py +0 -0
  42. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/people/admin.py +51 -0
  43. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/people/apps.py +9 -0
  44. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/people/cms_plugins.py +21 -0
  45. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/people/migrations/0001_initial.py +80 -0
  46. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/people/migrations/0002_delete_personrelation.py +16 -0
  47. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/people/migrations/__init__.py +0 -0
  48. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/people/models.py +53 -0
  49. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/people/templates/djangocms_custom_content_people/person_teaser.html +17 -0
  50. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/people/templates/djangocms_custom_content_people/personcontent_detail.html +10 -0
  51. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/services/__init__.py +0 -0
  52. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/services/admin.py +11 -0
  53. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/services/apps.py +9 -0
  54. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/services/cms_plugins.py +38 -0
  55. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/services/migrations/0001_initial.py +80 -0
  56. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/services/migrations/__init__.py +0 -0
  57. djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/services/models.py +33 -0
  58. djangocms_custom_content-0.5.0/djangocms_custom_content/forms.py +95 -0
  59. djangocms_custom_content-0.5.0/djangocms_custom_content/helpers.py +12 -0
  60. djangocms_custom_content-0.5.0/djangocms_custom_content/migrations/__init__.py +1 -0
  61. djangocms_custom_content-0.5.0/djangocms_custom_content/models.py +203 -0
  62. djangocms_custom_content-0.5.0/djangocms_custom_content/relation_admin.py +190 -0
  63. djangocms_custom_content-0.5.0/djangocms_custom_content/relations.py +400 -0
  64. djangocms_custom_content-0.5.0/djangocms_custom_content/static/djangocms_custom_content/icon.css +3 -0
  65. djangocms_custom_content-0.5.0/djangocms_custom_content/static/djangocms_custom_content/js/Sortable.min.js +2 -0
  66. djangocms_custom_content-0.5.0/djangocms_custom_content/static/djangocms_custom_content/js/sorted-autocomplete.js +83 -0
  67. djangocms_custom_content-0.5.0/djangocms_custom_content/templates/djangocms_custom_content/contrib/blog/blog_post_teaser.html +4 -0
  68. djangocms_custom_content-0.5.0/djangocms_custom_content/templates/djangocms_custom_content/contrib/blog/latest_blog_posts.html +10 -0
  69. djangocms_custom_content-0.5.0/djangocms_custom_content/templates/djangocms_custom_content/contrib/categories/category_list.html +7 -0
  70. djangocms_custom_content-0.5.0/djangocms_custom_content/templates/djangocms_custom_content/contrib/people/person_teaser.html +5 -0
  71. djangocms_custom_content-0.5.0/djangocms_custom_content/templates/djangocms_custom_content/contrib/services/featured_services.html +10 -0
  72. djangocms_custom_content-0.5.0/djangocms_custom_content/templates/djangocms_custom_content/contrib/services/service_teaser.html +4 -0
  73. djangocms_custom_content-0.5.0/djangocms_custom_content/templates/djangocms_custom_content/default.html +9 -0
  74. djangocms_custom_content-0.5.0/djangocms_custom_content/views.py +45 -0
  75. djangocms_custom_content-0.5.0/djangocms_custom_content.egg-info/PKG-INFO +165 -0
  76. djangocms_custom_content-0.5.0/djangocms_custom_content.egg-info/SOURCES.txt +131 -0
  77. djangocms_custom_content-0.5.0/djangocms_custom_content.egg-info/dependency_links.txt +1 -0
  78. djangocms_custom_content-0.5.0/djangocms_custom_content.egg-info/requires.txt +8 -0
  79. djangocms_custom_content-0.5.0/djangocms_custom_content.egg-info/top_level.txt +1 -0
  80. djangocms_custom_content-0.5.0/docs/Makefile +212 -0
  81. djangocms_custom_content-0.5.0/docs/requirements.txt +8 -0
  82. djangocms_custom_content-0.5.0/docs/source/conf.py +214 -0
  83. djangocms_custom_content-0.5.0/docs/source/explanation/architecture.rst +157 -0
  84. djangocms_custom_content-0.5.0/docs/source/explanation/index.rst +15 -0
  85. djangocms_custom_content-0.5.0/docs/source/explanation/relationships.rst +142 -0
  86. djangocms_custom_content-0.5.0/docs/source/how-to/admin.rst +77 -0
  87. djangocms_custom_content-0.5.0/docs/source/how-to/apphooks.rst +99 -0
  88. djangocms_custom_content-0.5.0/docs/source/how-to/blog.rst +81 -0
  89. djangocms_custom_content-0.5.0/docs/source/how-to/categories.rst +126 -0
  90. djangocms_custom_content-0.5.0/docs/source/how-to/index.rst +23 -0
  91. djangocms_custom_content-0.5.0/docs/source/how-to/m2m_relations.rst +174 -0
  92. djangocms_custom_content-0.5.0/docs/source/how-to/people.rst +108 -0
  93. djangocms_custom_content-0.5.0/docs/source/how-to/services.rst +68 -0
  94. djangocms_custom_content-0.5.0/docs/source/how-to/versioning.rst +75 -0
  95. djangocms_custom_content-0.5.0/docs/source/index.rst +164 -0
  96. djangocms_custom_content-0.5.0/docs/source/reference/index.rst +98 -0
  97. djangocms_custom_content-0.5.0/docs/source/tutorials/article_with_plugins.rst +183 -0
  98. djangocms_custom_content-0.5.0/docs/source/tutorials/basic_setup.rst +150 -0
  99. djangocms_custom_content-0.5.0/docs/source/tutorials/index.rst +19 -0
  100. djangocms_custom_content-0.5.0/docs/source/tutorials/model_with_m2m.rst +234 -0
  101. djangocms_custom_content-0.5.0/pyproject.toml +169 -0
  102. djangocms_custom_content-0.5.0/setup.cfg +4 -0
  103. djangocms_custom_content-0.5.0/setup.py +3 -0
  104. djangocms_custom_content-0.5.0/tests/__init__.py +1 -0
  105. djangocms_custom_content-0.5.0/tests/fixtures.py +94 -0
  106. djangocms_custom_content-0.5.0/tests/requirements/base.txt +14 -0
  107. djangocms_custom_content-0.5.0/tests/requirements/dj52_cms50.txt +4 -0
  108. djangocms_custom_content-0.5.0/tests/requirements/dj52_cms_main.txt +4 -0
  109. djangocms_custom_content-0.5.0/tests/requirements/dj60_cms50.txt +4 -0
  110. djangocms_custom_content-0.5.0/tests/requirements/dj60_cms_main.txt +4 -0
  111. djangocms_custom_content-0.5.0/tests/requirements/dj61_cms50.txt +4 -0
  112. djangocms_custom_content-0.5.0/tests/requirements/dj61_cms_main.txt +4 -0
  113. djangocms_custom_content-0.5.0/tests/test_admin.py +409 -0
  114. djangocms_custom_content-0.5.0/tests/test_app/__init__.py +1 -0
  115. djangocms_custom_content-0.5.0/tests/test_app/admin.py +21 -0
  116. djangocms_custom_content-0.5.0/tests/test_app/migrations/0001_initial.py +71 -0
  117. djangocms_custom_content-0.5.0/tests/test_app/migrations/0002_samplegrouper_samplegroupercontent.py +33 -0
  118. djangocms_custom_content-0.5.0/tests/test_app/migrations/0003_remove_bookrelation_content_type_and_more.py +27 -0
  119. djangocms_custom_content-0.5.0/tests/test_app/migrations/0004_delete_article_delete_author_delete_book.py +22 -0
  120. djangocms_custom_content-0.5.0/tests/test_app/migrations/__init__.py +0 -0
  121. djangocms_custom_content-0.5.0/tests/test_app/models.py +32 -0
  122. djangocms_custom_content-0.5.0/tests/test_app/templates/page.html +13 -0
  123. djangocms_custom_content-0.5.0/tests/test_apphooks.py +67 -0
  124. djangocms_custom_content-0.5.0/tests/test_models.py +346 -0
  125. djangocms_custom_content-0.5.0/tests/test_relation_admin.py +128 -0
  126. djangocms_custom_content-0.5.0/tests/test_relation_forms.py +74 -0
  127. djangocms_custom_content-0.5.0/tests/test_relations.py +263 -0
  128. djangocms_custom_content-0.5.0/tests/test_services.py +62 -0
  129. djangocms_custom_content-0.5.0/tests/test_settings.py +94 -0
  130. djangocms_custom_content-0.5.0/tests/test_toolbar.py +434 -0
  131. djangocms_custom_content-0.5.0/tests/test_views.py +154 -0
  132. djangocms_custom_content-0.5.0/tests/urls.py +14 -0
  133. djangocms_custom_content-0.5.0/tests/urls_apphooks.py +34 -0
@@ -0,0 +1,34 @@
1
+ # editorconfig.org
2
+
3
+ root = true
4
+
5
+ [*]
6
+ indent_style = space
7
+ indent_size = 4
8
+ end_of_line = lf
9
+ charset = utf-8
10
+ trim_trailing_whitespace = true
11
+ insert_final_newline = true
12
+ max_line_length = 80
13
+
14
+ [*.py]
15
+ max_line_length = 120
16
+ quote_type = single
17
+
18
+ [*.{scss,js,html}]
19
+ max_line_length = 120
20
+ indent_style = space
21
+ quote_type = double
22
+
23
+ [*.js]
24
+ max_line_length = 120
25
+ quote_type = single
26
+
27
+ [*.rst]
28
+ max_line_length = 80
29
+
30
+ [*.yml]
31
+ indent_size = 2
32
+
33
+ [*.html]
34
+ indent_size = 2
@@ -0,0 +1,9 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "github-actions"
4
+ directory: "/"
5
+ commit-message:
6
+ prefix: "ci:"
7
+ include: "scope"
8
+ schedule:
9
+ interval: "weekly"
@@ -0,0 +1,70 @@
1
+ name: CodeCov
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+
9
+ concurrency:
10
+ group: ${{ github.workflow }}-${{ github.ref }}
11
+ cancel-in-progress: true
12
+
13
+ jobs:
14
+ coverage:
15
+ runs-on: ${{ matrix.os }}
16
+ strategy:
17
+ fail-fast: false
18
+ matrix:
19
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
20
+ requirements-file: [
21
+ dj52_cms50.txt,
22
+ dj61_cms50.txt,
23
+ dj60_cms50.txt,
24
+ dj52_cms_main.txt,
25
+ dj60_cms_main.txt,
26
+ dj61_cms_main.txt,
27
+ ]
28
+ os: [
29
+ ubuntu-latest,
30
+ ]
31
+ exclude:
32
+ # Python 3.14 only works with Django 5.2+
33
+ # Python 3.10 and 3.11 only supported until Django 5.2
34
+ - python-version: "3.10"
35
+ requirements-file: dj60_cms50.txt
36
+ - python-version: "3.11"
37
+ requirements-file: dj60_cms50.txt
38
+ - python-version: "3.10"
39
+ requirements-file: dj61_cms50.txt
40
+ - python-version: "3.11"
41
+ requirements-file: dj61_cms50.txt
42
+ - python-version: "3.10"
43
+ requirements-file: dj60_cms_main.txt
44
+ - python-version: "3.11"
45
+ requirements-file: dj60_cms_main.txt
46
+ - python-version: "3.10"
47
+ requirements-file: dj61_cms_main.txt
48
+ - python-version: "3.11"
49
+ requirements-file: dj61_cms_main.txt
50
+
51
+ steps:
52
+ - uses: actions/checkout@v6
53
+ with:
54
+ fetch-depth: '2'
55
+
56
+ - name: Setup Python
57
+ uses: actions/setup-python@v6
58
+ with:
59
+ python-version: ${{ matrix.python-version }}
60
+ - name: Install dependencies
61
+ run: |
62
+ python -m pip install --upgrade pip uv
63
+ uv pip install --system -r tests/requirements/${{ matrix.requirements-file }}
64
+ - name: Run coverage
65
+ run: |
66
+ coverage run -m pytest
67
+ - name: Upload Coverage to Codecov
68
+ uses: codecov/codecov-action@v7
69
+ with:
70
+ token: ${{ secrets.CODECOV_TOKEN }}
@@ -0,0 +1,62 @@
1
+ name: Docs
2
+
3
+ on: [push, pull_request]
4
+
5
+ concurrency:
6
+ group: ${{ github.workflow }}-${{ github.ref }}
7
+ cancel-in-progress: true
8
+
9
+ jobs:
10
+ build:
11
+ runs-on: ubuntu-latest
12
+ name: build
13
+ steps:
14
+ - name: Checkout
15
+ uses: actions/checkout@v6
16
+ - name: Set up Python
17
+ uses: actions/setup-python@v6
18
+ with:
19
+ python-version: '3.11'
20
+ cache: 'pip'
21
+ - name: Cache dependencies
22
+ uses: actions/cache@v5.0.5
23
+ with:
24
+ path: ~/.cache/pip
25
+ key: ${{ runner.os }}-pip-${{ hashFiles('docs/requirements.txt') }}
26
+ restore-keys: |
27
+ ${{ runner.os }}-pip-
28
+ - name: Install dependencies
29
+ run: |
30
+ python -m pip install -r docs/requirements.txt
31
+ - name: Build docs
32
+ run: |
33
+ cd docs
34
+ make install
35
+ make html
36
+
37
+ spelling:
38
+ runs-on: ubuntu-latest
39
+ name: spelling
40
+ needs: build
41
+ steps:
42
+ - name: Checkout
43
+ uses: actions/checkout@v6
44
+ - name: Set up Python
45
+ uses: actions/setup-python@v6
46
+ with:
47
+ python-version: '3.11'
48
+ cache: 'pip'
49
+ - name: Cache dependencies
50
+ uses: actions/cache@v5.0.5
51
+ with:
52
+ path: ~/.cache/pip
53
+ key: ${{ runner.os }}-pip-${{ hashFiles('docs/requirements.txt') }}
54
+ restore-keys: |
55
+ ${{ runner.os }}-pip-
56
+ - run: |
57
+ python -m pip install -r docs/requirements.txt
58
+ - name: Check spelling
59
+ run: |
60
+ cd docs
61
+ make install
62
+ make spelling
@@ -0,0 +1,20 @@
1
+ name: "Lint PR"
2
+
3
+ # Validates PR titles against the conventional commit spec
4
+ # https://github.com/commitizen/conventional-commit-types
5
+
6
+ on:
7
+ pull_request_target:
8
+ types:
9
+ - opened
10
+ - edited
11
+ - synchronize
12
+
13
+ jobs:
14
+ main:
15
+ name: Validate PR title
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - uses: amannn/action-semantic-pull-request@v6
19
+ env:
20
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,41 @@
1
+ name: Publish Python 🐍 distributions 📦 to pypi
2
+
3
+ on:
4
+ release:
5
+ types:
6
+ - published
7
+
8
+ jobs:
9
+ build-n-publish:
10
+ name: Build and publish Python 🐍 distributions 📦 to pypi
11
+ runs-on: ubuntu-latest
12
+ environment:
13
+ name: pypi
14
+ url: https://pypi.org/p/djangocms-custom-content
15
+ permissions:
16
+ id-token: write
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+ - name: Set up Python 3.12
20
+ uses: actions/setup-python@v6
21
+ with:
22
+ python-version: 3.12
23
+
24
+ - name: Install pypa/build
25
+ run: >-
26
+ python -m
27
+ pip install
28
+ build
29
+ --user
30
+ - name: Build a binary wheel and a source tarball
31
+ run: >-
32
+ python -m
33
+ build
34
+ --sdist
35
+ --wheel
36
+ --outdir dist/
37
+ .
38
+
39
+ - name: Publish distribution 📦 to PyPI
40
+ if: startsWith(github.ref, 'refs/tags')
41
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,44 @@
1
+ name: Publish Python 🐍 distributions 📦 to TestPyPI
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+
8
+ jobs:
9
+ build-n-publish:
10
+ name: Build and publish Python 🐍 distributions 📦 to TestPyPI
11
+ runs-on: ubuntu-latest
12
+ environment:
13
+ name: test
14
+ url: https://test.pypi.org/p/djangocms-custom-content
15
+ permissions:
16
+ id-token: write
17
+ steps:
18
+ - uses: actions/checkout@master
19
+ - name: Set up Python 3.12
20
+ uses: actions/setup-python@v6
21
+ with:
22
+ python-version: 3.12
23
+
24
+ - name: Install pypa/build
25
+ run: >-
26
+ python -m
27
+ pip install
28
+ build
29
+ --user
30
+
31
+ - name: Build a binary wheel and a source tarball
32
+ run: >-
33
+ python -m
34
+ build
35
+ --sdist
36
+ --wheel
37
+ --outdir dist/
38
+ .
39
+
40
+ - name: Publish distribution 📦 to Test PyPI
41
+ uses: pypa/gh-action-pypi-publish@release/v1
42
+ with:
43
+ repository-url: https://test.pypi.org/legacy/
44
+ skip-existing: true
@@ -0,0 +1,35 @@
1
+ *.py[cod]
2
+ *$py.class
3
+ *.egg-info
4
+ *.log
5
+ *.pot
6
+ .DS_Store
7
+ .coverage
8
+ .coverage/
9
+ .eggs/
10
+ .idea/
11
+ .project/
12
+ .pydevproject/
13
+ .vscode/
14
+ .settings/
15
+ .tox/
16
+ __pycache__/
17
+ build/
18
+ dist/
19
+ env/
20
+ .venv/
21
+
22
+ /~
23
+ /node_modules
24
+ .sass-cache
25
+ *.css.map
26
+ npm-debug.log
27
+ package-lock.json
28
+
29
+ mydatabase
30
+ local.sqlite
31
+ /docs/_build/
32
+
33
+ /filer_public/
34
+ /filer_public_thumbnails/
35
+ /htmlcov/
@@ -0,0 +1,33 @@
1
+ ci:
2
+ autofix_commit_msg: |
3
+ ci: auto fixes from pre-commit hooks
4
+
5
+ for more information, see https://pre-commit.ci
6
+ autofix_prs: false
7
+ autoupdate_commit_msg: "ci: pre-commit autoupdate"
8
+ autoupdate_schedule: monthly
9
+
10
+ repos:
11
+ - repo: https://github.com/asottile/pyupgrade
12
+ rev: v3.21.2
13
+ hooks:
14
+ - id: pyupgrade
15
+ args: ["--py310-plus"]
16
+
17
+ - repo: https://github.com/adamchainz/django-upgrade
18
+ rev: "1.30.0"
19
+ hooks:
20
+ - id: django-upgrade
21
+ args: [--target-version, "4.2"]
22
+
23
+ - repo: https://github.com/astral-sh/ruff-pre-commit
24
+ rev: v0.15.15
25
+ hooks:
26
+ - id: ruff
27
+ args: [--fix]
28
+ - id: ruff-format
29
+
30
+ - repo: https://github.com/tox-dev/pyproject-fmt
31
+ rev: v2.23.0
32
+ hooks:
33
+ - id: pyproject-fmt
@@ -0,0 +1,20 @@
1
+ # Read the Docs configuration file
2
+ # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
3
+ version: 2
4
+
5
+ build:
6
+ os: ubuntu-22.04
7
+ tools:
8
+ python: "3.11"
9
+
10
+ sphinx:
11
+ configuration: docs/source/conf.py
12
+ fail_on_warning: false
13
+
14
+ formats:
15
+ - epub
16
+ - pdf
17
+
18
+ python:
19
+ install:
20
+ - requirements: docs/requirements.txt
@@ -0,0 +1,29 @@
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2026, Fabian Braun
4
+ All rights reserved.
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions are met:
8
+
9
+ 1. Redistributions of source code must retain the above copyright notice, this
10
+ list of conditions and the following disclaimer.
11
+
12
+ 2. Redistributions in binary form must reproduce the above copyright notice,
13
+ this list of conditions and the following disclaimer in the documentation
14
+ and/or other materials provided with the distribution.
15
+
16
+ 3. Neither the name of the copyright holder nor the names of its
17
+ contributors may be used to endorse or promote products derived from
18
+ this software without specific prior written permission.
19
+
20
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,8 @@
1
+ include LICENSE
2
+ include README.rst
3
+ recursive-include djangocms_custom_content/locale *
4
+ recursive-include djangocms_custom_content/static *
5
+ recursive-include djangocms_custom_content/templates *
6
+ recursive-exclude * *.py[co]
7
+ exclude docs/
8
+ exclude tests/
@@ -0,0 +1,165 @@
1
+ Metadata-Version: 2.4
2
+ Name: djangocms-custom-content
3
+ Version: 0.5.0
4
+ Summary: Developer framework for integrating custom content models with django CMS.
5
+ Author-email: Fabian Braun <fsbraun@gmx.de>
6
+ License: BSD-3-Clause
7
+ Project-URL: Documentation, https://djangocms-custom-content.readthedocs.io
8
+ Project-URL: Issues, https://github.com/fsbraun/djangocms-custom-content/issues
9
+ Project-URL: Source, https://github.com/fsbraun/djangocms-custom-content
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Framework :: Django
12
+ Classifier: Framework :: Django :: 5.2
13
+ Classifier: Framework :: Django :: 6.0
14
+ Classifier: Framework :: Django :: 6.1
15
+ Classifier: Framework :: Django CMS
16
+ Classifier: Framework :: Django CMS :: 5.0
17
+ Classifier: Framework :: Django CMS :: 5.1
18
+ Classifier: Programming Language :: Python :: 3 :: Only
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Programming Language :: Python :: 3.14
24
+ Requires-Python: >=3.10
25
+ Description-Content-Type: text/x-rst
26
+ License-File: LICENSE
27
+ Requires-Dist: django-cms>=5
28
+ Provides-Extra: test
29
+ Requires-Dist: djangocms-versioning; extra == "test"
30
+ Requires-Dist: pre-commit>=3; extra == "test"
31
+ Requires-Dist: pytest>=7; extra == "test"
32
+ Requires-Dist: pytest-cov>=5; extra == "test"
33
+ Requires-Dist: pytest-django>=4; extra == "test"
34
+ Dynamic: license-file
35
+
36
+ ========================
37
+ djangocms-custom-content
38
+ ========================
39
+
40
+ |PyPiVersion| |PyVersion| |DjVersion| |CmsVersion| |Coverage|
41
+
42
+ Developer framework for integrating custom content models with django CMS.
43
+
44
+ Description
45
+ ===========
46
+
47
+ ``djangocms-custom-content`` provides a developer-friendly framework to quickly build
48
+ and integrate your own custom content models with django CMS.
49
+
50
+ It helps you define CMS-enabled custom models with minimal boilerplate. Depending on your
51
+ project needs, it can optionally add:
52
+
53
+ * apphooks for dedicated content sections/URLs
54
+ * frontend editable placeholders
55
+ * versioning support
56
+ * relationships to other content types or existing domain models
57
+
58
+ The package also includes ready-to-use CMS plugins for displaying custom content
59
+ items (e.g. detail/teaser views), as well as patterns for related and featured
60
+ content.
61
+
62
+ Features
63
+ ========
64
+
65
+ * Fast setup for custom content models and CMS integration
66
+ * CMS plugins for rendering content, related content, and featured content
67
+ * Optional apphooks, versioning, and model relationships
68
+ * Compatible with django CMS 5.0 and later
69
+ * Support for Django 5.2 through 6.0
70
+ * Easy integration into existing django CMS projects
71
+
72
+ Installation
73
+ ============
74
+
75
+ Install the package using pip::
76
+
77
+ pip install djangocms-custom-content
78
+
79
+ Add it to your ``INSTALLED_APPS``::
80
+
81
+ INSTALLED_APPS = [
82
+ ...
83
+ 'djangocms_custom_content',
84
+ ...
85
+ ]
86
+
87
+ Run migrations::
88
+
89
+ python manage.py migrate djangocms_custom_content
90
+
91
+ Usage
92
+ =====
93
+
94
+ This package is intended to be extended in your project:
95
+
96
+ * Define one or more custom content models.
97
+ * Register and configure the provided CMS integration (admin + plugins).
98
+ * Use the included plugins to place and render your content in placeholders.
99
+ * Optionally enable apphooks/versioning/relationships for richer content
100
+ architectures.
101
+
102
+ The exact configuration depends on your project and the content types you build.
103
+
104
+ To learn how to build your own model-based content types with this framework, see the
105
+ documentation section "Creating custom models":
106
+
107
+ https://not-yet-there.readthedocs.io/
108
+
109
+ Contrib examples
110
+ ================
111
+
112
+ This package ships optional, small example apps under ``djangocms_custom_content.contrib``.
113
+ They are intended as quick starting points (models + admin + django CMS plugins) and can be
114
+ enabled in a project as-is or copied and adapted.
115
+
116
+ Available example modules:
117
+
118
+ * ``djangocms_custom_content.contrib.people``: Simple ``Person`` model + "Person" teaser plugin
119
+ * ``djangocms_custom_content.contrib.services``: Simple ``Service`` model + teaser + "featured services" plugin
120
+ * ``djangocms_custom_content.contrib.categories``: Simple taxonomy + category list plugin
121
+ * ``djangocms_custom_content.contrib.blog``: Simple blog posts with category relationship + teaser + latest posts plugin
122
+
123
+ To enable one (or more) of them, add the module(s) to ``INSTALLED_APPS`` and run migrations::
124
+
125
+ INSTALLED_APPS = [
126
+ ...,
127
+ 'djangocms_custom_content',
128
+ 'djangocms_custom_content.contrib.people', # contrib are optional
129
+ 'djangocms_custom_content.contrib.services',
130
+ 'djangocms_custom_content.contrib.categories',
131
+ 'djangocms_custom_content.contrib.blog',
132
+ ...,
133
+ ]
134
+
135
+ python manage.py migrate
136
+
137
+ Contributing
138
+ ============
139
+
140
+ Contributions are welcome! Please feel free to submit a Pull Request.
141
+
142
+ License
143
+ =======
144
+
145
+ This project is licensed under the BSD-3-Clause License.
146
+
147
+
148
+ .. |PyPiVersion| image:: https://img.shields.io/pypi/v/djangocms-custom-content.svg?style=flat-square
149
+ :target: https://pypi.python.org/pypi/djangocms-custom-content
150
+ :alt: Latest PyPI version
151
+
152
+ .. |PyVersion| image:: https://img.shields.io/pypi/pyversions/djangocms-custom-content.svg?style=flat-square
153
+ :target: https://pypi.python.org/pypi/djangocms-custom-content
154
+ :alt: Python versions
155
+
156
+ .. |DjVersion| image:: https://img.shields.io/pypi/frameworkversions/django/djangocms-custom-content.svg?style=flat-square
157
+ :target: https://pypi.python.org/pypi/djangocms-custom-content
158
+ :alt: Django versions
159
+
160
+ .. |CmsVersion| image:: https://img.shields.io/pypi/frameworkversions/django-cms/djangocms-custom-content.svg?style=flat-square
161
+ :target: https://pypi.python.org/pypi/djangocms-custom-content
162
+ :alt: django CMS versions
163
+
164
+ .. |Coverage| image:: https://codecov.io/gh/fsbraun/djangocms-custom-content/graph/badge.svg?token=GESjKzHSXl
165
+ :target: https://codecov.io/gh/fsbraun/djangocms-custom-content