Source code for provit.config
"""
provit configuration module
provides the Config-class as well as its factory method get_config.
By default, $HOME/.provit is assumed to be provits default config directory.
This can be customized.
"""
import yaml
import warnings
from pathlib import Path
from dataclasses import dataclass
DIRECTORIES_FILE = "directories.yaml"
CONFIG_FILE = "config.yaml"
AGENTS_DIR = "agents"
PROVIT_DIR = ".provit"
def _load_provit_dir(custom_provit_config_dir=None):
if custom_provit_config_dir:
provit_config_dir = Path(custom_provit_config_dir)
else:
provit_config_dir = Path.home().joinpath(PROVIT_DIR)
provit_config_dir.mkdir(parents=True, exist_ok=True)
config_path = provit_config_dir / CONFIG_FILE
config_path.touch()
with open(config_path) as config_file:
config = yaml.safe_load(config_file)
if config and "provit_dir" in config:
return Path(config["provit_dir"])
return provit_config_dir
[docs]@dataclass
class Config:
provit_dir: Path
person: str = "Person"
software: str = "SoftwareAgent"
organization: str = "Organization"
base_uri: str = "http://vocab.ub.uni-leipzig.de/provit/{}"
@property
def agents_dir(self):
a_dir = self.provit_dir / AGENTS_DIR
a_dir.mkdir(exist_ok=True)
return a_dir
@property
def directories_file(self):
d_file = self.provit_dir / DIRECTORIES_FILE
d_file.touch()
return d_file
[docs] def agent_profile(self, slug):
return self.agents_dir.joinpath(f"{slug}.yaml")
[docs] def agent_profile_exists(self, slug):
return self.agent_profile(slug).is_file()
[docs] def get_agent_profile(self, slug):
if self.agent_profile_exists(slug):
return self.agent_profile(slug)
else:
return None
[docs]def get_config(provit_dir=None):
"""
factory method for Config class. can be given a custom provit dir.
If no directory is given, the default directory ~/.provit will be
chosen.
"""
return Config(provit_dir=_load_provit_dir(provit_dir))