"""
scrapple.commands.genconfig
~~~~~~~~~~~~~~~~~~~~~~~~~~~
"""
from __future__ import print_function
import json
import os
from colorama import Back, Fore, init
from jinja2 import Template
import scrapple
from scrapple.commands import command
[docs]class GenconfigCommand(command.Command):
"""
Defines the execution of :ref:`genconfig <command-genconfig>`
"""
def __init__(self, args):
super(GenconfigCommand, self).__init__(args)
init()
[docs] def execute_command(self):
"""
The genconfig command depends on predefined `Jinja2 <http://jinja.pocoo.org/>`_ \
templates for the skeleton configuration files. Taking the --type argument from the \
CLI input, the corresponding template file is used.
Settings for the configuration file, like project name, selector type and URL \
are taken from the CLI input and using these as parameters, the template is \
rendered. This rendered JSON document is saved as <project_name>.json.
"""
print(Back.GREEN + Fore.BLACK + "Scrapple Genconfig")
print(Back.RESET + Fore.RESET)
directory = os.path.join(scrapple.__path__[0], 'templates', 'configs')
with open(os.path.join(directory, self.args['--type'] + '.txt'), 'r') as f:
template_content = f.read()
print("\n\nUsing the", self.args['--type'], "template\n\n")
template = Template(template_content)
settings = {
'projectname': self.args['<projectname>'],
'selector_type': self.args['--selector'],
'url': self.args['<url>'],
'levels': int(self.args['--levels'])
}
rendered = template.render(settings=settings)
with open(self.args['<projectname>'] + '.json', 'w') as f:
rendered_data = json.loads(rendered)
json.dump(rendered_data, f, indent=3)
print(Back.WHITE + Fore.RED + self.args['<projectname>'], ".json has been created" \
+ Back.RESET + Fore.RESET, sep="")