mirror of
https://github.com/simon987/bingo.git
synced 2025-04-18 07:56:43 +00:00
91 lines
1.8 KiB
Python
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())
|