Skip to content

Instantly share code, notes, and snippets.

@treygilliland
Created November 9, 2025 01:00
Show Gist options
  • Select an option

  • Save treygilliland/651a65828eacf5e27e14c7e785a1f040 to your computer and use it in GitHub Desktop.

Select an option

Save treygilliland/651a65828eacf5e27e14c7e785a1f040 to your computer and use it in GitHub Desktop.
Python Key Value Store for Python 3.10+
from http.server import HTTPServer, BaseHTTPRequestHandler
from urllib.parse import urlparse, parse_qs
class KVStore:
def __init__(self):
self.store: dict[str, str] = {}
def set_value(self, key: str, value: str):
self.store[key] = value
def get_value(self, key: str) -> str | None:
return self.store.get(key, None)
class KVService:
def __init__(self):
self.kvstore = KVStore()
def set_value(self, key: str, value: str):
self.kvstore.set_value(key, value)
def get_value(self, key: str) -> str | None:
return self.kvstore.get_value(key)
kv_service = KVService()
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
parsed = urlparse(self.path)
params = parse_qs(parsed.query)
def handle_set():
if not params:
self.send_response(400)
self.end_headers()
self.wfile.write(b'key=value pair required\n')
return
key, values = next(iter(params.items()))
kv_service.set_value(key, values[0])
self.send_response(200)
self.end_headers()
self.wfile.write(b'OK\n')
def handle_get():
key = params.get('key', [None])[0]
if key is None:
self.send_response(400)
self.end_headers()
self.wfile.write(b'key required\n')
return
value = kv_service.get_value(key)
if value is None:
self.send_response(404)
self.end_headers()
self.wfile.write(b'key not found\n')
return
self.send_response(200)
self.end_headers()
self.wfile.write(value.encode() + b'\n')
if parsed.path == '/set':
handle_set()
elif parsed.path == '/get':
handle_get()
else:
self.send_response(404)
self.end_headers()
if __name__ == '__main__':
kv_server = HTTPServer(('localhost', 4000), Handler)
print('KVServer running on http://localhost:4000')
kv_server.serve_forever()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment