Update public source
This commit is contained in:
+256
@@ -0,0 +1,256 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
WiFi GPS Mapper
|
||||
|
||||
HTML Report Generator
|
||||
|
||||
Запуск:
|
||||
|
||||
python reports/main.py
|
||||
"""
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
import shutil
|
||||
|
||||
from reports.database import connect
|
||||
|
||||
from reports.config import DATABASE_FILE
|
||||
|
||||
from reports.template import (
|
||||
ReportContext,
|
||||
)
|
||||
|
||||
from reports.dashboard import (
|
||||
generate_dashboard,
|
||||
generate_capture_sessions,
|
||||
)
|
||||
|
||||
from reports.session_page import (
|
||||
build_all_session_pages,
|
||||
)
|
||||
|
||||
|
||||
# ============================================================
|
||||
# Output directory
|
||||
# ============================================================
|
||||
|
||||
OUTPUT_DIR = (
|
||||
Path(__file__).parent
|
||||
/ "output"
|
||||
)
|
||||
|
||||
OUTPUT_DIR.mkdir(
|
||||
parents=True,
|
||||
exist_ok=True,
|
||||
)
|
||||
|
||||
|
||||
# ============================================================
|
||||
# Helpers
|
||||
# ============================================================
|
||||
|
||||
def save_text(
|
||||
|
||||
filename: Path,
|
||||
|
||||
text: str,
|
||||
|
||||
):
|
||||
|
||||
filename.parent.mkdir(
|
||||
parents=True,
|
||||
exist_ok=True,
|
||||
)
|
||||
|
||||
filename.write_text(
|
||||
|
||||
text,
|
||||
|
||||
encoding="utf-8",
|
||||
|
||||
)
|
||||
|
||||
# ============================================================
|
||||
# Copy static resources
|
||||
# ============================================================
|
||||
|
||||
def copy_static():
|
||||
|
||||
source = (
|
||||
Path(__file__).parent
|
||||
/ "static"
|
||||
)
|
||||
|
||||
destination = (
|
||||
OUTPUT_DIR
|
||||
/ "static"
|
||||
)
|
||||
|
||||
if destination.exists():
|
||||
|
||||
shutil.rmtree(
|
||||
destination
|
||||
)
|
||||
|
||||
if source.exists():
|
||||
|
||||
shutil.copytree(
|
||||
source,
|
||||
destination
|
||||
)
|
||||
|
||||
# ============================================================
|
||||
# Build report
|
||||
# ============================================================
|
||||
|
||||
def build_report():
|
||||
|
||||
print()
|
||||
|
||||
print("=" * 60)
|
||||
|
||||
print(" WiFi GPS Mapper")
|
||||
|
||||
print(" HTML Report Generator")
|
||||
|
||||
print("=" * 60)
|
||||
|
||||
print()
|
||||
|
||||
if not DATABASE_FILE.exists():
|
||||
|
||||
raise FileNotFoundError(
|
||||
|
||||
f"Database not found:\n{DATABASE_FILE}"
|
||||
|
||||
)
|
||||
|
||||
print("Opening database...")
|
||||
|
||||
conn = connect(DATABASE_FILE)
|
||||
|
||||
context = ReportContext(
|
||||
"static"
|
||||
)
|
||||
|
||||
print("Copying static resources...")
|
||||
|
||||
copy_static()
|
||||
|
||||
try:
|
||||
|
||||
#
|
||||
# Dashboard
|
||||
#
|
||||
|
||||
print("Generating dashboard...")
|
||||
|
||||
dashboard = generate_dashboard(
|
||||
conn,
|
||||
context,
|
||||
)
|
||||
|
||||
save_text(
|
||||
|
||||
OUTPUT_DIR / "index.html",
|
||||
|
||||
dashboard,
|
||||
|
||||
)
|
||||
|
||||
#
|
||||
# Capture Sessions
|
||||
#
|
||||
|
||||
print("Generating capture sessions page...")
|
||||
|
||||
capture_sessions = generate_capture_sessions(
|
||||
conn,
|
||||
context,
|
||||
)
|
||||
|
||||
save_text(
|
||||
|
||||
OUTPUT_DIR / "capture_sessions.html",
|
||||
|
||||
capture_sessions,
|
||||
|
||||
)
|
||||
|
||||
#
|
||||
# Sessions
|
||||
#
|
||||
|
||||
print("Generating session pages...")
|
||||
|
||||
generated = build_all_session_pages(
|
||||
conn,
|
||||
context,
|
||||
)
|
||||
|
||||
print()
|
||||
|
||||
print(
|
||||
|
||||
f"Generated {len(generated)} session pages."
|
||||
|
||||
)
|
||||
|
||||
finally:
|
||||
|
||||
conn.close()
|
||||
|
||||
print()
|
||||
|
||||
print("Done.")
|
||||
|
||||
print()
|
||||
|
||||
print(
|
||||
|
||||
"Dashboard:"
|
||||
|
||||
)
|
||||
|
||||
print(
|
||||
|
||||
OUTPUT_DIR / "index.html"
|
||||
|
||||
)
|
||||
|
||||
print()
|
||||
|
||||
print(
|
||||
|
||||
"Output directory:"
|
||||
|
||||
)
|
||||
|
||||
print(
|
||||
|
||||
OUTPUT_DIR.resolve()
|
||||
|
||||
)
|
||||
|
||||
print()
|
||||
|
||||
print("=" * 60)
|
||||
|
||||
print()
|
||||
|
||||
# ============================================================
|
||||
# MAIN
|
||||
# ============================================================
|
||||
|
||||
def main():
|
||||
|
||||
build_report()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user