Django_Basic_Manufacturing_3/venv/Lib/site-packages/dbbackup/checks.py
2025-08-22 17:05:22 +07:00

111 lines
3.0 KiB
Python

import re
from datetime import datetime
from django.core.checks import Tags, Warning, register
from dbbackup import settings
W001 = Warning(
"Invalid HOSTNAME parameter",
hint="Set a non empty string to this settings.DBBACKUP_HOSTNAME",
id="dbbackup.W001",
)
W002 = Warning(
"Invalid STORAGE parameter",
hint="Set a valid path to a storage in settings.DBBACKUP_STORAGE",
id="dbbackup.W002",
)
W003 = Warning(
"Invalid FILENAME_TEMPLATE parameter",
hint="Include {datetime} to settings.DBBACKUP_FILENAME_TEMPLATE",
id="dbbackup.W003",
)
W004 = Warning(
"Invalid MEDIA_FILENAME_TEMPLATE parameter",
hint="Include {datetime} to settings.DBBACKUP_MEDIA_FILENAME_TEMPLATE",
id="dbbackup.W004",
)
W005 = Warning(
"Invalid DATE_FORMAT parameter",
hint="settings.DBBACKUP_DATE_FORMAT can contain only [A-Za-z0-9%_-]",
id="dbbackup.W005",
)
W006 = Warning(
"FAILURE_RECIPIENTS has been deprecated",
hint="settings.DBBACKUP_FAILURE_RECIPIENTS is replaced by "
"settings.DBBACKUP_ADMINS",
id="dbbackup.W006",
)
W007 = Warning(
"Invalid FILENAME_TEMPLATE parameter",
hint="settings.DBBACKUP_FILENAME_TEMPLATE must not contain slashes ('/'). "
"Did you mean to change the value for 'location'?",
id="dbbackup.W007",
)
W008 = Warning(
"Invalid MEDIA_FILENAME_TEMPLATE parameter",
hint="settings.DBBACKUP_MEDIA_FILENAME_TEMPLATE must not contain slashes ('/')"
"Did you mean to change the value for 'location'?",
id="dbbackup.W007",
)
def check_filename_templates():
return _check_filename_template(
settings.FILENAME_TEMPLATE,
W007,
"db",
) + _check_filename_template(
settings.MEDIA_FILENAME_TEMPLATE,
W008,
"media",
)
def _check_filename_template(filename_template, check_code, content_type) -> list:
if callable(filename_template):
params = {
"servername": "localhost",
"datetime": datetime.now().strftime(settings.DATE_FORMAT),
"databasename": "default",
"extension": "dump",
"content_type": content_type,
}
filename_template = filename_template(params)
if "/" in filename_template:
return [check_code]
return []
@register(Tags.compatibility)
def check_settings(app_configs, **kwargs):
errors = []
if not settings.HOSTNAME:
errors.append(W001)
if not settings.STORAGE or not isinstance(settings.STORAGE, str):
errors.append(W002)
if (
not callable(settings.FILENAME_TEMPLATE)
and "{datetime}" not in settings.FILENAME_TEMPLATE
):
errors.append(W003)
if (
not callable(settings.MEDIA_FILENAME_TEMPLATE)
and "{datetime}" not in settings.MEDIA_FILENAME_TEMPLATE
):
errors.append(W004)
if re.search(r"[^A-Za-z0-9%_-]", settings.DATE_FORMAT):
errors.append(W005)
if getattr(settings, "FAILURE_RECIPIENTS", None) is not None:
errors.append(W006)
errors += check_filename_templates()
return errors