introduce a SystemEnv class to unify environment variable use and enable smooth transition#311
introduce a SystemEnv class to unify environment variable use and enable smooth transition#311
SystemEnv class to unify environment variable use and enable smooth transition#311Conversation
Signed-off-by: Adrian Edwards <adredwar@redhat.com>
Signed-off-by: Adrian Edwards <adredwar@redhat.com>
Signed-off-by: Adrian Edwards <adredwar@redhat.com>
Signed-off-by: Adrian Edwards <adredwar@redhat.com>
Signed-off-by: Adrian Edwards <adredwar@redhat.com>
Signed-off-by: Adrian Edwards <adredwar@redhat.com>
Signed-off-by: Adrian Edwards <adredwar@redhat.com>
Signed-off-by: Adrian Edwards <adredwar@redhat.com>
…ode slowly over time Signed-off-by: Adrian Edwards <adredwar@redhat.com>
Signed-off-by: Adrian Edwards <adredwar@redhat.com>
Signed-off-by: Adrian Edwards <adredwar@redhat.com>
Signed-off-by: Adrian Edwards <adredwar@redhat.com>
Signed-off-by: Adrian Edwards <adredwar@redhat.com>
Signed-off-by: Adrian Edwards <adredwar@redhat.com>
Signed-off-by: Adrian Edwards <adredwar@redhat.com>
Signed-off-by: Adrian Edwards <adredwar@redhat.com>
Signed-off-by: Adrian Edwards <adredwar@redhat.com>
Signed-off-by: Adrian Edwards <adredwar@redhat.com>
| prefixes = ["COLLECTOSS", "OTHER"] | ||
|
|
||
| def test_env_extract_prefix(): | ||
| assert extract_prefix("OTHER_DB", prefixes) == "OTHER_" |
|
|
||
| def test_env_extract_prefix(): | ||
| assert extract_prefix("OTHER_DB", prefixes) == "OTHER_" | ||
| assert extract_prefix("COLLECTOSS_DB", prefixes) == "COLLECTOSS_" |
| assert extract_prefix("COLLECTOSS_DB", prefixes) == "COLLECTOSS_" | ||
|
|
||
| def test_env_extract_prefix_default(): | ||
| assert extract_prefix("SOME_DB", prefixes) is None |
|
|
||
| def test_env_extract_prefix_default(): | ||
| assert extract_prefix("SOME_DB", prefixes) is None | ||
| assert extract_prefix("THINGY_DB", prefixes) is None |
|
|
||
|
|
||
| def test_env_extract_prefix_unprefixed(): | ||
| assert extract_prefix("DB", prefixes) is None |
| assert SystemEnv.get("COLLECTOSS_MISSING", None, prefixes) is None | ||
|
|
||
| def test_fetching_env_default(): | ||
| assert SystemEnv.get("COLLECTOSS_DEFAULT", "SOME", prefixes) == "SOME" |
| def test_no_known_prefix(): | ||
| # fallback handling | ||
| os.environ["THING"] = "C" | ||
| assert SystemEnv.get("THING", None, prefixes) == "C" |
|
|
||
| for case in cases: | ||
| os.environ["OTHER_BOOL"] = case | ||
| assert SystemEnv.get_bool("OTHER_BOOL", False, prefixes) == True |
|
|
||
| for case in cases: | ||
| os.environ["OTHER_BOOL"] = case | ||
| assert SystemEnv.get_bool("OTHER_BOOL", True, prefixes) == False |
|
|
||
| for case in cases: | ||
| os.environ["OTHER_BOOL"] = case | ||
| assert SystemEnv.get_bool("OTHER_BOOL", False, prefixes) == False |
| @@ -1,13 +1,11 @@ | |||
| import os | |||
There was a problem hiding this comment.
[pylint] reported by reviewdog 🐶
W0611: Unused import os (unused-import)
| @@ -130,7 +131,7 @@ def start(ctx, disable_collection, development, pidfile, port): | |||
| processes = start_celery_worker_processes((core_worker_count, secondary_worker_count, facade_worker_count), disable_collection) | |||
There was a problem hiding this comment.
[pylint] reported by reviewdog 🐶
W0621: Redefining name 'processes' from outer scope (line 396) (redefined-outer-name)
| @@ -15,6 +15,7 @@ | |||
| import requests | |||
| from redis.exceptions import ConnectionError as RedisConnectionError | |||
There was a problem hiding this comment.
[pylint] reported by reviewdog 🐶
W0611: Unused ConnectionError imported from redis.exceptions as RedisConnectionError (unused-import)
| @@ -31,7 +32,7 @@ | |||
|
|
|||
| from keyman.KeyClient import KeyClient, KeyPublisher | |||
There was a problem hiding this comment.
[pylint] reported by reviewdog 🐶
W0611: Unused KeyClient imported from keyman.KeyClient (unused-import)
| @@ -2,6 +2,7 @@ | |||
| import os | |||
There was a problem hiding this comment.
[pylint] reported by reviewdog 🐶
W0611: Unused import os (unused-import)
| @@ -2,6 +2,7 @@ | |||
| import os | |||
| from collectoss.application.db.models import * | |||
| from collectoss.application.db.lib import bulk_insert_dicts, get_repo_by_repo_git, get_value, get_session | |||
There was a problem hiding this comment.
[pylint] reported by reviewdog 🐶
W0611: Unused get_session imported from collectoss.application.db.lib (unused-import)
| @@ -2,6 +2,7 @@ | |||
| import os | |||
There was a problem hiding this comment.
[pylint] reported by reviewdog 🐶
W0611: Unused import os (unused-import)
| tasks = start_tasks + github_tasks + gitlab_tasks + git_tasks + materialized_view_tasks + frontend_tasks | ||
|
|
||
| if os.environ.get('AUGUR_DOCKER_DEPLOY') != "1": | ||
| if SystemEnv.get('AUGUR_DOCKER_DEPLOY') != "1": |
There was a problem hiding this comment.
[pylint] reported by reviewdog 🐶
E0602: Undefined variable 'SystemEnv' (undefined-variable)
Description
This PR introduces a new
SystemEnvclass that lives alongsideSystemConfigand aims to centralize/unify all environment variable access.The primary purpose of this is to slightly decouple the requested environment variable name from the name where the value is actually pulled from. For example, even if all in-code references use
COLLECTOSS_DBfor the database connection string, this layer will allow a values to be read fromAUGUR_DBas a fallback ifCOLLECTOSS_DB(preferred) is not set.This class is also set up to print a deprecation warning/notice whenever the
AUGURvariant of an environment variable is used as a fallback. The message makes it clear that this fallback behavior is only temporary and may not be around forever (although I don't see this code being removed anytime in the foreseeable future)This PR includes a unit tests for this new functionality and works as intended, including edge cases such as when the key the code requests doesn't use a known prefix (
os.getenv("CONFIG_DATADIR"))It also includes a special case function
get_bool()because there were ~3 different places in the code where a small python one-liner (that i wrote) had been copied around for convenience, and this was a good opportunity to refactor that to prevent those three versions from ever drifting in implementation from each other. There are certainly more places this logic can be reused as well as we unify the way all env vars are processed.This PR resolves one of the large items that needs to be done to complete #279 for the next release.
Notes for Reviewers
This change includes unit tests for "backwards" variable access that keep the code able to refer to
AUGUR_variables so that those can be renamed laterThis PR does not actually change any environment variable names, but that can be done either in this PR or a followup depending on the discussion results
TODOs:
SystemEnvto iterate through all known env vars, detect the ones with a known deprecated prefix, and copy the values of those variables to new keys with the preferred prefix that click is expecting.Signed commits