Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,20 @@ Steps to run:

If Flask doesn't run, it's possible you'd need to first export FLASK_APP as an environment variable, set to "wsgi" (so in Bash, export FLASK_APP=wsgi).
However, the script is named wsgi.py specifically because Flask is supposed to auto-detect it. So if this issue ever did come up, please ping Luke so he can look into it.

## Testing in VS Code

Be sure to add the following to `.vscode/settings.json` in your local checkout:

```json
"python.testing.unittestEnabled": true,
"python.testing.unittestArgs": [
"-v",
"-s",
"./tests/cases",
"-t",
"./",
"-p",
"t_*.py"
],
```
56 changes: 4 additions & 52 deletions src/ogd/apis/HelloAPI.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
# import OGD libraries

# import locals
from ogd.apis.resources.Hello import Hello
from ogd.apis.resources.ParamHello import ParamHello
from ogd.apis.configs.ServerConfig import ServerConfig
from ogd.apis.models.enums.ResponseStatus import ResponseStatus
from ogd.apis.models.enums.RESTType import RESTType
Expand All @@ -22,62 +24,12 @@ class HelloAPI:
@staticmethod
def register(app:Flask, server_config:ServerConfig):
api = Api(app)
api.add_resource(HelloAPI.Hello, '/hello')
api.add_resource(HelloAPI.ParamHello, '/p_hello/<name>')
api.add_resource(Hello, '/hello')
api.add_resource(ParamHello, '/p_hello/<name>')
api.add_resource(HelloAPI.Version, '/version')

HelloAPI.server_config = server_config

class Hello(Resource):
def get(self):
ret_val = APIResponse(
req_type = RESTType.GET,
val = None,
msg = "Hello! You GETted successfully!",
status = ResponseStatus.OK)
return ret_val.AsDict

def post(self):
ret_val = APIResponse(
req_type = RESTType.POST,
val = None,
msg = "Hello! You POSTed successfully!",
status = ResponseStatus.OK)
return ret_val.AsDict

def put(self):
ret_val = APIResponse(
req_type = RESTType.PUT,
val = None,
msg = "Hello! You PUTted successfully!",
status = ResponseStatus.OK)
return ret_val.AsDict

class ParamHello(Resource):
def get(self, name):
ret_val = APIResponse(
req_type = RESTType.GET,
val = None,
msg = f"Hello {name}! You GETted successfully!",
status = ResponseStatus.OK)
return ret_val.AsDict

def post(self, name):
ret_val = APIResponse(
req_type = RESTType.POST,
val = None,
msg = f"Hello {name}! You POSTed successfully!",
status = ResponseStatus.OK)
return ret_val.AsDict

def put(self, name):
ret_val = APIResponse(
req_type = RESTType.PUT,
val = None,
msg = f"Hello {name}! You PUTted successfully!",
status = ResponseStatus.OK)
return ret_val.AsDict

class Version(Resource):
def get(self):
ret_val = APIResponse(
Expand Down
6 changes: 3 additions & 3 deletions src/ogd/apis/models/APIResponse.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,15 @@ def __init__(self, req_type:Optional[RESTType | str], val:Optional[Map], msg:str
self._type = RESTType[req_type]
else:
self._type = None
if isinstance(val, dict):
if isinstance(val, dict) or val is None:
self._val = val
else:
try:
self._val = json.loads(str(val))
except json.decoder.JSONDecodeError as err:
abbreviated_val = f"{str(val)[:20]}..." if len(str(val)) > 20 else str(val)
msg = f"API response 'value' field contained value '{abbreviated_val}' with invalid type {type(val)}, which could not be converted to a dictionary. Attempting to do so resulted in error:\n{err}\nThe value field will be left blank."
Logger.Log(msg, logging.ERROR)
_msg = f"API response 'value' field contained value '{abbreviated_val}' with invalid type {type(val)}, which could not be converted to a dictionary. Attempting to do so resulted in error:\n{err}\nThe value field will be left blank."
Logger.Log(_msg, logging.ERROR)
self._val = None
self._msg : str = msg
self._status : ResponseStatus = status
Expand Down
29 changes: 29 additions & 0 deletions src/ogd/apis/resources/Hello.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# import 3rd-party libraries
from flask_restful import Resource

from ogd.apis.models.APIResponse import APIResponse, RESTType, ResponseStatus

class Hello(Resource):
def get(self):
ret_val = APIResponse(
req_type = RESTType.GET,
val = None,
msg = "Hello! You GETted successfully!",
status = ResponseStatus.OK)
return ret_val.AsDict

def post(self):
ret_val = APIResponse(
req_type = RESTType.POST,
val = None,
msg = "Hello! You POSTed successfully!",
status = ResponseStatus.OK)
return ret_val.AsDict

def put(self):
ret_val = APIResponse(
req_type = RESTType.PUT,
val = None,
msg = "Hello! You PUTted successfully!",
status = ResponseStatus.OK)
return ret_val.AsDict
29 changes: 29 additions & 0 deletions src/ogd/apis/resources/ParamHello.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# import 3rd-party libraries
from flask_restful import Resource

from ogd.apis.models.APIResponse import APIResponse, RESTType, ResponseStatus

class ParamHello(Resource):
def get(self, name):
ret_val = APIResponse(
req_type = RESTType.GET,
val = None,
msg = f"Hello {name}! You GETted successfully!",
status = ResponseStatus.OK)
return ret_val.AsDict

def post(self, name):
ret_val = APIResponse(
req_type = RESTType.POST,
val = None,
msg = f"Hello {name}! You POSTed successfully!",
status = ResponseStatus.OK)
return ret_val.AsDict

def put(self, name):
ret_val = APIResponse(
req_type = RESTType.PUT,
val = None,
msg = f"Hello {name}! You PUTted successfully!",
status = ResponseStatus.OK)
return ret_val.AsDict
Loading