pax_global_header00006660000000000000000000000064122051136050014505gustar00rootroot0000000000000052 comment=51a017151e879f52c4c4e0d5e1c086bf51cbf389 cookiecutter-0.6.4/000077500000000000000000000000001220511360500142145ustar00rootroot00000000000000cookiecutter-0.6.4/.gitignore000066400000000000000000000006511220511360500162060ustar00rootroot00000000000000*.py[cod] # C extensions *.so # Packages *.egg *.egg-info dist build eggs parts bin var sdist develop-eggs .installed.cfg lib lib64 # Installer logs pip-log.txt # Unit test / coverage reports .coverage .tox nosetests.xml # Translations *.mo # Mr Developer .mr.developer.cfg .project .pydevproject # Sphinx docs/_build # Coverage htmlcov/ # TextMate .tm_properties # Temporarily ignore while I work on this Makefile cookiecutter-0.6.4/.travis.yml000066400000000000000000000013341220511360500163260ustar00rootroot00000000000000# Config file for automatic testing at travis-ci.org language: python python: - "3.3" - "2.7" - "2.6" - "pypy" # command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors install: - if [[ $TRAVIS_PYTHON_VERSION == '2.6' ]]; then pip install -r requirements/test_26.txt; fi - if [[ $TRAVIS_PYTHON_VERSION == '2.7' ]]; then pip install -r requirements/test_27.txt; fi - if [[ $TRAVIS_PYTHON_VERSION == 'pypy' ]]; then pip install -r requirements/test_27.txt; fi - if [[ $TRAVIS_PYTHON_VERSION == '3.3' ]]; then pip install -r requirements/test_33.txt; fi # command to run tests, e.g. python setup.py test script: coverage run --source cookiecutter setup.py test after_success: coveralls cookiecutter-0.6.4/AUTHORS.rst000066400000000000000000000002311220511360500160670ustar00rootroot00000000000000======= Credits ======= Development Lead ---------------- * Audrey Roy Contributors ------------ None yet. Why not be the first? cookiecutter-0.6.4/CONTRIBUTING.rst000066400000000000000000000067661220511360500166740ustar00rootroot00000000000000============ Contributing ============ Contributions are welcome, and they are greatly appreciated! Every little bit helps, and credit will always be given. You can contribute in many ways: Types of Contributions ---------------------- Create Cookiecutter Templates ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Some other Cookiecutter templates to list in the :doc:`README` would be great. If you create a Cookiecutter template, submit a pull request adding it to README.rst. Report Bugs ~~~~~~~~~~~ Report bugs at https://github.com/audreyr/cookiecutter/issues. If you are reporting a bug, please include: * Your operating system name and version. * Any details about your local setup that might be helpful in troubleshooting. * Detailed steps to reproduce the bug. Fix Bugs ~~~~~~~~ Look through the GitHub issues for bugs. Anything tagged with "bug" is open to whoever wants to implement it. Implement Features ~~~~~~~~~~~~~~~~~~ Look through the GitHub issues for features. Anything tagged with "enhancement" is open to whoever wants to implement it. Write Documentation ~~~~~~~~~~~~~~~~~~~ Cookiecutter could always use more documentation, whether as part of the official Cookiecutter docs, in docstrings, or even on the web in blog posts, articles, and such. Submit Feedback ~~~~~~~~~~~~~~~ The best way to send feedback is to file an issue at https://github.com/audreyr/cookiecutter/issues. If you are proposing a feature: * Explain in detail how it would work. * Keep the scope as narrow as possible, to make it easier to implement. * Remember that this is a volunteer-driven project, and that contributions are welcome :) Setting Up the Code for Local Development ----------------------------------------- Here's how to set up `cookiecutter` for local development. 1. Fork the `cookiecutter` repo on GitHub. 2. Clone your fork locally:: $ git clone git@github.com:your_name_here/cookiecutter.git 3. Install your local copy into a virtualenv. Assuming you have virtualenvwrapper installed, this is how you set up your fork for local development:: $ mkvirtualenv cookiecutter $ cd cookiecutter/ $ python setup.py develop 4. Create a branch for local development:: $ git checkout -b name-of-your-bugfix-or-feature Now you can make your changes locally. 5. When you're done making changes, check that your changes pass the tests and flake8:: $ flake8 cookiecutter tests $ python setup.py test $ tox 6. Commit your changes and push your branch to GitHub:: $ git add . $ git commit -m "Your detailed description of your changes." $ git push origin name-of-your-bugfix-or-feature 7. Check that the test coverage hasn't dropped:: coverage run --source cookiecutter setup.py test coverage report -m coverage html 8. Submit a pull request through the GitHub website. Pull Request Guidelines ----------------------- Before you submit a pull request, check that it meets these guidelines: 1. The pull request should include tests. 2. If the pull request adds functionality, the docs should be updated. Put your new functionality into a function with a docstring, and add the feature to the list in README.rst. 3. The pull request should work for Python 2.6, 2.7, 3.3, and PyPy. Check https://travis-ci.org/audreyr/complexity/pull_requests and make sure that the tests pass for all supported Python versions. Tips ---- To run a particular test:: $ python -m unittest tests.test_find.TestFind.test_find_template To run a subset of tests:: $ python -m unittest tests.test_find cookiecutter-0.6.4/HISTORY.rst000066400000000000000000000051351220511360500161130ustar00rootroot00000000000000.. :changelog: History ------- 0.6.4 (2013-08-21) ++++++++++++++++++ * Windows support officially added. * Fix TemplateNotFound Exception on Windows (#37). 0.6.3 (2013-08-20) ++++++++++++++++++ * Fix copying of binary files in nested paths (#41), thanks to `@sloria`_. .. _`@sloria`: https://github.com/sloria/ 0.6.2 (2013-08-19) ++++++++++++++++++ * Depend on Jinja2>=2.4 instead of Jinja2==2.7. * Fix errors on attempt to render binary files. Copy them over from the project template without rendering. * Fix Python 2.6/2.7 `UnicodeDecodeError` when values containing Unicode chars are in `cookiecutter.json`. * Set encoding in Python 3 `unicode_open()` to always be utf-8. 0.6.1 (2013-08-12) ++++++++++++++++++ * Improved project template finding. Now looks for the occurrence of `{{`, `cookiecutter`, and `}}` in a directory name. * Fix help message for input_dir arg at command prompt. * Minor edge cases found and corrected, as a result of improved test coverage. 0.6.0 (2013-08-08) ++++++++++++++++++ * Config is now in a single `cookiecutter.json` instead of in `json/`. * When you create a project from a git repo template, Cookiecutter prompts you to enter custom values for the fields defined in `cookiecutter.json`. 0.5 (2013-07-28) ++++++++++++++++ * Friendlier, more simplified command line usage:: # Create project from the cookiecutter-pypackage/ template $ cookiecutter cookiecutter-pypackage/ # Create project from the cookiecutter-pypackage.git repo template $ cookiecutter https://github.com/audreyr/cookiecutter-pypackage.git * Can now use Cookiecutter from Python as a package:: from cookiecutter.main import cookiecutter # Create project from the cookiecutter-pypackage/ template cookiecutter('cookiecutter-pypackage/') # Create project from the cookiecutter-pypackage.git repo template cookiecutter('https://github.com/audreyr/cookiecutter-pypackage.git') * Internal refactor to remove any code that changes the working directory. 0.4 (2013-07-22) ++++++++++++++++ * Only takes in one argument now: the input directory. The output directory is generated by rendering the name of the input directory. * Output directory cannot be the same as input directory. 0.3 (2013-07-17) ++++++++++++++++ * Takes in command line args for the input and output directories. 0.2.1 (2013-07-17) ++++++++++++++++++ * Minor cleanup. 0.2 (2013-07-17) ++++++++++++++++ Bumped to "Development Status :: 3 - Alpha". * Works with any type of text file. * Directory names and filenames can be templated. 0.1.0 (2013-07-11) ++++++++++++++++++ * First release on PyPI. cookiecutter-0.6.4/LICENSE000066400000000000000000000026701220511360500152260ustar00rootroot00000000000000Copyright (c) 2013, Audrey Roy All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of border nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. cookiecutter-0.6.4/MANIFEST.in000066400000000000000000000001441220511360500157510ustar00rootroot00000000000000include AUTHORS.rst include CONTRIBUTING.rst include HISTORY.rst include LICENSE include README.rst cookiecutter-0.6.4/README.rst000066400000000000000000000127731220511360500157150ustar00rootroot00000000000000============= Cookiecutter ============= .. image:: https://badge.fury.io/py/cookiecutter.png :target: http://badge.fury.io/py/cookiecutter .. image:: https://travis-ci.org/audreyr/cookiecutter.png?branch=master :target: https://travis-ci.org/audreyr/cookiecutter .. image:: https://pypip.in/d/cookiecutter/badge.png :target: https://crate.io/packages/cookiecutter?version=latest .. image:: https://coveralls.io/repos/audreyr/cookiecutter/badge.png?branch=master :target: https://coveralls.io/r/audreyr/cookiecutter?branch=master A command-line utility that creates projects from project templates, e.g. creating a Python package project from a Python package project template. * Documentation: http://cookiecutter.rtfd.org * GitHub: https://github.com/audreyr/cookiecutter * Free software: BSD license * PyPI: https://pypi.python.org/pypi/cookiecutter .. image:: https://raw.github.com/audreyr/cookiecutter/aa309b73bdc974788ba265d843a65bb94c2e608e/cookiecutter_medium.png Features -------- Did someone say features? Cookiecutter's got more features than you can shake a stick at! * Works with Python 2.6, 2.7, 3.3, and PyPy. * Simple command line usage: .. code-block:: bash # Create project from the cookiecutter-pypackage.git repo template # You'll be prompted to enter values. # Then it'll create your Python package based on those values. $ cookiecutter https://github.com/audreyr/cookiecutter-pypackage.git * Can also use it at the command line with a local template: .. code-block:: bash # Create project from the local cookiecutter-pypackage/ template $ cookiecutter cookiecutter-pypackage/ * Or use it from Python: .. code-block:: python from cookiecutter.main import cookiecutter # Create project from the cookiecutter-pypackage/ template cookiecutter('cookiecutter-pypackage/') # Create project from the cookiecutter-pypackage.git repo template cookiecutter('https://github.com/audreyr/cookiecutter-pypackage.git') * Directory names and filenames can be templated. For example:: {{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}.py * Supports unlimited levels of directory nesting. * All templating is done with Jinja2. * Project templates can be in any programming language or markup format: Python, JavaScript, Ruby, CoffeeScript, RST, Markdown, CSS, HTML, you name it. You can use multiple languages in the same project template. * Simply define your template variables in a `cookiecutter.json` file. For example: .. code-block:: json { "full_name": "Audrey Roy", "email": "audreyr@gmail.com", "project_name": "Complexity", "repo_name": "complexity", "project_short_description": "A refreshingly simple HTML-based static site generator.", "release_date": "2013-07-10", "year": "2013", "version": "0.1.1" } * If generating a project from a git repo template, you are prompted for input: - Prompts are the keys in `cookiecutter.json`. - Default responses are the values in `cookiecutter.json`. - Prompts are shown in order (thanks to those handy OrderedDicts!) Available Templates ------------------- Here is a list of the working Cookiecutter project templates that exist: * `cookiecutter-pypackage`_: `@audreyr`_'s ultimate Python package project template. * `cookiecutter-jquery`_: A jQuery plugin project template based on jQuery Boilerplate. * `cookiecutter-flask`_ : A Flask template with Bootstrap 3, starter templates, and working user registration. * `cookiecutter-django`_: A Django project template with Bootstrap 3, customizable users app, starter templates, and working user registration. * `cookiecutter-djangopackage`_: A template designed to create reusable third-party PyPI friendly Django apps. Documentation is written in tutorial format. * `bootstrap.c`_: A template for simple projects written in C with autotools. Make your own, then submit a pull request adding yours to this list! .. _`cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage .. _`@audreyr`: https://github.com/audreyr/ .. _`cookiecutter-jquery`: https://github.com/audreyr/cookiecutter-jquery .. _`cookiecutter-flask`: https://github.com/sloria/cookiecutter-flask .. _`cookiecutter-django`: https://github.com/pydanny/cookiecutter-django .. _`cookiecutter-djangopackage`: https://github.com/pydanny/cookiecutter-djangopackage .. _`bootstrap.c`: https://github.com/vincentbernat/bootstrap.c Similar projects ---------------- * `Paste`_ has a create option that creates a skeleton project. * `Diecutter`_: an API service that will give you back a configuration file from a template and variables. * `Django`_'s `startproject` and `startapp` commands can take in a `--template` option. * `python-packager`_: Creates Python packages from its own template, with configurable options. * `Yeoman`_ has a Rails-inspired generator system that provides scaffolding for apps. * `Pyramid`_'s `pcreate` command for creating Pyramid projects from scaffold templates. .. _`Paste`: http://pythonpaste.org/script/#paster-create .. _`Diecutter`: https://github.com/novagile/diecutter .. _`Django`: https://docs.djangoproject.com/en/1.5/ref/django-admin/#django-admin-startproject .. _`python-packager`: https://github.com/fcurella/python-packager .. _`Yeoman`: https://github.com/yeoman/generator .. _`Pyramid`: http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/scaffolding.html cookiecutter-0.6.4/cookiecutter/000077500000000000000000000000001220511360500167145ustar00rootroot00000000000000cookiecutter-0.6.4/cookiecutter/__init__.py000077500000000000000000000002101220511360500210210ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- """ cookiecutter ------------ Main package for Cookiecutter. """ __version__ = '0.6.4' cookiecutter-0.6.4/cookiecutter/cleanup.py000077500000000000000000000027141220511360500207240ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- """ cookiecutter.cleanup -------------------- Functions for cleaning up after Cookiecutter project generation occurs. """ from __future__ import unicode_literals import logging import os import shutil from .exceptions import MissingProjectDir def remove_repo(repo_dir, generated_project): """ Move the generated project to the same level as `repo_dir`, then delete `repo_dir`. Called when Cookiecutter receives a repo as an argument instead of a project template directory. :param repo_dir: Local directory of the cloned repo. :param generated_project: Name of project that Cookiecutter just generated. All lowercase, no spaces or funny characters. :returns: True if successful, else False. """ logging.debug('Moving {0} out of {1} and removing {1}'.format(generated_project, repo_dir)) parent_dir = os.path.dirname(os.path.abspath(repo_dir)) logging.debug('parent_dir is {0}'.format(parent_dir)) project_dir = os.path.join(repo_dir, generated_project) logging.debug('project_dir is {0}'.format(project_dir)) if os.path.exists(project_dir): shutil.move(project_dir, parent_dir) shutil.rmtree(repo_dir) return True else: raise MissingProjectDir( 'The project did not get generated. Please file an issue in ' 'Cookiecutter with as much detail as possible about what happened.' ) cookiecutter-0.6.4/cookiecutter/exceptions.py000077500000000000000000000017371220511360500214620ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- """ cookiecutter.exceptions ----------------------- All exceptions used in the Cookiecutter code base are defined here. """ class CookiecutterException(Exception): """ Base exception class. All Cookiecutter-specific exceptions should subclass this class. """ class NonTemplatedInputDirException(CookiecutterException): """ Raised when a project's input dir is not templated. The name of the input directory should always contain a string that is rendered to something else, so that input_dir != output_dir. """ class UnknownTemplateDirException(CookiecutterException): """ Raised when Cookiecutter cannot determine which directory is the project template, e.g. more than one dir appears to be a template dir. """ class MissingProjectDir(CookiecutterException): """ Raised during cleanup when remove_repo() can't find a generated project directory inside of a repo. """ cookiecutter-0.6.4/cookiecutter/find.py000077500000000000000000000017021220511360500202110ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- """ cookiecutter.find ----------------- Functions for finding Cookiecutter templates and other components. """ import logging import os def find_template(repo_dir): """ Determines which child directory of `repo_dir` is the project template. :param repo_dir: Local directory of newly cloned repo. :returns project_template: Relative path to project template. """ logging.debug('Searching {0} for the project template.'.format(repo_dir)) repo_dir_contents = os.listdir(repo_dir) for item in repo_dir_contents: if 'cookiecutter' in item and \ '{{' in item and \ '}}' in item: project_template = item break if project_template: project_template = os.path.join(repo_dir, project_template) logging.debug('The project template appears to be {0}'.format(project_template)) return project_template cookiecutter-0.6.4/cookiecutter/generate.py000077500000000000000000000102461220511360500210660ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- """ cookiecutter.generate --------------------- Functions for generating a project from a project template. """ from __future__ import unicode_literals import logging import os import shutil import sys from jinja2 import FileSystemLoader, Template from jinja2.environment import Environment from binaryornot.check import is_binary from .exceptions import NonTemplatedInputDirException from .utils import make_sure_path_exists, unicode_open if sys.version_info[:2] < (2, 7): import simplejson as json from ordereddict import OrderedDict else: import json from collections import OrderedDict def generate_context(config_file='cookiecutter.json'): """ Generates the context for a Cookiecutter project template. Loads the JSON file as a Python object, with key being the JSON filename. :param config_file: JSON file containing project config values. :paramtype config_file: filename """ context = {} file_handle = open(config_file) obj = json.load(file_handle, encoding='utf-8', object_pairs_hook=OrderedDict) # Add the Python object to the context dictionary file_name = os.path.split(config_file)[1] file_stem = file_name.split('.')[0] context[file_stem] = obj logging.debug('Context generated is {0}'.format(context)) return context def generate_file(infile, context, env): """ 1. Render the contents of infile. 2. Render the filename of infile as the name of outfile. 3. Write the rendered infile to outfile. :param infile: Input file to generate the file from. """ logging.debug("Generating file {0}".format(infile)) # Render the path to the output file (but don't include the filename) outdir_tmpl = Template(os.path.dirname(os.path.abspath(infile))) outdir = outdir_tmpl.render(**context) fname = os.path.basename(os.path.abspath(infile)) # input/output filename # Write it to the corresponding place in output_dir outfile = os.path.join(outdir, fname) logging.debug("outfile is {0}".format(outfile)) # Just copy over binary files. Don't render. logging.debug("Check {0} to see if it's a binary".format(infile)) if is_binary(infile): logging.debug("Copying binary {0} to {1} without rendering" .format(infile, outfile)) shutil.copyfile(infile, outfile) else: # Force fwd slashes on Windows for get_template # This is a by-design Jinja issue infile_fwd_slashes = infile.replace(os.path.sep, '/') # Render the file tmpl = env.get_template(infile_fwd_slashes) rendered_file = tmpl.render(**context) # Render the output filename before writing name_tmpl = Template(outfile) rendered_name = name_tmpl.render(**context) logging.debug("Writing {0}".format(rendered_name)) with unicode_open(rendered_name, 'w') as fh: fh.write(rendered_file) def generate_files(template_dir, context=None): """ Renders the templates and saves them to files. :param input_dir: Project template input directory. :paramtype input_dir: directory """ # Always use utf-8 template_dir = template_dir logging.debug('Generating project from {0}...'.format(template_dir)) context = context or {} env = Environment() env.loader = FileSystemLoader('.') # Render dirname before writing name_tmpl = Template(template_dir) output_dir = name_tmpl.render(**context) if output_dir == template_dir: raise NonTemplatedInputDirException logging.debug("output_dir is {0}".format(output_dir)) make_sure_path_exists(output_dir) for root, dirs, files in os.walk(template_dir): for d in dirs: indir = os.path.join(root, d) outdir = indir.replace(template_dir, output_dir, 1) # Render dirname before writing name_tmpl = Template(outdir) rendered_dirname = name_tmpl.render(**context) make_sure_path_exists(rendered_dirname) for f in files: logging.debug("f is {0}".format(f)) infile = os.path.join(root, f) generate_file(infile, context, env) cookiecutter-0.6.4/cookiecutter/main.py000077500000000000000000000050551220511360500202220ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- """ cookiecutter.main ----------------- Main entry point for the `cookiecutter` command. The code in this module is also a good example of how to use Cookiecutter as a library rather than a script. """ import argparse import logging import os import sys from .cleanup import remove_repo from .find import find_template from .prompt import prompt_for_config from .generate import generate_context, generate_files from .vcs import git_clone logger = logging.getLogger(__name__) def cookiecutter(input_dir): """ API equivalent to using Cookiecutter at the command line. :param input_dir: A directory containing a project template dir, or a URL to git repo. """ # If it's a git repo, clone and prompt if input_dir.endswith('.git'): got_repo_arg = True repo_dir = git_clone(input_dir) project_template = find_template(repo_dir) else: got_repo_arg = False project_template = find_template(input_dir) config_file = os.path.join(os.path.dirname(project_template), 'cookiecutter.json') logging.debug('config_file is {0}'.format(config_file)) context = generate_context( config_file=config_file ) # If the context came from a repo, prompt the user to manually configure # at the command line. if got_repo_arg: cookiecutter_dict = prompt_for_config(context) context['cookiecutter'] = cookiecutter_dict # Create project from local context and project template. generate_files( template_dir=project_template, context=context ) # Remove repo if Cookiecutter cloned it in the first place. # Here the user just wants a project, not a project template. if got_repo_arg: generated_project = context['cookiecutter']['repo_name'] remove_repo(repo_dir, generated_project) def parse_cookiecutter_args(args): """ Parse the command-line arguments to Cookiecutter. """ parser = argparse.ArgumentParser( description='Create a project from a Cookiecutter project template.' ) parser.add_argument( 'input_dir', help='Cookiecutter project dir, e.g. cookiecutter-pypackage/' ) return parser.parse_args(args) def main(): """ Entry point for the package, as defined in setup.py. """ # Log info and above to console logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.INFO) args = parse_cookiecutter_args(sys.argv[1:]) cookiecutter(args.input_dir) if __name__ == '__main__': main() cookiecutter-0.6.4/cookiecutter/prompt.py000077500000000000000000000041611220511360500206140ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- """ cookiecutter.prompt --------------------- Functions for prompting the user for project info. """ import sys PY3 = sys.version > '3' if PY3: iteritems = lambda d: iter(d.items()) else: input = raw_input iteritems = lambda d: d.iteritems() def prompt_for_config(context): """ Prompts the user to enter new config, using context as a source for the field names and sample values. """ cookiecutter_dict = {} for key, val in iteritems(context['cookiecutter']): prompt = "{0} (default is \"{1}\")? ".format(key, val) new_val = input(prompt) new_val = new_val.strip() if new_val == '': new_val = val if PY3: cookiecutter_dict[key] = new_val else: cookiecutter_dict[key] = new_val.decode('utf-8') return cookiecutter_dict def query_yes_no(question, default="yes"): """ Ask a yes/no question via `raw_input()` and return their answer. :param question: A string that is presented to the user. :param default: The presumed answer if the user just hits . It must be "yes" (the default), "no" or None (meaning an answer is required of the user). The "answer" return value is one of "yes" or "no". Adapted from http://stackoverflow.com/questions/3041986/python-command-line-yes-no-input http://code.activestate.com/recipes/577058/ """ valid = {"yes": True, "y": True, "ye": True, "no": False, "n": False} if default is None: prompt = " [y/n] " elif default == "yes": prompt = " [Y/n] " elif default == "no": prompt = " [y/N] " else: raise ValueError("invalid default answer: '%s'" % default) while True: sys.stdout.write(question + prompt) choice = input().lower() if default is not None and choice == '': return valid[default] elif choice in valid: return valid[choice] else: sys.stdout.write("Please respond with 'yes' or 'no' " "(or 'y' or 'n').\n") cookiecutter-0.6.4/cookiecutter/utils.py000077500000000000000000000015121220511360500204300ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- """ cookiecutter.utils ------------------ Helper functions used throughout Cookiecutter. """ import errno import os import sys PY3 = sys.version > '3' if PY3: pass else: import codecs def make_sure_path_exists(path): """ Ensures that a directory exists. :param path: A directory path. """ try: os.makedirs(path) except OSError as exception: if exception.errno != errno.EEXIST: return False return True def unicode_open(filename, *args, **kwargs): """ Opens a file as usual on Python 3, and with UTF-8 encoding on Python 2. :param filename: Name of file to open. """ kwargs['encoding'] = "utf-8" if PY3: return open(filename, *args, **kwargs) return codecs.open(filename, *args, **kwargs) cookiecutter-0.6.4/cookiecutter/vcs.py000077500000000000000000000015141220511360500200650ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- """ cookiecutter.vcs ---------------- Helper functions for working with version control systems. """ import logging import os import shutil import sys from .prompt import query_yes_no def git_clone(repo): """ Clone a git repo to the current directory. :param repo: Git repo URL ending with .git. """ # Return repo dir tail = os.path.split(repo)[1] repo_dir = tail.rsplit('.git')[0] logging.debug('repo_dir is {0}'.format(repo_dir)) if os.path.isdir(repo_dir): ok_to_delete = query_yes_no("You've cloned {0} before. Is it okay to delete and re-clone it?".format(repo_dir)) if ok_to_delete: shutil.rmtree(repo_dir) else: sys.exit() os.system('git clone {0}'.format(repo)) return repo_dir cookiecutter-0.6.4/cookiecutter_medium.png000066400000000000000000000207371220511360500207730ustar00rootroot00000000000000PNG  IHDR_SWsBIT|d pHYs(RtEXtSoftwarewww.inkscape.org< IDATxwU{sCBB- /@@i..IΜs~;3s~W nTʅ0lXP^^^/K~WAAR.JR.|88 $gK{ -  A~E俔ј (+@qhŽ70(SWg%Yβ Bh2Srap2p02A1Z,y # H]WʅA7ЎjN70X-  4"U%^).Om\\],FAjIEWʅ)=ΣŒrނ B5*t>81NۃerY mAbJR.nAzL>W, DAQra;6`؝?K̼A6q; Axisag`" k%^)\AȄ-W ==ƣap(EɃ9Œxނ #%^)סC1g>|0V|0~UdX|X[AaajN !xO9fnVfê= c\=A 'W9^FH>|LGKy ! "+gÞpqtxIszSB J<ƾU2d=:$z8R* Yʜ^)OD`j^ }UZBw¨ ` AhăT&Ll=A 3!ΙJ©T;W?F ;MWA5G_p/p(pA!oZ*=6a,dLæme+َ-Jk #@z=yӌ@MQB~ ;g!)o?^z=#!W඲ ]m~iˀ.c>xqD88=eÚ|xxxq%I [Y{cZYg>p<0=qޖv;TJFA?C˃}`zRdo+ !q?[ K{G% uxq_VgמkzDi+ѿk|x=}A'[e"`$[Y`}M ^>}5}|d }(pTFc8RvN43Fme ~G \yE /be5oތ؍>.B+0~\aBIYI2v\^#K+le}8 38q e xh۞խrg+HV}Y= r&ao)"='z?_TleMDGb0_ L.v\oa? i+aj4B(zO[Y7D֐}0P^=k+wD݆69v?j#~j?VADmd+k /ab+:Ƿ!mٴ9۶8^uЈ]memek{) ?"6 e<^rxV/meսkW>̌ǶvZ ;L5L \w^g|V!6 9zj+tb+kPND ~g+`?2k4h3m*w!iƥ=B+q[Y& ǖR7 <ΨNڌ>g/?SJ< @j7?~\ ׺'Iu2J+愐c ڑ.m Ŷ1iL6>T9H[YbyA}մdia6NQ)$cTcx8hgj\ă"'R"N^qWS(WoOC'!/t[Y{?#7ZyLmɒleM6hw=K7K&:.z6U:利 GM=lem8Od,fJ';q[^w ժpW#S~ec;xW౫ t8m!9lVV֓3ɶN@;T[YO Kg4Fhi̔GWﯴӳܜ][(MˌJ'~9Ml/`O󿣕z;(ŋRÀ[nSle+py"5dZR_1nmp8´GeMY$وiy*RQٳc JR. !0IT ٬&ޫ-9Պsa`y5ptZASP0<5DB4|Xai:<::@9Of Ϝ+*zӻ?]ۍW'&W#zh3 *HV45&g}FbF;w% m,MO6ӓΌ2w0SFph\ 3^w\/+XkBz)=gM{8x;1+Bd;5KЉ3VJe+kW͜@<'hqV;q Kdqov-^U3֪ߊp~%P }BSnq:<Ϣ>8 #i|>K58 {-{U*#3ͅ}I`LГIYr@`:pX+p0WFG+އ[kV}| 'xL[Y_0c :g-?=%ߤ+(U>$^9.< 7D8:q[\/kyʊq\/ OݔP_6L ^Gȼp\b+>)qqB}+:po&q#Fr\/G[cmu&K/pDǂFIޟIKyl wvCV`?*5/F517rD8;L-Eg7:3DleC+(#_v|#OsfʺUAH:3J΃5Je@ 5n+kk̾[;>[&D|Z^3B3twVݵ֫/*j9'M :$DOzaNNemIᰇAgÄqh( (J<8)@&#Y~f''=szz:)x(YBQ uZ@v Bڼtâ%l.ZTy<@ L7;hB'l,tvPv1RAq "z&NJI)U V$4iISAȁi]$A%>>QK0jT<]'*ĥ#yޠoUcESzOFl[jՔ#zi\y1V49a69Gʚ=뽑4PxIL@W]ӭ_F%J4R|x͠MFԦlgY*,Kd8p]svuI=a`qn/x_$cQsMJ̜>k.n5!&y]&j>KqD9Cu+Vdމ,2w\͛0MhC| [=$e+âK V/5N7i3QLJ">NJTDSz%m Aq\/ºX' ˁA $8QsoD'gZC"+;uV0O䁟VɊeXQ%aN9U.k%zQS .&?x̒g]R AbVFQ]Q\8=;gĤ߬ckӡȚT@Tc+4sݺ@k0=RAd k fV8E"+EnbKkgRڮvudb05jW+kle}$qf~QQ2a[*>]/6ի;P  lcfȻхBdFjL%&plY5z li#De bZQ}/jPLGŏ*iiuLVVMώQE#>$P&&S䷧+paNcE,&m*ނTė+ [m#V~i33KaՠI$Yɚgӂ=M^W]/a9_&Y_βp!I %l9kᥕrbɟBp,sviqE b4aˉVl[Y{3B$d5e1E*W[Y;9MV^)lm}J&ʺ S)RSiP=JhzB(^Zd,u ʆFM|'ɶ$z[58h1E2u/)8/v55pt҂BLD[BKz성va0==. &m:le%`"i&0ap)p4kj1z9Ir~N<2hW57{q95ٷo?RjV:p Εo(NZ"٬  j+ pY}ʷ%pkeq\oyDO4 un.}DcHk'jfӈ~_:z ߷%$T$/E :u"&ڻIW59Qp}_nor<#֌!:뚛Zkm+nv[Yʚi+kV v\u{[Y3leo(k5'a_/4&H›xc`'`vAw{$Ic.īLj"(7x\~V;8;F?2&sڊ'xU(j?q|Aش e9VV=7C1 3}Q%icvz;^a|]Ⲹm2˪/Hf!\vu4p\Q,^AYlL! > Rѥm&B*{o谳l|@D_XqW:w#pCF&;q?ץ/RSQ b8mbҊ|Ie-BGd#H#aМM"w"]cl[YgݤK\ES ӌV^ǑYbpSi ӂ+׻%׻sOksme\"5#hZ;q]~leK%:5g\9=ЉZ>,&f8U+񻀕R.H ;6ط֬B>( [RϺr@yqfS2UGp Xڌ}3؟?L)(isZ &Ȼ5 @;0j [=I]>kI<vv\cEU$ \,O;J^B;pzYM=AWYٿu8| :&$_!C _8w:~5c)o^ AOkdi^)˰2E{nD;? C{. ^ 9P>7E+A;EޏE/$^ZV;g+V>IюV8J+O~ $tf,E_'ﱧ`keow*-Qতk2SpCO7:Xxj; 1{𓨿A3c2z0pq ct6E7=U`tENۅq;zK%P)Jy/ JKBl8eBˇr^dֈ(H볶7SvB͇X:楝8%T9ZyAO^QB\[m5Rߓ"ASx%5'JЧ  dIݕx/r~t,PKy ! LZ9[NtﻁTY yTKS%_E. B2g!Z1R.dULAJX}+W XhRƜ+E YԱJ:FJᆵ[A ئXH' p˜(7e-"G3> a*蚟ٰ>0Y 8@?.JѶX ]U9κ'iŒLFA"*qb p] $`uUE~/e.)I}AA"8&IAaaFh_Y,Z ЀЎm (˖ë p>pj_h ӕ8Œrs'&M1.X=iQ BRm7 ҍ&|Q2qCĉMAțJX_H?S:/_`bɟ'AAI"JXGSȱh S_8X5m.HPIDATEA$c[#*¿wy `fڡf6GGYt璑NA!%K\8)A|%,Y:&nM!.rCnu  dMJR.t \l`u}*;UmEX-" H]R)d2h4f?-FAZR. ObAgX&  &P `` ';?K 8*j*PS6Mѵs .6JJP͚6U xbϮ  dxG7IENDB`cookiecutter-0.6.4/docs/000077500000000000000000000000001220511360500151445ustar00rootroot00000000000000cookiecutter-0.6.4/docs/Makefile000066400000000000000000000152021220511360500166040ustar00rootroot00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = _build # User-friendly check for sphinx-build ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) endif # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" @echo " text to make text files" @echo " man to make manual pages" @echo " texinfo to make Texinfo files" @echo " info to make Texinfo files and run them through makeinfo" @echo " gettext to make PO message catalogs" @echo " changes to make an overview of all changed/added/deprecated items" @echo " xml to make Docutils-native XML files" @echo " pseudoxml to make pseudoxml-XML files for display purposes" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" clean: rm -rf $(BUILDDIR)/* html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/cookiecutter.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/cookiecutter.qhc" devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" @echo "# mkdir -p $$HOME/.local/share/devhelp/cookiecutter" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/cookiecutter" @echo "# devhelp" epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." $(MAKE) -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." latexpdfja: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through platex and dvipdfmx..." $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." texinfo: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." @echo "Run \`make' in that directory to run these through makeinfo" \ "(use \`make info' here to do that automatically)." info: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo "Running Texinfo files through makeinfo..." make -C $(BUILDDIR)/texinfo info @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." gettext: $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale @echo @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." xml: $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml @echo @echo "Build finished. The XML files are in $(BUILDDIR)/xml." pseudoxml: $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml @echo @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." cookiecutter-0.6.4/docs/authors.rst000066400000000000000000000000341220511360500173600ustar00rootroot00000000000000.. include:: ../AUTHORS.rst cookiecutter-0.6.4/docs/conf.py000066400000000000000000000234541220511360500164530ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # cookiecutter documentation build configuration file, created by # sphinx-quickstart on Thu Jul 11 11:31:49 2013. # # This file is execfile()d with the current directory set to its containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import sys, os # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. #sys.path.insert(0, os.path.abspath('.')) # Add parent dir to path cwd = os.getcwd() parent = os.path.dirname(cwd) sys.path.append(parent) import cookiecutter # -- General configuration ----------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. #needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', 'sphinx.ext.coverage', 'sphinx.ext.pngmath', 'sphinx.ext.ifconfig', 'sphinx.ext.viewcode'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. #source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = u'cookiecutter' copyright = u'2013, Audrey Roy' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = cookiecutter.__version__ # The full version, including alpha/beta/rc tags. release = cookiecutter.__version__ # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. #language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = ['_build'] # The reST default role (used for this markup: `text`) to use for all documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] # If true, keep warnings as "system message" paragraphs in the built documents. #keep_warnings = False # -- Options for HTML output --------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = 'default' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. #html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. #html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. #html_domain_indices = True # If false, no index is generated. #html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. #html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. #html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. #html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'cookiecutterdoc' # -- Options for LaTeX output -------------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). #'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). #'pointsize': '10pt', # Additional stuff for the LaTeX preamble. #'preamble': '', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ('index', 'cookiecutter.tex', u'cookiecutter Documentation', u'Audrey Roy', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # If true, show page references after internal links. #latex_show_pagerefs = False # If true, show URL addresses after external links. #latex_show_urls = False # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_domain_indices = True # -- Options for manual page output -------------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ ('index', 'cookiecutter', u'cookiecutter Documentation', [u'Audrey Roy'], 1) ] # If true, show URL addresses after external links. #man_show_urls = False # -- Options for Texinfo output ------------------------------------------------ # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ ('index', 'cookiecutter', u'cookiecutter Documentation', u'Audrey Roy', 'cookiecutter', 'One line description of project.', 'Miscellaneous'), ] # Documents to append as an appendix to all manuals. #texinfo_appendices = [] # If false, no module index is generated. #texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. #texinfo_show_urls = 'footnote' # If true, do not generate a @detailmenu in the "Top" node's menu. #texinfo_no_detailmenu = False # -- Options for Epub output --------------------------------------------------- # Bibliographic Dublin Core info. epub_title = u'cookiecutter' epub_author = u'Audrey Roy' epub_publisher = u'Audrey Roy' epub_copyright = u'2013, Audrey Roy' # The language of the text. It defaults to the language option # or en if the language is not set. #epub_language = '' # The scheme of the identifier. Typical schemes are ISBN or URL. #epub_scheme = '' # The unique identifier of the text. This can be a ISBN number # or the project homepage. #epub_identifier = '' # A unique identification for the text. #epub_uid = '' # A tuple containing the cover image and cover page html template filenames. #epub_cover = () # A sequence of (type, uri, title) tuples for the guide element of content.opf. #epub_guide = () # HTML files that should be inserted before the pages created by sphinx. # The format is a list of tuples containing the path and title. #epub_pre_files = [] # HTML files shat should be inserted after the pages created by sphinx. # The format is a list of tuples containing the path and title. #epub_post_files = [] # A list of files that should not be packed into the epub file. #epub_exclude_files = [] # The depth of the table of contents in toc.ncx. #epub_tocdepth = 3 # Allow duplicate toc entries. #epub_tocdup = True # Fix unsupported image types using the PIL. #epub_fix_images = False # Scale large images. #epub_max_image_width = 0 # If 'no', URL addresses will not be shown. #epub_show_urls = 'inline' # If false, no index is generated. #epub_use_index = True # Example configuration for intersphinx: refer to the Python standard library. intersphinx_mapping = {'http://docs.python.org/': None} cookiecutter-0.6.4/docs/contributing.rst000066400000000000000000000000411220511360500204000ustar00rootroot00000000000000.. include:: ../CONTRIBUTING.rst cookiecutter-0.6.4/docs/cookiecutter.rst000066400000000000000000000022001220511360500203700ustar00rootroot00000000000000cookiecutter Package ==================== :mod:`cookiecutter` Package --------------------------- .. automodule:: cookiecutter.__init__ :members: :undoc-members: :show-inheritance: :mod:`cleanup` Module --------------------- .. automodule:: cookiecutter.cleanup :members: :undoc-members: :show-inheritance: :mod:`exceptions` Module ------------------------ .. automodule:: cookiecutter.exceptions :members: :undoc-members: :show-inheritance: :mod:`find` Module ------------------ .. automodule:: cookiecutter.find :members: :undoc-members: :show-inheritance: :mod:`generate` Module ---------------------- .. automodule:: cookiecutter.generate :members: :undoc-members: :show-inheritance: :mod:`main` Module ------------------ .. automodule:: cookiecutter.main :members: :undoc-members: :show-inheritance: :mod:`utils` Module ------------------- .. automodule:: cookiecutter.utils :members: :undoc-members: :show-inheritance: :mod:`vcs` Module ----------------- .. automodule:: cookiecutter.vcs :members: :undoc-members: :show-inheritance: cookiecutter-0.6.4/docs/history.rst000066400000000000000000000000341220511360500173740ustar00rootroot00000000000000.. include:: ../HISTORY.rst cookiecutter-0.6.4/docs/index.rst000066400000000000000000000012671220511360500170130ustar00rootroot00000000000000.. cookiecutter documentation master file, created by sphinx-quickstart on Thu Jul 11 11:31:49 2013. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. Cookiecutter: Better Project Templates ====================================== Cookiecutter creates projects from project templates, e.g. Python package projects. Basics ------ .. toctree:: :maxdepth: 2 readme installation usage API Reference ------------- .. toctree:: :maxdepth: 2 cookiecutter Project Info ------------ .. toctree:: :maxdepth: 2 contributing authors history Index ----- * :ref:`genindex` * :ref:`modindex` cookiecutter-0.6.4/docs/installation.rst000066400000000000000000000003531220511360500204000ustar00rootroot00000000000000============ Installation ============ At the command line: .. code-block:: bash $ easy_install cookiecutter Or, if you have pip (the Python package installer tool): .. code-block:: bash $ [sudo] pip install cookiecutter cookiecutter-0.6.4/docs/make.bat000066400000000000000000000157701220511360500165630ustar00rootroot00000000000000@ECHO OFF REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set BUILDDIR=_build set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . set I18NSPHINXOPTS=%SPHINXOPTS% . if NOT "%PAPER%" == "" ( set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% ) if "%1" == "" goto help if "%1" == "help" ( :help echo.Please use `make ^` where ^ is one of echo. html to make standalone HTML files echo. dirhtml to make HTML files named index.html in directories echo. singlehtml to make a single large HTML file echo. pickle to make pickle files echo. json to make JSON files echo. htmlhelp to make HTML files and a HTML help project echo. qthelp to make HTML files and a qthelp project echo. devhelp to make HTML files and a Devhelp project echo. epub to make an epub echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter echo. text to make text files echo. man to make manual pages echo. texinfo to make Texinfo files echo. gettext to make PO message catalogs echo. changes to make an overview over all changed/added/deprecated items echo. xml to make Docutils-native XML files echo. pseudoxml to make pseudoxml-XML files for display purposes echo. linkcheck to check all external links for integrity echo. doctest to run all doctests embedded in the documentation if enabled goto end ) if "%1" == "clean" ( for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i del /q /s %BUILDDIR%\* goto end ) %SPHINXBUILD% 2> nul if errorlevel 9009 ( echo. echo.The 'sphinx-build' command was not found. Make sure you have Sphinx echo.installed, then set the SPHINXBUILD environment variable to point echo.to the full path of the 'sphinx-build' executable. Alternatively you echo.may add the Sphinx directory to PATH. echo. echo.If you don't have Sphinx installed, grab it from echo.http://sphinx-doc.org/ exit /b 1 ) if "%1" == "html" ( %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/html. goto end ) if "%1" == "dirhtml" ( %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. goto end ) if "%1" == "singlehtml" ( %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. goto end ) if "%1" == "pickle" ( %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the pickle files. goto end ) if "%1" == "json" ( %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the JSON files. goto end ) if "%1" == "htmlhelp" ( %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run HTML Help Workshop with the ^ .hhp project file in %BUILDDIR%/htmlhelp. goto end ) if "%1" == "qthelp" ( %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run "qcollectiongenerator" with the ^ .qhcp project file in %BUILDDIR%/qthelp, like this: echo.^> qcollectiongenerator %BUILDDIR%\qthelp\cookiecutter.qhcp echo.To view the help file: echo.^> assistant -collectionFile %BUILDDIR%\qthelp\cookiecutter.ghc goto end ) if "%1" == "devhelp" ( %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp if errorlevel 1 exit /b 1 echo. echo.Build finished. goto end ) if "%1" == "epub" ( %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub if errorlevel 1 exit /b 1 echo. echo.Build finished. The epub file is in %BUILDDIR%/epub. goto end ) if "%1" == "latex" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex if errorlevel 1 exit /b 1 echo. echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. goto end ) if "%1" == "latexpdf" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex cd %BUILDDIR%/latex make all-pdf cd %BUILDDIR%/.. echo. echo.Build finished; the PDF files are in %BUILDDIR%/latex. goto end ) if "%1" == "latexpdfja" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex cd %BUILDDIR%/latex make all-pdf-ja cd %BUILDDIR%/.. echo. echo.Build finished; the PDF files are in %BUILDDIR%/latex. goto end ) if "%1" == "text" ( %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text if errorlevel 1 exit /b 1 echo. echo.Build finished. The text files are in %BUILDDIR%/text. goto end ) if "%1" == "man" ( %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man if errorlevel 1 exit /b 1 echo. echo.Build finished. The manual pages are in %BUILDDIR%/man. goto end ) if "%1" == "texinfo" ( %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo if errorlevel 1 exit /b 1 echo. echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. goto end ) if "%1" == "gettext" ( %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale if errorlevel 1 exit /b 1 echo. echo.Build finished. The message catalogs are in %BUILDDIR%/locale. goto end ) if "%1" == "changes" ( %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes if errorlevel 1 exit /b 1 echo. echo.The overview file is in %BUILDDIR%/changes. goto end ) if "%1" == "linkcheck" ( %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck if errorlevel 1 exit /b 1 echo. echo.Link check complete; look for any errors in the above output ^ or in %BUILDDIR%/linkcheck/output.txt. goto end ) if "%1" == "doctest" ( %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest if errorlevel 1 exit /b 1 echo. echo.Testing of doctests in the sources finished, look at the ^ results in %BUILDDIR%/doctest/output.txt. goto end ) if "%1" == "xml" ( %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml if errorlevel 1 exit /b 1 echo. echo.Build finished. The XML files are in %BUILDDIR%/xml. goto end ) if "%1" == "pseudoxml" ( %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml if errorlevel 1 exit /b 1 echo. echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. goto end ) :end cookiecutter-0.6.4/docs/modules.rst000066400000000000000000000001111220511360500173370ustar00rootroot00000000000000cookiecutter ============ .. toctree:: :maxdepth: 4 cookiecutter cookiecutter-0.6.4/docs/readme.rst000066400000000000000000000000331220511360500171270ustar00rootroot00000000000000.. include:: ../README.rst cookiecutter-0.6.4/docs/usage.rst000066400000000000000000000035101220511360500170010ustar00rootroot00000000000000===== Usage ===== Grab a Cookiecutter template ---------------------------- First, clone a Cookiecutter project template:: $ git clone git@github.com:audreyr/cookiecutter-pypackage.git Make your changes ----------------- Modify the variables defined in `cookiecutter.json`. Open up the skeleton project. If you need to change it around a bit, do so. You probably also want to create a repo, name it differently, and push it as your own new Cookiecutter project template, for handy future use. Generate your project --------------------- Then generate your project from the project template:: $ cookiecutter cookiecutter-pypackage/ The only argument is the input directory. (The output directory is generated by rendering that, and it can't be the same as the input directory.) Try it out! Works directly with git repos too --------------------------------- To create a project from the cookiecutter-pypackage.git repo template:: $ cookiecutter https://github.com/audreyr/cookiecutter-pypackage.git You will be prompted to enter a bunch of project config values. (These are defined in the project's `cookiecutter.json`. Then, Cookiecutter will generate a project from the template, using the values that you entered. It will be placed in your current directory. Or hook directly into the Cookiecutter API ------------------------------------------ You can use Cookiecutter from Python:: from cookiecutter.main import cookiecutter # Create project from the cookiecutter-pypackage/ template cookiecutter('cookiecutter-pypackage/') # Create project from the cookiecutter-pypackage.git repo template cookiecutter('https://github.com/audreyr/cookiecutter-pypackage.git') See the :ref:`API Reference` for more details. If you use it in an interesting way, I'd love to hear about it: file an issue, please! cookiecutter-0.6.4/requirements/000077500000000000000000000000001220511360500167375ustar00rootroot00000000000000cookiecutter-0.6.4/requirements/base_test.txt000066400000000000000000000000121220511360500214420ustar00rootroot00000000000000coveralls cookiecutter-0.6.4/requirements/test_26.txt000066400000000000000000000001571220511360500207710ustar00rootroot00000000000000# Requirements for testing Cookiecutter on Python 2.6. -r base_test.txt mock unittest2 ordereddict simplejson cookiecutter-0.6.4/requirements/test_27.txt000066400000000000000000000001161220511360500207650ustar00rootroot00000000000000# Requirements for testing Cookiecutter on Python 2.7. -r base_test.txt mock cookiecutter-0.6.4/requirements/test_33.txt000066400000000000000000000001111220511360500207550ustar00rootroot00000000000000# Requirements for testing Cookiecutter on Python 3.3. -r base_test.txt cookiecutter-0.6.4/setup.py000077500000000000000000000043461220511360500157400ustar00rootroot00000000000000#!/usr/bin/env python import os import sys import cookiecutter try: from setuptools import setup except ImportError: from distutils.core import setup if sys.argv[-1] == 'publish': os.system('python setup.py sdist upload') sys.exit() readme = open('README.rst').read() history = open('HISTORY.rst').read().replace('.. :changelog:', '') requirements = ['binaryornot>=0.1.1', 'jinja2>=2.4'] test_requirements = [] # Add Python 2.6-specific dependencies if sys.version_info[:2] < (2, 7): requirements.append('argparse') requirements.append('ordereddict') requirements.append('simplejson') test_requirements.append('unittest2') # Add Python 2.6 and 2.7-specific dependencies if sys.version < '3': test_requirements.append('mock') # There are no Python 3-specific dependencies to add setup( name='cookiecutter', version=cookiecutter.__version__, description='A command-line utility that creates projects from project \ templates, e.g. creating a Python package project from a Python \ package project template.', long_description=readme + '\n\n' + history, author='Audrey Roy', author_email='audreyr@gmail.com', url='https://github.com/audreyr/cookiecutter', packages=[ 'cookiecutter', ], package_dir={'cookiecutter': 'cookiecutter'}, entry_points={ 'console_scripts': [ 'cookiecutter = cookiecutter.main:main', ] }, include_package_data=True, install_requires=requirements, license='BSD', zip_safe=False, classifiers=[ 'Development Status :: 3 - Alpha', "Environment :: Console", 'Intended Audience :: Developers', 'Natural Language :: English', 'License :: OSI Approved :: BSD License', 'Programming Language :: Python', "Programming Language :: Python :: 2", 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.3', ], keywords='cookiecutter, Python, projects, project templates, Jinja2, \ project directory, setup.py, package, packaging', test_suite='tests', tests_require=test_requirements ) cookiecutter-0.6.4/tests/000077500000000000000000000000001220511360500153565ustar00rootroot00000000000000cookiecutter-0.6.4/tests/__init__.py000066400000000000000000000000001220511360500174550ustar00rootroot00000000000000cookiecutter-0.6.4/tests/fake-repo-bad/000077500000000000000000000000001220511360500177535ustar00rootroot00000000000000cookiecutter-0.6.4/tests/fake-repo-bad/no-project-in-here.txt000066400000000000000000000000111220511360500241110ustar00rootroot00000000000000Ha ha ha!cookiecutter-0.6.4/tests/fake-repo-pre/000077500000000000000000000000001220511360500200135ustar00rootroot00000000000000cookiecutter-0.6.4/tests/fake-repo-pre/cookiecutter.json000066400000000000000000000004271220511360500234110ustar00rootroot00000000000000{ "full_name": "Audrey Roy", "email": "audreyr@gmail.com", "github_username": "audreyr", "project_name": "Fake Project", "repo_name": "fake-project", "project_short_description": "This is a fake project.", "release_date": "2013-07-28", "year": "2013", "version": "0.1" }cookiecutter-0.6.4/tests/fake-repo-pre/{{cookiecutter.repo_name}}/000077500000000000000000000000001220511360500254375ustar00rootroot00000000000000cookiecutter-0.6.4/tests/fake-repo-pre/{{cookiecutter.repo_name}}/README.rst000066400000000000000000000000611220511360500271230ustar00rootroot00000000000000============ Fake Project ============ Blah!!!! cookiecutter-0.6.4/tests/fake-repo-pre2/000077500000000000000000000000001220511360500200755ustar00rootroot00000000000000cookiecutter-0.6.4/tests/fake-repo-pre2/cookiecutter.json000066400000000000000000000004271220511360500234730ustar00rootroot00000000000000{ "full_name": "Audrey Roy", "email": "audreyr@gmail.com", "github_username": "audreyr", "project_name": "Fake Project", "repo_name": "fake-project", "project_short_description": "This is a fake project.", "release_date": "2013-07-28", "year": "2013", "version": "0.1" }cookiecutter-0.6.4/tests/fake-repo-pre2/whatever.some.thing000066400000000000000000000000001220511360500237050ustar00rootroot00000000000000cookiecutter-0.6.4/tests/fake-repo-pre2/{{cookiecutter.repo_name}}/000077500000000000000000000000001220511360500255215ustar00rootroot00000000000000cookiecutter-0.6.4/tests/fake-repo-pre2/{{cookiecutter.repo_name}}/README.rst000066400000000000000000000000611220511360500272050ustar00rootroot00000000000000============ Fake Project ============ Blah!!!! cookiecutter-0.6.4/tests/fake-repo/000077500000000000000000000000001220511360500172275ustar00rootroot00000000000000cookiecutter-0.6.4/tests/fake-repo/fake-project/000077500000000000000000000000001220511360500216015ustar00rootroot00000000000000cookiecutter-0.6.4/tests/fake-repo/fake-project/README.rst000066400000000000000000000000611220511360500232650ustar00rootroot00000000000000============ Fake Project ============ Blah!!!! cookiecutter-0.6.4/tests/fake-repööö/000077500000000000000000000000001220511360500215615ustar00rootroot00000000000000cookiecutter-0.6.4/tests/fake-repööö/fake-pröööject/000077500000000000000000000000001220511360500264655ustar00rootroot00000000000000cookiecutter-0.6.4/tests/fake-repööö/fake-pröööject/README.rst000066400000000000000000000000611220511360500301510ustar00rootroot00000000000000============ Fake Project ============ Blah!!!! cookiecutter-0.6.4/tests/files/000077500000000000000000000000001220511360500164605ustar00rootroot00000000000000cookiecutter-0.6.4/tests/files/unicode.txt000066400000000000000000000001301220511360500206410ustar00rootroot00000000000000Polish: Ą Ł Ż Chinese: 倀 倁 倂 倃 倄 倅 倆 倇 倈 Musical Notes: ♬ ♫ ♯cookiecutter-0.6.4/tests/files/{{generate_file}}.txt000066400000000000000000000000331220511360500227660ustar00rootroot00000000000000Testing {{ generate_file }}cookiecutter-0.6.4/tests/input/000077500000000000000000000000001220511360500165155ustar00rootroot00000000000000cookiecutter-0.6.4/tests/input/simple.txt000066400000000000000000000000201220511360500205370ustar00rootroot00000000000000I eat {{ food }}cookiecutter-0.6.4/tests/input{{binary_test}}/000077500000000000000000000000001220511360500217415ustar00rootroot00000000000000cookiecutter-0.6.4/tests/input{{binary_test}}/.DS_Store000066400000000000000000000300041220511360500234210ustar00rootroot00000000000000Bud1 Storedi  @ @ @ @ .DS_Storedilcblob >v1b682px-Oscypki.jpgdilcblob vze1bzcheeseland-notes.txtdilcblob v#1b{cookiecutter_todo.txtdilcblob rv1b|#Empty Tunnelblick VPN Configurationbwspblobbplist00  \WindowBounds[ShowSidebar]ShowStatusBar[ShowPathbar[ShowToolbar\SidebarWidth_{{408, 292}, {770, 438}}  ".v\) inspirationdilcblob ;"1b} resourcesbwspblobbplist00 \WindowBounds[ShowSidebar]ShowStatusBar[ShowPathbar[ShowToolbar\SidebarWidth_{{446, 338}, {770, 438}} ". VS`i̯ 8Rnkk22;A!.΁YϪV!}{G,Zy':jT:S@^p=BrlHL`(*RX ϺaL~O>P@ GG;M'<: A7z Oq/\?) c[ 'P l^Q^([&` ܥc[~ !Ӯ/ulJwʲOB2}Ixt]"m\8Rd^ E+fJXԡg5Jn5ql3` 5"K%pc[/]Q@`:0*w8z+1uW̑g?zO"F[q*(as;pppN6k>78 uN-pl+pp-)8T ] 3"vm L7юm%owFrbNul$zWW&(#z z|bdCR4 '>b/\Lj xuG nSu ,!^pűiplk0!9^wl; D_5o泌$9e; '8u p#тd8j2 QSaCj2?)dzpZѱ-AS3`헰~,tlkb>1 D :1`P5 c֥0br)Z= 8%dSQֱ oF TRbt ݿp=&T!!zD' MYRQGqy(;ݎm[Y%:􎒱_x$s=0? ^C+P O]_pl30mg.pk&0`2SԹ8Y|13ehBan#Zw5Щ5[Q~ mc`a_֫D0A3slKpLPԸ/&y9put=n'F:xҥGGVbND]?#Ev=L%8P,F*tkle 6`|z~ЭL8c[P(f?%=U n{c[ձhhKIK?2+(%u=6=Оvj~# o::wR:m+9}-kR9ސ~WHpMGX[D 3 x4iQ@pp=Dc+Z37Ю<\k}ޡ4>(vu.74*ݼ >5ӵ@ߡeaD?Mm[Vn {QVm eüdHِ^s8 "sn*QI SuMONjdc[=1{3@ݰ BqtlJ!r]%#*@3&z(f\izEk+mx?I#@L6¬~JxU P!r}_rte4(BBS>Sb,?pl"ʵ=fP\Ůo5E#۸SnmE?6}h:Lh2/3+NN1E$rlkdeh;ٗ_1zsڀ)E~}?zO":hޤOxHv>‰z҃e(7֘4E 3KZD9R38+ڿ?5ӞZ%sh 'Yx{uWOzen2$cLw'iA+JCI#ӈk0Nb2Ɯԛql#fNubɱ4!iYzgupտQ\VXyP2Hq:iPmoʅ0>TU%.qRǶn^C~*PA\m-#3=>wjR.Wu(}ǶBYEEefHs3㕡b4 HmMAyP#ˁn.ȪW~'iE΋}DؖzB{ +$J\#.(7S8u!݃c'O!αE?03A}0mB\|81c[VW>g:5/"'H/Ƕ*ZGǁ2उޓul+JU ߏ5slnG / RqJ pDEG4=Ci_BWP4˅xO^Pw`S|c[SDFrn(p̯?73 iIXR=D_8Uc:=72Y2N-& <6CcWN >;v=m0A6&Ѿ=wA1OԌe4 );h=a#S;f߯rRݸS)z3XsgCrc45׺oʮIIY1-wcZ ݠ]wGpC >%Lz $\v=e (E 26mYg8ՃAE?B{DX]ʸb,Nu=.S\Ͽ5 @}(w 5Ԑ+x (XuUpM/&M+}M yӅXI(QS,A'_hJ"ikcW#dI%GJfǥלṨ.|/cU$m}{;@=K҃v }2|/s8PzNxnx1ǶFfj@~0 ";:Rh9nj8 m!um3?NOr׼'!>?{5 -.=0Z>uI}ZűA(0uU7T:Tuo I؈݆UT21{OQF]C[e2L VҾ!#}BVcZ l8##VơZ |yALZ9+[fdZ oellgBEHLZkvglassmusicsearchuni2709heartstarstaremptyuserfilmthlargeththlistokremovezoominzoomoutoffsignalcogtrashhomefiletimeroaddownloadaltdownloaduploadinboxplaycirclerepeatrefreshlistaltlockflagheadphonesvolumeoffvolumedownvolumeupqrcodebarcodetagtagsbookbookmarkprintcamerafontbolditalictextheighttextwidthalignleftaligncenteralignrightalignjustifylistindentleftindentrightfacetimevideopictureuni270FmapmarkeradjusttinteditsharecheckmovestepbackwardfastbackwardbackwardplaypausestopforwardfastforwardstepforwardejectchevronleftchevronrightplussignminussignremovesignoksignquestionsigninfosignscreenshotremovecircleokcirclebancirclearrowleftarrowrightarrowuparrowdownsharealtresizefullresizesmallexclamationsigngiftleaffireeyeopeneyeclosewarningsignplanecalendarrandomcommentsmagnetchevronupchevrondownretweetshoppingcartfolderclosefolderopenresizeverticalresizehorizontalhddbullhornbellcertificatethumbsupthumbsdownhandrighthandlefthandtophanddowncirclearrowrightcirclearrowleftcirclearrowtopcirclearrowdownglobewrenchtasksfilterbriefcasefullscreendashboardpaperclipheartemptylinkphonepushpinEurousdgbpsortsortbyalphabetsortbyalphabetaltsortbyordersortbyorderaltsortbyattributessortbyattributesaltuncheckedexpandcollapsecollapsetopJan KovarikGLYPHICONS Halflings-RegularGLYPHICONS Halflings{&07@FMQZ_fmqv&+8=KX]aft} ).28CLQU_dhlpuy "&+048<@FJNR[^dinsw|+ ! = * ,\% [ ! ou)t - \- - f "k" . p % V \. uo 4  * ^ T> ^] A 4'k c '>G ( 1 BB e ; U X  % 3 +3 5M uo 1 k1 % PK < )uto E S|M  J) ((} ST pHHpi \\ Iv|E Jq / J J J P\ 0 ¸ |JE |/ N~ pHHp : `4` ouR % Y \ T^ ^T T^^T 5 ` d\ r' $  \\ |Z  fg d S \ ^T c$N $c \~ \ PP \' $ \  $ \ v\wR \D sm { |  T \ $Q \Z -'V Tg c  h 'Y'$' (J \$ h \ \ Z 9  '\'g  U } J t  ' \ o <  '\ -ouuo d \\ !! w  '  ` ;%;-QE 7SWq'mBo t  7 9 . l @OyFUa F{  :Pf|!Tqp*Gr n<O`^#Gk8jU? 0 !~!!!"#J###$/$%-&&'9''(),))*3*****+$+b++ wR : Q 'N$|:/FUK?2n"i#ssEU}>>KV2n"i#sse.( )6@l m: Y: ' : $$| IMO^B}~B^ = P$= YT vX"ggU yb N¸%N 9999 T%'$}: $pp: \z $gz L L $$g\P L :|:" |$" |$" 9 Pou\R \,P%$9 .bchh78pp hhhhhhhhe.\s t\6V{l @ ''dff.( )e ; X @l .$|[ [ *Pou$Y g*C 7^ ] ^ S7 :p91g! 1gpv\Pw$< | \: $ \ \i{||Kjlm:`jn{~+ %+;:, $,~zܵjie;nkk,epttqss %,ej~l{njaiifn܆n{k}ke+ottrrs $ *+ + * P\ xw'}~Y  }7'\¸T]p p p p v]\Z $_b PQ }}  7$$t [ ?*[ ?2$h \j  }w'xC: d6eC $$>tdwZ P~ ~$$~_C[ *[ \2**t ***4~ **Pm o[P\Po Y\g Y +)#)6 ' ]\f Q &&F6/^ ] SS> *+ & ]?v[ '$'*w[ B%Z%B*@P$$%%@)+ *> mY@ %%v@?]**^ ] /6Eph : : |t'XP\XP\XDP\r'v|\ChN 1g 11'c SM G \**Y w x''\$\\$|w \|h: }}Y} PPi}}Y} h@OLO 3[y!!DD!!D!!r !!  [$F1).k5UFU޳ NbN:͒ _<ˑ%('Y#/hct \\g ޳ FVE1*.k4UGdj i' ''$!'TZ\t !'\  EU i|t \''%"'J N @`j'P\~ U 'Z@''@'@dAB''r'J $\J h g 0wW\\'\z\|||||k|\||||\| h g ''H0D'E0k@_ v&'Q ~_ HccLcd˲ʋcdKddv&&Q }_ kPPVVYeudcKdc˳ˋcdKcdv*|||1n tpVOVP  \ UcV}\y' xP\ P }}~e,~e,}}h_h: \U|T^ J*\(**\*`0P\\PP\ƺƺ\Pw {: 5֤w|HIQ%i21hmasã#zYaa] F]| DC.(MDt{@RYjY2/dF[ЋWW0 *? gB!(;&##h & !K\;Q =Rp{5AJ2\'R'v \\\VQ R.iȋ\zN y -Sj;@;;@H\R.iɋ\zN y .R);@;;@i Q<+|<|+<+<i ;;I N~) $) |$|) $/I N~* ///I h*# \# \# \# @ *O '+3 J@]']@:7v@ O '% 3 @\@;7 D 1ibbiibbiU vxswwsswxr0Ju|OAAOOAAO~~iQ $--ymzy(/jj55jjjjon7o2a60[sxk&gsTbT]`(((([ *(   Wl#qdy&U!({NfXyx+dH0X0 o6-_2 NNl8u| 005Y>A %Ѷ뢉8\-5e㐋A FEba_g 8=| :#''BClZWU \| ZU Z\| U WCZw C$Dv~P{ {D| w P{| n \xPkPn ouY  x{k |w |hm Io{k |Kw hm I{KC'ouuo'.|- w ZYZZ0ZYZZ?9\\\\\\\\\Zf ?9\ f '!6!!hh!r "hh!"!"ih"""!f 'BB%CB//3W 9L{rcwez}z9NK1zHGL\\ ''fU lPe(3'\| \fGe'V\V)\eY\Y5 )_\kh\~ b'=kf\e_\`k?+| ]k)F?'k, ::::, Yd4Z$ br> sb #K@;A;@KZ D Pj YTj Z D : Yv ` Pb Z PQ QU[D : YAt/{h5"" $$Y""kkPY"!$gvZ Z PP$ $$$Z Z n |i\R PKK!!KK\KKKK\KKr KK\KK KK_$'p9ppQcupQppup\  \R : $\$fE$~}$hW@zuiBY.BS |$$ X\NpwY #]^}"\S5b] pCH)VK4"e.Ko3~nH|383{-$U^'<.J/I ~i"W~W~JG$XoTNB((36SU^.^/.""h‚{=*m8Cet4N*N cy55q5 $!Ev ::::yl2 T 3FuEVlTb N*edca qcc{i@f#(: (K=FGeWD$, De%Mq*), f%H,]Mݼv ("s\\EVl(K%|\YwĶ``wOY/Qg Q'  [H88HH8wyzepbp^bTTzKp~r=T^{zwd*W **puto|ou\7 P\7 P\7 \|\x\3\IH!">$!"IIYvD xc Sg ĂM G Z Q j $j kk! 1OggO1\ihZZZZZZZZ|h [$k_k$_X o xQ tw{ue6||||otb [\ouuooud j d ]UtpvD xc \': T v\|w\| : P b \ZZs ZZmZZs YYwylpo4opip@wr'3\z z |&\pttp|}pu\7\7 o9]*T^'^Tc`$ ALx3}q-q}xqkp3+x'L Azqvuopl\9\ދvqsK|c]\\c{}t=u~_H0H/~^tt^}/G/G^}t=t}G/G0}=ut=}/Hq hQ eiiiz+Z%X~zsugTw'^T *^TP$bv~o ܚ yykj{'NT^wTgusz%XZii b'Cu90zíz|yo|w6 [''5Y  uxdtv1]\.xz'K52bC\  46 |zidd{x@/twj 48%L|}zzyx &' cv$2\Zh w'm|09xzddiËz{ 74 !wu'uud2'\\-wzzz||K&85\wC3'\! Y4''Z 6w|oy|zIJz09ucwv c5L&yx-\\12 ]T Z&&V]C :V$&Z]T ]&Y%%V]C Y&&V]AT"v3XST8P9bqwů{H_Pgfht{pgaěƱȎtȪ|Íg}9duEnjsJlrlj|MplwVjkcg{piUq~`tWxÓEhulu̓vz}zHZ[]_rcnyw{vtŠkƲ|wN`H%|& )TCS*wvjwvnܹ3\\\F F vR x||$ Cj P$d|G c 'ic $ $G $ P\>N BB$ Z"""| ""C$gkm| YCZ$$[ ?*[ C * TTTS1%pa fbkg`[dd%nmrrmmsrmmrrm@@a |ȫʐ3z{|::<=~~|}{}@EDJ)2cvtyz||}~~~ FΒŀeTLyD]]yyxvwuMG^ZEjygab.8\K"Ϟu[.d22IĈ` INO_B}~B_ k'Ǵ; D(-HIEDC9DIH#»mQ}`tǢĶĢt`r `SON[:aannvqlzhh!"h`tǢöžfimy,,hhr 3"33aaRsOOS`dHddT^M M28/TPPR\ĺĺ\RR\\Rb Nxkxwwxkxgg fhcddchfj hwwIlJI}I*{ C 3O0Iuc@ 5 (\-=haZ3o''nkjh''mG\"VӵB+4LEN3j737PxS63{E'=*}',TRRd)Nτ+=PPi=b NoE/pf'IGΣΔune. "pJ<"_>u/}-P e[͠ a-55>2mQKUlhe:'q,'KAfaxgs%߸F‰Y'^q8G@Lu;{Wb h/ \Zs p\u u` ('d]P\'(\g y S \'u {u` '\'{@('u@uN \y'{'i'{\vdFz$'\ }\F\\ PZLC\c_aN I HL\ aN cC0 $x5lLFrdmLKl\2 `0 PMx lLKm'\rLFlT^^TV0 $B MlKLmrFLlH 0 Px BlFLr\mKLl\H \yp\>$7 {2JS]biqu| 05jq{ "'+8<AEJOTar~ #'+059EKOS[fmry~  & ouuo\ou\\uo\( uo'j&$ [ *# ouY *  !0 & ) $ $ *6 8  9' \\Zs  \H~H V $.$- $- T^^s5 )ttp ou T^ J 1I ''? "k,P%  mmmmmm S \ wCl&$&$s&S%U ^S ''G < 0 2 pHHp{ ]= N .- '|\3 T VT^^s \  '' <+ |\P J \ Q3 z z :  h W E ou9 8   W $ * \ S S }oOPe Z mrrmmrn vq U Y4 W x .%D   @ D  o| J){ xV \ } P'P : w !!  Ch n]zUQ v pHHpg '  t \\ (J \  aF q$  q  5y } {J .- $$ \ \ P OZ \  | puto f \' j  v$ !!  ¸  cicccccc4c t+c:g!cnccb:-IZcb8c&ccookiecutter-0.6.4/tests/input{{binary_test}}/{{binary_test}}/000077500000000000000000000000001220511360500252445ustar00rootroot00000000000000cookiecutter-0.6.4/tests/input{{binary_test}}/{{binary_test}}/.DS_Store000066400000000000000000000300041220511360500267240ustar00rootroot00000000000000Bud1 Storedi  @ @ @ @ .DS_Storedilcblob >v1b682px-Oscypki.jpgdilcblob vze1bzcheeseland-notes.txtdilcblob v#1b{cookiecutter_todo.txtdilcblob rv1b|#Empty Tunnelblick VPN Configurationbwspblobbplist00  \WindowBounds[ShowSidebar]ShowStatusBar[ShowPathbar[ShowToolbar\SidebarWidth_{{408, 292}, {770, 438}}  ".v\) inspirationdilcblob ;"1b} resourcesbwspblobbplist00 \WindowBounds[ShowSidebar]ShowStatusBar[ShowPathbar[ShowToolbar\SidebarWidth_{{446, 338}, {770, 438}} ". VS`i̯ 8Rnkk22;A!.΁YϪV!}{G,Zy':jT:S@^p=BrlHL`(*RX ϺaL~O>P@ GG;M'<: A7z Oq/\?) c[ 'P l^Q^([&` ܥc[~ !Ӯ/ulJwʲOB2}Ixt]"m\8Rd^ E+fJXԡg5Jn5ql3` 5"K%pc[/]Q@`:0*w8z+1uW̑g?zO"F[q*(as;pppN6k>78 uN-pl+pp-)8T ] 3"vm L7юm%owFrbNul$zWW&(#z z|bdCR4 '>b/\Lj xuG nSu ,!^pűiplk0!9^wl; D_5o泌$9e; '8u p#тd8j2 QSaCj2?)dzpZѱ-AS3`헰~,tlkb>1 D :1`P5 c֥0br)Z= 8%dSQֱ oF TRbt ݿp=&T!!zD' MYRQGqy(;ݎm[Y%:􎒱_x$s=0? ^C+P O]_pl30mg.pk&0`2SԹ8Y|13ehBan#Zw5Щ5[Q~ mc`a_֫D0A3slKpLPԸ/&y9put=n'F:xҥGGVbND]?#Ev=L%8P,F*tkle 6`|z~ЭL8c[P(f?%=U n{c[ձhhKIK?2+(%u=6=Оvj~# o::wR:m+9}-kR9ސ~WHpMGX[D 3 x4iQ@pp=Dc+Z37Ю<\k}ޡ4>(vu.74*ݼ >5ӵ@ߡeaD?Mm[Vn {QVm eüdHِ^s8 "sn*QI SuMONjdc[=1{3@ݰ BqtlJ!r]%#*@3&z(f\izEk+mx?I#@L6¬~JxU P!r}_rte4(BBS>Sb,?pl"ʵ=fP\Ůo5E#۸SnmE?6}h:Lh2/3+NN1E$rlkdeh;ٗ_1zsڀ)E~}?zO":hޤOxHv>‰z҃e(7֘4E 3KZD9R38+ڿ?5ӞZ%sh 'Yx{uWOzen2$cLw'iA+JCI#ӈk0Nb2Ɯԛql#fNubɱ4!iYzgupտQ\VXyP2Hq:iPmoʅ0>TU%.qRǶn^C~*PA\m-#3=>wjR.Wu(}ǶBYEEefHs3㕡b4 HmMAyP#ˁn.ȪW~'iE΋}DؖzB{ +$J\#.(7S8u!݃c'O!αE?03A}0mB\|81c[VW>g:5/"'H/Ƕ*ZGǁ2उޓul+JU ߏ5slnG / RqJ pDEG4=Ci_BWP4˅xO^Pw`S|c[SDFrn(p̯?73 iIXR=D_8Uc:=72Y2N-& <6CcWN >;v=m0A6&Ѿ=wA1OԌe4 );h=a#S;f߯rRݸS)z3XsgCrc45׺oʮIIY1-wcZ ݠ]wGpC >%Lz $\v=e (E 26mYg8ՃAE?B{DX]ʸb,Nu=.S\Ͽ5 @}(w 5Ԑ+x (XuUpM/&M+}M yӅXI(QS,A'_hJ"ikcW#dI%GJfǥלṨ.|/cU$m}{;@=K҃v }2|/s8PzNxnx1ǶFfj@~0 ";:Rh9nj8 m!um3?NOr׼'!>?{5 -.=0Z>uI}ZűA(0uU7T:Tuo I؈݆UT21{OQF]C[e2L VҾ!#}BVcZ l8##VơZ |yALZ9+[fdZ oellgBEHLZkvglassmusicsearchuni2709heartstarstaremptyuserfilmthlargeththlistokremovezoominzoomoutoffsignalcogtrashhomefiletimeroaddownloadaltdownloaduploadinboxplaycirclerepeatrefreshlistaltlockflagheadphonesvolumeoffvolumedownvolumeupqrcodebarcodetagtagsbookbookmarkprintcamerafontbolditalictextheighttextwidthalignleftaligncenteralignrightalignjustifylistindentleftindentrightfacetimevideopictureuni270FmapmarkeradjusttinteditsharecheckmovestepbackwardfastbackwardbackwardplaypausestopforwardfastforwardstepforwardejectchevronleftchevronrightplussignminussignremovesignoksignquestionsigninfosignscreenshotremovecircleokcirclebancirclearrowleftarrowrightarrowuparrowdownsharealtresizefullresizesmallexclamationsigngiftleaffireeyeopeneyeclosewarningsignplanecalendarrandomcommentsmagnetchevronupchevrondownretweetshoppingcartfolderclosefolderopenresizeverticalresizehorizontalhddbullhornbellcertificatethumbsupthumbsdownhandrighthandlefthandtophanddowncirclearrowrightcirclearrowleftcirclearrowtopcirclearrowdownglobewrenchtasksfilterbriefcasefullscreendashboardpaperclipheartemptylinkphonepushpinEurousdgbpsortsortbyalphabetsortbyalphabetaltsortbyordersortbyorderaltsortbyattributessortbyattributesaltuncheckedexpandcollapsecollapsetopJan KovarikGLYPHICONS Halflings-RegularGLYPHICONS Halflings{&07@FMQZ_fmqv&+8=KX]aft} ).28CLQU_dhlpuy "&+048<@FJNR[^dinsw|+ ! = * ,\% [ ! ou)t - \- - f "k" . p % V \. uo 4  * ^ T> ^] A 4'k c '>G ( 1 BB e ; U X  % 3 +3 5M uo 1 k1 % PK < )uto E S|M  J) ((} ST pHHpi \\ Iv|E Jq / J J J P\ 0 ¸ |JE |/ N~ pHHp : `4` ouR % Y \ T^ ^T T^^T 5 ` d\ r' $  \\ |Z  fg d S \ ^T c$N $c \~ \ PP \' $ \  $ \ v\wR \D sm { |  T \ $Q \Z -'V Tg c  h 'Y'$' (J \$ h \ \ Z 9  '\'g  U } J t  ' \ o <  '\ -ouuo d \\ !! w  '  ` ;%;-QE 7SWq'mBo t  7 9 . l @OyFUa F{  :Pf|!Tqp*Gr n<O`^#Gk8jU? 0 !~!!!"#J###$/$%-&&'9''(),))*3*****+$+b++ wR : Q 'N$|:/FUK?2n"i#ssEU}>>KV2n"i#sse.( )6@l m: Y: ' : $$| IMO^B}~B^ = P$= YT vX"ggU yb N¸%N 9999 T%'$}: $pp: \z $gz L L $$g\P L :|:" |$" |$" 9 Pou\R \,P%$9 .bchh78pp hhhhhhhhe.\s t\6V{l @ ''dff.( )e ; X @l .$|[ [ *Pou$Y g*C 7^ ] ^ S7 :p91g! 1gpv\Pw$< | \: $ \ \i{||Kjlm:`jn{~+ %+;:, $,~zܵjie;nkk,epttqss %,ej~l{njaiifn܆n{k}ke+ottrrs $ *+ + * P\ xw'}~Y  }7'\¸T]p p p p v]\Z $_b PQ }}  7$$t [ ?*[ ?2$h \j  }w'xC: d6eC $$>tdwZ P~ ~$$~_C[ *[ \2**t ***4~ **Pm o[P\Po Y\g Y +)#)6 ' ]\f Q &&F6/^ ] SS> *+ & ]?v[ '$'*w[ B%Z%B*@P$$%%@)+ *> mY@ %%v@?]**^ ] /6Eph : : |t'XP\XP\XDP\r'v|\ChN 1g 11'c SM G \**Y w x''\$\\$|w \|h: }}Y} PPi}}Y} h@OLO 3[y!!DD!!D!!r !!  [$F1).k5UFU޳ NbN:͒ _<ˑ%('Y#/hct \\g ޳ FVE1*.k4UGdj i' ''$!'TZ\t !'\  EU i|t \''%"'J N @`j'P\~ U 'Z@''@'@dAB''r'J $\J h g 0wW\\'\z\|||||k|\||||\| h g ''H0D'E0k@_ v&'Q ~_ HccLcd˲ʋcdKddv&&Q }_ kPPVVYeudcKdc˳ˋcdKcdv*|||1n tpVOVP  \ UcV}\y' xP\ P }}~e,~e,}}h_h: \U|T^ J*\(**\*`0P\\PP\ƺƺ\Pw {: 5֤w|HIQ%i21hmasã#zYaa] F]| DC.(MDt{@RYjY2/dF[ЋWW0 *? gB!(;&##h & !K\;Q =Rp{5AJ2\'R'v \\\VQ R.iȋ\zN y -Sj;@;;@H\R.iɋ\zN y .R);@;;@i Q<+|<|+<+<i ;;I N~) $) |$|) $/I N~* ///I h*# \# \# \# @ *O '+3 J@]']@:7v@ O '% 3 @\@;7 D 1ibbiibbiU vxswwsswxr0Ju|OAAOOAAO~~iQ $--ymzy(/jj55jjjjon7o2a60[sxk&gsTbT]`(((([ *(   Wl#qdy&U!({NfXyx+dH0X0 o6-_2 NNl8u| 005Y>A %Ѷ뢉8\-5e㐋A FEba_g 8=| :#''BClZWU \| ZU Z\| U WCZw C$Dv~P{ {D| w P{| n \xPkPn ouY  x{k |w |hm Io{k |Kw hm I{KC'ouuo'.|- w ZYZZ0ZYZZ?9\\\\\\\\\Zf ?9\ f '!6!!hh!r "hh!"!"ih"""!f 'BB%CB//3W 9L{rcwez}z9NK1zHGL\\ ''fU lPe(3'\| \fGe'V\V)\eY\Y5 )_\kh\~ b'=kf\e_\`k?+| ]k)F?'k, ::::, Yd4Z$ br> sb #K@;A;@KZ D Pj YTj Z D : Yv ` Pb Z PQ QU[D : YAt/{h5"" $$Y""kkPY"!$gvZ Z PP$ $$$Z Z n |i\R PKK!!KK\KKKK\KKr KK\KK KK_$'p9ppQcupQppup\  \R : $\$fE$~}$hW@zuiBY.BS |$$ X\NpwY #]^}"\S5b] pCH)VK4"e.Ko3~nH|383{-$U^'<.J/I ~i"W~W~JG$XoTNB((36SU^.^/.""h‚{=*m8Cet4N*N cy55q5 $!Ev ::::yl2 T 3FuEVlTb N*edca qcc{i@f#(: (K=FGeWD$, De%Mq*), f%H,]Mݼv ("s\\EVl(K%|\YwĶ``wOY/Qg Q'  [H88HH8wyzepbp^bTTzKp~r=T^{zwd*W **puto|ou\7 P\7 P\7 \|\x\3\IH!">$!"IIYvD xc Sg ĂM G Z Q j $j kk! 1OggO1\ihZZZZZZZZ|h [$k_k$_X o xQ tw{ue6||||otb [\ouuooud j d ]UtpvD xc \': T v\|w\| : P b \ZZs ZZmZZs YYwylpo4opip@wr'3\z z |&\pttp|}pu\7\7 o9]*T^'^Tc`$ ALx3}q-q}xqkp3+x'L Azqvuopl\9\ދvqsK|c]\\c{}t=u~_H0H/~^tt^}/G/G^}t=t}G/G0}=ut=}/Hq hQ eiiiz+Z%X~zsugTw'^T *^TP$bv~o ܚ yykj{'NT^wTgusz%XZii b'Cu90zíz|yo|w6 [''5Y  uxdtv1]\.xz'K52bC\  46 |zidd{x@/twj 48%L|}zzyx &' cv$2\Zh w'm|09xzddiËz{ 74 !wu'uud2'\\-wzzz||K&85\wC3'\! Y4''Z 6w|oy|zIJz09ucwv c5L&yx-\\12 ]T Z&&V]C :V$&Z]T ]&Y%%V]C Y&&V]AT"v3XST8P9bqwů{H_Pgfht{pgaěƱȎtȪ|Íg}9duEnjsJlrlj|MplwVjkcg{piUq~`tWxÓEhulu̓vz}zHZ[]_rcnyw{vtŠkƲ|wN`H%|& )TCS*wvjwvnܹ3\\\F F vR x||$ Cj P$d|G c 'ic $ $G $ P\>N BB$ Z"""| ""C$gkm| YCZ$$[ ?*[ C * TTTS1%pa fbkg`[dd%nmrrmmsrmmrrm@@a |ȫʐ3z{|::<=~~|}{}@EDJ)2cvtyz||}~~~ FΒŀeTLyD]]yyxvwuMG^ZEjygab.8\K"Ϟu[.d22IĈ` INO_B}~B_ k'Ǵ; D(-HIEDC9DIH#»mQ}`tǢĶĢt`r `SON[:aannvqlzhh!"h`tǢöžfimy,,hhr 3"33aaRsOOS`dHddT^M M28/TPPR\ĺĺ\RR\\Rb Nxkxwwxkxgg fhcddchfj hwwIlJI}I*{ C 3O0Iuc@ 5 (\-=haZ3o''nkjh''mG\"VӵB+4LEN3j737PxS63{E'=*}',TRRd)Nτ+=PPi=b NoE/pf'IGΣΔune. "pJ<"_>u/}-P e[͠ a-55>2mQKUlhe:'q,'KAfaxgs%߸F‰Y'^q8G@Lu;{Wb h/ \Zs p\u u` ('d]P\'(\g y S \'u {u` '\'{@('u@uN \y'{'i'{\vdFz$'\ }\F\\ PZLC\c_aN I HL\ aN cC0 $x5lLFrdmLKl\2 `0 PMx lLKm'\rLFlT^^TV0 $B MlKLmrFLlH 0 Px BlFLr\mKLl\H \yp\>$7 {2JS]biqu| 05jq{ "'+8<AEJOTar~ #'+059EKOS[fmry~  & ouuo\ou\\uo\( uo'j&$ [ *# ouY *  !0 & ) $ $ *6 8  9' \\Zs  \H~H V $.$- $- T^^s5 )ttp ou T^ J 1I ''? "k,P%  mmmmmm S \ wCl&$&$s&S%U ^S ''G < 0 2 pHHp{ ]= N .- '|\3 T VT^^s \  '' <+ |\P J \ Q3 z z :  h W E ou9 8   W $ * \ S S }oOPe Z mrrmmrn vq U Y4 W x .%D   @ D  o| J){ xV \ } P'P : w !!  Ch n]zUQ v pHHpg '  t \\ (J \  aF q$  q  5y } {J .- $$ \ \ P OZ \  | puto f \' j  v$ !!  ¸  cicccccc4c t+c:g!cnccb:-IZcb8c&ccookiecutter-0.6.4/tests/input{{food}}/000077500000000000000000000000001220511360500203455ustar00rootroot00000000000000cookiecutter-0.6.4/tests/input{{food}}/simple.txt000066400000000000000000000000201220511360500223670ustar00rootroot00000000000000I eat {{ food }}cookiecutter-0.6.4/tests/input{{stuff.color}}/000077500000000000000000000000001220511360500216625ustar00rootroot00000000000000cookiecutter-0.6.4/tests/input{{stuff.color}}/folder/000077500000000000000000000000001220511360500231355ustar00rootroot00000000000000cookiecutter-0.6.4/tests/input{{stuff.color}}/folder/in_folder.txt000066400000000000000000000001041220511360500256320ustar00rootroot00000000000000The color is {{ stuff.color }} and the letter is {{ stuff.letter }}.cookiecutter-0.6.4/tests/input{{stuff.color}}/something.txt000066400000000000000000000000751220511360500244220ustar00rootroot00000000000000Hi! My name is {{ stuff.full_name }}. It is {{ stuff.year }}.cookiecutter-0.6.4/tests/input{{stuff.color}}/{{stuff.folder_name}}/000077500000000000000000000000001220511360500262435ustar00rootroot00000000000000cookiecutter-0.6.4/tests/input{{stuff.color}}/{{stuff.folder_name}}/{{stuff.filename}}.py000066400000000000000000000000731220511360500325030ustar00rootroot00000000000000print("This is the contents of {{ stuff.filename }}.py.") cookiecutter-0.6.4/tests/json/000077500000000000000000000000001220511360500163275ustar00rootroot00000000000000cookiecutter-0.6.4/tests/json/test.json000066400000000000000000000000101220511360500201700ustar00rootroot00000000000000{"1": 2}cookiecutter-0.6.4/tests/json2/000077500000000000000000000000001220511360500164115ustar00rootroot00000000000000cookiecutter-0.6.4/tests/json2/stuff.json000066400000000000000000000002401220511360500204270ustar00rootroot00000000000000{ "full_name": "Audrey Greenfeld", "year": "2014", "color": "green", "letter": "D", "folder_name": "im_a.dir", "filename": "im_a.file" }cookiecutter-0.6.4/tests/test_cleanup.py000077500000000000000000000040431220511360500204220ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- """ test_cleanup ------------ Tests for `cookiecutter.cleanup` module. """ from __future__ import unicode_literals import os import shutil import sys if sys.version_info[:2] < (2, 7): import unittest2 as unittest else: import unittest from cookiecutter import cleanup, exceptions class TestCleanup(unittest.TestCase): def test_remove_repo(self): success = cleanup.remove_repo( repo_dir='tests/fake-repo', generated_project='fake-project' ) self.assertTrue(success) self.assertTrue(os.path.isdir('tests/fake-project')) self.assertTrue(os.path.isfile('tests/fake-project/README.rst')) self.assertFalse(os.path.exists('tests/fake-repo')) def test_remove_repo_bad(self): self.assertRaises( exceptions.MissingProjectDir, cleanup.remove_repo, repo_dir='tests/fake-repo-bad', generated_project='fake-project' ) def tearDown(self): if not os.path.exists('tests/fake-repo'): os.mkdir('tests/fake-repo') shutil.move('tests/fake-project', 'tests/fake-repo/fake-project') class TestCleanupUnicode(unittest.TestCase): def test_remove_repo_unicode(self): if os.path.supports_unicode_filenames: success = cleanup.remove_repo( repo_dir='tests/fake-repööö', generated_project='fake-pröööject' ) self.assertTrue(success) self.assertTrue(os.path.isdir('tests/fake-pröööject')) self.assertTrue(os.path.isfile('tests/fake-pröööject/README.rst')) self.assertFalse(os.path.exists('tests/fake-repööö')) def tearDown(self): if os.path.supports_unicode_filenames: if not os.path.exists('tests/fake-repööö'): os.mkdir('tests/fake-repööö') shutil.move('tests/fake-pröööject', 'tests/fake-repööö/fake-pröööject') if __name__ == '__main__': unittest.main() cookiecutter-0.6.4/tests/test_examples.py000077500000000000000000000036731220511360500206210ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- """ test_examples -------------- Tests for the Cookiecutter example repos. """ import os import shutil import sys import unittest if sys.version_info[:2] < (2, 7): import unittest2 as unittest else: import unittest @unittest.skip(reason='Works locally with tox but fails on Travis.') class TestPyPackage(unittest.TestCase): def test_cookiecutter_pypackage(self): """ Tests that https://github.com/audreyr/cookiecutter-pypackage.git works. """ os.system('git clone https://github.com/audreyr/cookiecutter-pypackage.git') os.system('cookiecutter cookiecutter-pypackage/') self.assertTrue(os.path.isfile('cookiecutter-pypackage/alotofeffort/README.rst')) def tearDown(self): if os.path.isdir('cookiecutter-pypackage'): shutil.rmtree('cookiecutter-pypackage') @unittest.skip(reason='Works locally with tox but fails on Travis.') class TestJQuery(unittest.TestCase): def test_cookiecutter_jquery(self): """ Tests that https://github.com/audreyr/cookiecutter-jquery.git works. """ os.system('git clone https://github.com/audreyr/cookiecutter-jquery.git') os.system('cookiecutter cookiecutter-jquery/') self.assertTrue(os.path.isfile('cookiecutter-jquery/boilerplate/README.md')) def tearDown(self): if os.path.isdir('cookiecutter-jquery'): shutil.rmtree('cookiecutter-jquery') @unittest.skip(reason='Works locally with tox but fails on Travis.') class TestExamplesRepoArg(unittest.TestCase): def test_cookiecutter_pypackage_git(self): os.system('cookiecutter https://github.com/audreyr/cookiecutter-pypackage.git') self.assertTrue(os.path.isfile('alotofeffort/README.rst')) def tearDown(self): if os.path.isdir('alotofeffort'): shutil.rmtree('alotofeffort') if __name__ == '__main__': unittest.main() cookiecutter-0.6.4/tests/test_find.py000077500000000000000000000020661220511360500177160ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- """ test_find ------------ Tests for `cookiecutter.find` module. """ import os import shutil import unittest from cookiecutter import find class TestFindTemplate(unittest.TestCase): def test_find_template(self): template = find.find_template(repo_dir='tests/fake-repo-pre') self.assertEqual(template, 'tests/fake-repo-pre/{{cookiecutter.repo_name}}') self.assertNotEqual(template, 'tests/fake-repo-pre/{{cookiecutter.repo_name }}') self.assertNotEqual(template, 'tests/fake-repo-pre/{{ cookiecutter.repo_name }}') class TestFindTemplate2(unittest.TestCase): def test_find_template(self): template = find.find_template(repo_dir='tests/fake-repo-pre2') self.assertEqual(template, 'tests/fake-repo-pre2/{{cookiecutter.repo_name}}') self.assertNotEqual(template, 'tests/fake-repo-pre2/{{cookiecutter.repo_name }}') self.assertNotEqual(template, 'tests/fake-repo-pre2/{{ cookiecutter.repo_name }}') if __name__ == '__main__': unittest.main() cookiecutter-0.6.4/tests/test_generate.py000077500000000000000000000103041220511360500205620ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- """ test_generate -------------- Tests for `cookiecutter.generate` module. """ from __future__ import unicode_literals import logging import os import shutil import sys import unittest from jinja2 import FileSystemLoader from jinja2.environment import Environment from cookiecutter import generate from cookiecutter import exceptions PY3 = sys.version > '3' logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.DEBUG) class TestGenerate(unittest.TestCase): def test_generate_file(self): env = Environment() env.loader = FileSystemLoader('.') infile = 'tests/files/{{generate_file}}.txt' generate.generate_file( infile=infile, context={'generate_file': 'cheese'}, env=env ) self.assertTrue(os.path.isfile('tests/files/cheese.txt')) with open('tests/files/cheese.txt', 'rt') as f: generated_text = f.read() self.assertEqual(generated_text, 'Testing cheese') def test_generate_files_bad(self): self.assertRaises( exceptions.NonTemplatedInputDirException, generate.generate_files, context={'food': 'pizza'}, template_dir='tests/input' ) def test_generate_files(self): generate.generate_files( context={'food': 'pizzä'}, template_dir='tests/input{{food}}' ) self.assertTrue(os.path.isfile('tests/inputpizzä/simple.txt')) simple_text = open('tests/inputpizzä/simple.txt', 'rt').read() if PY3: self.assertEqual(simple_text, 'I eat pizzä') else: self.assertEqual(simple_text, 'I eat pizzä'.encode('utf-8')) def test_generate_files_binaries(self): generate.generate_files( context={'binary_test': 'binary_files'}, template_dir='tests/input{{binary_test}}' ) self.assertTrue(os.path.isfile('tests/inputbinary_files/logo.png')) self.assertTrue(os.path.isfile('tests/inputbinary_files/.DS_Store')) self.assertTrue(os.path.isfile('tests/inputbinary_files/readme.txt')) self.assertTrue( os.path.isfile('tests/inputbinary_files/some_font.otf') ) def test_generate_binary_files_in_nested_jinja_path(self): generate.generate_files( context={'binary_test': 'binary_files'}, template_dir='tests/input{{binary_test}}' ) expected = ['tests/inputbinary_files/binary_files/logo.png', "tests/inputbinary_files/binary_files/.DS_Store", "tests/inputbinary_files/binary_files/readme.txt"] for each in expected: self.assertTrue(os.path.isfile(each)) def test_generate_context(self): context = generate.generate_context(config_file='tests/json/test.json') self.assertEqual(context, {"test": {"1": 2}}) def test_output_folder(self): context = generate.generate_context( config_file='tests/json2/stuff.json' ) logging.debug('Context is {0}'.format(context)) generate.generate_files( context=context, template_dir='tests/input{{stuff.color}}' ) something = """Hi! My name is Audrey Greenfeld. It is 2014.""" something2 = open('tests/inputgreen/something.txt').read() self.assertEqual(something, something2) in_folder = "The color is green and the letter is D." in_folder2 = open('tests/inputgreen/folder/in_folder.txt').read() self.assertEqual(in_folder, in_folder2) self.assertTrue(os.path.isdir('tests/inputgreen/im_a.dir')) self.assertTrue(os.path.isfile('tests/inputgreen/im_a.dir/im_a.file.py')) def tearDown(self): if os.path.exists('tests/inputpizzä'): shutil.rmtree('tests/inputpizzä') if os.path.exists('tests/inputgreen'): shutil.rmtree('tests/inputgreen') if os.path.exists('tests/inputbinary_files'): shutil.rmtree('tests/inputbinary_files') if os.path.exists('tests/files/cheese.txt'): os.remove('tests/files/cheese.txt') if __name__ == '__main__': unittest.main() cookiecutter-0.6.4/tests/test_main.py000077500000000000000000000053171220511360500177240ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- """ test_main --------- Tests for `cookiecutter.main` module. """ import logging import os import shutil import sys import unittest from cookiecutter import main if sys.version_info[:2] < (2, 7): import unittest2 as unittest else: import unittest PY3 = sys.version > '3' if PY3: from unittest.mock import patch input_str = 'builtins.input' else: import __builtin__ from mock import patch input_str = '__builtin__.raw_input' from cStringIO import StringIO # Log debug and above to console logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.DEBUG) class TestCookiecutter(unittest.TestCase): def test_cookiecutter(self): main.cookiecutter('tests/fake-repo-pre/') self.assertTrue(os.path.isdir('tests/fake-repo-pre/{{cookiecutter.repo_name}}')) self.assertTrue(os.path.isdir('tests/fake-repo-pre/fake-project')) self.assertTrue(os.path.isfile('tests/fake-repo-pre/fake-project/README.rst')) self.assertFalse(os.path.exists('tests/fake-repo-pre/fake-project/json/')) def test_cookiecutter_no_slash(self): main.cookiecutter('tests/fake-repo-pre') self.assertTrue(os.path.isdir('tests/fake-repo-pre/{{cookiecutter.repo_name}}')) self.assertTrue(os.path.isdir('tests/fake-repo-pre/fake-project')) self.assertTrue(os.path.isfile('tests/fake-repo-pre/fake-project/README.rst')) self.assertFalse(os.path.exists('tests/fake-repo-pre/fake-project/json/')) def tearDown(self): if os.path.isdir('tests/fake-repo-pre/fake-project'): shutil.rmtree('tests/fake-repo-pre/fake-project') class TestArgParsing(unittest.TestCase): def test_parse_cookiecutter_args(self): args = main.parse_cookiecutter_args(['project/']) self.assertEqual(args.input_dir, 'project/') class TestCookiecutterRepoArg(unittest.TestCase): @patch(input_str, lambda x: '') def test_cookiecutter_git(self): if not PY3: sys.stdin = StringIO('\n\n\n\n\n\n\n\n\n') main.cookiecutter('https://github.com/audreyr/cookiecutter-pypackage.git') logging.debug('Current dir is {0}'.format(os.getcwd())) self.assertFalse(os.path.exists('cookiecutter-pypackage')) self.assertTrue(os.path.isdir('boilerplate')) self.assertTrue(os.path.isfile('boilerplate/README.rst')) self.assertTrue(os.path.exists('boilerplate/setup.py')) def tearDown(self): if os.path.isdir('cookiecutter-pypackage'): shutil.rmtree('cookiecutter-pypackage') if os.path.isdir('boilerplate'): shutil.rmtree('boilerplate') if __name__ == '__main__': unittest.main() cookiecutter-0.6.4/tests/test_prompt.py000077500000000000000000000065311220511360500203200ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- """ test_prompt -------------- Tests for `cookiecutter.prompt` module. """ import sys import unittest from cookiecutter import prompt PY3 = sys.version > '3' if PY3: from unittest.mock import patch input_str = 'builtins.input' else: import __builtin__ from mock import patch input_str = '__builtin__.raw_input' from cStringIO import StringIO if sys.version_info[:2] < (2, 7): import unittest2 as unittest else: import unittest class TestPrompt(unittest.TestCase): @patch(input_str, lambda x: 'Audrey Roy') def test_prompt_for_config_simple(self): context = {"cookiecutter": {"full_name": "Your Name"}} if not PY3: sys.stdin = StringIO("Audrey Roy") cookiecutter_dict = prompt.prompt_for_config(context) self.assertEqual(cookiecutter_dict, {"full_name": "Audrey Roy"}) @patch(input_str, lambda x: 'Pizzä ïs Gööd') def test_prompt_for_config_unicode(self): context = {"cookiecutter": {"full_name": "Your Name"}} if not PY3: sys.stdin = StringIO("Pizzä ïs Gööd") cookiecutter_dict = prompt.prompt_for_config(context) if PY3: self.assertEqual(cookiecutter_dict, {"full_name": "Pizzä ïs Gööd"}) else: self.assertEqual(cookiecutter_dict, {"full_name": u"Pizzä ïs Gööd"}) class TestQueryAnswers(unittest.TestCase): @patch(input_str, lambda: 'y') def test_query_y(self): if not PY3: sys.stdin = StringIO('y') answer = prompt.query_yes_no("Blah?") self.assertTrue(answer) @patch(input_str, lambda: 'ye') def test_query_ye(self): if not PY3: sys.stdin = StringIO('ye') answer = prompt.query_yes_no("Blah?") self.assertTrue(answer) @patch(input_str, lambda: 'yes') def test_query_yes(self): if not PY3: sys.stdin = StringIO('yes') answer = prompt.query_yes_no("Blah?") self.assertTrue(answer) @patch(input_str, lambda: 'n') def test_query_n(self): if not PY3: sys.stdin = StringIO('n') answer = prompt.query_yes_no("Blah?") self.assertFalse(answer) @patch(input_str, lambda: 'no') def test_query_n(self): if not PY3: sys.stdin = StringIO('no') answer = prompt.query_yes_no("Blah?") self.assertFalse(answer) class TestQueryDefaults(unittest.TestCase): @patch(input_str, lambda: 'y') def test_query_y_none_default(self): if not PY3: sys.stdin = StringIO('y') answer = prompt.query_yes_no("Blah?", default=None) self.assertTrue(answer) @patch(input_str, lambda: 'n') def test_query_n_none_default(self): if not PY3: sys.stdin = StringIO('n') answer = prompt.query_yes_no("Blah?", default=None) self.assertFalse(answer) @patch(input_str, lambda: '') def test_query_no_default(self): if not PY3: sys.stdin = StringIO('\n') answer = prompt.query_yes_no("Blah?", default='no') self.assertFalse(answer) @patch(input_str, lambda: 'junk') def test_query_bad_default(self): if not PY3: sys.stdin = StringIO('junk') self.assertRaises(ValueError, prompt.query_yes_no, "Blah?", default='yn') cookiecutter-0.6.4/tests/test_utils.py000077500000000000000000000021501220511360500201300ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- """ test_utils ------------ Tests for `cookiecutter.utils` module. """ import shutil import unittest from cookiecutter import utils class TestUtils(unittest.TestCase): def test_make_sure_path_exists(self): self.assertTrue(utils.make_sure_path_exists('/usr/')) self.assertTrue(utils.make_sure_path_exists('tests/blah')) self.assertTrue(utils.make_sure_path_exists('tests/trailingslash/')) self.assertFalse( utils.make_sure_path_exists( '/this-dir-does-not-exist-and-cant-be-created/' ) ) shutil.rmtree('tests/blah/') shutil.rmtree('tests/trailingslash/') def test_unicode_open(self): """ Test unicode_open(filename, *args, **kwargs). """ unicode_text = u"""Polish: Ą Ł Ż Chinese: 倀 倁 倂 倃 倄 倅 倆 倇 倈 Musical Notes: ♬ ♫ ♯""" with utils.unicode_open('tests/files/unicode.txt') as f: opened_text = f.read() self.assertEqual(unicode_text, opened_text) if __name__ == '__main__': unittest.main() cookiecutter-0.6.4/tests/test_vcs.py000077500000000000000000000040001220511360500175570ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- """ test_vcs ------------ Tests for `cookiecutter.vcs` module. """ import logging import os import shutil import sys import unittest PY3 = sys.version > '3' if PY3: from unittest.mock import patch input_str = 'builtins.input' else: import __builtin__ from mock import patch input_str = '__builtin__.raw_input' from cStringIO import StringIO from cookiecutter import vcs # Log debug and above to console logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.DEBUG) class TestVCS(unittest.TestCase): def test_git_clone(self): repo_dir = vcs.git_clone( 'https://github.com/audreyr/cookiecutter-pypackage.git' ) self.assertEqual(repo_dir, 'cookiecutter-pypackage') self.assertTrue(os.path.isfile('cookiecutter-pypackage/README.rst')) if os.path.isdir('cookiecutter-pypackage'): shutil.rmtree('cookiecutter-pypackage') class TestVCSPrompt(unittest.TestCase): def setUp(self): if os.path.isdir('cookiecutter-pypackage'): shutil.rmtree('cookiecutter-pypackage') os.mkdir('cookiecutter-pypackage/') @patch(input_str, lambda: 'y') def test_git_clone_overwrite(self): if not PY3: sys.stdin = StringIO('y\n\n') repo_dir = vcs.git_clone( 'https://github.com/audreyr/cookiecutter-pypackage.git' ) self.assertEqual(repo_dir, 'cookiecutter-pypackage') self.assertTrue(os.path.isfile('cookiecutter-pypackage/README.rst')) @patch(input_str, lambda: 'n') def test_git_clone_cancel(self): if not PY3: sys.stdin = StringIO('n\n\n') self.assertRaises( SystemExit, vcs.git_clone, 'https://github.com/audreyr/cookiecutter-pypackage.git' ) def tearDown(self): if os.path.isdir('cookiecutter-pypackage'): shutil.rmtree('cookiecutter-pypackage') if __name__ == '__main__': unittest.main() cookiecutter-0.6.4/tox.ini000066400000000000000000000005071220511360500155310ustar00rootroot00000000000000[tox] envlist = py26, py27, py33, pypy [testenv:py26] deps = -r{toxinidir}/requirements/test_26.txt commands = python setup.py test [testenv:py27, pypy] deps = -r{toxinidir}/requirements/test_27.txt commands = python setup.py test [testenv:py33] deps = -r{toxinidir}/requirements/test_33.txt commands = python setup.py test