epicyon/datashards/stores/magencstore.py

53 lines
1.8 KiB
Python

import http.server
import socketserver
from urllib.parse import urlparse, parse_qs
from .base import BaseStore, GetStore, PutStore, StoreError
from .memorystore import MemoryStore
memstore = MemoryStore()
class MagencStore(http.server.BaseHTTPRequestHandler):
def do_GET(self):
print(f"Request recieved: {self.path}")
try:
parsed = urlparse(self.path)
query = parsed.query
params = parse_qs(query)
xt = params['xt'][0]
result = memstore.get(xt)
except KeyError:
self.send_response(404)
self.end_headers()
self.wfile.write(f'Shard Not Found'.encode())
return
except ValueError as err:
self.send_response(400)
self.wfile.write(f"Malformed request: {err}".encode())
return
except Exception as err:
self.send_response(500)
self.wfile.write(f"Server Error: {err}".encode())
return
self.send_response(200)
self.send_header('Content-type', 'application/octet-stream')
self.end_headers()
self.wfile.write(result)
def do_POST(self):
#length = int(self.headers['Content-Length'])
#content = self.rfile.read(length)
content = self.rfile.read(32768)
try:
xt = memstore.put(content)
except ValueError as err:
self.send_response(400)
self.wfile.write(f"Malformed request: {err}".encode())
except Exception as err:
self.send_response(500)
self.wfile.write(f"Server Error: {err}".encode())
self.send_response(200)
self.send_header('Content-type', 'text/plain')
self.end_headers()
self.wfile.write(xt.encode())