Add CWA_ENABLED to run Bindery without CWA
With CWA_ENABLED=false, Bindery ignores the CWA settings, makes no request to CWA, and shows nothing about CWA in the log and the web interface. A set INGEST_DIR still gets each changed book as a plain epub. Without it, the log names each CWA function that a missing setting turns off.
This commit is contained in:
@@ -104,6 +104,7 @@ def test_defaults(monkeypatch, reload_config):
|
||||
"PROXY_AUTH_TRUSTED_IPS",
|
||||
"ALLOWED_HOSTS",
|
||||
"BINDERY_ADMIN_USERS",
|
||||
"CWA_ENABLED",
|
||||
"SESSION_COOKIE_SECURE",
|
||||
"TRUST_PROXY",
|
||||
"CWA_DB_PATH",
|
||||
@@ -131,6 +132,8 @@ def test_defaults(monkeypatch, reload_config):
|
||||
]
|
||||
assert config.ALLOWED_HOSTS == []
|
||||
assert config.ADMIN_USERS == []
|
||||
assert config.CWA_ENABLED is True
|
||||
assert config.IGNORED_SETTINGS == []
|
||||
assert config.SESSION_COOKIE_SECURE is False
|
||||
assert config.TRUST_PROXY is False
|
||||
assert config.CWA_DB_PATH is None
|
||||
@@ -147,7 +150,76 @@ def test_empty_ingest_directory_disables_uploads(monkeypatch, reload_config, val
|
||||
assert config.INGEST_DIR is None
|
||||
|
||||
|
||||
@pytest.mark.parametrize("value", ["false", " No ", "0", "off"])
|
||||
def test_cwa_off_ignores_the_cwa_settings_but_not_the_ingest_folder(monkeypatch, reload_config, value):
|
||||
monkeypatch.setenv("CWA_ENABLED", value)
|
||||
monkeypatch.setenv("CWA_URL", "https://cwa.invalid")
|
||||
monkeypatch.setenv("CWA_USERNAME", "bindery")
|
||||
monkeypatch.setenv("CWA_PASSWORD", "secret")
|
||||
monkeypatch.setenv("CWA_DB_PATH", "/cwa/app.db")
|
||||
monkeypatch.setenv("CALIBRE_DB_PATH", "/library/metadata.db")
|
||||
monkeypatch.setenv("INGEST_DIR", "/books")
|
||||
reload_config()
|
||||
assert config.CWA_ENABLED is False
|
||||
assert (config.CWA_URL, config.CWA_USERNAME, config.CWA_PASSWORD) == ("", "", "")
|
||||
assert (config.CWA_DB_PATH, config.CALIBRE_DB_PATH) == (None, None)
|
||||
assert config.IGNORED_SETTINGS == ["CWA_URL", "CWA_USERNAME", "CWA_PASSWORD", "CWA_DB_PATH", "CALIBRE_DB_PATH"]
|
||||
assert str(config.INGEST_DIR) == "/books"
|
||||
|
||||
|
||||
@pytest.mark.parametrize("value", ["", "true", "maybe"])
|
||||
def test_only_a_clear_false_turns_cwa_off(monkeypatch, reload_config, value):
|
||||
monkeypatch.setenv("CWA_ENABLED", value)
|
||||
monkeypatch.setenv("CWA_URL", "https://cwa.invalid")
|
||||
reload_config()
|
||||
assert config.CWA_ENABLED is True
|
||||
assert config.CWA_URL == "https://cwa.invalid"
|
||||
|
||||
|
||||
@pytest.mark.parametrize("ignored", [[], ["CWA_URL", "CALIBRE_DB_PATH"]])
|
||||
def test_prepare_with_cwa_off_logs_nothing_about_missing_cwa(monkeypatch, tmp_path, caplog, ignored):
|
||||
monkeypatch.setattr(config, "CWA_ENABLED", False)
|
||||
monkeypatch.setattr(config, "IGNORED_SETTINGS", ignored)
|
||||
monkeypatch.setattr(config, "INGEST_DIR", None)
|
||||
monkeypatch.setattr(config, "CWA_URL", "")
|
||||
monkeypatch.setattr(config, "CALIBRE_DB_PATH", None)
|
||||
for name, folder in [("CONFIG_DIR", "config"), ("UPLOAD_DIR", "uploads"), ("TMP_DIR", "tmp")]:
|
||||
monkeypatch.setattr(config, name, tmp_path / folder)
|
||||
monkeypatch.setattr(config, "PERSONAL_INI", tmp_path / "config" / "personal.ini")
|
||||
with caplog.at_level("INFO"):
|
||||
config.prepare()
|
||||
lines = [r.getMessage() for r in caplog.records]
|
||||
expected = ["CWA_ENABLED is false. Bindery ignores CWA_URL, CALIBRE_DB_PATH."] if ignored else []
|
||||
assert [line for line in lines if "CWA" in line or "INGEST" in line] == expected
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("ingest", "url", "database", "expected"),
|
||||
[
|
||||
(False, "", None, ["INGEST_DIR is not set", "cannot find the library book of a story.", "CWA_ENABLED=false"]),
|
||||
(True, "", None, ["so each update adds a new book to CWA.", "CWA_ENABLED=false"]),
|
||||
(True, "", Path("/library/metadata.db"), ["CWA_URL is not set. Bindery cannot search", "CWA_ENABLED=false"]),
|
||||
(False, "https://cwa.invalid", None, ["INGEST_DIR is not set", "CWA_ENABLED=false"]),
|
||||
(True, "https://cwa.invalid", None, []),
|
||||
],
|
||||
)
|
||||
def test_prepare_warns_about_each_missing_cwa_function(monkeypatch, tmp_path, caplog, ingest, url, database, expected):
|
||||
monkeypatch.setattr(config, "CWA_URL", url)
|
||||
monkeypatch.setattr(config, "CALIBRE_DB_PATH", database)
|
||||
monkeypatch.setattr(config, "INGEST_DIR", tmp_path if ingest else None)
|
||||
for name, folder in [("CONFIG_DIR", "config"), ("UPLOAD_DIR", "uploads"), ("TMP_DIR", "tmp")]:
|
||||
monkeypatch.setattr(config, name, tmp_path / folder)
|
||||
monkeypatch.setattr(config, "PERSONAL_INI", tmp_path / "config" / "personal.ini")
|
||||
with caplog.at_level("WARNING"):
|
||||
config.prepare()
|
||||
warnings = [r.getMessage() for r in caplog.records]
|
||||
assert len(warnings) == len(expected)
|
||||
for warning, text in zip(warnings, expected, strict=True):
|
||||
assert text in warning
|
||||
|
||||
|
||||
def test_prepare_without_cwa_creates_only_bindery_folders(monkeypatch, tmp_path, caplog):
|
||||
monkeypatch.setattr(config, "CWA_ENABLED", False)
|
||||
monkeypatch.setattr(config, "INGEST_DIR", None)
|
||||
monkeypatch.setattr(config, "CWA_URL", "")
|
||||
monkeypatch.setattr(config, "CALIBRE_DB_PATH", None)
|
||||
|
||||
Reference in New Issue
Block a user