From 061bd008b091fe58d7e87e011eaa77a06276ce3b Mon Sep 17 00:00:00 2001
From: Christian Boettcher <c.boettcher@fz-juelich.de>
Date: Mon, 10 May 2021 11:13:40 +0200
Subject: [PATCH] some additional moving around files and restructuring pytest
 now works, apiserver now a module

---
 .gitignore                                        |  4 +++-
 apiserver/__init__.py                             |  1 +
 apiserver/main.py                                 | 13 +++++++------
 apiserver/{ => storage}/JsonFileStorageAdapter.py |  4 ++--
 apiserver/{ => storage}/LocationStorage.py        |  0
 apiserver/storage/__init__.py                     |  3 +++
 apiserver_tests/__init__.py                       |  0
 apiserver_tests/context.py                        |  6 ++++++
 apiserver_tests/test_responsiveness.py            | 10 ++++++----
 app/data/.testingdir                              |  1 +
 10 files changed, 29 insertions(+), 13 deletions(-)
 rename apiserver/{ => storage}/JsonFileStorageAdapter.py (96%)
 rename apiserver/{ => storage}/LocationStorage.py (100%)
 create mode 100644 apiserver/storage/__init__.py
 delete mode 100644 apiserver_tests/__init__.py
 create mode 100644 apiserver_tests/context.py
 create mode 100644 app/data/.testingdir

diff --git a/.gitignore b/.gitignore
index fc70b4a..d95d476 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
 **__pycache__/
-**app/
\ No newline at end of file
+
+# contains data for local tests
+app/
\ No newline at end of file
diff --git a/apiserver/__init__.py b/apiserver/__init__.py
index e69de29..d7a803f 100644
--- a/apiserver/__init__.py
+++ b/apiserver/__init__.py
@@ -0,0 +1 @@
+from .main import app
\ No newline at end of file
diff --git a/apiserver/main.py b/apiserver/main.py
index 7a984b9..91fd2b5 100644
--- a/apiserver/main.py
+++ b/apiserver/main.py
@@ -6,11 +6,11 @@ from fastapi import HTTPException
 
 from pydantic import BaseModel
 
-from LocationStorage import LocationDataType
-from LocationStorage import LocationData
-from LocationStorage import AbstractLocationDataStorageAdapter
+from .storage import JsonFileStorageAdapter
 
-from JsonFileStorageAdapter import JsonFileStorageAdapter
+from .storage import AbstractLocationDataStorageAdapter
+from .storage import LocationData
+from .storage import LocationDataType
 
 from enum import Enum
 
@@ -39,7 +39,8 @@ def list_datasets(location_data_type : LocationDataType):
 # register a new dataset, the response will contain the new dataset and its id
 @app.put("/{location_data_type}")
 def add_dataset(location_data_type : LocationDataType, dataset : LocationData):
-    return adapter.addNew(location_data_type, dataset)
+    usr: str = "testuser"
+    return adapter.addNew(location_data_type, dataset, usr)
 
 # returns all information about a specific dataset, identified by id
 @app.get("/{location_data_type}/{dataset_id}")
@@ -53,6 +54,6 @@ def get_specific_dataset(location_data_type : LocationDataType, dataset_id: str)
 @app.put("/{location_data_type}/{dataset_id}")
 def update_specific_dataset(location_data_type : LocationDataType, dataset_id: str, dataset : LocationData):
     try:
-        return adapter.updateDetails(location_data_type, dataset_id, dataset)
+        return adapter.updateDetails(location_data_type, dataset_id, dataset, usr)
     except FileNotFoundError:
         raise HTTPException(status_code=404, detail='The provided id does not exist for this datatype.')
diff --git a/apiserver/JsonFileStorageAdapter.py b/apiserver/storage/JsonFileStorageAdapter.py
similarity index 96%
rename from apiserver/JsonFileStorageAdapter.py
rename to apiserver/storage/JsonFileStorageAdapter.py
index e65e62d..f6dde1f 100644
--- a/apiserver/JsonFileStorageAdapter.py
+++ b/apiserver/storage/JsonFileStorageAdapter.py
@@ -2,7 +2,7 @@ import os
 import json
 import uuid
 
-from LocationStorage import AbstractLocationDataStorageAdapter, LocationData, LocationDataType
+from .LocationStorage import AbstractLocationDataStorageAdapter, LocationData, LocationDataType
 
 from typing import List
 
@@ -85,7 +85,7 @@ class JsonFileStorageAdapter(AbstractLocationDataStorageAdapter):
             json.dump(data.__dict__, file)
         return {id : data}
 
-    def getOwner(self, type: LocationDataType(), id: str):
+    def getOwner(self, type: LocationDataType, id: str):
         raise NotImplementedError()
 
     def checkPerm(self, type: LocationDataType, id: str, usr: str):
diff --git a/apiserver/LocationStorage.py b/apiserver/storage/LocationStorage.py
similarity index 100%
rename from apiserver/LocationStorage.py
rename to apiserver/storage/LocationStorage.py
diff --git a/apiserver/storage/__init__.py b/apiserver/storage/__init__.py
new file mode 100644
index 0000000..3d63565
--- /dev/null
+++ b/apiserver/storage/__init__.py
@@ -0,0 +1,3 @@
+from .JsonFileStorageAdapter import JsonFileStorageAdapter
+
+from .LocationStorage import LocationDataType, LocationData, AbstractLocationDataStorageAdapter
\ No newline at end of file
diff --git a/apiserver_tests/__init__.py b/apiserver_tests/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/apiserver_tests/context.py b/apiserver_tests/context.py
new file mode 100644
index 0000000..2f8a361
--- /dev/null
+++ b/apiserver_tests/context.py
@@ -0,0 +1,6 @@
+import os
+import sys
+sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+
+import apiserver
+import apiserver.storage as storage 
\ No newline at end of file
diff --git a/apiserver_tests/test_responsiveness.py b/apiserver_tests/test_responsiveness.py
index db58b16..b70b0b9 100644
--- a/apiserver_tests/test_responsiveness.py
+++ b/apiserver_tests/test_responsiveness.py
@@ -3,17 +3,19 @@
 
 from fastapi.testclient import TestClient
 
-from apiserver.LocationStorage import LocationDataType
-from apiserver import main
+from context import apiserver
+from context import storage
 
 
-client = TestClient(main.app)
+client = TestClient(apiserver.app)
 
+# get root
 def test_root():
     rsp = client.get('/')
     assert rsp.status_code >= 200 and rsp.status_code < 300 # any 200 response is fine, as a get to the root should not return any error
 
+# get every type in type enum
 def test_types():
-    for location_type in LocationDataType:
+    for location_type in storage.LocationDataType:
         rsp = client.get('/' + location_type.value)
         assert rsp.status_code >= 200 and rsp.status_code < 300 # any 200 response is fine, as a get to the datatypes should not return any error
\ No newline at end of file
diff --git a/app/data/.testingdir b/app/data/.testingdir
new file mode 100644
index 0000000..33b2030
--- /dev/null
+++ b/app/data/.testingdir
@@ -0,0 +1 @@
+# This file only exists as a placeholder, so that local testing works immediatly after cloning.
\ No newline at end of file
-- 
GitLab