Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pyscaffold/pyscaffoldext-cookiecutter
:cookie: Extension that combines the flexibility of Cookiecutter templates with the power of PyScaffold.
https://github.com/pyscaffold/pyscaffoldext-cookiecutter
cookiecutter pyscaffold pyscaffold-extension python
Last synced: 2 months ago
JSON representation
:cookie: Extension that combines the flexibility of Cookiecutter templates with the power of PyScaffold.
- Host: GitHub
- URL: https://github.com/pyscaffold/pyscaffoldext-cookiecutter
- Owner: pyscaffold
- License: mit
- Created: 2019-07-09T17:42:48.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-10-28T17:10:46.000Z (2 months ago)
- Last Synced: 2024-10-28T18:43:37.565Z (2 months ago)
- Topics: cookiecutter, pyscaffold, pyscaffold-extension, python
- Language: Python
- Homepage: https://pyscaffold.org
- Size: 128 KB
- Stars: 5
- Watchers: 2
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGELOG.rst
- Contributing: CONTRIBUTING.rst
- License: LICENSE.txt
- Authors: AUTHORS.rst
Awesome Lists containing this project
README
.. image:: https://api.cirrus-ci.com/github/pyscaffold/pyscaffoldext-cookiecutter.svg?branch=master
:alt: Built Status
:target: https://cirrus-ci.com/github/pyscaffold/pyscaffoldext-cookiecutter
.. image:: https://readthedocs.org/projects/pyscaffoldext-cookiecutter/badge/?version=latest
:alt: ReadTheDocs
:target: https://pyscaffoldext-cookiecutter.readthedocs.io/
.. image:: https://img.shields.io/coveralls/github/pyscaffold/pyscaffoldext-cookiecutter/master.svg
:alt: Coveralls
:target: https://coveralls.io/r/pyscaffold/pyscaffoldext-cookiecutter
.. image:: https://img.shields.io/pypi/v/pyscaffoldext-cookiecutter.svg
:alt: PyPI-Server
:target: https://pypi.org/project/pyscaffoldext-cookiecutter/
.. image:: https://pepy.tech/badge/pyscaffoldext-cookiecutter/month
:alt: Monthly Downloads
:target: https://pepy.tech/project/pyscaffoldext-cookiecutter==========================
pyscaffoldext-cookiecutter
==========================Extension that combines the flexibility of **Cookiecutter** templates
with the power of **PyScaffold**.`Cookiecutter`_ is a flexible utility that allows the definition of templates
for a diverse range of software projects.
On the other hand, `PyScaffold`_ is focused in a good out-of-the-box experience
for developing distributable Python packages (exclusively).
Despite the different objectives, it is possible to combine the power of both
tools to create a custom Python project setup.Quickstart
==========This extension can be directly installed with ``pip``:
.. code-block:: bash
pip install pyscaffoldext-cookiecutter
Or, if you prefer ``pipx``:
.. code-block:: shell
pipx install pyscaffold # if you haven't installed pyscaffold yet
pipx inject pyscaffold pyscaffoldext-cookiecutterNote that, after the installation, ``putup -h`` will show a new option
``--cookiecutter TEMPLATE``.
Use this option to point out which template you want to use (path or url).
The file structure created by `Cookiecutter`_ will be refined by PyScaffold
afterwards.
For example:.. code-block:: shell
putup my-proj1 --cookiecutter ~/my-templates/default
putup my-proj2 --cookiecutter gh:something/from-githubPlease refer to `Cookiecutter`_ documentation for more details on possible URLs
and abbreviations.An additional option ``--cookiecutter-params`` is also added, so you can have
more control over the values `Cookiecutter`_ uses when rendering the templates
(PyScaffold will not run Cookiecutter's interactive prompt).
This option takes the form of a space separated list of ``NAME=VALUE``
arguments as showed in the example bellow:.. code-block:: bash
putup mypkg \
--cookiecutter gh:pyscaffold/cookiecutter-pypackage \
--cookiecutter-params command_line_interface=Argparse use_pytest=yCheck the ``cookiecutter.json`` file in the repository (or directory) of the template you are
using to see the available parameters.
Please notice PyScaffold already add some default parameters, as indicated in
the section **Suitable Templates** bellow.Cookiecutter templates with PyScaffold
======================================The following example shows how to create a new package named ``mypkg``,
that uses a Cookiecutter template, but is enhanced by PyScaffold's features:.. code-block:: bash
putup mypkg --cookiecutter gh:pyscaffold/cookiecutter-pypackage
This is roughly equivalent to first create a project using the Cookiecutter
template and convert it to PyScaffold afterwards:.. code-block:: bash
cookiecutter --no-input gh:pyscaffold/cookiecutter-pypackage project_name=mypkg
putup mypkg --force.. note::
For complex Cookiecutter templates calling ``cookiecutter`` and ``putup``
separately may be a better option, since it is possible to answer
specific template questions or at least set values for Cookiecutter
variables... warning::
Although using Cookiecutter templates is a viable solution to customize
a project that was set up with PyScaffold, the recommended way is to help
improve PyScaffold by contributing an `extension`_... _suitable-templates:
Suitable templates
------------------Note that PyScaffold will overwrite some files generated by Cookiecutter,
like ``setup.py``, the ``__init__.py`` file under the package folder
and most of the ``docs`` folder, in order to provide `setuptools-scm`_
and `sphinx`_ integration.
Therefore not all Cookiecutter templates are suitable for this approach.Ideally, interoperable templates should focus on the file structure inside the
``src`` folder instead of packaging or distributing, since PyScaffold already
handles it under-the-hood. This also means that your template should adhere to
the src-layout if you want to generate files within your Python package.In addition, PyScaffold runs Cookiecutter with the ``--no-input`` flag
activated and thus the user is not prompted for manual configuration. Instead,
PyScaffold injects the following parameters::author
full_name => same as author
project_name => the name of the folder where the project will be generated
repo_name => same as project_name
package_name => putup's --package (as in `import`)
namespace => putup's --namespace (if any)
installable_name => putup's --name (an installable name, like in PyPI/pip install)
project_short_description => putup's description
release_date => equivalent to the day you are running putup
year => equivalent to the year you are running putupAny extra parameter should be passed using the ``--cookiecutter-params`` option.
Accordingly, the template file structure should be similar to::
cookiecutter-something/
└── {{cookiecutter.project_name}}/
└── src/
└── {{cookiecutter.package_name}}/
└── ...See `Cookiecutter`_ for more information about template creation.
.. note::
PyScaffold uses Cookiecutter only for its ability to create files.
Pre/post hooks that perform any other kind of side effect are not
guaranteed to work... _pyscaffold-notes:
Making Changes & Contributing
=============================This project uses `pre-commit`_, please make sure to install it before making any
changes::pip install pre-commit
cd pyscaffoldext-cookiecutter
pre-commit installIt is a good idea to update the hooks to the latest version::
pre-commit autoupdate
Please also check PyScaffold's `contribution guidelines`_,
Note
====This project has been set up using PyScaffold 4.1.4. For details and usage
information on PyScaffold see https://pyscaffold.org/... _PyScaffold: https://pyscaffold.org
.. _Cookiecutter: https://cookiecutter.readthedocs.org
.. _setuptools-scm: https://pypi.python.org/pypi/setuptools-scm/
.. _sphinx: https://www.sphinx-doc.org
.. _extension: https://pyscaffold.org/en/latest/extensions.html
.. _pre-commit: https://pre-commit.com/
.. _contribution guidelines: https://pyscaffold.org/en/latest/contributing.html