Skip to content

PyDrocsid.settings

RoleSettings

Source code in PyDrocsid/settings.py
 98
 99
100
101
102
103
104
105
106
107
108
109
110
class RoleSettings:
    @staticmethod
    async def get(name: str) -> int:
        """Get the value of this role setting."""

        return cast(int, await SettingsModel.get(int, f"role:{name}", -1))

    @staticmethod
    async def set(name: str, role_id: int) -> int:
        """Set the value of this role setting."""

        await SettingsModel.set(int, f"role:{name}", role_id)
        return role_id

get async staticmethod

get(name: str) -> int

Get the value of this role setting.

Source code in PyDrocsid/settings.py
 99
100
101
102
103
@staticmethod
async def get(name: str) -> int:
    """Get the value of this role setting."""

    return cast(int, await SettingsModel.get(int, f"role:{name}", -1))

set async staticmethod

set(name: str, role_id: int) -> int

Set the value of this role setting.

Source code in PyDrocsid/settings.py
105
106
107
108
109
110
@staticmethod
async def set(name: str, role_id: int) -> int:
    """Set the value of this role setting."""

    await SettingsModel.set(int, f"role:{name}", role_id)
    return role_id

Settings

Bases: Enum

Source code in PyDrocsid/settings.py
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
class Settings(Enum):
    @property
    def cog(self) -> str:
        return cast(str, sys.modules[self.__class__.__module__].__package__).split(".")[-1]

    @property
    def fullname(self) -> str:
        return self.cog + "." + self.name

    @property
    def default(self) -> Value:
        return cast(Value, self.value)

    @property
    def type(self) -> Type[Value]:
        return type(cast(Value, self.default))

    async def get(self) -> Value:
        """Get the value of this setting."""

        return cast(Value, await SettingsModel.get(self.type, self.fullname, self.default))

    async def set(self, value: Value) -> Value:
        """Set the value of this setting."""

        await SettingsModel.set(self.type, self.fullname, value)
        return value

    async def reset(self) -> Value:
        """Reset the value of this setting to its default value."""

        return cast(Value, await self.set(self.default))

get async

get() -> Value

Get the value of this setting.

Source code in PyDrocsid/settings.py
81
82
83
84
async def get(self) -> Value:
    """Get the value of this setting."""

    return cast(Value, await SettingsModel.get(self.type, self.fullname, self.default))

reset async

reset() -> Value

Reset the value of this setting to its default value.

Source code in PyDrocsid/settings.py
92
93
94
95
async def reset(self) -> Value:
    """Reset the value of this setting to its default value."""

    return cast(Value, await self.set(self.default))

set async

set(value: Value) -> Value

Set the value of this setting.

Source code in PyDrocsid/settings.py
86
87
88
89
90
async def set(self, value: Value) -> Value:
    """Set the value of this setting."""

    await SettingsModel.set(self.type, self.fullname, value)
    return value

SettingsModel

Bases: Base

Source code in PyDrocsid/settings.py
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
class SettingsModel(Base):
    __tablename__ = "settings"

    key: Mapped[str] = Column(String(64), primary_key=True, unique=True)
    value: Mapped[str] = Column(String(256))

    @staticmethod
    async def _create(key: str, value: Value) -> SettingsModel:
        row = SettingsModel(key=key, value=str(int(value) if isinstance(value, bool) else value))
        await db.add(row)
        return row

    @staticmethod
    @lock_deco
    async def get(dtype: Type[Value], key: str, default: Value) -> Value:
        """Get the value of a given setting."""

        if (out := await redis.get(rkey := f"settings:{key}")) is None:
            if (row := await db.get(SettingsModel, key=key)) is None:
                row = await SettingsModel._create(key, default)
            out = row.value  # type: ignore
            await redis.setex(rkey, CACHE_TTL, out)

        return dtype(int(out) if dtype is bool else out)

    @staticmethod
    @lock_deco
    async def set(dtype: Type[Value], key: str, value: Value) -> SettingsModel:
        """Set the value of a given setting."""

        rkey = f"settings:{key}"
        if (row := await db.get(SettingsModel, key=key)) is None:
            row = await SettingsModel._create(key, value)
            await redis.setex(rkey, CACHE_TTL, row.value)
            return row

        row.value = str(int(value) if dtype is bool else value)
        await redis.setex(rkey, CACHE_TTL, row.value)
        return row

get async staticmethod

get(dtype: Type[Value], key: str, default: Value) -> Value

Get the value of a given setting.

Source code in PyDrocsid/settings.py
35
36
37
38
39
40
41
42
43
44
45
46
@staticmethod
@lock_deco
async def get(dtype: Type[Value], key: str, default: Value) -> Value:
    """Get the value of a given setting."""

    if (out := await redis.get(rkey := f"settings:{key}")) is None:
        if (row := await db.get(SettingsModel, key=key)) is None:
            row = await SettingsModel._create(key, default)
        out = row.value  # type: ignore
        await redis.setex(rkey, CACHE_TTL, out)

    return dtype(int(out) if dtype is bool else out)

set async staticmethod

set(dtype: Type[Value], key: str, value: Value) -> SettingsModel

Set the value of a given setting.

Source code in PyDrocsid/settings.py
48
49
50
51
52
53
54
55
56
57
58
59
60
61
@staticmethod
@lock_deco
async def set(dtype: Type[Value], key: str, value: Value) -> SettingsModel:
    """Set the value of a given setting."""

    rkey = f"settings:{key}"
    if (row := await db.get(SettingsModel, key=key)) is None:
        row = await SettingsModel._create(key, value)
        await redis.setex(rkey, CACHE_TTL, row.value)
        return row

    row.value = str(int(value) if dtype is bool else value)
    await redis.setex(rkey, CACHE_TTL, row.value)
    return row