Source code for bibliometa.configuration

# !/usr/bin/python
# -*- coding: utf-8 -*-

"""This module provides basic classes used for configuration of other objects."""

from abc import ABC


[docs]class BibliometaConfiguration(ABC): """The abstract :class:`~bibliometa.configuration.BibliometaConfiguration` defines a configuration object for use as basis for Bibliometa classes. Configuration values can be accessed using dot notation (e.g., self.config.name). """ def __init__(self, d, **kwargs): """Construct a new :class:`~bibliometa.configuration.BibliometaConfiguration`. :param d: Dictionary with configuration key--values pairs. This dictionary will be loaded as initial configuration when a new instance of :class:`~bibliometa.configuration.BibliometaConfiguration` is constructed. :type d: `dict` :param kwargs: Arbitrary keyword arguments that are used as configuration keys and values. For example, `verbose=True` will make available a configuration key `verbose` with the value `True` (i.e., `self.config.verbose` will then return `True`). Configuration can be set during initialization as well as after constructing a class instance by calling the `set_config` method. """ self.config = Config(d) self.set_config() # initialize config id if kwargs: self.set_config(**kwargs) def __repr__(self): return str(self.config) def __str__(self): return str(self.config)
[docs] def set_config(self, **kwargs): """Set configuration for key-value pairs given in kwargs. :return: The calling instance :rtype: `bibliometa.configuration.BibliometaConfiguration` """ # update kwargs self.config.__dict__.update((k, v) for k, v in kwargs.items()) # update config_id try: self.config.__dict__["config_id"] = f"{str(self.config.n)}_" \ f"{str(self.config.e)}_" \ f"{str(self.config.sim)}_" \ f"{str(self.config.t)}" except Exception: pass return self
[docs] def get_config(self, *args): """Get configuration. If no args given, the full configuration is returned. Otherwise, only the configuration parameters given in args are returned. :return: The calling instance if no args given, else a Config object :rtype: `bibliometa.configuration.BibliometaConfiguration` or `bibliometa.configuration.Config` """ # update config_id try: self.config.__dict__["config_id"] = f"{str(self.config.n)}_" \ f"{str(self.config.e)}_" \ f"{str(self.config.sim)}_" \ f"{str(self.config.t)}" except Exception: pass if args: _cfg = Config({k: self.config.__dict__[k] for k in args}) return _cfg else: return self
[docs]class Config: """The :class:`~bibliometa.configuration.Config` defines a configuration object whose values can be accessed using dot notation (e.g., self.config.name). """ def __init__(self, d): """Construct a new :class:`~bibliometa.configuration.Config`.""" self.__dict__.update((k, v) for k, v in d.items()) def __repr__(self): return '\n'.join(str(v) for v in self.__dict__.items()) def __str__(self): return '\n'.join(str(v) for v in self.__dict__.items())