aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md6
-rw-r--r--src/scadere/listen.py15
-rw-r--r--tst/test_listen.py7
3 files changed, 18 insertions, 10 deletions
diff --git a/README.md b/README.md
index d1f40f4..ef8376b 100644
--- a/README.md
+++ b/README.md
@@ -41,8 +41,10 @@ where HOST defaults to localhost and PORT is selected randomly
if not specified.
Options:
- -h, --help show this help message and exit
- -v, --version show program's version number and exit
+ -h, --help show this help message and exit
+ -v, --version show program's version number and exit
+ -t TITLE, --title=TITLE
+ title of Atom feeds
```
## Hacking
diff --git a/src/scadere/listen.py b/src/scadere/listen.py
index 2888524..28e30d7 100644
--- a/src/scadere/listen.py
+++ b/src/scadere/listen.py
@@ -244,7 +244,7 @@ async def write_xml(writer, http_version, application, func, *args):
await writer.drain()
-async def handle(certs, base_url, reader, writer):
+async def handle(certs, base_url, reader, writer, title=None):
"""Handle HTTP request."""
try:
try:
@@ -278,6 +278,8 @@ async def handle(certs, base_url, reader, writer):
assert len(lookup) == len(summaries)
url_parts = urlsplit(urljoin(base_url, url.strip().decode()))
domains = tuple(parse_qs(url_parts.query).get('domain', []))
+ if title is None:
+ title = certs.name
except Exception: # pragma: no cover
await describe_status(writer, HTTPStatus.INTERNAL_SERVER_ERROR,
http_version)
@@ -285,7 +287,7 @@ async def handle(certs, base_url, reader, writer):
if url_parts.path == urlsplit(base_url).path: # Atom feed
await write_xml(writer, http_version, 'atom', unparsed_feed,
- base_url, certs.name, mtime, summaries, domains)
+ base_url, title, mtime, summaries, domains)
elif url_parts.path in lookup: # accessible Atom entry's link/ID
await write_xml(writer, http_version, 'xhtml', unparsed_page,
lookup.get(url_parts.path))
@@ -298,9 +300,10 @@ async def handle(certs, base_url, reader, writer):
await writer.wait_closed()
-async def listen(certs, base_url, host, port): # pragma: no cover
+async def listen(certs, title, base_url, host, port): # pragma: no cover
"""Serve HTTP server for TLS certificate expirations' Atom feed."""
- server = await start_server(partial(handle, certs, base_url), host, port)
+ server = await start_server(partial(handle, certs, base_url, title=title),
+ host, port)
async with server:
print('Serving on', end=' ')
print(*(socket.getsockname() for socket in server.sockets), sep=', ')
@@ -338,13 +341,15 @@ def main(prog='scadere-listen', arguments=argv[1:]):
formatter_class=GNUHelpFormatter)
parser.add_argument('-v', '--version', action='version',
version=f'%(prog)s {__version__}')
+ parser.add_argument('-t', '--title', help='title of Atom feeds')
parser.add_argument('certs', metavar='PATH', type=Path)
parser.add_argument('base_url', metavar='URL', type=with_trailing_slash)
parser.add_argument('netloc', metavar='[HOST][:PORT]', nargs='?',
type=NetLoc(None), default=('localhost', None))
args = parser.parse_args(arguments)
- run(listen(args.certs, args.base_url, *args.netloc)) # pragma: no cover
+ run(listen(args.certs, args.title,
+ args.base_url, *args.netloc)) # pragma: no cover
if __name__ == '__main__': # pragma: no cover
diff --git a/tst/test_listen.py b/tst/test_listen.py
index 49b9dd8..cf47ab7 100644
--- a/tst/test_listen.py
+++ b/tst/test_listen.py
@@ -221,12 +221,13 @@ def unique_netlocs(summaries):
@given(urls().filter(is_base_url).filter(has_usual_path),
- sets(certificates(), min_size=1).map(unique_netlocs))
+ sets(certificates(), min_size=1).map(unique_netlocs),
+ text().filter(printable))
@settings(suppress_health_check=[HealthCheck.too_slow])
-async def test_content(base_url, certs):
+async def test_content(base_url, certs, title):
base_path = urlsplit(base_url).path
with tmp_cert_file(certs) as cert_file:
- handler = partial(handle, cert_file, base_url)
+ handler = partial(handle, cert_file, base_url, title=title)
await check_server(handler, check_feed, base_path)