Skip to content

Commit

Permalink
Allow multiple models in the FastAPI GraphViewer
Browse files Browse the repository at this point in the history
  • Loading branch information
thvitt committed Feb 24, 2021
1 parent 1b2f8d7 commit 67dc0e8
Showing 1 changed file with 16 additions and 6 deletions.
22 changes: 16 additions & 6 deletions src/graphviewer/gvfa.py
Expand Up @@ -2,6 +2,7 @@
import codecs
from asyncio import create_subprocess_exec, wait_for
from collections import Mapping
from pathlib import Path

import pydantic
from dataclasses import dataclass, Field
Expand Down Expand Up @@ -33,12 +34,12 @@ def __init__(self, loader: Callable[[S], T], keys: Optional[Iterable[S]] = None)
self._loaded = {}
self._items = {}
for key in keys or []:
self._load[key] = False
self._loaded[key] = False

def __getitem__(self, item: S) -> T:
if not self._loaded.get(item):
self._items[item] = self._load(item)
self._load[item] = True
self._loaded[item] = True
return self._items[item]

def __iter__(self):
Expand Down Expand Up @@ -93,22 +94,31 @@ class ExportFormat(str, Enum):

@app.on_event('startup')
def load_models():
# TODO load other models if available
# TODO configurability
models['default'] = MacrogenesisInfo('target/macrogenesis/macrogen-info.zip')
global models

model_files = list(Path('target').glob('*-*/macrogen-info.zip'))
by_key = {'default': Path('target/macrogenesis/macrogen-info.zip')}
by_key.update({p.parent.stem: p for p in model_files if p not in by_key.values()})
def load_model(key):
return MacrogenesisInfo(by_key[key])
models = LazyLoader(load_model, by_key.keys())

# models['default'] = MacrogenesisInfo('target/macrogenesis/macrogen-info.zip')



templates = Jinja2Templates(directory='src/graphviewer/templates')


@app.get('/macrogenesis/subgraph')
async def render_form(request: Request):
return templates.TemplateResponse('form.html', {'request': request})
return templates.TemplateResponse('form.html', {'request': request, 'models': models})


@app.get('/macrogenesis/subgraph/help')
async def render_form(request: Request):
return templates.TemplateResponse('help.html', {'request': request})
return templates.TemplateResponse('help.html', {'request': request, 'models': models})


@app.get('/macrogenesis/subgraph/check-nodes', response_model=NodeReport)
Expand Down

0 comments on commit 67dc0e8

Please sign in to comment.