From e727a33f51c331d7b6e2c670672a25a39255adf7 Mon Sep 17 00:00:00 2001
From: Tor-Einar Skog <tor-einar.skog@nibio.no>
Date: Mon, 13 Feb 2023 11:20:20 +0100
Subject: [PATCH] First version with working endpoint (/models)

---
 app/__init.py__                        |  0
 app/internal/__init.py__               |  0
 {src => app/internal}/model_factory.py | 19 +++++++++++--------
 app/main.py                            | 18 ++++++++++++++++++
 safe_pip_freeze.py                     |  6 ++++++
 src/main.py                            |  8 --------
 6 files changed, 35 insertions(+), 16 deletions(-)
 create mode 100644 app/__init.py__
 create mode 100644 app/internal/__init.py__
 rename {src => app/internal}/model_factory.py (87%)
 create mode 100644 app/main.py
 create mode 100644 safe_pip_freeze.py
 delete mode 100644 src/main.py

diff --git a/app/__init.py__ b/app/__init.py__
new file mode 100644
index 0000000..e69de29
diff --git a/app/internal/__init.py__ b/app/internal/__init.py__
new file mode 100644
index 0000000..e69de29
diff --git a/src/model_factory.py b/app/internal/model_factory.py
similarity index 87%
rename from src/model_factory.py
rename to app/internal/model_factory.py
index 0abc91c..4c8821a 100644
--- a/src/model_factory.py
+++ b/app/internal/model_factory.py
@@ -34,11 +34,7 @@ def discover_models():
     return models
 
 def get_model_instance(model_id):
-    global _models
-    if _models is None:
-        print("Indexing models")
-        _models = discover_models()
-    return _models.get(model_id)()
+    return get_vips_models().get(model_id)()
 
 def get_vips_model_packages():
     global _packages
@@ -46,9 +42,16 @@ def get_vips_model_packages():
         discover_models()
     return _packages
 
+def get_vips_models():
+    global _models
+    if _models is None:
+        #print("Indexing models")
+        _models = discover_models()
+    return _models
+
 # USAGE EXAMPLE. REMOVE when U start using the module from elsewhere
-model = get_model_instance("REFERENCEM")
-print(model.get_model_name())
-print(get_vips_model_packages())
+#model = get_model_instance("REFERENCEM")
+#print(model.get_model_name())
+#print(get_vips_model_packages())
 
 
diff --git a/app/main.py b/app/main.py
new file mode 100644
index 0000000..e5ff893
--- /dev/null
+++ b/app/main.py
@@ -0,0 +1,18 @@
+from fastapi import FastAPI
+from fastapi.responses import PlainTextResponse
+from app.internal.model_factory import *
+
+app = FastAPI()
+
+
+@app.get("/")
+async def root():
+    return {"message": "Hello World"}
+
+@app.get("/models", response_class=PlainTextResponse)
+async def print_model_list() -> str:
+    model_list = ""
+    vips_models = get_vips_models()
+    for model_id in vips_models:
+        model_list = "%s%s %s\n" %(model_list, model_id, get_model_instance(model_id).get_model_name())
+    return model_list
diff --git a/safe_pip_freeze.py b/safe_pip_freeze.py
new file mode 100644
index 0000000..6ddff3e
--- /dev/null
+++ b/safe_pip_freeze.py
@@ -0,0 +1,6 @@
+import sys
+import subprocess
+import src.model_factory
+
+# Intention: Make sure that pip freeze doesn't include VIPS models
+# Only necessary if we decide to stick with using pip freeze
\ No newline at end of file
diff --git a/src/main.py b/src/main.py
deleted file mode 100644
index ee60be1..0000000
--- a/src/main.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from fastapi import FastAPI
-
-app = FastAPI()
-
-
-@app.get("/")
-async def root():
-    return {"message": "Hello World"}
-- 
GitLab