From 443d20c66eb4974707d57f2ec0b68e25a1d332b7 Mon Sep 17 00:00:00 2001 From: Jayanta Pandit <55305804+regdocs@users.noreply.github.com> Date: Fri, 15 May 2026 13:30:00 +0530 Subject: [PATCH 1/2] fix(restore-with-files): Include site config as part of restore --- press/agent.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/press/agent.py b/press/agent.py index a0b05ea2d49..ec2e698a8fb 100644 --- a/press/agent.py +++ b/press/agent.py @@ -175,13 +175,15 @@ def reinstall_site(self, site): def restore_site(self, site: "Site", skip_failing_patches=False): site.check_space_on_server_for_restore() apps = [app.app for app in site.apps] - public_link, private_link, database_link = None, None, None + public_link, private_link, database_link, config_link = None, None, None, None if site.remote_database_file: database_link = frappe.get_doc("Remote File", site.remote_database_file).download_link if site.remote_public_file: public_link = frappe.get_doc("Remote File", site.remote_public_file).download_link if site.remote_private_file: private_link = frappe.get_doc("Remote File", site.remote_private_file).download_link + if site.remote_config_file: + config_link = frappe.get("Remote File", site.remote_config_file).download_link data = { "apps": apps, @@ -190,6 +192,7 @@ def restore_site(self, site: "Site", skip_failing_patches=False): "database": database_link, "public": public_link, "private": private_link, + "config": config_link, "skip_failing_patches": skip_failing_patches, "managed_database_config": self._get_managed_db_config(site), } From f8f30d15eda877c7f5241018ef74c611d02261c1 Mon Sep 17 00:00:00 2001 From: Jayanta Pandit <55305804+regdocs@users.noreply.github.com> Date: Fri, 15 May 2026 13:58:36 +0530 Subject: [PATCH 2/2] fix(restore-with-files): Sanitize site config and add directly to payload --- press/agent.py | 10 +++++++--- press/press/doctype/site/site.py | 3 +++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/press/agent.py b/press/agent.py index ec2e698a8fb..a971b81b27d 100644 --- a/press/agent.py +++ b/press/agent.py @@ -173,9 +173,11 @@ def reinstall_site(self, site): ) def restore_site(self, site: "Site", skip_failing_patches=False): + from press.utils import sanitize_config + site.check_space_on_server_for_restore() apps = [app.app for app in site.apps] - public_link, private_link, database_link, config_link = None, None, None, None + public_link, private_link, database_link, sanitized_config_content = None, None, None, None if site.remote_database_file: database_link = frappe.get_doc("Remote File", site.remote_database_file).download_link if site.remote_public_file: @@ -183,7 +185,9 @@ def restore_site(self, site: "Site", skip_failing_patches=False): if site.remote_private_file: private_link = frappe.get_doc("Remote File", site.remote_private_file).download_link if site.remote_config_file: - config_link = frappe.get("Remote File", site.remote_config_file).download_link + config_content = frappe.get_doc("Remote File", site.remote_config_file).get_content() + sanitized_config_content = sanitize_config(config_content) if config_content else None + sanitized_config_content.update({"maintenance_mode": 0}) if sanitized_config_content else None data = { "apps": apps, @@ -192,7 +196,7 @@ def restore_site(self, site: "Site", skip_failing_patches=False): "database": database_link, "public": public_link, "private": private_link, - "config": config_link, + "sanitized_config_content": sanitized_config_content, "skip_failing_patches": skip_failing_patches, "managed_database_config": self._get_managed_db_config(site), } diff --git a/press/press/doctype/site/site.py b/press/press/doctype/site/site.py index 6c8fa384976..172178a4a71 100644 --- a/press/press/doctype/site/site.py +++ b/press/press/doctype/site/site.py @@ -1156,6 +1156,9 @@ def restore_site(self, skip_failing_patches=False): ): raise Exception(f"Remote File {self.remote_database_file} is unavailable on S3") + if self.remote_database_file and not frappe.get_doc("Remote File", self.remote_config_file).exists(): + raise Exception(f"Remote File {self.remote_config_file} is unavailable on S3") + agent = Agent(self.server) job = agent.restore_site(self, skip_failing_patches=skip_failing_patches) log_site_activity(self.name, "Restore", job=job.name)