/usr/lib/python3/dist-packages/pytest_cookies.py is in python3-pytest-cookies 0.2.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | # -*- coding: utf-8 -*-
import py
import pytest
from cookiecutter.main import cookiecutter
USER_CONFIG = u"""
cookiecutters_dir: "{cookiecutters_dir}"
replay_dir: "{replay_dir}"
"""
class Result(object):
"""Holds the captured result of the cookiecutter project generation."""
def __init__(self, exception=None, exit_code=0, project_dir=None):
self.exception = exception
self.exit_code = exit_code
self._project_dir = project_dir
@property
def project(self):
if self.exception is None:
return py.path.local(self._project_dir)
return None
def __repr__(self):
return '<Result {}>'.format(
self.exception and repr(self.exception) or self.project
)
class Cookies(object):
"""Class to provide convenient access to the cookiecutter API."""
def __init__(self, template, output_factory, config_file):
self._template = template
self._output_factory = output_factory
self._config_file = config_file
self._counter = 0
def _new_output_dir(self):
dirname = 'bake{:02d}'.format(self._counter)
output_dir = self._output_factory(dirname)
self._counter += 1
return str(output_dir)
def bake(self, extra_context=None):
exception = None
exit_code = 0
project_dir = None
try:
project_dir = cookiecutter(
self._template,
no_input=True,
extra_context=extra_context,
output_dir=self._new_output_dir(),
config_file=str(self._config_file)
)
except SystemExit as e:
if e.code != 0:
exception = e
exit_code = e.code
except Exception as e:
exception = e
exit_code = -1
return Result(exception, exit_code, project_dir)
@pytest.fixture(scope='session')
def _cookiecutter_config_file(tmpdir_factory):
user_dir = tmpdir_factory.mktemp('user_dir')
cookiecutters_dir = user_dir.mkdir('cookiecutters')
replay_dir = user_dir.mkdir('cookiecutter_replay')
config_text = USER_CONFIG.format(
cookiecutters_dir=cookiecutters_dir,
replay_dir=replay_dir,
)
config_file = user_dir.join('config')
config_file.write_text(config_text, encoding='utf8')
return config_file
@pytest.fixture
def cookies(request, tmpdir, _cookiecutter_config_file):
template_dir = request.config.option.template
output_factory = tmpdir.mkdir('cookies').mkdir
return Cookies(template_dir, output_factory, _cookiecutter_config_file)
def pytest_addoption(parser):
group = parser.getgroup('cookies')
group.addoption(
'--template',
action='store',
default='.',
dest='template',
help='specify the template to be rendered',
type='string',
)
|