generated from mwc/lab_riddles
65 lines
2.4 KiB
Python
65 lines
2.4 KiB
Python
# RiddleAPI
|
|
# ---------
|
|
# By Chris Proctor
|
|
# The Riddle API takes care of connecting to the server.
|
|
|
|
import requests
|
|
from random import choice, randrange
|
|
|
|
class APIError(Exception):
|
|
"A custom error we'll use when something goes wrong with the API"
|
|
|
|
class RiddleAPI:
|
|
"Provides an easy way for Python programs to interact with a Riddle Server"
|
|
def __init__(self, server_url):
|
|
self.server_url = server_url
|
|
|
|
def get_all_riddles(self):
|
|
"Fetches all the riddles from the server"
|
|
route = "/all"
|
|
response = requests.get(self.server_url + route)
|
|
if response.ok:
|
|
return response.json()['riddles']
|
|
else:
|
|
raise APIError(response.json()['errors'])
|
|
|
|
def guess_riddle(self, riddle_id, guess):
|
|
"Submits a guess to the server. Returns True or False"
|
|
route = "/guess"
|
|
params = {'id': riddle_id, 'answer': guess}
|
|
response = requests.post(self.server_url + route, json=params)
|
|
if response.ok:
|
|
return response.json()['correct']
|
|
# I added ['correct'] here because otherwise it kept telling
|
|
# me "Yes!" even when I knew I put in the wrong response...
|
|
# Was I supposed to do that? I thought this was supposed to
|
|
# have been implemented for me already. Or did I accidentally
|
|
# delete it without realizing?
|
|
else:
|
|
raise APIError(response.json()['errors'])
|
|
|
|
def get_riddle(self, riddle_id):
|
|
"Fetches a single riddle from the server"
|
|
route = "/show"
|
|
params = {'id': riddle_id}
|
|
response = requests.get(self.server_url + route, json=params)
|
|
if response.ok:
|
|
return response.json()
|
|
else:
|
|
raise APIError(response.json()['errors'])
|
|
|
|
def get_random_riddle(self):
|
|
"Fetches all riddles from the server and then randomly returns one"
|
|
riddle_id = randrange(0,len(self.get_all_riddles()))
|
|
return self.get_riddle(riddle_id)
|
|
# Was I supposed to do it this way?
|
|
|
|
def add_riddle(self, question, answer):
|
|
"Adds a new riddle to the server"
|
|
route = "/new"
|
|
params = {'question':question, 'answer':answer}
|
|
response = requests.post(self.server_url + route, json=params)
|
|
if response.ok:
|
|
return response.json()
|
|
else:
|
|
raise APIError(response.json()['errors']) |