alissa-tools-github-revloop 0.31.12__tar.gz → 0.31.13__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. {alissa_tools_github_revloop-0.31.12/src/main/alissa_tools_github_revloop.egg-info → alissa_tools_github_revloop-0.31.13}/PKG-INFO +1 -1
  2. alissa_tools_github_revloop-0.31.13/src/main/alissa/tools/github/revloop/version +1 -0
  3. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/webui/__main__.py +4 -3
  4. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/webui/server.py +28 -1
  5. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13/src/main/alissa_tools_github_revloop.egg-info}/PKG-INFO +1 -1
  6. alissa_tools_github_revloop-0.31.12/src/main/alissa/tools/github/revloop/version +0 -1
  7. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/LICENSE +0 -0
  8. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/MANIFEST.in +0 -0
  9. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/NOTICE +0 -0
  10. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/README.md +0 -0
  11. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/requirements.txt +0 -0
  12. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/setup.cfg +0 -0
  13. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/setup.py +0 -0
  14. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/__init__.py +0 -0
  15. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/__main__.py +0 -0
  16. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/alissa.py +0 -0
  17. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/alissa_client.py +0 -0
  18. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/bows.py +0 -0
  19. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/config.py +0 -0
  20. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/fleet_vitals.py +0 -0
  21. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/ghclient.py +0 -0
  22. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/loop.py +0 -0
  23. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/loop_events.py +0 -0
  24. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/parking.py +0 -0
  25. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/proc.py +0 -0
  26. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/prompts.py +0 -0
  27. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/prreview.py +0 -0
  28. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/state.py +0 -0
  29. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/trust.py +0 -0
  30. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/version.py +0 -0
  31. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/webui/__init__.py +0 -0
  32. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/webui/auth.py +0 -0
  33. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/webui/page.py +0 -0
  34. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/webui/sources.py +0 -0
  35. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa/tools/github/revloop/webui/sysinfo.py +0 -0
  36. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa_tools_github_revloop.egg-info/SOURCES.txt +0 -0
  37. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa_tools_github_revloop.egg-info/dependency_links.txt +0 -0
  38. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa_tools_github_revloop.egg-info/entry_points.txt +0 -0
  39. {alissa_tools_github_revloop-0.31.12 → alissa_tools_github_revloop-0.31.13}/src/main/alissa_tools_github_revloop.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alissa-tools-github-revloop
3
- Version: 0.31.12
3
+ Version: 0.31.13
4
4
  Summary: ALISSA-TOOLS-GITHUB-REVLOOP
5
5
  Home-page: https://alissa.app
6
6
  Author: Fahera
@@ -20,7 +20,7 @@ from ..config import Config, load_config_file, resolve_config_path
20
20
  from ..fleet_vitals import FleetVitalsPusher
21
21
  from ..version import version
22
22
  from .auth import Auth, PasscodeUnset, require_passcode
23
- from .server import App, make_server
23
+ from .server import App, bind_url, make_server
24
24
  from .sources import Sources
25
25
 
26
26
  # The default bind port. Deliberately NOT the devloop console's 8787: the two
@@ -52,7 +52,8 @@ def build_parser() -> argparse.ArgumentParser:
52
52
  p.add_argument("--version", action="version",
53
53
  version=f"%(prog)s {version.value}")
54
54
  p.add_argument("--host", default="127.0.0.1", metavar="ADDR",
55
- help="bind address (default: 127.0.0.1 -- localhost only)")
55
+ help="bind address (default: 127.0.0.1 -- localhost only); "
56
+ "an IPv6 literal binds IPv6, and `::` takes IPv4 too")
56
57
  p.add_argument("--port", type=int, default=DEFAULT_PORT, metavar="PORT",
57
58
  help=f"bind port (default: {DEFAULT_PORT})")
58
59
  p.add_argument("--workspace-root", type=Path, default=None, metavar="PATH",
@@ -131,7 +132,7 @@ def main(argv: "list[str] | None" = None) -> int:
131
132
 
132
133
  print(
133
134
  f"alissa-revloop-ui {version.value} -- serving on "
134
- f"http://{args.host}:{args.port} (passcode required); "
135
+ f"{bind_url(args.host, args.port)} (passcode required); "
135
136
  f"watching {config.workspace_root}",
136
137
  flush=True,
137
138
  )
@@ -35,6 +35,7 @@ from __future__ import annotations
35
35
 
36
36
  import json
37
37
  import re
38
+ import socket
38
39
  import sqlite3
39
40
  import sys
40
41
  import time
@@ -576,8 +577,34 @@ _REDIRECT_HOME = (
576
577
  )
577
578
 
578
579
 
580
+ class _IPv6Server(ThreadingHTTPServer):
581
+ """The console on an IPv6 address (issue #163). `::` is the container
582
+ default because Railway's private network (`*.railway.internal`) resolves
583
+ to IPv6 only, and an AF_INET socket refuses those peers outright.
584
+ IPV6_V6ONLY is cleared explicitly rather than inherited from
585
+ net.ipv6.bindv6only, so `::` also takes IPv4 (as v4-mapped peers) on any
586
+ host; on a specific address like `::1` the option is moot."""
587
+
588
+ address_family = socket.AF_INET6
589
+
590
+ def server_bind(self) -> None:
591
+ try:
592
+ self.socket.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0)
593
+ except (AttributeError, OSError):
594
+ pass # no dual-stack on this platform: `::` serves IPv6 only
595
+ super().server_bind()
596
+
597
+
598
+ def bind_url(host: str, port: int) -> str:
599
+ """The URL a bind serves, brackets around an IPv6 literal."""
600
+ return f"http://[{host}]:{port}" if ":" in host else f"http://{host}:{port}"
601
+
602
+
579
603
  def make_server(app: App, host: str, port: int) -> ThreadingHTTPServer:
580
- server = ThreadingHTTPServer((host, port), Handler)
604
+ # An IPv6 literal (anything with a ':') needs an AF_INET6 socket; an IPv4
605
+ # address or a hostname keeps the stdlib's AF_INET default.
606
+ cls = _IPv6Server if ":" in host else ThreadingHTTPServer
607
+ server = cls((host, port), Handler)
581
608
  server.daemon_threads = True
582
609
  server.app = app # type: ignore[attr-defined]
583
610
  return server
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alissa-tools-github-revloop
3
- Version: 0.31.12
3
+ Version: 0.31.13
4
4
  Summary: ALISSA-TOOLS-GITHUB-REVLOOP
5
5
  Home-page: https://alissa.app
6
6
  Author: Fahera