Config with dataclass
The snippet can be accessed without any authentication.
Authored by
Françoise Conil
""" https://docs.python.org/3.8/library/dataclasses.html#module-dataclasses
This module provides a decorator and functions for automatically adding
generated special methods such as __init__() and __repr__() to user-defined
classes. It was originally described in PEP 557.
https://www.python.org/dev/peps/pep-0557/
Data Classes can be thought of as "mutable namedtuples with defaults".
Voir aussi ~/Progs/python/namedtuples-dataclass/namedtuples-slotclass-dataclass.py
"""
import collections
from dataclasses import dataclass
import os
@dataclass(init=False)
class Config:
name: str
mode: str
url: str
delay: int
format: str
maxitems: int
def __init__(self, defaults):
self.name = os.environ.get(defaults['name'].envvar, defaults['name'].default)
self.mode = os.environ.get(defaults['mode'].envvar, defaults['mode'].default)
self.url = os.environ.get(defaults['url'].envvar, defaults['url'].default)
self.delay = os.environ.get(defaults['delay'].envvar, defaults['delay'].default)
self.format = os.environ.get(defaults['format'].envvar, defaults['format'].default)
self.maxitems = os.environ.get(defaults['maxitems'].envvar, defaults['maxitems'].default)
if __name__ == "__main__":
# Using namedtuple to better manipulated defaults
# https://docs.python.org/3.8/library/collections.html#collections.namedtuple
# ---------------------------------------------------------------------------
fparam = collections.namedtuple('FetcherParameters', ['name', 'envvar', 'description', 'default'])
fetcher_defaults = {
'name': fparam(name='name', envvar='HTTP_FETCHER_NAME', description='Name of the acquisition', default=None),
'mode': fparam(name='mode', envvar='HTTP_FETCHER_MODE', description='http method', default='GET'),
'url': fparam(name='url', envvar='HTTP_FETCHER_URL', description='URL to fetch', default=None),
'delay': fparam(name='delay', envvar='HTTP_FETCHER_DELAY', description='Delay between requests in seconds', default=3600),
'format': fparam(name='format', envvar='HTTP_FETCHER_FORMAT', description='File format', default='json'),
'maxitems': fparam(name='maxitems', envvar='HTTP_FETCHER_MAXITEMS', description='Max number of fetches', default=-1)
}
print(f"-- vars(Config) = {vars(Config)}")
c = Config(fetcher_defaults)
print(f"-- After instanciation: {c!r}")
c.format = 'xml'
print(f"-- After format change: {c!r}")
Please register or sign in to comment