Skip to content

Commit

Permalink
Config: Use replace_placeholders for paths
Browse files Browse the repository at this point in the history
Replace {} placeholders with str.format()
  • Loading branch information
tomschr committed Apr 25, 2024
1 parent 1924461 commit 09dd213
Showing 1 changed file with 52 additions and 25 deletions.
77 changes: 52 additions & 25 deletions src/docserv/docserv.py
Original file line number Diff line number Diff line change
Expand Up @@ -259,22 +259,48 @@ class DocservConfig:
"""

def parse_config(self, argv):

def join_conf_dir(path):
# Turn relative paths to absolute paths, depending on the
# location of the INI (or rather CONF_DIR which by its definition
# is the location of the INI).
return path if os.path.isabs(path) else os.path.join(CONF_DIR, path)
"""Parsing Docserv config file"""
logger.debug("Parsing Docserv file")
#def join_conf_dir(path):
# # Turn relative paths to absolute paths, depending on the
# # location of the INI (or rather CONF_DIR which by its definition
# # is the location of the INI).
# return path if os.path.isabs(path) else os.path.join(CONF_DIR, path)


def replace_placeholders(path: str, currenttargetname: str) -> str:
"""Replace placeholder in curly brackets notation
"""
servername = self.config['server']['name']
return path.format(
# the project directory where to find the Docserv INI file
projectdir=os.path.dirname(self.config_path),
# The current name of the server (=docserv ini filename)
servername=servername,
# The current target name that is processed
targetname=currenttargetname,
# the config directory
configdir=CONF_DIR,
# the cache directory
cachedir=CACHE_DIR,
# cache dir plus servername and targetname
fullcachedir=os.path.join(CACHE_DIR,
servername,
currenttargetname,
),
# The docserv directory where all source code is stored
codedir=DOCSERV_CODE_DIR,
)

config = configparser()
if len(argv) == 1:
self.config_file = "my-site"
else:
self.config_file = argv[1]

config_path=os.path.join(CONF_DIR, self.config_file + '.ini')
logger.info("Reading %s", config_path)
config.read(config_path)
self.config_path=os.path.join(CONF_DIR, self.config_file + '.ini')
logger.info("Reading Docserv INI %r...", self.config_path)
config.read(self.config_path)
self.config = {}
try:
self.config['server'] = {}
Expand All @@ -284,8 +310,8 @@ def join_conf_dir(path):
self.config['server']['host'] = config['server']['host']
self.config['server']['port'] = int(config['server']['port'])
self.config['server']['enable_mail'] = config['server']['enable_mail']
self.config['server']['repo_dir'] = join_conf_dir(config['server']['repo_dir'])
self.config['server']['temp_repo_dir'] = join_conf_dir(config['server']['temp_repo_dir'])
self.config['server']['repo_dir'] = replace_placeholders(config['server']['repo_dir'], "")
self.config['server']['temp_repo_dir'] = replace_placeholders(config['server']['temp_repo_dir'], "")
self.config['server']['valid_languages'] = config['server']['valid_languages']
if config['server']['max_threads'] == 'max':
self.config['server']['max_threads'] = multiprocessing.cpu_count()
Expand All @@ -302,42 +328,41 @@ def join_conf_dir(path):

self.config['targets'][secname] = {}
self.config['targets'][secname]['name'] = sec
self.config['targets'][secname]['template_dir'] = join_conf_dir(sec['template_dir'])
self.config['targets'][secname]['jinja_template_dir'] = join_conf_dir(sec['jinja_template_dir'])
self.config['targets'][secname]['template_dir'] = replace_placeholders(sec['template_dir'], secname)
# Jinja directories
self.config['targets'][secname]['jinja_template_dir'] = replace_placeholders(sec['jinja_template_dir'], secname)
self.config['targets'][secname]['jinja_env'] = init_jinja_template(
self.config['targets'][secname]['jinja_template_dir']
)
self.config['targets'][secname]['jinjacontext_home'] = sec['jinjacontext_home'].format(cachedir=os.path.join(CACHE_DIR,
self.config['server']['name'],
secname,
)
)
self.config['targets'][secname]['jinja_template_home'] = sec['jinja_template_home']
self.config['targets'][secname]['jinjacontext_home'] = replace_placeholders(sec['jinjacontext_home'], secname)
# Jinja Templates
self.config['targets'][secname]['jinja_template_home'] = replace_placeholders(sec['jinja_template_home'], secname)
self.config['targets'][secname]['jinja_template_index'] = sec['jinja_template_index']
self.config['targets'][secname]['jinja_template_trd'] = sec['jinja_template_trd']
#
self.config['targets'][secname]['active'] = sec['active']
self.config['targets'][secname]['draft'] = sec['draft']
self.config['targets'][secname]['remarks'] = sec['remarks']
self.config['targets'][secname]['meta'] = sec['meta']
self.config['targets'][secname]['default_xslt_params'] = join_conf_dir(sec['default_xslt_params'])
self.config['targets'][secname]['default_xslt_params'] = replace_placeholders(sec['default_xslt_params'], secname)
self.config['targets'][secname]['enable_target_sync'] = sec['enable_target_sync']
if sec['enable_target_sync'] == 'yes':
self.config['targets'][secname]['target_path'] = sec['target_path']
self.config['targets'][secname]['backup_path'] = join_conf_dir(sec['backup_path'])
self.config['targets'][secname]['config_dir'] = join_conf_dir(sec['config_dir'])
self.config['targets'][secname]['backup_path'] = replace_placeholders(sec['backup_path'], secname)
self.config['targets'][secname]['config_dir'] = replace_placeholders(sec['config_dir'], secname)
self.config['targets'][secname]['languages'] = sec['languages']
self.config['targets'][secname]['default_lang'] = sec['default_lang']
self.config['targets'][secname]['omit_default_lang_path'] = sec['omit_default_lang_path']
self.config['targets'][secname]['internal'] = sec['internal']
self.config['targets'][secname]['zip_formats'] = sec['zip_formats']
self.config['targets'][secname]['server_base_path'] = sec['server_base_path']
self.config['targets'][secname]['canonical_url_domain'] = sec['canonical_url_domain']
self.config['targets'][secname]['server_root_files'] = join_conf_dir(sec['server_root_files'])
self.config['targets'][secname]['server_root_files'] = replace_placeholders(sec['server_root_files'], secname)

self.config['targets'][secname]['enable_ssi_fragments'] = sec['enable_ssi_fragments']
if sec['enable_ssi_fragments'] == 'yes':
self.config['targets'][secname]['fragment_dir'] = join_conf_dir(sec['fragment_dir'])
self.config['targets'][secname]['fragment_l10n_dir'] = join_conf_dir(sec['fragment_l10n_dir'])
self.config['targets'][secname]['fragment_dir'] = replace_placeholders(sec['fragment_dir'], secname)
self.config['targets'][secname]['fragment_l10n_dir'] = replace_placeholders(sec['fragment_l10n_dir'], secname)
# FIXME: I guess this is not the prettiest way to handle
# optional values (but it works for now)
self.config['targets'][secname]['build_container'] = False
Expand All @@ -352,6 +377,8 @@ def join_conf_dir(path):
"Invalid configuration file, missing configuration key %s. Exiting.", error)
sys.exit(1)

logger.debug("Successfully finished processing Docserv INI")


class Docserv(DocservState, DocservConfig):
"""
Expand Down

0 comments on commit 09dd213

Please sign in to comment.