Implement map
This commit is contained in:
2
server/.gitignore
vendored
2
server/.gitignore
vendored
@@ -1,4 +1,4 @@
|
||||
.venv
|
||||
secret.env
|
||||
tiles
|
||||
unmined-out
|
||||
**/__pycache__
|
||||
|
||||
@@ -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)
|
||||
|
||||
37
server/server/map_tiles.py
Normal file
37
server/server/map_tiles.py
Normal 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()
|
||||
@@ -6,6 +6,7 @@ class Settings(BaseSettings):
|
||||
dev_npm_port: int = 5173
|
||||
|
||||
frontend_path: str = "frontend"
|
||||
unmined_out_path: str = "unmined-out"
|
||||
|
||||
|
||||
settings = Settings()
|
||||
|
||||
6
server/server/templates.py
Normal file
6
server/server/templates.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from jinja2 import Environment, FileSystemLoader, select_autoescape
|
||||
|
||||
j2env = Environment(
|
||||
loader=FileSystemLoader("templates"),
|
||||
autoescape=select_autoescape(),
|
||||
)
|
||||
10
server/templates/metadata.js
Normal file
10
server/templates/metadata.js
Normal file
@@ -0,0 +1,10 @@
|
||||
/* {{props_file}} */
|
||||
{{map_props}}
|
||||
|
||||
/* {{regions_file}} */
|
||||
{{map_regions}}
|
||||
|
||||
return {
|
||||
properties: UnminedMapProperties,
|
||||
regions: UnminedRegions,
|
||||
}
|
||||
Reference in New Issue
Block a user