Skip to content

Instantly share code, notes, and snippets.

@corintxt
Created February 8, 2019 21:33
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 corintxt/52bb5791ec5d471f1f97aec2d76bf7d7 to your computer and use it in GitHub Desktop.
Save corintxt/52bb5791ec5d471f1f97aec2d76bf7d7 to your computer and use it in GitHub Desktop.
Basic database server in Python for RC pairing interview
from http.server import BaseHTTPRequestHandler, HTTPServer
HOST_NAME = 'localhost'
PORT_NUMBER = 4000
my_database = {}
class DatabaseHandler(BaseHTTPRequestHandler):
def do_HEAD(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
def do_GET(self):
if self.path[0:5] == '/set?':
self.respond(200)
self.set_values(self.path)
elif self.path[0:9] == '/get?key=':
self.respond(200)
self.get_value(self.path)
else:
print("Other GET request")
self.respond(500)
def set_values(self, values):
entry = values.split('?')[1].split("=")
try:
key = entry[0]
value = entry[1]
my_database[key] = value
except IndexError:
self.user_message("<p>{} is not a valid key-value pair</p>".format(entry))
else:
self.user_message("<p>Setting data: '{}' = '{}'</p>".format(key, value))
print(my_database)
def get_value(self, keypath):
key = keypath.split('=')[1]
print("Getting data: {}".format(key))
try:
value = my_database[key]
except KeyError:
self.user_message("<p>Key '{}' not present in database</p>".format(key))
else:
self.user_message("<p>Value of '{}': <b>{}</b></p>".format(key, value))
def respond(self, status_code):
path = self.path
self.send_response(status_code)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.user_message("You accessed path: {}".format(path))
def user_message(self, message):
# use bytes() for content or throws error
self.wfile.write(bytes(message, 'UTF-8'))
if __name__ == '__main__':
server_class = HTTPServer
httpd = server_class((HOST_NAME, PORT_NUMBER), DatabaseHandler)
print('Starting server - %s:%s' % (HOST_NAME, PORT_NUMBER))
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
httpd.server_close()
print('Stopping server - %s:%s' % (HOST_NAME, PORT_NUMBER))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment