Skip to content

Instantly share code, notes, and snippets.

@probablytom
Last active November 4, 2019 15:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save probablytom/ba5e3ef193c4d6e06473ba2dc18cc690 to your computer and use it in GitHub Desktop.
Save probablytom/ba5e3ef193c4d6e06473ba2dc18cc690 to your computer and use it in GitHub Desktop.
Flask API sample for William
# 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