This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 6362ba5ab4 Move writing configuration for webserver to main (webserver
limited) (#32766)
6362ba5ab4 is described below
commit 6362ba5ab45a38008814616df4e17717cc3726c3
Author: Jarek Potiuk <[email protected]>
AuthorDate: Sun Jul 23 08:26:54 2023 +0200
Move writing configuration for webserver to main (webserver limited)
(#32766)
So far configuration was automatically written no matter what command
has been invoked. This means tha webserver configuration is stored
for all components, where it was only really needed for webserver.
This small change moves the place where configuration writing is
invoked - webserver configuration will only be automatically
checked for and written when webserver command has been invoked
via __main__ entrypoint.
This has also the nice side-effect that it is not written during
tests, or when airflow is just imported.
---
airflow/__main__.py | 7 ++++++-
airflow/configuration.py | 12 +++++++++---
tests/www/views/test_views.py | 5 +++--
3 files changed, 18 insertions(+), 6 deletions(-)
diff --git a/airflow/__main__.py b/airflow/__main__.py
index c15f75b4b9..c88f655bee 100644
--- a/airflow/__main__.py
+++ b/airflow/__main__.py
@@ -34,6 +34,7 @@ import argcomplete
# any possible import cycles with settings downstream.
from airflow import configuration
from airflow.cli import cli_parser
+from airflow.configuration import write_webserver_configuration_if_needed
def main():
@@ -52,7 +53,11 @@ def main():
# in main ensures that it is not done during tests and other ways
airflow imports are used
from airflow.configuration import
write_default_airflow_configuration_if_needed
- write_default_airflow_configuration_if_needed()
+ conf = write_default_airflow_configuration_if_needed()
+
+ if args.subcommand == "webserver":
+ write_webserver_configuration_if_needed(conf)
+
args.func(args)
diff --git a/airflow/configuration.py b/airflow/configuration.py
index 317c10c013..cca5588e54 100644
--- a/airflow/configuration.py
+++ b/airflow/configuration.py
@@ -47,6 +47,7 @@ from airflow.exceptions import AirflowConfigException
from airflow.secrets import DEFAULT_SECRETS_SEARCH_PATH, BaseSecretsBackend
from airflow.utils import yaml
from airflow.utils.module_loading import import_string
+from airflow.utils.providers_configuration_loader import
providers_configuration_loaded
from airflow.utils.weight_rule import WeightRule
log = logging.getLogger(__name__)
@@ -1928,7 +1929,7 @@ def
create_default_config_parser(configuration_description: dict[str, dict[str,
return parser
-def write_default_airflow_configuration_if_needed():
+def write_default_airflow_configuration_if_needed() -> AirflowConfigParser:
if not os.path.isfile(AIRFLOW_CONFIG):
log.debug("Creating new Airflow config file in: %s", AIRFLOW_CONFIG)
pathlib.Path(AIRFLOW_HOME).mkdir(parents=True, exist_ok=True)
@@ -1949,6 +1950,7 @@ def write_default_airflow_configuration_if_needed():
only_defaults=True,
)
make_group_other_inaccessible(AIRFLOW_CONFIG)
+ return conf
def load_standard_airflow_configuration(airflow_config_parser:
AirflowConfigParser):
@@ -1992,7 +1994,6 @@ def initialize_config() -> AirflowConfigParser:
Called for you automatically as part of the Airflow boot process.
"""
- global WEBSERVER_CONFIG
airflow_config_parser = AirflowConfigParser()
if airflow_config_parser.getboolean("core", "unit_test_mode"):
airflow_config_parser.load_test_config()
@@ -2004,6 +2005,12 @@ def initialize_config() -> AirflowConfigParser:
if airflow_config_parser.getboolean("core", "unit_test_mode"):
airflow_config_parser.load_test_config()
+ return airflow_config_parser
+
+
+@providers_configuration_loaded
+def write_webserver_configuration_if_needed(airflow_config_parser:
AirflowConfigParser):
+ global WEBSERVER_CONFIG
WEBSERVER_CONFIG = airflow_config_parser.get("webserver", "config_file")
if not os.path.isfile(WEBSERVER_CONFIG):
import shutil
@@ -2011,7 +2018,6 @@ def initialize_config() -> AirflowConfigParser:
pathlib.Path(WEBSERVER_CONFIG).parent.mkdir(parents=True,
exist_ok=True)
log.info("Creating new FAB webserver config file in: %s",
WEBSERVER_CONFIG)
shutil.copy(_default_config_file_path("default_webserver_config.py"),
WEBSERVER_CONFIG)
- return airflow_config_parser
def make_group_other_inaccessible(file_path: str):
diff --git a/tests/www/views/test_views.py b/tests/www/views/test_views.py
index 755df3b7aa..5dbb70edbd 100644
--- a/tests/www/views/test_views.py
+++ b/tests/www/views/test_views.py
@@ -24,7 +24,7 @@ from unittest import mock
import pytest
-from airflow.configuration import initialize_config
+from airflow.configuration import initialize_config,
write_webserver_configuration_if_needed
from airflow.plugins_manager import AirflowPlugin, EntryPointSource
from airflow.utils.task_group import TaskGroup
from airflow.www import views
@@ -68,7 +68,8 @@ def
test_webserver_configuration_config_file(mock_webserver_config_global, admin
config_file = str(tmp_path / "my_custom_webserver_config.py")
with mock.patch.dict(os.environ, {"AIRFLOW__WEBSERVER__CONFIG_FILE":
config_file}):
- initialize_config()
+ conf = initialize_config()
+ write_webserver_configuration_if_needed(conf)
assert airflow.configuration.WEBSERVER_CONFIG == config_file
assert os.path.isfile(config_file)