From 525a26fab5fe83a8ca0f0dff0e104133b9be5965 Mon Sep 17 00:00:00 2001 From: Alexander Kukushkin Date: Tue, 26 Nov 2019 17:03:34 +0100 Subject: [PATCH] Solve the problem of cyclic imports (#1306) Move `PATRONI_ENV_PREFIX` into the `patroni/__init__.py` --- patroni/__init__.py | 2 ++ patroni/config.py | 10 +++++----- patroni/postgresql/postmaster.py | 4 ++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/patroni/__init__.py b/patroni/__init__.py index 38722e2d..4534ad9d 100644 --- a/patroni/__init__.py +++ b/patroni/__init__.py @@ -6,6 +6,8 @@ import time logger = logging.getLogger(__name__) +PATRONI_ENV_PREFIX = 'PATRONI_' + class Patroni(object): diff --git a/patroni/config.py b/patroni/config.py index 3f75fda7..2bf6cdd7 100644 --- a/patroni/config.py +++ b/patroni/config.py @@ -8,6 +8,7 @@ import yaml from collections import defaultdict from copy import deepcopy +from patroni import PATRONI_ENV_PREFIX from patroni.dcs import ClusterConfig from patroni.postgresql.config import CaseInsensitiveDict, ConfigHandler from patroni.utils import deep_compare, parse_bool, parse_int, patch_config @@ -45,7 +46,6 @@ class Config(object): to work with it as with the old `config` object. """ - PATRONI_ENV_PREFIX = 'PATRONI_' PATRONI_CONFIG_VARIABLE = PATRONI_ENV_PREFIX + 'CONFIGURATION' __CACHE_FILENAME = 'patroni.dynamic.json' @@ -213,7 +213,7 @@ class Config(object): ret = defaultdict(dict) def _popenv(name): - return os.environ.pop(Config.PATRONI_ENV_PREFIX + name.upper(), None) + return os.environ.pop(PATRONI_ENV_PREFIX + name.upper(), None) for param in ('name', 'namespace', 'scope'): value = _popenv(param) @@ -222,7 +222,7 @@ class Config(object): def _fix_log_env(name, oldname): value = _popenv(oldname) - name = Config.PATRONI_ENV_PREFIX + 'LOG_' + name.upper() + name = PATRONI_ENV_PREFIX + 'LOG_' + name.upper() if value and name not in os.environ: os.environ[name] = value @@ -287,7 +287,7 @@ class Config(object): return None for param in list(os.environ.keys()): - if param.startswith(Config.PATRONI_ENV_PREFIX): + if param.startswith(PATRONI_ENV_PREFIX): # PATRONI_(ETCD|CONSUL|ZOOKEEPER|EXHIBITOR|...)_(HOSTS?|PORT|..) name, suffix = (param[8:].split('_', 1) + [''])[:2] if suffix in ('HOST', 'HOSTS', 'PORT', 'USE_PROXIES', 'PROTOCOL', 'SRV', 'URL', 'PROXY', @@ -310,7 +310,7 @@ class Config(object): users = {} for param in list(os.environ.keys()): - if param.startswith(Config.PATRONI_ENV_PREFIX): + if param.startswith(PATRONI_ENV_PREFIX): name, suffix = (param[8:].rsplit('_', 1) + [''])[:2] # PATRONI__PASSWORD=, PATRONI__OPTIONS= # CREATE USER "" WITH PASSWORD '' diff --git a/patroni/postgresql/postmaster.py b/patroni/postgresql/postmaster.py index a6807a93..61dfa419 100644 --- a/patroni/postgresql/postmaster.py +++ b/patroni/postgresql/postmaster.py @@ -6,7 +6,7 @@ import re import signal import subprocess -from patroni.config import Config +from patroni import PATRONI_ENV_PREFIX logger = logging.getLogger(__name__) @@ -155,7 +155,7 @@ class PostmasterProcess(psutil.Process): # In order to make everything portable we can't use fork&exec approach here, so we will call # ourselves and pass list of arguments which must be used to start postgres. # On Windows, in order to run a side-by-side assembly the specified env must include a valid SYSTEMROOT. - env = {p: os.environ[p] for p in os.environ if not p.startswith(Config.PATRONI_ENV_PREFIX)} + env = {p: os.environ[p] for p in os.environ if not p.startswith(PATRONI_ENV_PREFIX)} try: proc = PostmasterProcess._from_pidfile(data_dir) if proc and not proc._is_postmaster_process():