diff options
| author | JP Appel <jeanpierre.appel01@gmail.com> | 2023-10-25 14:14:32 -0400 |
|---|---|---|
| committer | JP Appel <jeanpierre.appel01@gmail.com> | 2023-10-25 14:14:32 -0400 |
| commit | 8f3ed01bbdf0c08033981d7284125d9f696deb16 (patch) | |
| tree | 2fc01a88aa8364720edcf48883ac9e2175ba1bd8 /server | |
| parent | 846ff147f9e4282991c9042819173c7264a614fc (diff) | |
| parent | f6550e60d256c7c19c8c430ed7294e4d8ea1d4d1 (diff) | |
Merge branch 'endpoint_change'
Diffstat (limited to 'server')
| -rw-r--r-- | server/server.py | 62 |
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(): |
