mirror of
https://github.com/bunny-lab-io/Borealis.git
synced 2025-10-26 17:41:58 -06:00
54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
"""Server metadata endpoints."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from datetime import datetime, timezone
|
|
|
|
from flask import Blueprint, Flask, jsonify
|
|
|
|
from Data.Engine.services.container import EngineServiceContainer
|
|
|
|
blueprint = Blueprint("engine_server_info", __name__)
|
|
|
|
|
|
def register(app: Flask, _services: EngineServiceContainer) -> None:
|
|
if "engine_server_info" not in app.blueprints:
|
|
app.register_blueprint(blueprint)
|
|
|
|
|
|
@blueprint.route("/api/server/time", methods=["GET"])
|
|
def server_time() -> object:
|
|
now_local = datetime.now().astimezone()
|
|
now_utc = datetime.now(timezone.utc)
|
|
tzinfo = now_local.tzinfo
|
|
offset = tzinfo.utcoffset(now_local) if tzinfo else None
|
|
|
|
def _ordinal(n: int) -> str:
|
|
if 11 <= (n % 100) <= 13:
|
|
suffix = "th"
|
|
else:
|
|
suffix = {1: "st", 2: "nd", 3: "rd"}.get(n % 10, "th")
|
|
return f"{n}{suffix}"
|
|
|
|
month = now_local.strftime("%B")
|
|
day_disp = _ordinal(now_local.day)
|
|
year = now_local.strftime("%Y")
|
|
hour24 = now_local.hour
|
|
hour12 = hour24 % 12 or 12
|
|
minute = now_local.minute
|
|
ampm = "AM" if hour24 < 12 else "PM"
|
|
display = f"{month} {day_disp} {year} @ {hour12}:{minute:02d}{ampm}"
|
|
|
|
payload = {
|
|
"epoch": int(now_local.timestamp()),
|
|
"iso": now_local.isoformat(),
|
|
"utc_iso": now_utc.isoformat().replace("+00:00", "Z"),
|
|
"timezone": str(tzinfo) if tzinfo else "",
|
|
"offset_seconds": int(offset.total_seconds()) if offset else 0,
|
|
"display": display,
|
|
}
|
|
return jsonify(payload)
|
|
|
|
|
|
__all__ = ["register", "blueprint"]
|