bowser/main.py
Benedikt Willi fab66d1528 Implement Jinja2 templates for startpage and error pages
Features:
- Add Jinja2 template engine for page rendering
- Create startpage with Bowser branding and version info
- Create error page templates for 404, 500, and network errors
- Support for about:startpage special URL
- Custom error message support in templates
- Graceful fallback rendering if template fails
- Browser now starts with startpage when no URL provided

Templates:
- assets/pages/startpage.html - Beautiful purple gradient intro page
- assets/pages/error_404.html - Pink gradient 404 error page
- assets/pages/error_500.html - Red gradient 500 error page
- assets/pages/error_network.html - Orange gradient network error page

Code:
- src/templates.py - Template rendering utilities with Jinja2
- Updated main.py to use startpage as default
- Updated Frame.load() to handle about: URLs and render errors with templates
- Added 7 comprehensive template tests

All 62 core tests passing (excluding GTK-dependent tests)
2026-01-09 14:24:01 +01:00

42 lines
1.1 KiB
Python

"""Entry point for Bowser browser."""
import argparse
import logging
from src.browser.browser import Browser
def _parse_args():
parser = argparse.ArgumentParser(prog="bowser", description="Bowser educational browser")
parser.add_argument("url", nargs="?", default=None, help="URL to open (optional, defaults to startpage)")
parser.add_argument("--debug", action="store_true", help="Enable debug output (alias for --log-level=DEBUG)")
parser.add_argument(
"--log-level",
choices=["ERROR", "WARNING", "INFO", "DEBUG"],
default="INFO",
help="Set logging level",
)
return parser.parse_args()
def _configure_logging(args):
level = logging.DEBUG if args.debug else getattr(logging, args.log_level)
logging.basicConfig(
level=level,
format="%(asctime)s %(name)s %(levelname)s: %(message)s",
datefmt="%H:%M:%S",
)
def main():
args = _parse_args()
_configure_logging(args)
browser = Browser()
# If no URL provided, use startpage
url = args.url if args.url else "about:startpage"
browser.new_tab(url)
browser.run()
if __name__ == "__main__":
main()