69 lines
1.9 KiB
Python
69 lines
1.9 KiB
Python
from typing import Union, Dict, List, Optional, Any
|
|
from Services.Redis.Models.base import RedisRow
|
|
|
|
|
|
class RedisResponse:
|
|
"""Base class for Redis response handling."""
|
|
|
|
def __init__(
|
|
self,
|
|
status: bool,
|
|
message: str,
|
|
data: Any = None,
|
|
error: Optional[str] = None,
|
|
):
|
|
self.status = status
|
|
self.message = message
|
|
self.data = data
|
|
|
|
if isinstance(data, dict):
|
|
self.data_type = "dict"
|
|
elif isinstance(data, list):
|
|
self.data_type = "list"
|
|
elif isinstance(data, RedisRow):
|
|
self.data_type = "row"
|
|
elif data is None:
|
|
self.data_type = None
|
|
self.error = error
|
|
|
|
def as_dict(self) -> Dict:
|
|
data = self.all
|
|
main_dict = {
|
|
"status": self.status,
|
|
"message": self.message,
|
|
"count": self.count,
|
|
"dataType": getattr(self, "data_type", None),
|
|
}
|
|
if isinstance(data, RedisRow):
|
|
dict_return = {data.keys: data.row}
|
|
dict_return.update(dict(main_dict))
|
|
return dict_return
|
|
elif isinstance(data, list):
|
|
dict_return = {row.keys: row.data for row in data}
|
|
dict_return.update(dict(main_dict))
|
|
return dict_return
|
|
|
|
@property
|
|
def all(self) -> Union[Optional[List[RedisRow]]]:
|
|
return self.data or []
|
|
|
|
@property
|
|
def count(self) -> int:
|
|
print()
|
|
row = self.all
|
|
if isinstance(row, list):
|
|
return len(row)
|
|
elif isinstance(row, RedisRow):
|
|
return 1
|
|
|
|
@property
|
|
def first(self) -> Union[RedisRow, None]:
|
|
print("self.data", self.data)
|
|
if self.data:
|
|
if isinstance(self.data, list):
|
|
return self.data[0]
|
|
elif isinstance(self.data, RedisRow):
|
|
return self.row
|
|
self.status = False
|
|
return
|