aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJP Appel <jeanpierre.appel01@gmail.com>2023-10-25 14:14:32 -0400
committerJP Appel <jeanpierre.appel01@gmail.com>2023-10-25 14:14:32 -0400
commit8f3ed01bbdf0c08033981d7284125d9f696deb16 (patch)
tree2fc01a88aa8364720edcf48883ac9e2175ba1bd8
parent846ff147f9e4282991c9042819173c7264a614fc (diff)
parentf6550e60d256c7c19c8c430ed7294e4d8ea1d4d1 (diff)
Merge branch 'endpoint_change'
-rw-r--r--server/server.py62
1 files changed, 53 insertions, 9 deletions
diff --git a/server/server.py b/server/server.py
index 3af80f6..71b6f0f 100644
--- a/server/server.py
+++ b/server/server.py
@@ -21,6 +21,17 @@ def recieve_game(game_fp) -> dict:
return game
+def create_game(length: int) -> None:
+ return {
+ 'size': length,
+ 'finished': False,
+ 'board': [True] * length,
+ 'turn': 0,
+ 'version': '0.0.0',
+ 'human_turn': False,
+ 'winner': ''
+ }
+
def send_game(game: dict) -> str:
game_json = json.dumps(game)
return game_json.encode('utf-8')
@@ -43,19 +54,52 @@ def play_game(game: dict) -> None:
game['winner'] = 'Computer'
+def parse_query_params(query_string) -> dict:
+ queries = {}
+ for entry in query_string.split('&'):
+ key, val = entry.split('=', 2)
+ queries[key] = val
+
+ return queries
+
+
def application(env, start_response):
headers = [('Content-Type', 'application/json')]
- start_response('200 OK', headers)
- if env['REQUEST_METHOD'] == 'POST':
- try:
- game = recieve_game(env['wsgi.input'])
- except json.JSONDecodeError:
- return [json.dumps({'failure': True}).encode('utf-8')]
- play_game(game)
- return [send_game(game)]
+ path_info = env['PATH_INFO']
+ status = '200 OK'
+ response = []
+
+ match env['REQUEST_METHOD'], env['PATH_INFO']:
+ case ('GET', '/toggle/game/new'):
+ queries = parse_query_params(env['QUERY_STRING'])
+ game = create_game(queries['size'])
+ response.append(send_game(game))
+
+ case ('POST', '/toggle/game/play'):
+ try:
+ game = recieve_game(env['wsgi.input'])
+
+ except json.JSONDecodeError:
+ status = '500 Internal Server Error'
+ decode_error = {
+ 'Error': 'json parsing error, is your request formatter correctly'
+ }
+ response.append(json.dumps(decode_error).encode('utf-8'))
+
+ play_game(game)
+ response.append(send_game(game))
+
+ case ('DELETE', _):
+ status = '405 Method Not Allowed'
+ headers.remove(('Content-Type', 'application/json'))
+
+ case _:
+ status = '404 Not Found'
+ headers.remove(('Content-Type', 'application/json'))
- return [json.dumps({'not_post': True}).encode('utf-8')]
+ start_response(status, headers)
+ return response
def main():