various fixes

This commit is contained in:
əlemi 2022-04-18 20:44:20 +02:00
parent 814e489142
commit ab9d45c244
No known key found for this signature in database
GPG key ID: BBCBFE5D7244634E

View file

@ -7,7 +7,7 @@ import uuid
from typing import List, Dict, Optional, Any, Type, get_type_hints from typing import List, Dict, Optional, Any, Type, get_type_hints
from time import time from time import time
from dataclasses import dataclass, MISSING from dataclasses import dataclass, MISSING, fields
from configparser import ConfigParser from configparser import ConfigParser
from apscheduler.schedulers.asyncio import AsyncIOScheduler from apscheduler.schedulers.asyncio import AsyncIOScheduler
@ -47,21 +47,22 @@ class Addon:
opts: Dict[str, Any] = {} opts: Dict[str, Any] = {}
cfg_clazz = get_type_hints(type(self))['config'] cfg_clazz = get_type_hints(type(self))['config']
if cfg_clazz is not ConfigObject: if cfg_clazz is not ConfigObject:
for name, field in cfg_clazz.__dataclass_fields__.items(): for field in fields(cfg_clazz):
default = field.default if field.default is not MISSING \ default = field.default if field.default is not MISSING \
else field.default_factory() if field.default_factory is not MISSING \ else field.default_factory() if field.default_factory is not MISSING \
else MISSING else MISSING
if cfg.has_option(self.name, name): if cfg.has_option(self.name, field.name):
if field.type is bool: if field.type is bool:
opts[name] = self._client.config[self.name].getboolean(name) opts[field.name] = self._client.config[self.name].getboolean(field.name)
else: else:
opts[name] = field.type(self._client.config[self.name].get(name)) opts[field.name] = field.type(self._client.config[self.name].get(field.name))
elif default is MISSING: elif default is MISSING:
repr_type = field.type.__name__ if isinstance(field.type, type) else str(field.type) # TODO fix for 3.8 I think?
raise ValueError( raise ValueError(
f"Missing required value '{name}' of type '{field.type.__name__}' in section '{self.name}'" f"Missing required value '{field.name}' of type '{repr_type}' in section '{self.name}'"
) )
else: # not really necessary since it's a dataclass but whatever else: # not really necessary since it's a dataclass but whatever
opts[name] = default opts[field.name] = default
self.config = self.Options(**opts) self.config = self.Options(**opts)
self.register() self.register()
@ -122,8 +123,7 @@ class Treepuncher(
password= opt('password') password= opt('password')
) )
if opt('legacy_token'): if opt('legacy_token'):
authenticator.deserialize(json.loads(opt('mojang_token'))) authenticator.deserialize(json.loads(opt('legacy_token')))
else: else:
authenticator = MicrosoftAuthenticator( authenticator = MicrosoftAuthenticator(
client_id= opt('client_id'), client_id= opt('client_id'),