snapshot of https://github.com/zulip/zulip.git @ 48c69911c7dd4e03b20552eb3bd77ad8151c1357 (2026-09-15)
Some checks failed
Code scanning / CodeQL (push) Failing after 15s
Zulip production suite / Ubuntu 22.04 production build (push) Failing after 26s
Zulip production suite / Debian 12 production install with custom db name and user (push) Has been skipped
Zulip production suite / Ubuntu 22.04 production install and PostgreSQL upgrade with pgroonga (push) Has been skipped
Zulip production suite / Ubuntu 24.04 production install (push) Has been skipped
Zulip production suite / Ubuntu 26.04 production install (push) Has been skipped
Zulip production suite / Debian 13 production install (push) Has been skipped
Zulip production suite / 7.0 Version Upgrade (push) Has been skipped
Zulip production suite / 8.0 Version Upgrade (push) Has been skipped
Zulip production suite / 6.0 Version Upgrade (push) Has been skipped
Zulip production suite / 10.0 Version Upgrade (push) Has been skipped
Zulip production suite / 9.0 Version Upgrade (push) Has been skipped
Zulip production suite / 12.0 Version Upgrade (push) Has been skipped
Zulip production suite / 11.0 Version Upgrade (push) Has been skipped
GitHub Actions Security Analysis with zizmor / zizmor (push) Failing after 3s
Zulip CI / Debian 12 (Python 3.11, backend + documentation) (push) Failing after 26s
Zulip CI / Ubuntu 22.04 (Python 3.10, backend + frontend) (push) Failing after 3s
Zulip CI / Ubuntu 24.04 (Python 3.12, backend) (push) Failing after 25s
Zulip CI / Ubuntu 26.04 (Python 3.14, backend) (push) Failing after 25s
Zulip CI / Debian 13 (Python 3.13, backend) (push) Failing after 28s
Zulip production suite / Required jobs (push) Has been cancelled
Zulip CI / Required jobs (push) Has been cancelled
API Documentation Update Check / check-feature-level-updated (push) Has been cancelled
API Documentation Update Check / notify-if-api-docs-changed (push) Has been cancelled
Some checks failed
Code scanning / CodeQL (push) Failing after 15s
Zulip production suite / Ubuntu 22.04 production build (push) Failing after 26s
Zulip production suite / Debian 12 production install with custom db name and user (push) Has been skipped
Zulip production suite / Ubuntu 22.04 production install and PostgreSQL upgrade with pgroonga (push) Has been skipped
Zulip production suite / Ubuntu 24.04 production install (push) Has been skipped
Zulip production suite / Ubuntu 26.04 production install (push) Has been skipped
Zulip production suite / Debian 13 production install (push) Has been skipped
Zulip production suite / 7.0 Version Upgrade (push) Has been skipped
Zulip production suite / 8.0 Version Upgrade (push) Has been skipped
Zulip production suite / 6.0 Version Upgrade (push) Has been skipped
Zulip production suite / 10.0 Version Upgrade (push) Has been skipped
Zulip production suite / 9.0 Version Upgrade (push) Has been skipped
Zulip production suite / 12.0 Version Upgrade (push) Has been skipped
Zulip production suite / 11.0 Version Upgrade (push) Has been skipped
GitHub Actions Security Analysis with zizmor / zizmor (push) Failing after 3s
Zulip CI / Debian 12 (Python 3.11, backend + documentation) (push) Failing after 26s
Zulip CI / Ubuntu 22.04 (Python 3.10, backend + frontend) (push) Failing after 3s
Zulip CI / Ubuntu 24.04 (Python 3.12, backend) (push) Failing after 25s
Zulip CI / Ubuntu 26.04 (Python 3.14, backend) (push) Failing after 25s
Zulip CI / Debian 13 (Python 3.13, backend) (push) Failing after 28s
Zulip production suite / Required jobs (push) Has been cancelled
Zulip CI / Required jobs (push) Has been cancelled
API Documentation Update Check / check-feature-level-updated (push) Has been cancelled
API Documentation Update Check / notify-if-api-docs-changed (push) Has been cancelled
This commit is contained in:
67
zproject/config.py
Normal file
67
zproject/config.py
Normal file
@@ -0,0 +1,67 @@
|
||||
import configparser
|
||||
import os
|
||||
from typing import overload
|
||||
|
||||
from scripts.lib.zulip_tools import get_config as get_config_from_file
|
||||
|
||||
|
||||
class ZulipSettingsError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
DEPLOY_ROOT = os.path.realpath(os.path.dirname(os.path.dirname(__file__)))
|
||||
|
||||
config_file = configparser.RawConfigParser()
|
||||
config_file.read("/etc/zulip/zulip.conf")
|
||||
|
||||
# Whether this instance of Zulip is running in a production environment.
|
||||
PRODUCTION = config_file.has_option("machine", "deploy_type")
|
||||
DEVELOPMENT = not PRODUCTION
|
||||
secrets_file = configparser.RawConfigParser()
|
||||
if PRODUCTION: # nocoverage
|
||||
secrets_file.read("/etc/zulip/zulip-secrets.conf")
|
||||
else:
|
||||
secrets_file.read(os.path.join(DEPLOY_ROOT, "zproject/dev-secrets.conf"))
|
||||
|
||||
|
||||
@overload
|
||||
def get_secret(
|
||||
key: str, default_value: None = None, development_only: bool = False
|
||||
) -> str | None: ...
|
||||
@overload
|
||||
def get_secret(key: str, default_value: str, development_only: bool = False) -> str: ...
|
||||
def get_secret(
|
||||
key: str, default_value: str | None = None, development_only: bool = False
|
||||
) -> str | None:
|
||||
if development_only and PRODUCTION: # nocoverage
|
||||
return default_value
|
||||
return secrets_file.get("secrets", key, fallback=default_value)
|
||||
|
||||
|
||||
def get_mandatory_secret(key: str) -> str:
|
||||
secret = get_secret(key)
|
||||
if secret is None:
|
||||
if os.environ.get("DISABLE_MANDATORY_SECRET_CHECK") == "True":
|
||||
return ""
|
||||
raise ZulipSettingsError(f'Mandatory secret "{key}" is not set')
|
||||
return secret
|
||||
|
||||
|
||||
@overload
|
||||
def get_config(section: str, key: str, default_value: None = None) -> str | None: ...
|
||||
@overload
|
||||
def get_config(section: str, key: str, default_value: str) -> str: ...
|
||||
@overload
|
||||
def get_config(section: str, key: str, default_value: bool) -> bool: ...
|
||||
def get_config(
|
||||
section: str, key: str, default_value: str | bool | None = None
|
||||
) -> str | bool | None:
|
||||
return get_config_from_file(config_file, section, key, default_value)
|
||||
|
||||
|
||||
def get_from_file_if_exists(path: str) -> str:
|
||||
if os.path.exists(path):
|
||||
with open(path) as f:
|
||||
return f.read()
|
||||
else:
|
||||
return ""
|
||||
Reference in New Issue
Block a user