Package: poppage
IntroductionPopPage is a simple command-line utility originally intended as a static
website generator but has since grown into acookiecutterclone. The
main features of PopPage are:UsesJinja2 templatesto generate
output.Fairly good support forcookiecuttertemplates.Uses YAML to store default key/values for template variables.Output can be single files or directories.Key/values applied to the templates variables can specified on the
command line.A collection of templates isavailable
here.StatusCurrently, this project is in thedevelopment releasestage. While
this project is suitable for use, please note that there may be
incompatibilities in new releases.Release notes are maintained in the projectchangelog.RequirementsPopPage runs on Python 2.7/3.x and uses some third-party libraries.InstallationPopPage isavailable on PyPI
hereand can be installed with
pip using the following command:pip install poppageUsagePopPage can be run from the command line usingpoppage. Typepoppage--helpfor usage information. The following subcommands are
available:check- Check the given INPATH template for variables.make- Generates directories and files based on the given INPATH
template.run- Generates the OUTPATH, executes commands, then deletes
OUTPATH.Some Important NotesBefore showing any examples, keep these notes in mind:Template file/directory names can contain template variables (e.g.{{foo}}.txt). The provided key/values will be used for the output
file generation unless an explicit OUTPATH is provided.The output will be passed tostdoutif INPATH is a file (rather
than a directory) and INPATH does not contain a template variable and
no OUTPATH is specified.CLI Key/ValuesThe following is a quick example of using PopPage from the CLI:Template file (template.jinja2):Hello {{name}}!PopPage command:poppage make --inpath template.jinja2 --string name worldOutput tostdout:Hello world!YAML Key/ValuesAdditionally, default key/values can be stored in a YAML file:Template file (template.jinja2):Hello {{name}}!Defaults file (defaults.yaml):name: sunPopPage command:poppage make --inpath template.jinja2 --defaults defaults.yamlOutput tostdout:Hello sun!Custom YAML TagsThe following custom YAML tags are provided:!file- Reads value from a file as a string.!yaml- Reads value from file as YAML.!opt- Like!yamlbut only for populating the__opt__key.!cmd- Reads value from a CLI command output.!ask- Prompts the user to input a value.!py- Executes Python code.Check out this example:Template file (template.jinja2):Hello {{first}} {{last}}!Defaults file (defaults.yaml):first: !file myfile.txt
last: !cmd python -c "print('Skywalker')"Content ofmyfile.txt:AnakinPopPage command:poppage make --inpath template.jinja2 --defaults defaults.yamlOutput tostdout:Hello Anakin Skywalker!Sometimes it might be helpful to process variables in a defaults file.
The!pytag can be used in this scenario:name: !ask &name "Enter a name"
loud: !py ["'{0}'.upper()", *name]The anchor&nameis created.A list must be provided to the!pytag. The code is the first
element and it can contain standard Python string format variables
(e.g.{0}) which will be replaced by the following list elements.
Note that an anchor reference can be used as an element!Option DefaultsDefault utility options can be provided in the defaults file under the__opt__root key.Check out these examples:Basic option defaults:__opt__:
    inpath: template.jinja2
    outpath: myfile.txtAnother options example:__opt__:
    inpath: template.jinja2
    outpath: myfile.py
    execute: python myfile.pyFormakecommands, multipleinpathandoutpathpairs can
be specified, the lists are zipped to join the pairs:__opt__:
    command: make
    inpath:
      - template1.jinja2
      - template2.jinja2
    outpath:
      - myfile1.py
      - myfile2.pyThe execute option can be a template:__opt__:
    inpath: template.jinja2
    execute: python {{outpath}}Populate the options using a YAML file:__opt__: !opt myopts.yamlCookiecutter CompatiblityPopPage should be compatible with manycookiecuttertemplates.
Usinghttps://github.com/solarnz/cookiecutter-avras an example, check
for the variables in the template:poppage check --inpath https://github.com/solarnz/cookiecutter-avr
# Found variables:
#   cookiecutter::full_name
#   cookiecutter::repo_name
#   cookiecutter::yearCreate a file to store your default values, for exampledefaults.yaml:cookiecutter:
    full_name: Henry Jones
    repo_name: LastCrusade
    year: 1989Run PopPage to generate your files:poppage make --inpath https://github.com/solarnz/cookiecutter-avr --defaults defaults.yaml --outpath mydest
# This will generate the entire repo to a new directory named mydest.# Or you can do:
poppage make --inpath https://github.com/solarnz/cookiecutter-avr/tree/master/%7B%7Bcookiecutter.repo_name%7D%7D --defaults defaults.yaml
# This will generate the {{cookiecutter.repo_name}} subdirectory to a new directory based on the given variables, in this case LastCrusade.Demo VideoA quick demo video isavailable here on
YouTube. This video demos using a
single set of requirements information to generate native shell scripts
for both Windows and Linux. The templates used in this demo are
available on GitHub at the following locations:Linux Bash
ScriptMicrosoft Batch
ScriptSimilarThe following projects are similar and may be worth checking out:cookiecutter