Created
November 9, 2025 01:00
-
-
Save treygilliland/651a65828eacf5e27e14c7e785a1f040 to your computer and use it in GitHub Desktop.
Python Key Value Store for Python 3.10+
This file contains hidden or 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
| 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