mirror of
https://github.com/Sea-Haven-Industries/apm-wo-analysis.git
synced 2026-09-30 06:33:14 +00:00
fix(lambda): expose interactions.handler on the bootstrap stub (#59)
Some checks failed
Deploy / Deploy to prod (push) Has been cancelled
Some checks failed
Deploy / Deploy to prod (push) Has been cancelled
slack_interactions is configured for interactions.handler. A recreate that reloads the stub zip must return 503 instead of failing at init.
This commit is contained in:
parent
f13d2e3ff1
commit
8dc3f71e6c
3 changed files with 44 additions and 1 deletions
|
|
@ -1,4 +1,8 @@
|
||||||
"""Bootstrap stub. GitHub Actions replaces this zip via update-function-code."""
|
"""Bootstrap stub. GitHub Actions replaces this zip via update-function-code.
|
||||||
|
|
||||||
|
Keep a module for every Lambda handler setting in locals.functions. A recreate
|
||||||
|
must return 503 instead of failing at init because the entrypoint is missing.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
def handler(event, context):
|
def handler(event, context):
|
||||||
|
|
|
||||||
5
terraform/bootstrap/stub/interactions.py
Normal file
5
terraform/bootstrap/stub/interactions.py
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
"""Alias so slack_interactions (interactions.handler) can load the stub zip."""
|
||||||
|
|
||||||
|
from handler import handler
|
||||||
|
|
||||||
|
__all__ = ["handler"]
|
||||||
34
tests/test_bootstrap_stub.py
Normal file
34
tests/test_bootstrap_stub.py
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
"""Stub zip must expose every Lambda handler name in locals.functions."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import importlib.util
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
STUB_DIR = Path(__file__).resolve().parents[1] / "terraform" / "bootstrap" / "stub"
|
||||||
|
|
||||||
|
|
||||||
|
def _load_file(module_name: str, path: Path):
|
||||||
|
spec = importlib.util.spec_from_file_location(module_name, path)
|
||||||
|
assert spec is not None and spec.loader is not None
|
||||||
|
module = importlib.util.module_from_spec(spec)
|
||||||
|
spec.loader.exec_module(module)
|
||||||
|
return module
|
||||||
|
|
||||||
|
|
||||||
|
def test_stub_handler_modules_return_503() -> None:
|
||||||
|
handler_mod = _load_file("apm_stub_handler", STUB_DIR / "handler.py")
|
||||||
|
saved_handler = sys.modules.get("handler")
|
||||||
|
sys.modules["handler"] = handler_mod
|
||||||
|
try:
|
||||||
|
interactions_mod = _load_file("apm_stub_interactions", STUB_DIR / "interactions.py")
|
||||||
|
for module in (handler_mod, interactions_mod):
|
||||||
|
result = module.handler({}, None)
|
||||||
|
assert result["statusCode"] == 503
|
||||||
|
assert "NOT_DEPLOYED" in result["body"]
|
||||||
|
finally:
|
||||||
|
if saved_handler is None:
|
||||||
|
sys.modules.pop("handler", None)
|
||||||
|
else:
|
||||||
|
sys.modules["handler"] = saved_handler
|
||||||
Loading…
Add table
Reference in a new issue