epicyon/datashards/stores/fizzgig.py

51 lines
1.4 KiB
Python

import requests
from .base import BaseStore, GetStore, PutStore, StoreError
class RemoteFizzgigStore(BaseStore, GetStore, PutStore):
"""A remote Fizzgig store"""
def __init__(self, url):
"""Create a RemoteFizzgigStore
Args:
url (string): The location of the store
Returns:
RemoteFizzgigStore
"""
self.url = url
def __repr__(self):
return f"fizz+{self.url}"
def get(self, xt):
self.__doc__ = GetStore.get.__doc__
self.validate_xt(xt)
url = self.url + '/get'
payload = {'xt': xt}
r = requests.get(url, params=payload)
if r.status_code == 404:
raise KeyError("Shard not found")
return
elif r.status_code == 400:
raise ValueError(r.content.decode('utf-8'))
return
elif r.status_code == 500:
raise StoreError(r.content.decode('utf-8'))
return
return r.content
def put(self, data):
self.__doc__ = PutStore.put.__doc__
self.validate_data(data)
url = self.url + '/put'
r = requests.put(url=url, data=data)
if r.status_code == 400:
raise ValueError(r.content.decode('utf-8'))
return
elif r.status_code == 500:
raise StoreError(r.content.decode('utf-8'))
return
parsed = r.json()
return parsed['xt']