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.
- djangocms_custom_content-0.5.0/.editorconfig +34 -0
- djangocms_custom_content-0.5.0/.github/dependabot.yml +9 -0
- djangocms_custom_content-0.5.0/.github/workflows/codecov.yml +70 -0
- djangocms_custom_content-0.5.0/.github/workflows/docs.yml +62 -0
- djangocms_custom_content-0.5.0/.github/workflows/lint-pr.yml +20 -0
- djangocms_custom_content-0.5.0/.github/workflows/publish-to-live-pypi.yml +41 -0
- djangocms_custom_content-0.5.0/.github/workflows/publish-to-test-pypi.yml +44 -0
- djangocms_custom_content-0.5.0/.gitignore +35 -0
- djangocms_custom_content-0.5.0/.pre-commit-config.yaml +33 -0
- djangocms_custom_content-0.5.0/.readthedocs.yaml +20 -0
- djangocms_custom_content-0.5.0/LICENSE +29 -0
- djangocms_custom_content-0.5.0/MANIFEST.in +8 -0
- djangocms_custom_content-0.5.0/PKG-INFO +165 -0
- djangocms_custom_content-0.5.0/README.rst +130 -0
- djangocms_custom_content-0.5.0/conftest.py +23 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/__init__.py +1 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/admin.py +59 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/apps.py +8 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/cms_config.py +162 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/cms_plugins.py +2 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/cms_toolbars.py +149 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/__init__.py +5 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/blog/__init__.py +0 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/blog/admin.py +21 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/blog/apps.py +9 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/blog/cms_plugins.py +21 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/blog/migrations/0001_initial.py +59 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/blog/migrations/0002_blogpostauthorsrelation.py +30 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/blog/migrations/0003_blogpostcategoriesrelation.py +28 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/blog/migrations/__init__.py +0 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/blog/models.py +55 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/blog/templates/blog/detail.html +11 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/categories/__init__.py +0 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/categories/admin.py +11 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/categories/apps.py +9 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/categories/cms_plugins.py +26 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/categories/migrations/0001_initial.py +55 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/categories/migrations/0002_delete_flatcategoryrelation.py +16 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/categories/migrations/__init__.py +0 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/categories/models.py +30 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/people/__init__.py +0 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/people/admin.py +51 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/people/apps.py +9 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/people/cms_plugins.py +21 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/people/migrations/0001_initial.py +80 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/people/migrations/0002_delete_personrelation.py +16 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/people/migrations/__init__.py +0 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/people/models.py +53 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/people/templates/djangocms_custom_content_people/person_teaser.html +17 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/people/templates/djangocms_custom_content_people/personcontent_detail.html +10 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/services/__init__.py +0 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/services/admin.py +11 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/services/apps.py +9 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/services/cms_plugins.py +38 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/services/migrations/0001_initial.py +80 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/services/migrations/__init__.py +0 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/contrib/services/models.py +33 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/forms.py +95 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/helpers.py +12 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/migrations/__init__.py +1 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/models.py +203 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/relation_admin.py +190 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/relations.py +400 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/static/djangocms_custom_content/icon.css +3 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/static/djangocms_custom_content/js/Sortable.min.js +2 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/static/djangocms_custom_content/js/sorted-autocomplete.js +83 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/templates/djangocms_custom_content/contrib/blog/blog_post_teaser.html +4 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/templates/djangocms_custom_content/contrib/blog/latest_blog_posts.html +10 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/templates/djangocms_custom_content/contrib/categories/category_list.html +7 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/templates/djangocms_custom_content/contrib/people/person_teaser.html +5 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/templates/djangocms_custom_content/contrib/services/featured_services.html +10 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/templates/djangocms_custom_content/contrib/services/service_teaser.html +4 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/templates/djangocms_custom_content/default.html +9 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content/views.py +45 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content.egg-info/PKG-INFO +165 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content.egg-info/SOURCES.txt +131 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content.egg-info/dependency_links.txt +1 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content.egg-info/requires.txt +8 -0
- djangocms_custom_content-0.5.0/djangocms_custom_content.egg-info/top_level.txt +1 -0
- djangocms_custom_content-0.5.0/docs/Makefile +212 -0
- djangocms_custom_content-0.5.0/docs/requirements.txt +8 -0
- djangocms_custom_content-0.5.0/docs/source/conf.py +214 -0
- djangocms_custom_content-0.5.0/docs/source/explanation/architecture.rst +157 -0
- djangocms_custom_content-0.5.0/docs/source/explanation/index.rst +15 -0
- djangocms_custom_content-0.5.0/docs/source/explanation/relationships.rst +142 -0
- djangocms_custom_content-0.5.0/docs/source/how-to/admin.rst +77 -0
- djangocms_custom_content-0.5.0/docs/source/how-to/apphooks.rst +99 -0
- djangocms_custom_content-0.5.0/docs/source/how-to/blog.rst +81 -0
- djangocms_custom_content-0.5.0/docs/source/how-to/categories.rst +126 -0
- djangocms_custom_content-0.5.0/docs/source/how-to/index.rst +23 -0
- djangocms_custom_content-0.5.0/docs/source/how-to/m2m_relations.rst +174 -0
- djangocms_custom_content-0.5.0/docs/source/how-to/people.rst +108 -0
- djangocms_custom_content-0.5.0/docs/source/how-to/services.rst +68 -0
- djangocms_custom_content-0.5.0/docs/source/how-to/versioning.rst +75 -0
- djangocms_custom_content-0.5.0/docs/source/index.rst +164 -0
- djangocms_custom_content-0.5.0/docs/source/reference/index.rst +98 -0
- djangocms_custom_content-0.5.0/docs/source/tutorials/article_with_plugins.rst +183 -0
- djangocms_custom_content-0.5.0/docs/source/tutorials/basic_setup.rst +150 -0
- djangocms_custom_content-0.5.0/docs/source/tutorials/index.rst +19 -0
- djangocms_custom_content-0.5.0/docs/source/tutorials/model_with_m2m.rst +234 -0
- djangocms_custom_content-0.5.0/pyproject.toml +169 -0
- djangocms_custom_content-0.5.0/setup.cfg +4 -0
- djangocms_custom_content-0.5.0/setup.py +3 -0
- djangocms_custom_content-0.5.0/tests/__init__.py +1 -0
- djangocms_custom_content-0.5.0/tests/fixtures.py +94 -0
- djangocms_custom_content-0.5.0/tests/requirements/base.txt +14 -0
- djangocms_custom_content-0.5.0/tests/requirements/dj52_cms50.txt +4 -0
- djangocms_custom_content-0.5.0/tests/requirements/dj52_cms_main.txt +4 -0
- djangocms_custom_content-0.5.0/tests/requirements/dj60_cms50.txt +4 -0
- djangocms_custom_content-0.5.0/tests/requirements/dj60_cms_main.txt +4 -0
- djangocms_custom_content-0.5.0/tests/requirements/dj61_cms50.txt +4 -0
- djangocms_custom_content-0.5.0/tests/requirements/dj61_cms_main.txt +4 -0
- djangocms_custom_content-0.5.0/tests/test_admin.py +409 -0
- djangocms_custom_content-0.5.0/tests/test_app/__init__.py +1 -0
- djangocms_custom_content-0.5.0/tests/test_app/admin.py +21 -0
- djangocms_custom_content-0.5.0/tests/test_app/migrations/0001_initial.py +71 -0
- djangocms_custom_content-0.5.0/tests/test_app/migrations/0002_samplegrouper_samplegroupercontent.py +33 -0
- djangocms_custom_content-0.5.0/tests/test_app/migrations/0003_remove_bookrelation_content_type_and_more.py +27 -0
- djangocms_custom_content-0.5.0/tests/test_app/migrations/0004_delete_article_delete_author_delete_book.py +22 -0
- djangocms_custom_content-0.5.0/tests/test_app/migrations/__init__.py +0 -0
- djangocms_custom_content-0.5.0/tests/test_app/models.py +32 -0
- djangocms_custom_content-0.5.0/tests/test_app/templates/page.html +13 -0
- djangocms_custom_content-0.5.0/tests/test_apphooks.py +67 -0
- djangocms_custom_content-0.5.0/tests/test_models.py +346 -0
- djangocms_custom_content-0.5.0/tests/test_relation_admin.py +128 -0
- djangocms_custom_content-0.5.0/tests/test_relation_forms.py +74 -0
- djangocms_custom_content-0.5.0/tests/test_relations.py +263 -0
- djangocms_custom_content-0.5.0/tests/test_services.py +62 -0
- djangocms_custom_content-0.5.0/tests/test_settings.py +94 -0
- djangocms_custom_content-0.5.0/tests/test_toolbar.py +434 -0
- djangocms_custom_content-0.5.0/tests/test_views.py +154 -0
- djangocms_custom_content-0.5.0/tests/urls.py +14 -0
- 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,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,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
|