Features: 1) Add db_table attribute for vibes_auth_user in authv.models; 2) Enhance DB backup configuration to support sftp and ftp storage in settings.
Fixes: 1) Add missing import for `ImproperlyConfigured` in `base.py`. Extra: 1) Refactor and relocate DB backup configuration from `dbbackup.py` to `base.py`.
This commit is contained in:
parent
33362d8340
commit
5e10f2eac7
3 changed files with 62 additions and 48 deletions
|
|
@ -111,6 +111,7 @@ class User(AbstractUser, NiceModel): # type: ignore [django-manager-missing]
|
||||||
return self.email
|
return self.email
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
db_table = "vibes_auth_user"
|
||||||
swappable = "AUTH_USER_MODEL"
|
swappable = "AUTH_USER_MODEL"
|
||||||
verbose_name = _("user")
|
verbose_name = _("user")
|
||||||
verbose_name_plural = _("users")
|
verbose_name_plural = _("users")
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,8 @@ from os import getenv, name
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
|
|
||||||
EVIBES_VERSION = "2025.4"
|
EVIBES_VERSION = "2025.4"
|
||||||
RELEASE_DATE = datetime(2025, 9, 13)
|
RELEASE_DATE = datetime(2025, 9, 13)
|
||||||
|
|
||||||
|
|
@ -407,10 +409,66 @@ STORAGES: dict[str, dict[str, str | int | bool | None]] = {
|
||||||
if DEBUG
|
if DEBUG
|
||||||
else "whitenoise.storage.CompressedManifestStaticFilesStorage"
|
else "whitenoise.storage.CompressedManifestStaticFilesStorage"
|
||||||
},
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
if getenv("DBBACKUP_HOST") and getenv("DBBACKUP_USER") and getenv("DBBACKUP_PASS"):
|
||||||
|
dbbackup_server_type = getenv("DBBACKUP_TYPE", "sftp")
|
||||||
|
project_name = getenv("EVIBES_PROJECT_NAME", "evibes_common").lower().replace(" ", "_")
|
||||||
|
|
||||||
|
raw_path = getenv("DBBACKUP_PATH", f"/backups/{project_name}/")
|
||||||
|
cleaned = raw_path.strip("/")
|
||||||
|
remote_dir = f"{cleaned}/"
|
||||||
|
|
||||||
|
match dbbackup_server_type:
|
||||||
|
case "sftp":
|
||||||
|
STORAGES.update(
|
||||||
|
{
|
||||||
"dbbackup": {
|
"dbbackup": {
|
||||||
"BACKEND": "django.core.files.storage.FileSystemStorage",
|
"BACKEND": "storages.backends.sftpstorage.SFTPStorage",
|
||||||
|
"OPTIONS": {
|
||||||
|
"host": getenv("DBBACKUP_HOST"),
|
||||||
|
"root_path": f"/{remote_dir}",
|
||||||
|
"params": {
|
||||||
|
"username": getenv("DBBACKUP_USER"),
|
||||||
|
"password": getenv("DBBACKUP_PASS"),
|
||||||
|
"allow_agent": False,
|
||||||
|
"look_for_keys": False,
|
||||||
|
},
|
||||||
|
"interactive": False,
|
||||||
|
"file_mode": 0o600,
|
||||||
|
"dir_mode": 0o700,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
case "ftp":
|
||||||
|
STORAGES.update(
|
||||||
|
{
|
||||||
|
"dbbackup": {
|
||||||
|
"BACKEND": "evibes.ftpstorage.AbsoluteFTPStorage",
|
||||||
|
"OPTIONS": {
|
||||||
|
"location": (
|
||||||
|
f"ftp://{getenv('DBBACKUP_USER')}:{getenv('DBBACKUP_PASS')}@{getenv('DBBACKUP_HOST')}:21/{raw_path}"
|
||||||
|
),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
case _:
|
||||||
|
raise ImproperlyConfigured(f"Invalid DBBACKUP_TYPE: {dbbackup_server_type}")
|
||||||
|
else:
|
||||||
|
STORAGES.update(
|
||||||
|
{
|
||||||
|
"dbbackup": {
|
||||||
|
"BACKEND": "django.core.files.storage.FileSystemStorage",
|
||||||
|
"OPTIONS": {
|
||||||
|
"location": "/app/backups/",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
if name == "nt":
|
if name == "nt":
|
||||||
GDAL_LIBRARY_PATH = r"C:\OSGeo4W\bin\gdal311.dll"
|
GDAL_LIBRARY_PATH = r"C:\OSGeo4W\bin\gdal311.dll"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,3 @@
|
||||||
from os import getenv
|
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
|
||||||
|
|
||||||
DBBACKUP_CONNECTORS = {
|
DBBACKUP_CONNECTORS = {
|
||||||
"default": {
|
"default": {
|
||||||
"SINGLE_TRANSACTION": False,
|
"SINGLE_TRANSACTION": False,
|
||||||
|
|
@ -8,45 +5,3 @@ DBBACKUP_CONNECTORS = {
|
||||||
"RESTORE_SUFFIX": "--set ON_ERROR_STOP=off",
|
"RESTORE_SUFFIX": "--set ON_ERROR_STOP=off",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if getenv("DBBACKUP_HOST") and getenv("DBBACKUP_USER") and getenv("DBBACKUP_PASS"):
|
|
||||||
dbbackup_server_type = getenv("DBBACKUP_TYPE", "sftp")
|
|
||||||
project_name = getenv("EVIBES_PROJECT_NAME", "evibes_common").lower().replace(" ", "_")
|
|
||||||
|
|
||||||
raw_path = getenv("DBBACKUP_PATH", f"/backups/{project_name}/")
|
|
||||||
cleaned = raw_path.strip("/")
|
|
||||||
remote_dir = f"{cleaned}/"
|
|
||||||
|
|
||||||
match dbbackup_server_type:
|
|
||||||
case "sftp":
|
|
||||||
DBBACKUP_STORAGE = "storages.backends.sftpstorage.SFTPStorage"
|
|
||||||
DBBACKUP_STORAGE_OPTIONS = {
|
|
||||||
"host": getenv("DBBACKUP_HOST"),
|
|
||||||
"root_path": f"/{remote_dir}",
|
|
||||||
"params": {
|
|
||||||
"username": getenv("DBBACKUP_USER"),
|
|
||||||
"password": getenv("DBBACKUP_PASS"),
|
|
||||||
"allow_agent": False,
|
|
||||||
"look_for_keys": False,
|
|
||||||
},
|
|
||||||
"interactive": False,
|
|
||||||
"file_mode": 0o600,
|
|
||||||
"dir_mode": 0o700,
|
|
||||||
}
|
|
||||||
|
|
||||||
case "ftp":
|
|
||||||
DBBACKUP_STORAGE = "evibes.ftpstorage.AbsoluteFTPStorage"
|
|
||||||
DBBACKUP_STORAGE_OPTIONS = {
|
|
||||||
"location": (
|
|
||||||
f"ftp://{getenv('DBBACKUP_USER')}:{getenv('DBBACKUP_PASS')}@{getenv('DBBACKUP_HOST')}:21/{raw_path}"
|
|
||||||
),
|
|
||||||
}
|
|
||||||
|
|
||||||
case _:
|
|
||||||
raise ImproperlyConfigured(f"Invalid DBBACKUP_TYPE: {dbbackup_server_type}")
|
|
||||||
|
|
||||||
else:
|
|
||||||
DBBACKUP_STORAGE = "django.core.files.storage.FileSystemStorage"
|
|
||||||
DBBACKUP_STORAGE_OPTIONS = {
|
|
||||||
"location": "/app/backups/",
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue