Skip to content
Draft
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,14 @@ CHANGELOG
8.14.2+dev (XXXX-XX-XX)
-----------------------

**Improvements**

- Better language and translation management even if language is valid but not supported by django

**Bug fixes**

- In some cases default settings values can't be overridden.


8.14.2 (2025-09-09)
-----------------------
Expand Down
79 changes: 38 additions & 41 deletions mapentity/settings.py
Original file line number Diff line number Diff line change
@@ -1,32 +1,12 @@
from collections import OrderedDict
from copy import deepcopy

from deepmerge import always_merger
from django.conf import settings
from django.contrib.messages import constants as messages

API_SRID = 4326

_DEFAULT_MAP_STYLES = {
"detail": {
"weight": 5,
"opacity": 1,
"color": "yellow",
"arrowColor": "#FF5E00",
"arrowSize": 8,
},
"others": {"opacity": 0.9, "fillOpacity": 0.7, "color": "yellow"},
"filelayer": {
"color": "red",
"opacity": 1.0,
"fillOpacity": 0.9,
"weight": 2,
"radius": 5,
},
"draw": {"color": "#35FF00", "opacity": 0.8, "weight": 3},
"print": {},
}

app_settings = dict(
_default_app_settings = dict(
{
"TITLE": "Mapentity",
"HISTORY_ITEMS_MAX": 5,
Expand Down Expand Up @@ -55,22 +35,36 @@
"SENDFILE_HTTP_HEADER": None,
"DRF_API_URL_PREFIX": r"^api/",
"MAPENTITY_WEASYPRINT": False,
"MAP_STYLES": _DEFAULT_MAP_STYLES,
"MAP_STYLES": {
"detail": {
"weight": 5,
"opacity": 1,
"color": "yellow",
"arrowColor": "#FF5E00",
"arrowSize": 8,
},
"others": {"opacity": 0.9, "fillOpacity": 0.7, "color": "yellow"},
"filelayer": {
"color": "red",
"opacity": 1.0,
"fillOpacity": 0.9,
"weight": 2,
"radius": 5,
},
"draw": {"color": "#35FF00", "opacity": 0.8, "weight": 3},
"print": {},
},
"REGEX_PATH_ATTACHMENTS": r"\.\d+x\d+_q\d+(_crop)?\.(jpg|png|jpeg|bmp|webp)$",
"MAX_CHARACTERS": None,
"MAX_CHARACTERS_BY_FIELD": {},
},
**getattr(settings, "MAPENTITY_CONFIG", {}),
}
)
_project_settings = getattr(settings, "MAPENTITY_CONFIG", {})

# default MAP_STYLES should not be replaced but updated by MAPENTITY_CONFIG
_MAP_STYLES = deepcopy(_DEFAULT_MAP_STYLES)
_MAP_STYLES.update(app_settings["MAP_STYLES"])
app_settings["MAP_STYLES"] = _MAP_STYLES
app_settings = always_merger.merge(_default_app_settings, _project_settings)

CRISPY_TEMPLATE_PACK = "bootstrap4"

TINYMCE_DEFAULT_CONFIG = {
_tinymce_default_config = {
"theme": "silver",
"height": 500,
"menubar": False,
Expand All @@ -96,11 +90,15 @@
),
"setup": "tinyMceInit",
}
TINYMCE_DEFAULT_CONFIG.update(getattr(settings, "TINYMCE_DEFAULT_CONFIG", {}))
_tinymce_project_config = getattr(settings, "TINYMCE_DEFAULT_CONFIG", {})

TINYMCE_DEFAULT_CONFIG = always_merger.merge(
_tinymce_default_config, _tinymce_project_config
)
setattr(settings, "TINYMCE_DEFAULT_CONFIG", TINYMCE_DEFAULT_CONFIG)


REST_FRAMEWORK_DEFAULT_CONFIG = {
_rest_framework_default_config = {
# Use Django's standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
"DEFAULT_PERMISSION_CLASSES": ["mapentity.models.MapEntityRestPermissions"],
Expand All @@ -109,14 +107,11 @@
"mapentity.renderers.GeoJSONRenderer",
],
}
REST_FRAMEWORK_DEFAULT_CONFIG.update(getattr(settings, "REST_FRAMEWORK", {}))
setattr(settings, "REST_FRAMEWORK", REST_FRAMEWORK_DEFAULT_CONFIG)

for name, override in getattr(settings, "MAP_STYLES", {}).items():
# fallback old settings MAP_STYLES
merged = app_settings["MAP_STYLES"].get(name, {})
merged.update(override)
app_settings["MAP_STYLES"][name] = merged
_rest_framework_project_config = getattr(settings, "REST_FRAMEWORK", {})
REST_FRAMEWORK = always_merger.merge(
_rest_framework_default_config, _rest_framework_project_config
)
setattr(settings, "REST_FRAMEWORK", REST_FRAMEWORK)

_LEAFLET_PLUGINS = OrderedDict(
[
Expand Down Expand Up @@ -230,6 +225,8 @@

setattr(settings, "MESSAGE_TAGS", _MESSAGE_TAGS)

CRISPY_TEMPLATE_PACK = "bootstrap4"

# crispy form default config with bootstrap4
_CRISPY_ALLOWED_TEMPLATE_PACKS = getattr(
settings, "CRISPY_ALLOWED_TEMPLATE_PACKS", ("bootstrap4",)
Expand Down
9 changes: 4 additions & 5 deletions mapentity/templates/mapentity/_base_navbar.html
Original file line number Diff line number Diff line change
Expand Up @@ -93,13 +93,12 @@ <h6 class="dropdown-header">
</h6>
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_language_info_list for LANGUAGES as languages %}
<form action="{% url 'set_language' %}" method="post">{% csrf_token %}
<input name="next" type="hidden" value="{{ redirect_to }}">
{% for language in languages %}
<button class="dropdown-item" type="submit" name="language" value="{{ language.code }}"
class="btn btn-light m-0 language-menu-item {% if language.code == LANGUAGE_CODE %}active{% endif %}">
{{ language.name_local|title }} ({{ language.code }})
{% for language in LANGUAGES %}
<button class="dropdown-item" type="submit" name="language" value="{{ language.0 }}" title="{{ language.0 }}"
class="btn btn-light m-0 language-menu-item {% if language.0 == LANGUAGE_CODE %}active{% endif %}">
{{ language.1|title }}
</button>
{% endfor %}
</form>
Expand Down
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
'paperclip',
'requests',
'weasyprint',
'deepmerge',
],
extras_require={
'dev': [
Expand Down
11 changes: 5 additions & 6 deletions test_project/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
import sys
from tempfile import TemporaryDirectory

from django.utils.translation import gettext_lazy as _

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


Expand Down Expand Up @@ -112,8 +114,8 @@
# https://docs.djangoproject.com/en/1.8/topics/i18n/

LANGUAGES = (
("en", "English"),
("fr", "French"),
("en", f"🇬🇧 {_('English')}"),
("fr", f"🇫🇷 {_('French')}"),
)

LANGUAGE_CODE = "en-us"
Expand Down Expand Up @@ -147,10 +149,6 @@
COMPRESS_ENABLED = False
TEST = True

MAPENTITY_CONFIG = {
"SENDFILE_HTTP_HEADER": "X-Accel-Redirect",
}

PAPERCLIP_FILETYPE_MODEL = "test_app.FileType"
PAPERCLIP_LICENSE_MODEL = "test_app.License"
PAPERCLIP_ATTACHMENT_MODEL = "test_app.Attachment"
Expand Down Expand Up @@ -202,6 +200,7 @@
"CONVERSION_SERVER": "http://convertit:6543",
"CAPTURE_SERVER": "http://screamshotter:8000",
"SENDFILE_HTTP_HEADER": "X-Accel-Redirect",
"MAP_STYLES": {"toto": "yes"},
}
LOCALE_PATHS = (os.path.join(BASE_DIR, "test_project", "locale"),)
LOGIN_REDIRECT_URL = "/"
Expand Down
Loading