bingo/models.py
2020-01-09 08:54:13 -05:00

91 lines
1.8 KiB
Python

from uuid import uuid4
import redis
import json
from common import config
class BingoCell:
def __init__(self, text, checked=False, free=False):
self.text = text
self.free = free
self.checked = checked
def serialize(self):
return self.__dict__
@staticmethod
def deserialize(j):
return BingoCell(
text=j["text"],
free=bool(j["free"]),
checked=bool(j["checked"])
)
class Row:
class BingoCard:
def __init__(self, size, cells=None, oid=None):
if cells is None:
self.cells = []
else:
self.cells = cells
if oid is None:
self.oid = uuid4().hex
else:
self.oid = oid
self.size = size
def serialize(self):
return {
"oid": self.oid,
"cells": [c.serialize() for c in self.cells]
}
def __getitem__(self, col):
@staticmethod
def deserialize(text):
j = json.loads(text)
return BingoCard(cells=[
BingoCell.deserialize(c) for c in j["cells"]
])
class DB:
_prefix = "bingo:"
def __init__(self):
self._rdb = redis.Redis(
host=config["REDIS_HOST"],
port=config["REDIS_PORT"]
)
def flush(self):
self._rdb.delete(self._rdb.keys(DB._prefix + "*"))
def _get(self, name):
return self._rdb.get(DB._prefix + name)
def _set(self, name, value):
return self._rdb.set(DB._prefix + name, value)
def get_card(self, oid):
return BingoCard.deserialize(self._get(oid))
def save_card(self, card):
self._set(card.oid, card.serialize())
c = BingoCard(
size=4,
cells=[
BingoCell("test")
])
print(c.serialize())