Skip to content

Commit

Permalink
🖊doc(core/config): improved example
Browse files Browse the repository at this point in the history
  • Loading branch information
ascpial committed Sep 10, 2022
1 parent 3d972ce commit 69d9f60
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 15 deletions.
43 changes: 33 additions & 10 deletions bot/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def append_dict(dict1: dict, dict2: dict):
else:
dict1[key] = value

T = TypeVar("T", )
T = TypeVar("T")

class ConfigurationField(Generic[T]):
def __init__(
Expand Down Expand Up @@ -159,15 +159,38 @@ def add_configuration_field(self, field: ConfigurationField):
self.fields[field.name] = field

if __name__ == "__main__":
# gĂ©rĂ© par le cƓur
config = Configuration(is_child=False)
config.load("test.yaml")
# gĂ©rĂ© par le cƓur, qui charge les fichiers comme il veut
# le développeur de plugin doit ne pas avoir à toucher à ces initialisations
config1 = Configuration(is_child=False)
config1.load("test.yaml")

class DiscordConfiguration(Configuration):
token = ConfigurationField(str)

test = DiscordConfiguration("discord")
config.add_configuration_child(test)
# si le développeur a vraiment la flemme mais une flemme paradoxale, il
# peut accéder à la configuration comme ceci
print(config1["ban"]["friendly_ban"])

# cette partie est le minimum syndicale pour le développeur
ban_config_1 = Configuration(namespace="ban")
config1.add_configuration_child(ban_config_1)

# à partir de là le développeur peut accéder à la configuration comme suit
print(ban_config_1['friendly_ban'])
# on est d'accord que c'est plus propre que ce qui est affiché plus haut

print(test.token)
# nouvelle exemple

config2 = Configuration(is_child=False)
config2.load("test.yaml")

# le développeur de plugin peut aussi ajouter les champs en tant que variable
class BanConfiguration(Configuration):
friendly_ban = ConfigurationField(bool) # on pourra définir le type, avoir une conversion des données, mettre une valeur par défaut etc à terme

# les mĂȘmes Ă©tapes que plus haut (le *minimum syndical*)
ban_config_2 = BanConfiguration("ban")
config2.add_configuration_child(ban_config_2)

# et pouf ça fait des chocapic
print(ban_config_2.friendly_ban)
# encore plus propre que plus haut non ?
# et ça supporte le typage avec par ex vscode ! (si tu spécifie un type)

7 changes: 2 additions & 5 deletions bot/test.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,2 @@
discord:
token: "LOLTHISISATOKEN"

discord2:
token: "LOLTHISISATOKEN V2"
ban:
friendly_ban: on

0 comments on commit 69d9f60

Please sign in to comment.