mirror of https://github.com/patacrep/patacrep.git
Luthaf
11 years ago
2 changed files with 63 additions and 3 deletions
@ -0,0 +1,60 @@ |
|||
# -*- coding: utf-8 -*- |
|||
|
|||
"""Include an external list of songs |
|||
|
|||
This plugin provides keyword 'include', used to include an external list of |
|||
songs in JSON format. |
|||
""" |
|||
|
|||
import json |
|||
import os |
|||
import sys |
|||
import logging |
|||
|
|||
from patacrep.content import process_content, ContentError |
|||
from patacrep import encoding |
|||
|
|||
LOGGER = logging.getLogger(__name__) |
|||
|
|||
def load_from_datadirs(path, config=None): |
|||
for datadir in config.get("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 |
|||
def parse(keyword, config, argument, contentlist): |
|||
"""Include an external file content. |
|||
|
|||
Arguments: |
|||
- keyword: the string 'include'; |
|||
- config: the current songbook configuration dictionary; |
|||
- argument: None; |
|||
- contentlist: a list of file paths to be included. |
|||
""" |
|||
new_contentlist = [] |
|||
|
|||
for path in contentlist: |
|||
filepath = load_from_datadirs(path, config) |
|||
content_file = None |
|||
try: |
|||
content_file = encoding.open_read(filepath, 'r') |
|||
new_content = json.load(content_file) |
|||
except Exception as error: # pylint: disable=broad-except |
|||
LOGGER.error(error) |
|||
LOGGER.error("Error while loading file '{}'.".format(filepath)) |
|||
sys.exit(1) |
|||
finally: |
|||
if content_file: |
|||
content_file.close() |
|||
|
|||
config["datadir"].append(os.path.abspath(os.path.dirname(filepath))) |
|||
new_contentlist += process_content(new_content, config) |
|||
config["datadir"].pop() |
|||
|
|||
return new_contentlist |
|||
|
|||
CONTENT_PLUGINS = {'include': parse} |
Loading…
Reference in new issue