Last active
November 4, 2019 15:56
-
-
Save probablytom/ba5e3ef193c4d6e06473ba2dc18cc690 to your computer and use it in GitHub Desktop.
Flask API sample for William
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# The easiest way to make REST apis in Python is usually to use flask. You can use Django if you want too, but it's heavier, and this will get the job done fine (and help you unerstand more about what it is that's going on). | |
from flask import Flask, request | |
from bson.json_util import dumps | |
import ast | |
import json | |
app = Flask(__name__) | |
domain = "tom.coffee" | |
port = 27017 | |
connectionstring = "mongodb://" + domain + ":" + str(port) + "/" | |
connectionstring = 'mongodb+srv://admin:W05BiKav@rpglitestorage-hnw6v.mongodb.net/test?retryWrites=true&w=majority' | |
from pymongo import MongoClient | |
client = MongoClient(connectionstring) | |
database_name = "Game_data" | |
db = client[database_name] | |
players = db["players"] | |
games = db["games"] | |
@app.route("/api/v1/players/find/<playerid>", methods=["GET"]) | |
def hello(playerid): | |
return dumps(players.find_one({"player_id": playerid})), 200 | |
@app.route("/api/v1/players/create", methods=["POST"]) | |
def create_user(): | |
try: | |
try: | |
body = ast.literal_eval(json.dumps(request.get_json())) | |
except: | |
# Error; couldn't get the body of the request. | |
return "Bad request, couldn't parse", 400 | |
new_record = players.insert(body) | |
## We'll make a nice response. | |
if isinstance(record_created, list): | |
return dumps([str(v) for v in record_created]), 201 | |
else: | |
return dumps(str(record_created)), 201 | |
except: | |
# Error inserting the body; return a 500. | |
return "Error creating the user in Mongo", 500 | |
def response_builder(action, *args, **kwargs): | |
def inner_closure(*args, **kwargs): | |
try: | |
try: | |
body = ast.literal_eval(json.dumps(request.get_json())) | |
except: | |
# Error; couldn't get the body of the request. | |
return "Bad request, couldn't parse", 400 | |
return action(body, *args, **kwargs) | |
except: | |
# Something went wrong, but this is too generic to work out what might have happened. | |
return "Server error from autogenerated endpoint", 500 | |
return inner_closure | |
@app.route('/exists/<username>') | |
def check_username(username): | |
return str(players.find_one({'Username': username}) is not None), 200 | |
def delete_player(body, player_id): | |
deleted_user = players.delete_one({"player_id": player_id}) | |
if deleted_user.deleted_count > 0: | |
return "Deleted user with id " + str(player_id) + " successfully.", 204 | |
else: | |
return "Couldn't find user to delete", 404 | |
#app.route("/api/v1/players/find/<player_id>")(response_builder(delete_player)) | |
if __name__ == "__main__": | |
app.run(host="0.0.0.0", port=443) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment