Implement map

This commit is contained in:
2022-09-11 23:16:22 +02:00
parent 8651f60645
commit c63eeb83a0
16 changed files with 1035 additions and 46 deletions

2
server/.gitignore vendored
View File

@@ -1,4 +1,4 @@
.venv
secret.env
tiles
unmined-out
**/__pycache__

View File

@@ -1,14 +1,18 @@
import json
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from jinja2 import Environment, FileSystemLoader, select_autoescape
from .settings import settings
from .user import user_auth
from .map_tiles import map_tiles
from .templates import j2env
app = FastAPI()
app.mount("/user/", user_auth)
app.mount("/map/", map_tiles)
frontend = FastAPI()
manifest = dict()
if not settings.dev_mode:
@@ -18,17 +22,13 @@ if not settings.dev_mode:
manifest = json.load(f)
j2env = Environment(
loader=FileSystemLoader("templates"),
autoescape=select_autoescape(),
)
index = j2env.get_template("index.html").render(
dev_mode=settings.dev_mode,
manifest=manifest,
)
@app.middleware("http")
@frontend.middleware("http")
async def index_catch_all(request: Request, call_next):
response = await call_next(request)
@@ -39,4 +39,6 @@ async def index_catch_all(request: Request, call_next):
if not settings.dev_mode:
app.mount("/", StaticFiles(directory=settings.frontend_path))
frontend.mount("/", StaticFiles(directory=settings.frontend_path))
app.mount("/", frontend)

View File

@@ -0,0 +1,37 @@
from fastapi import FastAPI, Response
from fastapi.staticfiles import StaticFiles
from .settings import settings
from .templates import j2env
map_tiles = FastAPI()
map_tiles.mount("/tiles/", StaticFiles(directory=f"{settings.unmined_out_path}/tiles"))
class MetadataJsResponse(Response):
media_type = "text/javascript"
MAP_PROPS_FILE = f"{settings.unmined_out_path}/unmined.map.properties.js"
MAP_REGIONS_FILE = f"{settings.unmined_out_path}/unmined.map.regions.js"
def parse_metadata():
with open(MAP_PROPS_FILE, "r") as f:
map_props = f.read()
with open(MAP_REGIONS_FILE, "r") as f:
map_regions = f.read()
return j2env.get_template("metadata.js").render(
props_file=MAP_PROPS_FILE,
map_props=map_props,
regions_file=MAP_REGIONS_FILE,
map_regions=map_regions,
)
@map_tiles.get("/metadata.js", response_class=MetadataJsResponse)
async def get_metadata():
# TODO cache
return parse_metadata()

View File

@@ -6,6 +6,7 @@ class Settings(BaseSettings):
dev_npm_port: int = 5173
frontend_path: str = "frontend"
unmined_out_path: str = "unmined-out"
settings = Settings()

View File

@@ -0,0 +1,6 @@
from jinja2 import Environment, FileSystemLoader, select_autoescape
j2env = Environment(
loader=FileSystemLoader("templates"),
autoescape=select_autoescape(),
)

View File

@@ -0,0 +1,10 @@
/* {{props_file}} */
{{map_props}}
/* {{regions_file}} */
{{map_regions}}
return {
properties: UnminedMapProperties,
regions: UnminedRegions,
}