Author SHA1 Message Date
klemek 65c6145022 chore: release 1.2.3
Python Test CI / coverage (push) Successful in 1m34s
Python Lint CI / ruff (push) Successful in 1m16s
Docker CI / docker-build (push) Successful in 1m51s
Python Lint CI / ruff-format-check (push) Successful in 1m2s
Python Lint CI / ty (push) Successful in 1m41s
2026-05-04 22:53:29 +02:00
klemek 4af15b082d fix: fix invalid crontab 2026-05-04 22:53:05 +02:00
klemek 9aa84cc2c3 fix: don't print raw client address
Python Lint CI / ty (push) Successful in 55s
Python Lint CI / ruff-format-check (push) Successful in 1m0s
Python Lint CI / ruff (push) Successful in 1m2s
Docker CI / docker-build (push) Has been cancelled
Python Test CI / coverage (push) Has been cancelled
2026-05-04 22:52:03 +02:00
klemek 658174518a fix: handle error at init level 2026-05-04 22:52:03 +02:00
5 changed files with 28 additions and 5 deletions
+1 -1
View File
@@ -1,3 +1,3 @@
# do daily/weekly/monthly maintenance # do daily/weekly/monthly maintenance
# min hour day month weekday command # min hour day month weekday command
0 3 * * 1 /app/main.py renew 0 3 * * 1 stapler renew
+2 -2
View File
@@ -1,6 +1,6 @@
[project] [project]
name = "stapler" name = "stapler"
version = "1.2.2" version = "1.2.3"
description = "Static pages as simple as a gzip file" description = "Static pages as simple as a gzip file"
requires-python = ">=3.14" requires-python = ">=3.14"
dependencies = [ dependencies = [
@@ -28,7 +28,7 @@ dev = [
[tool.ruff.lint] [tool.ruff.lint]
select = ["ALL"] select = ["ALL"]
ignore = ["D", "E501", "S104", "PLR2004", "ANN401", "BLE001", "COM812", "S603", "PLR0911", "S101", "PT"] ignore = ["D", "E501", "S104", "PLR2004", "ANN401", "BLE001", "COM812", "S603", "PLR0911", "S101", "PT", "E722"]
[tool.coverage.run] [tool.coverage.run]
source = ["stapler"] source = ["stapler"]
+7
View File
@@ -73,6 +73,10 @@ class BaseHandler(abc.ABC, http.server.BaseHTTPRequestHandler):
else: else:
self.send_status_only(code, message) self.send_status_only(code, message)
@typing.override
def address_string(self) -> str: # pragma: no cover
return re.sub(r"[^\x00-\x7F]+", "", super().address_string())
@typing.override @typing.override
def log_message(self, format: str, *args: typing.Any) -> None: # pragma: no cover def log_message(self, format: str, *args: typing.Any) -> None: # pragma: no cover
fmt = "%s - " + format fmt = "%s - " + format
@@ -275,7 +279,10 @@ class RequestHandler(http.server.SimpleHTTPRequestHandler, BaseHandler):
self.__target_redirect: str | None = None self.__target_redirect: str | None = None
self.__target_proxy: str | None = None self.__target_proxy: str | None = None
self.__target_spa: str | None = None self.__target_spa: str | None = None
try:
super().__init__(*args, directory=params.data_dir, **kwargs, params=params) # ty:ignore[unknown-argument] super().__init__(*args, directory=params.data_dir, **kwargs, params=params) # ty:ignore[unknown-argument]
except:
self.logger.exception("Could not handle request")
@property @property
def token(self) -> str: def token(self) -> str:
+16
View File
@@ -162,6 +162,21 @@ class TestRequestHandler(BaseHandlerTestCase):
handler.data_dir = self.data_dir handler.data_dir = self.data_dir
return handler return handler
def test_handle_errors_silently(self) -> None:
with self.patch("http.server.BaseHTTPRequestHandler.__init__") as mock:
mock.side_effect = Exception
logging.basicConfig(level=logging.CRITICAL)
RequestHandler(
unittest.mock.MagicMock(),
"127.0.0.1",
unittest.mock.MagicMock(),
params=Parameters(
data_dir=self.get_tmp_dir(), certbot_www=str(self.certbot_www)
),
registry=self.registry,
token_manager=self.token_manager,
)
def test_do_head_forward(self) -> None: def test_do_head_forward(self) -> None:
handler = self._get_handler() handler = self._get_handler()
with ( with (
@@ -1253,6 +1268,7 @@ class TestUpgradeHandler(BaseHandlerTestCase):
handler.headers = collections.defaultdict(lambda: None, headers) # ty:ignore[invalid-assignment] handler.headers = collections.defaultdict(lambda: None, headers) # ty:ignore[invalid-assignment]
handler.rfile = rfile if rfile is not None else io.BytesIO() handler.rfile = rfile if rfile is not None else io.BytesIO()
handler.wfile = io.BytesIO() handler.wfile = io.BytesIO()
handler.client_address = ("127.0.0.1", 12345)
handler.logger = unittest.mock.Mock(logging.Logger) handler.logger = unittest.mock.Mock(logging.Logger)
handler.data_dir = self.data_dir handler.data_dir = self.data_dir
return handler return handler
Generated
+1 -1
View File
@@ -203,7 +203,7 @@ wheels = [
[[package]] [[package]]
name = "stapler" name = "stapler"
version = "1.2.2" version = "1.2.3"
source = { editable = "." } source = { editable = "." }
dependencies = [ dependencies = [
{ name = "requests" }, { name = "requests" },