django-camomilla-cms 5.8.5__py2.py3-none-any.whl → 6.0.0__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- camomilla/__init__.py +8 -2
- camomilla/apps.py +9 -1
- camomilla/context_processors.py +6 -0
- camomilla/contrib/modeltranslation/__init__.py +0 -0
- camomilla/contrib/modeltranslation/hvad_migration.py +126 -0
- camomilla/dynamic_pages_urls.py +33 -0
- camomilla/fields/__init__.py +13 -0
- camomilla/{fields.py → fields/json.py} +15 -18
- camomilla/management/commands/regenerate_thumbnails.py +0 -1
- camomilla/managers/__init__.py +3 -0
- camomilla/managers/pages.py +116 -0
- camomilla/model_api.py +86 -0
- camomilla/models/__init__.py +5 -6
- camomilla/models/article.py +26 -44
- camomilla/models/content.py +8 -15
- camomilla/models/media.py +70 -97
- camomilla/models/menu.py +106 -0
- camomilla/models/mixins/__init__.py +10 -48
- camomilla/models/page.py +521 -20
- camomilla/openapi/__init__.py +0 -0
- camomilla/openapi/schema.py +67 -0
- camomilla/parsers.py +0 -1
- camomilla/redirects.py +10 -0
- camomilla/serializers/__init__.py +2 -0
- camomilla/serializers/article.py +5 -10
- camomilla/serializers/base/__init__.py +21 -17
- camomilla/serializers/content_type.py +17 -0
- camomilla/serializers/fields/__init__.py +6 -20
- camomilla/serializers/fields/file.py +5 -0
- camomilla/serializers/fields/related.py +24 -4
- camomilla/serializers/media.py +6 -8
- camomilla/serializers/menu.py +17 -0
- camomilla/serializers/mixins/__init__.py +23 -187
- camomilla/serializers/mixins/fields.py +20 -0
- camomilla/serializers/mixins/filter_fields.py +57 -0
- camomilla/serializers/mixins/json.py +34 -0
- camomilla/serializers/mixins/language.py +32 -0
- camomilla/serializers/mixins/nesting.py +35 -0
- camomilla/serializers/mixins/optimize.py +91 -0
- camomilla/serializers/mixins/ordering.py +34 -0
- camomilla/serializers/mixins/page.py +58 -0
- camomilla/serializers/mixins/translation.py +103 -0
- camomilla/serializers/page.py +53 -4
- camomilla/serializers/user.py +5 -4
- camomilla/serializers/utils.py +38 -0
- camomilla/serializers/validators.py +51 -0
- camomilla/settings.py +118 -0
- camomilla/sitemap.py +30 -0
- camomilla/storages/__init__.py +4 -0
- camomilla/storages/default.py +12 -0
- camomilla/storages/optimize.py +71 -0
- camomilla/{storages.py → storages/overwrite.py} +2 -2
- camomilla/templates/admin/camomilla/page/change_form.html +10 -0
- camomilla/templates/defaults/articles/default.html +7 -0
- camomilla/templates/defaults/base.html +170 -0
- camomilla/templates/defaults/pages/default.html +3 -0
- camomilla/templates/defaults/parts/langswitch.html +83 -0
- camomilla/templates/defaults/parts/menu.html +15 -0
- camomilla/templates_context/__init__.py +0 -0
- camomilla/templates_context/autodiscover.py +51 -0
- camomilla/templates_context/rendering.py +89 -0
- camomilla/templatetags/camomilla_filters.py +6 -5
- camomilla/templatetags/menus.py +37 -0
- camomilla/templatetags/model_extras.py +77 -0
- camomilla/theme/__init__.py +1 -1
- camomilla/theme/admin/__init__.py +99 -0
- camomilla/theme/admin/pages.py +46 -0
- camomilla/theme/admin/translations.py +13 -0
- camomilla/theme/apps.py +38 -0
- camomilla/theme/static/admin/css/responsive.css +5 -1021
- camomilla/theme/static/admin/img/favicon.ico +0 -0
- camomilla/theme/static/admin/img/logo.svg +31 -0
- camomilla/theme/templates/admin/base.html +7 -0
- camomilla/theme/templates/rosetta/base.html +196 -0
- camomilla/translation.py +61 -0
- camomilla/urls.py +38 -17
- camomilla/utils/__init__.py +4 -0
- camomilla/utils/getters.py +27 -0
- camomilla/utils/normalization.py +7 -0
- camomilla/utils/query_parser.py +167 -0
- camomilla/{utils.py → utils/seo.py} +13 -15
- camomilla/utils/setters.py +37 -0
- camomilla/utils/templates.py +32 -0
- camomilla/utils/translation.py +114 -0
- camomilla/views/__init__.py +1 -1
- camomilla/views/articles.py +5 -7
- camomilla/views/base/__init__.py +35 -5
- camomilla/views/contents.py +6 -11
- camomilla/views/decorators.py +26 -0
- camomilla/views/medias.py +24 -19
- camomilla/views/menus.py +81 -0
- camomilla/views/mixins/__init__.py +17 -73
- camomilla/views/mixins/bulk_actions.py +22 -0
- camomilla/views/mixins/language.py +33 -0
- camomilla/views/mixins/optimize.py +18 -0
- camomilla/views/mixins/ordering.py +2 -2
- camomilla/views/mixins/pagination.py +12 -18
- camomilla/views/mixins/permissions.py +6 -0
- camomilla/views/pages.py +28 -6
- camomilla/views/tags.py +5 -6
- camomilla/views/users.py +7 -12
- django_camomilla_cms-6.0.0.dist-info/METADATA +123 -0
- django_camomilla_cms-6.0.0.dist-info/RECORD +133 -0
- {django_camomilla_cms-5.8.5.dist-info → django_camomilla_cms-6.0.0.dist-info}/WHEEL +1 -1
- tests/fixtures/__init__.py +14 -0
- tests/test_api.py +22 -39
- tests/test_camomilla_filters.py +11 -13
- tests/test_media.py +152 -0
- tests/test_menu.py +112 -0
- tests/test_model_api.py +113 -0
- tests/test_model_api_permissions.py +44 -0
- tests/test_model_api_register.py +355 -0
- tests/test_pages.py +351 -0
- tests/test_query_parser.py +58 -0
- tests/test_templates_context.py +149 -0
- tests/test_utils.py +64 -64
- tests/utils/__init__.py +0 -0
- tests/utils/api.py +28 -0
- tests/utils/media.py +10 -0
- camomilla/admin.py +0 -98
- camomilla/migrations/0001_initial.py +0 -577
- camomilla/migrations/0002_auto_20200214_1127.py +0 -33
- camomilla/migrations/0003_auto_20210130_1610.py +0 -30
- camomilla/migrations/0004_auto_20210511_0937.py +0 -25
- camomilla/migrations/0005_media_image_props.py +0 -19
- camomilla/migrations/0006_auto_20220103_1845.py +0 -35
- camomilla/migrations/0007_auto_20220211_1622.py +0 -18
- camomilla/migrations/0008_auto_20220309_1616.py +0 -60
- camomilla/migrations/0009_article__hvad_query_category__hvad_query_and_more.py +0 -165
- camomilla/migrations/0010_auto_20220802_1406.py +0 -83
- camomilla/migrations/0011_auto_20220902_1000.py +0 -15
- camomilla/models/category.py +0 -25
- camomilla/models/tag.py +0 -19
- camomilla/theme/static/admin/img/logo.png +0 -0
- camomilla/theme/templates/admin/base_site.html +0 -18
- camomilla/views/categories.py +0 -13
- django_camomilla_cms-5.8.5.dist-info/METADATA +0 -62
- django_camomilla_cms-5.8.5.dist-info/RECORD +0 -76
- tests/urls.py +0 -21
- /camomilla/{migrations → contrib}/__init__.py +0 -0
- /camomilla/templates/{camomilla → defaults}/widgets/media_select_multiple.html +0 -0
- {django_camomilla_cms-5.8.5.dist-info → django_camomilla_cms-6.0.0.dist-info/licenses}/LICENSE +0 -0
- {django_camomilla_cms-5.8.5.dist-info → django_camomilla_cms-6.0.0.dist-info}/top_level.txt +0 -0
@@ -1,35 +0,0 @@
|
|
1
|
-
# Generated by Django 2.2.25 on 2022-01-03 18:45
|
2
|
-
|
3
|
-
from django.db import migrations, models
|
4
|
-
from ..models import Media
|
5
|
-
|
6
|
-
|
7
|
-
def forwards_func(apps, schema_editor):
|
8
|
-
db_alias = schema_editor.connection.alias
|
9
|
-
defer = ["_hvad_query_id"] if hasattr(Media, "_hvad_query_id") else []
|
10
|
-
for m in Media.objects.using(db_alias).defer(*defer).all():
|
11
|
-
m.save()
|
12
|
-
|
13
|
-
|
14
|
-
def reverse_func(apps, schema_editor):
|
15
|
-
pass
|
16
|
-
|
17
|
-
|
18
|
-
class Migration(migrations.Migration):
|
19
|
-
|
20
|
-
dependencies = [
|
21
|
-
("camomilla", "0005_media_image_props"),
|
22
|
-
]
|
23
|
-
|
24
|
-
operations = [
|
25
|
-
migrations.RemoveField(
|
26
|
-
model_name="media",
|
27
|
-
name="is_image",
|
28
|
-
),
|
29
|
-
migrations.AddField(
|
30
|
-
model_name="media",
|
31
|
-
name="mime_type",
|
32
|
-
field=models.CharField(blank=True, max_length=128, null=True),
|
33
|
-
),
|
34
|
-
migrations.RunPython(forwards_func, reverse_func),
|
35
|
-
]
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# Generated by Django 2.2.25 on 2022-02-11 16:22
|
2
|
-
|
3
|
-
from django.db import migrations, models
|
4
|
-
|
5
|
-
|
6
|
-
class Migration(migrations.Migration):
|
7
|
-
|
8
|
-
dependencies = [
|
9
|
-
("camomilla", "0006_auto_20220103_1845"),
|
10
|
-
]
|
11
|
-
|
12
|
-
operations = [
|
13
|
-
migrations.AlterField(
|
14
|
-
model_name="articletranslation",
|
15
|
-
name="permalink",
|
16
|
-
field=models.SlugField(max_length=200),
|
17
|
-
),
|
18
|
-
]
|
@@ -1,60 +0,0 @@
|
|
1
|
-
# Generated by Django 2.2.27 on 2022-03-09 16:16
|
2
|
-
|
3
|
-
import camomilla.fields
|
4
|
-
from django.db import migrations, models
|
5
|
-
|
6
|
-
|
7
|
-
class Migration(migrations.Migration):
|
8
|
-
|
9
|
-
dependencies = [
|
10
|
-
("camomilla", "0007_auto_20220211_1622"),
|
11
|
-
]
|
12
|
-
|
13
|
-
operations = [
|
14
|
-
migrations.AlterModelOptions(
|
15
|
-
name="article",
|
16
|
-
options={"ordering": ["ordering"]},
|
17
|
-
),
|
18
|
-
migrations.AlterModelOptions(
|
19
|
-
name="category",
|
20
|
-
options={"ordering": ["ordering"], "verbose_name_plural": "categories"},
|
21
|
-
),
|
22
|
-
migrations.AlterModelOptions(
|
23
|
-
name="page",
|
24
|
-
options={
|
25
|
-
"ordering": ["ordering"],
|
26
|
-
"verbose_name": "Page",
|
27
|
-
"verbose_name_plural": "Pages",
|
28
|
-
},
|
29
|
-
),
|
30
|
-
migrations.AddField(
|
31
|
-
model_name="article",
|
32
|
-
name="meta",
|
33
|
-
field=camomilla.fields.JSONField(default=dict),
|
34
|
-
),
|
35
|
-
migrations.AddField(
|
36
|
-
model_name="article",
|
37
|
-
name="ordering",
|
38
|
-
field=models.PositiveIntegerField(default=0),
|
39
|
-
),
|
40
|
-
migrations.AddField(
|
41
|
-
model_name="category",
|
42
|
-
name="meta",
|
43
|
-
field=camomilla.fields.JSONField(default=dict),
|
44
|
-
),
|
45
|
-
migrations.AddField(
|
46
|
-
model_name="category",
|
47
|
-
name="ordering",
|
48
|
-
field=models.PositiveIntegerField(default=0),
|
49
|
-
),
|
50
|
-
migrations.AddField(
|
51
|
-
model_name="page",
|
52
|
-
name="meta",
|
53
|
-
field=camomilla.fields.JSONField(default=dict),
|
54
|
-
),
|
55
|
-
migrations.AddField(
|
56
|
-
model_name="page",
|
57
|
-
name="ordering",
|
58
|
-
field=models.PositiveIntegerField(default=0),
|
59
|
-
),
|
60
|
-
]
|
@@ -1,165 +0,0 @@
|
|
1
|
-
# Generated by Django 4.0.4 on 2022-05-19 17:19
|
2
|
-
|
3
|
-
from django.db import migrations, models
|
4
|
-
import django.db.models.deletion
|
5
|
-
import hvad.fields
|
6
|
-
|
7
|
-
|
8
|
-
class Migration(migrations.Migration):
|
9
|
-
|
10
|
-
dependencies = [
|
11
|
-
('camomilla', '0008_auto_20220309_1616'),
|
12
|
-
]
|
13
|
-
|
14
|
-
operations = [
|
15
|
-
migrations.AddField(
|
16
|
-
model_name='article',
|
17
|
-
name='_hvad_query',
|
18
|
-
field=hvad.fields.SingleTranslationObject('camomilla.Article', 'camomilla.articletranslation'),
|
19
|
-
),
|
20
|
-
migrations.AddField(
|
21
|
-
model_name='category',
|
22
|
-
name='_hvad_query',
|
23
|
-
field=hvad.fields.SingleTranslationObject('camomilla.Category', 'camomilla.categorytranslation'),
|
24
|
-
),
|
25
|
-
migrations.AddField(
|
26
|
-
model_name='content',
|
27
|
-
name='_hvad_query',
|
28
|
-
field=hvad.fields.SingleTranslationObject('camomilla.Content', 'camomilla.contenttranslation'),
|
29
|
-
),
|
30
|
-
migrations.AddField(
|
31
|
-
model_name='media',
|
32
|
-
name='_hvad_query',
|
33
|
-
field=hvad.fields.SingleTranslationObject('camomilla.Media', 'camomilla.mediatranslation'),
|
34
|
-
),
|
35
|
-
migrations.AddField(
|
36
|
-
model_name='mediafolder',
|
37
|
-
name='_hvad_query',
|
38
|
-
field=hvad.fields.SingleTranslationObject('camomilla.MediaFolder', 'camomilla.mediafoldertranslation'),
|
39
|
-
),
|
40
|
-
migrations.AddField(
|
41
|
-
model_name='page',
|
42
|
-
name='_hvad_query',
|
43
|
-
field=hvad.fields.SingleTranslationObject('camomilla.Page', 'camomilla.pagetranslation'),
|
44
|
-
),
|
45
|
-
migrations.AddField(
|
46
|
-
model_name='tag',
|
47
|
-
name='_hvad_query',
|
48
|
-
field=hvad.fields.SingleTranslationObject('camomilla.Tag', 'camomilla.tagtranslation'),
|
49
|
-
),
|
50
|
-
migrations.AlterField(
|
51
|
-
model_name='article',
|
52
|
-
name='id',
|
53
|
-
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
54
|
-
),
|
55
|
-
migrations.AlterField(
|
56
|
-
model_name='article',
|
57
|
-
name='og_image',
|
58
|
-
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(app_label)s_%(class)s_related', to='camomilla.media'),
|
59
|
-
),
|
60
|
-
migrations.AlterField(
|
61
|
-
model_name='articletranslation',
|
62
|
-
name='id',
|
63
|
-
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
64
|
-
),
|
65
|
-
migrations.AlterField(
|
66
|
-
model_name='articletranslation',
|
67
|
-
name='master',
|
68
|
-
field=hvad.fields.MasterKey(editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='camomilla.article'),
|
69
|
-
),
|
70
|
-
migrations.AlterField(
|
71
|
-
model_name='category',
|
72
|
-
name='id',
|
73
|
-
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
74
|
-
),
|
75
|
-
migrations.AlterField(
|
76
|
-
model_name='categorytranslation',
|
77
|
-
name='id',
|
78
|
-
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
79
|
-
),
|
80
|
-
migrations.AlterField(
|
81
|
-
model_name='categorytranslation',
|
82
|
-
name='master',
|
83
|
-
field=hvad.fields.MasterKey(editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='camomilla.category'),
|
84
|
-
),
|
85
|
-
migrations.AlterField(
|
86
|
-
model_name='content',
|
87
|
-
name='id',
|
88
|
-
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
89
|
-
),
|
90
|
-
migrations.AlterField(
|
91
|
-
model_name='contenttranslation',
|
92
|
-
name='id',
|
93
|
-
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
94
|
-
),
|
95
|
-
migrations.AlterField(
|
96
|
-
model_name='contenttranslation',
|
97
|
-
name='master',
|
98
|
-
field=hvad.fields.MasterKey(editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='camomilla.content'),
|
99
|
-
),
|
100
|
-
migrations.AlterField(
|
101
|
-
model_name='media',
|
102
|
-
name='id',
|
103
|
-
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
104
|
-
),
|
105
|
-
migrations.AlterField(
|
106
|
-
model_name='mediafolder',
|
107
|
-
name='id',
|
108
|
-
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
109
|
-
),
|
110
|
-
migrations.AlterField(
|
111
|
-
model_name='mediafoldertranslation',
|
112
|
-
name='id',
|
113
|
-
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
114
|
-
),
|
115
|
-
migrations.AlterField(
|
116
|
-
model_name='mediafoldertranslation',
|
117
|
-
name='master',
|
118
|
-
field=hvad.fields.MasterKey(editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='camomilla.mediafolder'),
|
119
|
-
),
|
120
|
-
migrations.AlterField(
|
121
|
-
model_name='mediatranslation',
|
122
|
-
name='id',
|
123
|
-
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
124
|
-
),
|
125
|
-
migrations.AlterField(
|
126
|
-
model_name='mediatranslation',
|
127
|
-
name='master',
|
128
|
-
field=hvad.fields.MasterKey(editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='camomilla.media'),
|
129
|
-
),
|
130
|
-
migrations.AlterField(
|
131
|
-
model_name='page',
|
132
|
-
name='id',
|
133
|
-
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
134
|
-
),
|
135
|
-
migrations.AlterField(
|
136
|
-
model_name='page',
|
137
|
-
name='og_image',
|
138
|
-
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(app_label)s_%(class)s_related', to='camomilla.media'),
|
139
|
-
),
|
140
|
-
migrations.AlterField(
|
141
|
-
model_name='pagetranslation',
|
142
|
-
name='id',
|
143
|
-
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
144
|
-
),
|
145
|
-
migrations.AlterField(
|
146
|
-
model_name='pagetranslation',
|
147
|
-
name='master',
|
148
|
-
field=hvad.fields.MasterKey(editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='camomilla.page'),
|
149
|
-
),
|
150
|
-
migrations.AlterField(
|
151
|
-
model_name='tag',
|
152
|
-
name='id',
|
153
|
-
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
154
|
-
),
|
155
|
-
migrations.AlterField(
|
156
|
-
model_name='tagtranslation',
|
157
|
-
name='id',
|
158
|
-
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
159
|
-
),
|
160
|
-
migrations.AlterField(
|
161
|
-
model_name='tagtranslation',
|
162
|
-
name='master',
|
163
|
-
field=hvad.fields.MasterKey(editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='camomilla.tag'),
|
164
|
-
),
|
165
|
-
]
|
@@ -1,83 +0,0 @@
|
|
1
|
-
# Generated by Django 3.0 on 2022-08-02 14:06
|
2
|
-
|
3
|
-
from django.db import migrations, models
|
4
|
-
|
5
|
-
|
6
|
-
class Migration(migrations.Migration):
|
7
|
-
|
8
|
-
dependencies = [
|
9
|
-
('camomilla', '0009_article__hvad_query_category__hvad_query_and_more'),
|
10
|
-
]
|
11
|
-
|
12
|
-
operations = [
|
13
|
-
migrations.AlterField(
|
14
|
-
model_name='article',
|
15
|
-
name='id',
|
16
|
-
field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
17
|
-
),
|
18
|
-
migrations.AlterField(
|
19
|
-
model_name='articletranslation',
|
20
|
-
name='id',
|
21
|
-
field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
22
|
-
),
|
23
|
-
migrations.AlterField(
|
24
|
-
model_name='category',
|
25
|
-
name='id',
|
26
|
-
field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
27
|
-
),
|
28
|
-
migrations.AlterField(
|
29
|
-
model_name='categorytranslation',
|
30
|
-
name='id',
|
31
|
-
field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
32
|
-
),
|
33
|
-
migrations.AlterField(
|
34
|
-
model_name='content',
|
35
|
-
name='id',
|
36
|
-
field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
37
|
-
),
|
38
|
-
migrations.AlterField(
|
39
|
-
model_name='contenttranslation',
|
40
|
-
name='id',
|
41
|
-
field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
42
|
-
),
|
43
|
-
migrations.AlterField(
|
44
|
-
model_name='media',
|
45
|
-
name='id',
|
46
|
-
field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
47
|
-
),
|
48
|
-
migrations.AlterField(
|
49
|
-
model_name='mediafolder',
|
50
|
-
name='id',
|
51
|
-
field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
52
|
-
),
|
53
|
-
migrations.AlterField(
|
54
|
-
model_name='mediafoldertranslation',
|
55
|
-
name='id',
|
56
|
-
field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
57
|
-
),
|
58
|
-
migrations.AlterField(
|
59
|
-
model_name='mediatranslation',
|
60
|
-
name='id',
|
61
|
-
field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
62
|
-
),
|
63
|
-
migrations.AlterField(
|
64
|
-
model_name='page',
|
65
|
-
name='id',
|
66
|
-
field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
67
|
-
),
|
68
|
-
migrations.AlterField(
|
69
|
-
model_name='pagetranslation',
|
70
|
-
name='id',
|
71
|
-
field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
72
|
-
),
|
73
|
-
migrations.AlterField(
|
74
|
-
model_name='tag',
|
75
|
-
name='id',
|
76
|
-
field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
77
|
-
),
|
78
|
-
migrations.AlterField(
|
79
|
-
model_name='tagtranslation',
|
80
|
-
name='id',
|
81
|
-
field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
82
|
-
),
|
83
|
-
]
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# Generated by Django 3.0 on 2022-09-02 10:00
|
2
|
-
|
3
|
-
from django.db import migrations
|
4
|
-
from django.contrib.postgres.operations import TrigramExtension
|
5
|
-
|
6
|
-
|
7
|
-
class Migration(migrations.Migration):
|
8
|
-
|
9
|
-
dependencies = [
|
10
|
-
('camomilla', '0010_auto_20220802_1406'),
|
11
|
-
]
|
12
|
-
|
13
|
-
operations = [
|
14
|
-
TrigramExtension()
|
15
|
-
]
|
camomilla/models/category.py
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
from django.db import models
|
2
|
-
from hvad.models import TranslatableModel, TranslatedFields
|
3
|
-
from .mixins import MetaMixin
|
4
|
-
|
5
|
-
|
6
|
-
class BaseCategory(TranslatableModel, MetaMixin):
|
7
|
-
translations = TranslatedFields(
|
8
|
-
title=models.CharField(max_length=200),
|
9
|
-
description=models.TextField(blank=True, null=True, default=""),
|
10
|
-
slug=models.SlugField(),
|
11
|
-
)
|
12
|
-
ordering = models.PositiveIntegerField(default=0, blank=False, null=False)
|
13
|
-
|
14
|
-
class Meta:
|
15
|
-
abstract = True
|
16
|
-
unique_together = [("title", "language_code")]
|
17
|
-
verbose_name_plural = "categories"
|
18
|
-
ordering = ["ordering"]
|
19
|
-
|
20
|
-
def __str__(self):
|
21
|
-
return self.title
|
22
|
-
|
23
|
-
|
24
|
-
class Category(BaseCategory):
|
25
|
-
translations = TranslatedFields()
|
camomilla/models/tag.py
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
from django.db import models
|
2
|
-
from hvad.models import TranslatableModel, TranslatedFields
|
3
|
-
|
4
|
-
|
5
|
-
class BaseTag(TranslatableModel):
|
6
|
-
translations = TranslatedFields(
|
7
|
-
title=models.CharField(max_length=200),
|
8
|
-
)
|
9
|
-
|
10
|
-
class Meta:
|
11
|
-
abstract = True
|
12
|
-
unique_together = [("title", "language_code")]
|
13
|
-
|
14
|
-
def __str__(self):
|
15
|
-
return self.title
|
16
|
-
|
17
|
-
|
18
|
-
class Tag(BaseTag):
|
19
|
-
translations = TranslatedFields()
|
Binary file
|
@@ -1,18 +0,0 @@
|
|
1
|
-
{% extends "admin/base.html" %}
|
2
|
-
{% load static %}
|
3
|
-
|
4
|
-
{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
|
5
|
-
|
6
|
-
{% block branding %}
|
7
|
-
<img src='{% static "admin/img/logo.png" %}' class='logo'/>
|
8
|
-
{% endblock %}
|
9
|
-
|
10
|
-
{% block nav-global %}{% endblock %}
|
11
|
-
|
12
|
-
{% block bodyclass %}flat-theme{% endblock %}
|
13
|
-
|
14
|
-
{% block blockbots %}
|
15
|
-
{{ block.super }}
|
16
|
-
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0">
|
17
|
-
<link rel="stylesheet" type="text/css" href="{% static "admin/css/responsive.css" %}" />
|
18
|
-
{% endblock %}
|
camomilla/views/categories.py
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
from .base import BaseModelViewset
|
2
|
-
from .mixins import GetUserLanguageMixin, BulkDeleteMixin
|
3
|
-
from ..models import Category
|
4
|
-
from ..serializers import CategorySerializer
|
5
|
-
from ..permissions import CamomillaBasePermissions
|
6
|
-
|
7
|
-
|
8
|
-
class CategoryViewSet(GetUserLanguageMixin, BulkDeleteMixin, BaseModelViewset):
|
9
|
-
|
10
|
-
queryset = Category.objects.all()
|
11
|
-
serializer_class = CategorySerializer
|
12
|
-
permission_classes = (CamomillaBasePermissions,)
|
13
|
-
model = Category
|
@@ -1,62 +0,0 @@
|
|
1
|
-
Metadata-Version: 2.1
|
2
|
-
Name: django-camomilla-cms
|
3
|
-
Version: 5.8.5
|
4
|
-
Summary: Django powered cms
|
5
|
-
Home-page: https://github.com/lotrekagency/camomilla
|
6
|
-
Author: Lotrèk
|
7
|
-
Author-email: dimmitutto@lotrek.it
|
8
|
-
License: MIT
|
9
|
-
Keywords: cms,django,api cms
|
10
|
-
Classifier: Environment :: Web Environment
|
11
|
-
Classifier: Framework :: Django
|
12
|
-
Classifier: Intended Audience :: Developers
|
13
|
-
Classifier: Programming Language :: Python
|
14
|
-
Classifier: Programming Language :: Python :: 3
|
15
|
-
Requires-Python: >=3.0.*
|
16
|
-
Description-Content-Type: text/markdown
|
17
|
-
License-File: LICENSE
|
18
|
-
Requires-Dist: lotrek-django-hvad (>=2.0.6)
|
19
|
-
Requires-Dist: djsuperadmin (<1.0.0,>=0.9)
|
20
|
-
Requires-Dist: djangorestframework (>=3.10.0<4.0.0)
|
21
|
-
Requires-Dist: djlotrek (<1.0.0,>=0.1.6)
|
22
|
-
Requires-Dist: Pillow (<7.0.0,>=6.2.0)
|
23
|
-
Requires-Dist: django-ckeditor (<7.0.0,>=5.7.1)
|
24
|
-
Requires-Dist: python-magic (>=0.4<0.5)
|
25
|
-
Requires-Dist: Django (>=1.8)
|
26
|
-
|
27
|
-
# camomilla cms [](https://pypi.org/project/django-camomilla-cms)   [](./LICENSE)
|
28
|
-
|
29
|
-
## Install
|
30
|
-
|
31
|
-
$ pip install -r requirements.txt
|
32
|
-
|
33
|
-
## Settings
|
34
|
-
|
35
|
-
Camomilla brings a lot of default settings you can include in your project's ones
|
36
|
-
|
37
|
-
from camomilla.defaults import *
|
38
|
-
|
39
|
-
Remember to add all the required applications in your project
|
40
|
-
|
41
|
-
INSTALLED_APPS = [
|
42
|
-
...
|
43
|
-
'rest_framework',
|
44
|
-
'rest_framework.authtoken',
|
45
|
-
'camomilla',
|
46
|
-
'hvad',
|
47
|
-
...
|
48
|
-
]
|
49
|
-
|
50
|
-
## Run the server
|
51
|
-
|
52
|
-
$ python manage.py runserver
|
53
|
-
|
54
|
-
## Run tests
|
55
|
-
|
56
|
-
pip install -r requirements-dev.txt
|
57
|
-
make test
|
58
|
-
|
59
|
-
## Don't fear the hvader
|
60
|
-
|
61
|
-
Feel free to make your models untranslatable, [we have a nice solution for them](https://github.com/lotrekagency/hvad-migration)
|
62
|
-
|
@@ -1,76 +0,0 @@
|
|
1
|
-
camomilla/__init__.py,sha256=0NYzahh6KmOiEj41rlWNNB1DI2yBOLOoAfInzqbRQDg,111
|
2
|
-
camomilla/admin.py,sha256=FFsyN07_8HnQgF6LBnKjlZtQRqlz_Zg_re9U0RsfqCk,2362
|
3
|
-
camomilla/apps.py,sha256=THcQ_2X0cvwec4xxn7DVow42s3P_G3VVL6zGmt6kbQs,188
|
4
|
-
camomilla/authentication.py,sha256=jz6tQT4PPEu-_JLox1LZrOy7EiWBb9MWaObK63MJGus,855
|
5
|
-
camomilla/defaults.py,sha256=VNQ_sbxu09AyFGNpUUYypIAyhlBhEORD36BBNj7e73I,1220
|
6
|
-
camomilla/exceptions.py,sha256=gLniAsK_pmsNNKGMv5Z384LXVbM8oeHcOwz4F91u1LY,111
|
7
|
-
camomilla/fields.py,sha256=QWZd_ZGEme2nGXrRkfB0I6RAlf0z026K9ubWqmzNCMY,2051
|
8
|
-
camomilla/parsers.py,sha256=H6AicoSYeldGYgJcak0JKnjso07lOC9F4vHaMrxhQ3U,1976
|
9
|
-
camomilla/permissions.py,sha256=9NlBO4JMmg36vXCUjPNyq6uZxhkdrnXyIbJVLtWhGWE,1813
|
10
|
-
camomilla/storages.py,sha256=lpUdt26cj_B2qC8iOhx2An01MBqjxDayjIFVgYrNaEg,341
|
11
|
-
camomilla/urls.py,sha256=8DKwGqhcuDwUxJ-5Uzl7-ZHqlZ1dYd7crqpmBUdYuxo,1562
|
12
|
-
camomilla/utils.py,sha256=3RpMV-Z7uhI17iFOOHYq0q7S1FVFjTEoz8dhRyD41Lk,3434
|
13
|
-
camomilla/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
14
|
-
camomilla/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
15
|
-
camomilla/management/commands/regenerate_thumbnails.py,sha256=M_Lqk5yxoG0TwVmcKWqCFPFJPcdnL4OgqLXui-UFdm8,497
|
16
|
-
camomilla/migrations/0001_initial.py,sha256=LI0L35ZF5r1sQHNMSQJtX1k4h_1TJmvRnAEf4xnN7hw,21066
|
17
|
-
camomilla/migrations/0002_auto_20200214_1127.py,sha256=cWq9cJpfTbe8-jEp4kn6_JDmxH37u9LOaHQq79hnEiM,899
|
18
|
-
camomilla/migrations/0003_auto_20210130_1610.py,sha256=0T2Ai7rhRUlvI8SqfSPs4qy2LGc0TvqTGlMZ6Ryg3VQ,795
|
19
|
-
camomilla/migrations/0004_auto_20210511_0937.py,sha256=Lc5qVPSg5pFhDvUdZdNs2hP5OueVIh6s0s3U-gFI6ig,616
|
20
|
-
camomilla/migrations/0005_media_image_props.py,sha256=g6jciEVT-WCVJlNOExNA1YclhITL_WTFavTwuLl03A4,418
|
21
|
-
camomilla/migrations/0006_auto_20220103_1845.py,sha256=ytlV56nQbn-stAvYGje12Ki9lh1n0fEnemmGdBe5Wxw,896
|
22
|
-
camomilla/migrations/0007_auto_20220211_1622.py,sha256=iv0PtLw1X9dDxRPvCpXkmwZpKlb4fQQdojFEoJmgiKM,405
|
23
|
-
camomilla/migrations/0008_auto_20220309_1616.py,sha256=bu2YmUtnEzaj11Jz_zGDfymTqBiCo7Rye3D4Am5E-S4,1745
|
24
|
-
camomilla/migrations/0009_article__hvad_query_category__hvad_query_and_more.py,sha256=j-PFeJ_Pwqox4m--0mxxqKai6e_o3xi0IxNweJfqKsU,7230
|
25
|
-
camomilla/migrations/0010_auto_20220802_1406.py,sha256=b19pjry1u0gYe2MfOoneQqNs37oVvx-JH7_6vQmJ5fE,3245
|
26
|
-
camomilla/migrations/0011_auto_20220902_1000.py,sha256=7_B_XkMxtxsnzWhZ9_SF9VEAyaKSkmv4yOz9z-vN_C0,316
|
27
|
-
camomilla/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
28
|
-
camomilla/models/__init__.py,sha256=-oT_NcH4YreW_YnUqcr_2Qljci0xlwbAYowTMaU4QZg,130
|
29
|
-
camomilla/models/article.py,sha256=MVAoY9b_XL6zb_d2o_sIvnjL-q4F6PAE9W_mGq-Tozc,1765
|
30
|
-
camomilla/models/category.py,sha256=Ghz0I9JMOc4tNtefdJGFsZaa5XI6_MOjnryLsgZzbgg,738
|
31
|
-
camomilla/models/content.py,sha256=gg2aehIrQKU2d-uW-N9H5Ln4Jkx0YFXKlh-Oo7l1f-M,1229
|
32
|
-
camomilla/models/media.py,sha256=JPB4R5Pc7M2PdsJz_2kXbj8C9jwH9RfuTviXjjK4NRo,7378
|
33
|
-
camomilla/models/page.py,sha256=YgsF-Zm2cZeUHfbfqlbIPANmSonFmSDwwvgLNGXr4RQ,865
|
34
|
-
camomilla/models/tag.py,sha256=jqLRuxifFq6CRTB_59NgC7xrxWVNhkyQKsn5aqk7Tlo,422
|
35
|
-
camomilla/models/mixins/__init__.py,sha256=tb6ATJWE-X7e5uXuTy2o3eTGsvI1qcmOX-ne-GfF-kc,2273
|
36
|
-
camomilla/serializers/__init__.py,sha256=wQH2XF9NUytkt7C66UUdxMHZhrPt-y13mWwynJi2SVI,128
|
37
|
-
camomilla/serializers/article.py,sha256=i_vcDXdBAv3ocMUm1hlKSwV3c7J6jQ-ROQBJn0uS8NA,469
|
38
|
-
camomilla/serializers/media.py,sha256=Gkrseiial_dGyfMXTeVi-Y9L2G00NhJHtQLF3xLPIII,2041
|
39
|
-
camomilla/serializers/page.py,sha256=9b2AqrJuUvgi21QpnkkUfhCOBXqhdP6dEklhrC0JFu0,333
|
40
|
-
camomilla/serializers/user.py,sha256=nUwMjsiJfVEk9b-HecMdykMJYa8wyRzPrJRBKNQgkUs,3608
|
41
|
-
camomilla/serializers/base/__init__.py,sha256=thkie650KhkkRflGAT4GZW-auC8b-dhEIpwRYh0DDXc,749
|
42
|
-
camomilla/serializers/fields/__init__.py,sha256=Ufbs26qu3q0l8j1e3lY8tkqEC8rUemb2reetUW1t9qo,703
|
43
|
-
camomilla/serializers/fields/file.py,sha256=QRSPhEAB_snT0IyjtKZQk8bKKHmT9hMNB9udzbc_nVw,648
|
44
|
-
camomilla/serializers/fields/related.py,sha256=Y2SnGWGDAUr3H-Ku7_YQYzbEIXUlsFqw69NCGVEpxSU,4402
|
45
|
-
camomilla/serializers/mixins/__init__.py,sha256=1ac5qYcyCXX82t7d_oK93LybHSPJm1GpWqP7AkHBwl4,6905
|
46
|
-
camomilla/templates/camomilla/widgets/media_select_multiple.html,sha256=k2XYou8KkPuFLnPMkPJAFJ-zGJj2Xvu6R3ZmiKa3g7Q,3727
|
47
|
-
camomilla/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
48
|
-
camomilla/templatetags/camomilla_filters.py,sha256=dvEs_d7Rx0szRxNVe_r_0x5Q6A95YaZjB892-D-p1JI,736
|
49
|
-
camomilla/theme/__init__.py,sha256=4bOCSGC7-D5IZW3ycX5YlHmuGyeOSV-YAZ7jimsLCx0,22
|
50
|
-
camomilla/theme/static/admin/css/responsive.css,sha256=Hm3Q6nW3_nu4zNahF0iSzpu60AaVMvFwYW8R7OUMIy4,16681
|
51
|
-
camomilla/theme/static/admin/img/logo.png,sha256=vvC1YE6QgQ1A8i6hRy6ksj3R2HbwNA4jM8qRLaKKTDo,18821
|
52
|
-
camomilla/theme/templates/admin/base_site.html,sha256=Qlb_J7Erpu7oNSLjjQLWciDUoZLEAE49ASw5g2u4g-I,585
|
53
|
-
camomilla/views/__init__.py,sha256=LWPZT2GTFltm3GhGkTcvUA3LdLnyj_OIAyc1VN_xhrI,183
|
54
|
-
camomilla/views/articles.py,sha256=DKCKQqBnw6CxwU4kLmtJyb6Bpi9bfZ1BzG9EWorOZZ8,519
|
55
|
-
camomilla/views/categories.py,sha256=PMBXhfkVZ7aw7wPVa4PRJhxfgbIp6zrthqH6K9WTipk,456
|
56
|
-
camomilla/views/contents.py,sha256=ay1z_HPI2H57_EtcU1mXPYWR9rwcL3Z6Vj3UFD8oCUw,1377
|
57
|
-
camomilla/views/languages.py,sha256=Rt_X7s3dbDBv4dxsQ9fnav_u0TAzzo8fGKBBx3esDsg,441
|
58
|
-
camomilla/views/medias.py,sha256=EnL5FfFzQmQ1fEw_EpZB-3Pdv_yzPcMdreQMW1hGqPg,2871
|
59
|
-
camomilla/views/pages.py,sha256=cRAOvOadJCOn-A_Zp5c8HdwJp25fxPoYsnA_q0QbwQ0,432
|
60
|
-
camomilla/views/tags.py,sha256=BNQXKMxwEF9ieXwQHV3rqNmf0FpVr-J7qY7dmdhXN_c,426
|
61
|
-
camomilla/views/users.py,sha256=URzge9_MAHQ66O0cBOqpC3AgHrBcSFdxomLvOg5c9jI,3134
|
62
|
-
camomilla/views/base/__init__.py,sha256=S7KGhVzHM7f0j8XD7cbBY5__66zvKYkphRD9cfl0O1E,222
|
63
|
-
camomilla/views/mixins/__init__.py,sha256=XCHJ39XiEeKstbMAXNy6nqt_b_0D6S6bM8Lu2h3xScE,2617
|
64
|
-
camomilla/views/mixins/ordering.py,sha256=cO4wuDA8MmGQDblALnTvWt6K4u6TW2_p0BGdqNUUXKY,4765
|
65
|
-
camomilla/views/mixins/pagination.py,sha256=vUkfhqhTabeDdoiMwjeVpO6gl534EI0JMrr4TlZ8MRA,5956
|
66
|
-
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
67
|
-
tests/test_api.py,sha256=nmjSiiwrc6MUjghKLDSrFcAUPGc4uCPQeb6EW23qsZU,2358
|
68
|
-
tests/test_camomilla_filters.py,sha256=_W9CcwsEyewMBvnNYKk4CVqrkXxRYejle3mjiBS7hqk,1848
|
69
|
-
tests/test_models.py,sha256=WJs8lxWZWn1l7X3a_QFVc8fF5LHTsI8bc3uhQe6-o-Q,684
|
70
|
-
tests/test_utils.py,sha256=0tdEDBaBkyjAXpbqP0SpFcfgO56MV2TWZmk9xpjR7J0,3613
|
71
|
-
tests/urls.py,sha256=yCnalWqGClQOCrrbHtIj175aC1ufE6QfhSqT0aoWyjA,562
|
72
|
-
django_camomilla_cms-5.8.5.dist-info/LICENSE,sha256=kVS7zDrNkav2hLLXbOJwVdonY2ToApTK3khyJagGQoQ,1063
|
73
|
-
django_camomilla_cms-5.8.5.dist-info/METADATA,sha256=vkBdih4R9cGWxTCQPGZF8gSf13RngKbMiMsZ5hs_BIs,2036
|
74
|
-
django_camomilla_cms-5.8.5.dist-info/WHEEL,sha256=bb2Ot9scclHKMOLDEHY6B2sicWOgugjFKaJsT7vwMQo,110
|
75
|
-
django_camomilla_cms-5.8.5.dist-info/top_level.txt,sha256=G9VIGBmMMqC7JEckoTgXKmC6T2BR75QRkqRnngw1_lo,16
|
76
|
-
django_camomilla_cms-5.8.5.dist-info/RECORD,,
|
tests/urls.py
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
from django.urls import include, path
|
2
|
-
from django.conf.urls.i18n import i18n_patterns
|
3
|
-
|
4
|
-
|
5
|
-
def dummy_view(request):
|
6
|
-
from django.http import HttpResponse
|
7
|
-
|
8
|
-
return HttpResponse("Here's the text of the Web page.")
|
9
|
-
|
10
|
-
|
11
|
-
urlpatterns = [
|
12
|
-
path("articles/<slug:title>", dummy_view, name="article-detail"),
|
13
|
-
path("api/camomilla/", include("camomilla.urls")),
|
14
|
-
]
|
15
|
-
|
16
|
-
|
17
|
-
urlpatterns += i18n_patterns(
|
18
|
-
path("about", dummy_view, name="about"),
|
19
|
-
path("international_articles/<slug:title>", dummy_view, name="int-article-detail"),
|
20
|
-
prefix_default_language=False,
|
21
|
-
)
|
File without changes
|
File without changes
|
{django_camomilla_cms-5.8.5.dist-info → django_camomilla_cms-6.0.0.dist-info/licenses}/LICENSE
RENAMED
File without changes
|
File without changes
|