From e5e18dd195c5a163ea9dd97220a89617572fd759 Mon Sep 17 00:00:00 2001 From: Kamil Gabryjelski Date: Tue, 3 Oct 2023 10:39:07 +0200 Subject: [PATCH] Support custom pixel density --- superset/utils/machine_auth.py | 10 ++++------ superset/utils/webdriver.py | 4 ++++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/superset/utils/machine_auth.py b/superset/utils/machine_auth.py index e81e721fde928..a5a1d195203ff 100644 --- a/superset/utils/machine_auth.py +++ b/superset/utils/machine_auth.py @@ -43,14 +43,12 @@ class MachineAuthProvider: def __init__( self, auth_webdriver_func_override: Callable[[WebDriver, User], WebDriver], - auth_browser_context_func_override: Callable[ - [BrowserContext, User], BrowserContext - ], + auth_context_func_override: Callable[[BrowserContext, User], BrowserContext], ): # This is here in order to allow for the authenticate_webdriver func to be # overridden via config, as opposed to the entire provider implementation self._auth_webdriver_func_override = auth_webdriver_func_override - self._auth_browser_context_func_override = auth_browser_context_func_override + self._auth_context_func_override = auth_context_func_override def authenticate_webdriver( self, @@ -81,8 +79,8 @@ def authenticate_browser_context( user: User, ) -> BrowserContext: # Short-circuit this method if we have an override configured - if self._auth_browser_context_func_override: # type: ignore - return self._auth_browser_context_func_override(browser_context, user) + if self._auth_context_func_override: # type: ignore + return self._auth_context_func_override(browser_context, user) # Setting cookies requires doing a request first page = browser_context.new_page() diff --git a/superset/utils/webdriver.py b/superset/utils/webdriver.py index fd5af0e04993d..720c399b2a67a 100644 --- a/superset/utils/webdriver.py +++ b/superset/utils/webdriver.py @@ -150,12 +150,16 @@ def find_unexpected_errors(page: Page) -> list[str]: def get_screenshot(self, url: str, element_name: str, user: User) -> bytes | None: with sync_playwright() as playwright: browser = playwright.chromium.launch() + pixel_density = current_app.config["WEBDRIVER_WINDOW"].get( + "pixel_density", 1 + ) context = browser.new_context( bypass_csp=True, viewport={ "height": self._window[1], "width": self._window[0], }, + device_scale_factor=pixel_density, ) self.auth(user, context) page = context.new_page()