eggserve-core 0.1.1

Security policy, path confinement, and static-serving primitives for eggserve
Documentation
"""Serve static files with custom default content type and extra response headers.

Shows the Python 3.15-shaped static metadata hooks:

- ``default_content_type`` sets the Content-Type for unknown file extensions.
- ``extra_response_headers`` adds ordered headers to final 200 responses.
  These cannot override runtime-owned metadata (Content-Length, ETag, etc.).
"""

from functools import partial
from pathlib import Path

from eggserve.server import SimpleHTTPRequestHandler, ThreadingHTTPServer

SITE = Path(__file__).with_name("site")


def create_server(address=("127.0.0.1", 8000), directory=SITE):
    handler = partial(
        SimpleHTTPRequestHandler,
        directory=directory,
        default_content_type="application/octet-stream",
        extra_response_headers={"X-Served-By": "eggserve", "Cache-Control": "no-cache"},
    )
    return ThreadingHTTPServer(address, handler)


def main():
    with create_server() as server:
        print(f"Serving on http://{server.server_address[0]}:{server.server_address[1]}")
        try:
            server.serve_forever()
        except KeyboardInterrupt:
            pass


if __name__ == "__main__":
    main()