Browse Source

Use datadirs as base search path for included content

pull/53/head
Luthaf 11 years ago
parent
commit
ec48864f76
  1. 27
      patacrep/content/include.py
  2. 6
      songbook

27
patacrep/content/include.py

@ -11,10 +11,22 @@ import os
import sys import sys
import logging import logging
from patacrep.content import process_content from patacrep.content import process_content, ContentError
LOGGER = logging.getLogger(__name__) LOGGER = logging.getLogger(__name__)
def load_from_datadirs(path, config=None):
if not config or not config["datadir"]:
LOGGER.error("No datadir in the configuration.")
sys.exit(1)
for datadir in config["datadir"]:
filepath = os.path.join(datadir, path)
if os.path.exists(filepath):
return filepath
# File not found
raise ContentError("include", "The file '{0}' was not found in the "
"datadirs.".format(path))
#pylint: disable=unused-argument #pylint: disable=unused-argument
def parse(keyword, config, argument, contentlist): def parse(keyword, config, argument, contentlist):
"""Include an external file content. """Include an external file content.
@ -26,13 +38,9 @@ def parse(keyword, config, argument, contentlist):
- contentlist: a list of file paths to be included. - contentlist: a list of file paths to be included.
""" """
new_contentlist = [] new_contentlist = []
songbook_dir = config.get("_songbook_dir", "")
if not os.path.isdir(songbook_dir):
LOGGER.warning("No songbook directory in configuration. 'include' "
"keyword may fail.")
for path in contentlist: for path in contentlist:
filepath = os.path.join(songbook_dir, path) filepath = load_from_datadirs(path, config)
try: try:
with open(filepath, "r") as content_file: with open(filepath, "r") as content_file:
new_content = json.load(content_file) new_content = json.load(content_file)
@ -41,12 +49,9 @@ def parse(keyword, config, argument, contentlist):
LOGGER.error("Error while loading file '{}'.".format(filepath)) LOGGER.error("Error while loading file '{}'.".format(filepath))
sys.exit(1) sys.exit(1)
config["_songbook_dir"] = os.path.abspath( config["datadir"].append(os.path.abspath(os.path.dirname(filepath)))
os.path.dirname(filepath)
)
new_contentlist += process_content(new_content, config) new_contentlist += process_content(new_content, config)
config["_songbook_dir"] = songbook_dir config["datadir"].pop()
return new_contentlist return new_contentlist

6
songbook

@ -108,8 +108,6 @@ def main():
LOGGER.error("Error while loading file '{}'.".format(songbook_path)) LOGGER.error("Error while loading file '{}'.".format(songbook_path))
sys.exit(1) sys.exit(1)
songbook["_songbook_dir"] = os.path.abspath(os.path.dirname(songbook_path))
# Gathering datadirs # Gathering datadirs
datadirs = [] datadirs = []
if options.datadir: if options.datadir:
@ -126,9 +124,9 @@ def main():
) )
for path in songbook['datadir'] for path in songbook['datadir']
] ]
if not datadirs:
# Default value # Default value
datadirs = [os.path.dirname(os.path.abspath(songbook_path))] datadirs.append(os.path.dirname(os.path.abspath(songbook_path)))
songbook['datadir'] = datadirs songbook['datadir'] = datadirs
try: try:

Loading…
Cancel
Save