Skip to content

Commit

Permalink
Optimize get_non_default_settings method to not include templates def…
Browse files Browse the repository at this point in the history
…aults settings
  • Loading branch information
TheophileDiot committed Aug 8, 2024
1 parent 1b3cf7e commit 09983cd
Showing 1 changed file with 64 additions and 50 deletions.
114 changes: 64 additions & 50 deletions src/common/db/Database.py
Original file line number Diff line number Diff line change
Expand Up @@ -1730,29 +1730,6 @@ def get_non_default_settings(
if global_value.context == "multisite":
multisite.add(setting_id)

template_used = config.get("USE_TEMPLATE", {"value": ""})["value"]
if template_used:
query = (
session.query(Template_settings)
.with_entities(Template_settings.setting_id, Template_settings.default, Template_settings.suffix)
.filter_by(template_id=template_used)
)

if filtered_settings:
query = query.filter(Template_settings.setting_id.in_(filtered_settings))

for template_setting in query:
key = template_setting.setting_id + (f"_{template_setting.suffix}" if template_setting.suffix > 0 else "")
if key in config and config[key]["method"] != "default":
continue

config[key] = {
"value": template_setting.default,
"global": True,
"method": "default",
"template": template_used,
}

is_multisite = config.get("MULTISITE", {"value": "no"})["value"] == "yes"

services = session.query(Services).with_entities(Services.id, Services.is_draft)
Expand Down Expand Up @@ -1815,31 +1792,6 @@ def get_non_default_settings(
"method": result.method,
"template": None,
}

for service in services:
template_used = config.get(f"{service.id}_USE_TEMPLATE", {"value": ""})["value"]
if template_used and template_used != config.get("USE_TEMPLATE", {"value": ""})["value"]:
query = (
session.query(Template_settings)
.with_entities(Template_settings.setting_id, Template_settings.default, Template_settings.suffix)
.filter_by(template_id=template_used)
)

if filtered_settings:
query = query.filter(Template_settings.setting_id.in_(filtered_settings))

for setting in query:
key = f"{service.id}_{setting.setting_id}" + (f"_{setting.suffix}" if setting.suffix > 0 else "")
if key in config and config[key]["method"] != "default":
continue

config[key] = {
"value": setting.default,
"global": False,
"method": "default",
"template": template_used,
}

else:
servers = " ".join(service.id for service in services)

Expand All @@ -1864,6 +1816,11 @@ def get_config(
filtered_settings: Optional[Union[List[str], Set[str], Tuple[str]]] = None,
) -> Dict[str, Any]:
"""Get the config from the database"""
filtered_settings = set(filtered_settings or [])

if filtered_settings and not global_only:
filtered_settings.update(("SERVER_NAME", "MULTISITE", "USE_TEMPLATE"))

with self._db_session() as session:
config = {}
multisite = set()
Expand All @@ -1887,15 +1844,72 @@ def get_config(
if setting.context == "multisite":
multisite.add(setting.id)

return self.get_non_default_settings(
config = self.get_non_default_settings(
global_only=global_only,
methods=methods,
methods=True,
with_drafts=with_drafts,
filtered_settings=filtered_settings,
original_config=config,
original_multisite=multisite,
)

with self._db_session() as session:
template_used = config.get("USE_TEMPLATE", {"value": ""})["value"]
if template_used:
query = (
session.query(Template_settings)
.with_entities(Template_settings.setting_id, Template_settings.default, Template_settings.suffix)
.filter_by(template_id=template_used)
)

if filtered_settings:
query = query.filter(Template_settings.setting_id.in_(filtered_settings))

for template_setting in query:
key = template_setting.setting_id + (f"_{template_setting.suffix}" if template_setting.suffix > 0 else "")
if key in config and (config[key]["method"] != "default" or key == "SERVER_NAME" and config[key]["value"] != template_setting.default):
continue

config[key] = {
"value": template_setting.default,
"global": True,
"method": "default",
"template": template_used,
}

if not global_only and config["MULTISITE"]["value"] == "yes":
for service_id in config["SERVER_NAME"]["value"].split(" "):
service_template_used = config.get(f"{service_id}_USE_TEMPLATE", {"value": template_used})["value"]
if service_template_used:
query = (
session.query(Template_settings)
.with_entities(Template_settings.setting_id, Template_settings.default, Template_settings.suffix)
.filter_by(template_id=service_template_used)
)

if filtered_settings:
query = query.filter(Template_settings.setting_id.in_(filtered_settings))

for setting in query:
key = f"{service_id}_{setting.setting_id}" + (f"_{setting.suffix}" if setting.suffix > 0 else "")
if key in config and (
config[key]["method"] != "default" or setting.setting_id == "SERVER_NAME" and config[key]["value"] != template_setting.default
):
continue

config[key] = {
"value": setting.default,
"global": False,
"method": "default",
"template": service_template_used,
}

if not methods:
for key, value in config.copy().items():
config[key] = value["value"]

return config

def get_custom_configs(self) -> List[Dict[str, Any]]:
"""Get the custom configs from the database"""
db_config = self.get_non_default_settings(filtered_settings={"USE_TEMPLATE"})
Expand Down

0 comments on commit 09983cd

Please sign in to comment.