fix: bencher scoping (#28703)

* fix(bench_interface): sites loading

* feat(bench_interface): guard against naive scoping back to all sites

* refactor(bench_interface): remove 'scope' methods for (newer) site_name
This commit is contained in:
David Arnold 2024-12-08 02:37:42 +01:00 committed by GitHub
parent 8c7f3fac6c
commit 0ff4c73e18
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -348,9 +348,14 @@ class Sites(_PathResolvable, ConfigHandler, _Serializable):
@site_name.setter
def site_name(self, value):
if self.site_name is not None and value == self.SCOPE_ALL_SITES:
raise BenchNotScopedError("Cannot scope back to SCOPE_ALL_SITES when already scoped")
import frappe
frappe.local.site_name = value
if hasattr(self, "_Sites__sites"):
del self.__sites
def add_site(self, site_name: str) -> None:
site_path = self.path.joinpath(site_name)
@ -371,18 +376,6 @@ class Sites(_PathResolvable, ConfigHandler, _Serializable):
# Note: This doesn't actually delete the site directory, just removes it from the sites dict
# Actual deletion should be handled separately with proper safeguards
def scope(self, site_name: str | None = None) -> Site:
if site_name is None:
return self.site
del self.__sites # trigger re-scan after scope
self.site_name = site_name
if self.site_name != self.SCOPE_ALL_SITES:
return self.site
raise BenchNotScopedError("Cannot scope to ALL_SITES")
@property
def scoped(self) -> bool:
return bool(self.site_name) and self.site_name != self.SCOPE_ALL_SITES
@ -396,7 +389,7 @@ class Sites(_PathResolvable, ConfigHandler, _Serializable):
@property
def _sites(self) -> dict[str, Site]:
if not hasattr(self, "__sites"):
if not hasattr(self, "_Sites__sites"):
self.__sites = {}
# security & thread-safety: site_name is stored in thread-local storage
@ -473,9 +466,6 @@ class Bench(_PathResolvable, _Serializable):
def site(self) -> Site:
return self.sites.site
def scope(self, site_name: str) -> Site:
return self.sites.scope(site_name)
@property
def scoped(self) -> bool:
return self.sites.scoped