Merge pull request #57 from penn5/patch-1

Fixes
pull/1/head
Dan Gazizullin 2022-08-09 23:21:28 +03:00 committed by GitHub
commit 8781d89b6c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 3 additions and 137 deletions

View File

@ -25,12 +25,8 @@ from .inline.types import ( # skipcq: PY-W2000
) )
from . import validators # skipcq: PY-W2000 from . import validators # skipcq: PY-W2000
from .pointers import ( # skipcq: PY-W2000 from .pointers import ( # skipcq: PY-W2000
PointerBool,
PointerInt,
PointerStr,
PointerList, PointerList,
PointerDict, PointerDict,
PointerTuple,
) )
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -85,30 +81,6 @@ class Module:
send a message to logs with verbosity INFO and exception traceback send a message to logs with verbosity INFO and exception traceback
""" """
def __setattr__(self, attr: str, value: Any):
if hasattr(self, attr) and isinstance(
getattr(self, attr), (PointerInt, PointerList)
):
getattr(self, attr).set(value)
return
return object.__setattr__(self, attr, value)
def __getattribute__(self, attr: str) -> Any:
try:
object.__getattribute__(self, attr)
except AttributeError:
pass
else:
value = object.__getattribute__(self, attr)
if isinstance(value, PointerInt):
return value.value
if isinstance(value, PointerList):
return list(value)
return object.__getattribute__(self, attr)
class Library: class Library:
"""All external libraries must have a class-inheritant from this class""" """All external libraries must have a class-inheritant from this class"""

View File

@ -12,6 +12,7 @@ import logging
import os import os
import time import time
import asyncio import asyncio
import collections
try: try:
import psycopg2 import psycopg2
@ -32,13 +33,9 @@ from telethon.tl.types import Message
from telethon.errors.rpcerrorlist import ChannelsTooMuchError from telethon.errors.rpcerrorlist import ChannelsTooMuchError
from . import utils, main from . import utils, main
from ._types import ( from .pointers import (
PointerBool,
PointerInt,
PointerStr,
PointerList, PointerList,
PointerDict, PointerDict,
PointerTuple,
) )
DATA_DIR = ( DATA_DIR = (
@ -387,12 +384,9 @@ class Database(dict):
"""Get a pointer to database key""" """Get a pointer to database key"""
value = self.get(owner, key, default) value = self.get(owner, key, default)
mapping = { mapping = {
int: PointerInt,
str: PointerStr,
bool: PointerBool,
list: PointerList, list: PointerList,
dict: PointerDict, dict: PointerDict,
tuple: PointerTuple, collections.abc.Hashable: lambda v: v,
} }
pointer_constructor = next( pointer_constructor = next(

View File

@ -3,27 +3,6 @@ from typing import Any, Iterable, Optional, SupportsIndex, Union
from typing_extensions import Self from typing_extensions import Self
class PointerInt(int):
"""Pointer to integer saved in database"""
def __init__(
self,
db: "Database", # type: ignore
module: str,
key: str,
default: Optional[Any] = None,
):
self._db = db
self._module = module
self._key = key
self._default = default
self.value = db.get(module, key, default)
def set(self, value: Any):
self._db.set(self._module, self._key, value)
self.value = value
class PointerList(list): class PointerList(list):
"""Pointer to list saved in database""" """Pointer to list saved in database"""
@ -91,43 +70,6 @@ class PointerList(list):
def _save(self): def _save(self):
self._db.set(self._module, self._key, list(self)) self._db.set(self._module, self._key, list(self))
def set(self, value: Any):
if not isinstance(value, list):
raise TypeError(
f"Attempted to assign value {value}, which is not a list to pointer"
)
self.clear()
self.extend(value)
self._save()
class PointerTuple(tuple):
"""Pointer to tuple saved in database"""
def __init__(
self,
db: "Database", # type: ignore
module: str,
key: str,
default: Optional[Any] = None,
):
self._db = db
self._module = module
self._key = key
self._default = default
self.set(db.get(module, key, default))
def set(self, value: Any):
if not isinstance(value, tuple):
raise TypeError(
f"Attempted to assign value {value}, which is not a tuple to pointer"
)
self.clear()
self.extend(value)
self._save()
class PointerDict(dict): class PointerDict(dict):
"""Pointer to dict saved in database""" """Pointer to dict saved in database"""
@ -182,45 +124,3 @@ class PointerDict(dict):
def _save(self): def _save(self):
self._db.set(self._module, self._key, dict(self)) self._db.set(self._module, self._key, dict(self))
def set(self, value: Any):
if not isinstance(value, dict):
raise TypeError(
f"Attempted to assign value {value}, which is not a dict to pointer"
)
self.clear()
self.update(value)
self._save()
class PointerStr(str):
"""Pointer to string saved in database"""
def __init__(
self,
db: "Database", # type: ignore
module: str,
key: str,
default: Optional[Any] = None,
):
self._db = db
self._module = module
self._key = key
self._default = default
self.value = db.get(module, key, default)
def set(self, value: Any):
self.replace(self.center(0), value)
self._db.set(self._module, self._key, value)
class PointerBool(PointerInt):
def __init__(
self,
db: "Database", # type: ignore
module: str,
key: str,
default: Optional[Any] = None,
):
super().__init__(db, module, key, default)