# Cookie Composer
<!-- start-badges -->
[![PyPI](https://img.shields.io/pypi/v/cookie-composer)][pypi_]
[![Status](https://img.shields.io/pypi/status/cookie-composer)][status]
[![Python Version](https://img.shields.io/pypi/pyversions/cookie-composer)][python version]
[![License](https://img.shields.io/pypi/l/cookie-composer)][license]
[![codecov](https://codecov.io/gh/callowayproject/cookie-composer/branch/master/graph/badge.svg?token=YO2JQLV1OB)](https://codecov.io/gh/callowayproject/cookie-composer)
[pypi_]: https://pypi.org/project/cookie-composer/
[status]: https://pypi.org/project/cookie-composer/
[python version]: https://pypi.org/project/cookie-composer
[license]: https://github.com/callowayproject/cookie-composer/blob/master/LICENSE
Documentation: https://callowayproject.github.io/cookie-composer/
<!-- end-badges -->
Cookie composer builds on the [cookie cutter](https://github.com/cookiecutter/cookiecutter) project to generate projects based on one or more cookiecutter templates.
## Goals
- Create new projects from a composition of several templates
- Add new capabilities to an existing repository by applying a template
- Apply template updates to the generated project
## Introduction
Cookie Cutter treats templates like sandwiches. There are templates for hamburgers, clubs, and any other kind of sandwich you can dream up. You might have options and defaults on a template, like `Hold the mustard?[False]:` or `Mustard type [dijon]:`, but those are decided by the template author.
<img src="https://raw.githubusercontent.com/coordt/cookie-composer/master/docsrc/_static/img/sandwiches.png" alt="Templates are treated like finished sandwiches" style="zoom:50%;" />
If you look closely at the sandwiches (templates), there is usually many things in common. What if we treated the templates as compositions of other templates:
<img src="https://raw.githubusercontent.com/coordt/cookie-composer/master/docsrc/_static/img/compositions.png" alt="Sandwiches as a composition of layers" style="zoom:50%;" />
You now can manage several smaller and specialized templates that provide functionality. Each template's options will be specific to what that template needs.
<img src="https://raw.githubusercontent.com/coordt/cookie-composer/master/docsrc/_static/img/layers.png" alt="Templates broken out as layers on a sandwich" style="zoom:50%;" />
Cookie Composer uses a composition file to describe the layers required, and even override a template's default answers.
```yaml
template: bottom-bun
context:
toasting_level: light
buttered: False
---
template: burger
---
template: cheese
context:
kind: swiss
---
template: bacon
context:
cooking_level: crispy
---
template: ketchup
---
template: mustard
context:
type: yellow
---
template: top-bun
context:
toasting_level: light
buttered: False
```
We have created [a repo of highly composable templates](https://github.com/coordt/cookiecomposer-templates) as examples or reference. However, Cookie Composer is designed to handle any Cookie Cutter template.
## Purpose
- Separate out parts to a repo into composable templates
- Boilerplate
- README, CONTRIBUTING, docs, Makefile, license, tooling configurations
- Project-specific
- Django
- Flask
- Library
- Data science
- CI/CD specific
- Helm chart
- GitHub Actions vs. Jenkins vs. ...
- Documentation specific
- Sphinx
- MkDocs
- Each composable template is managed and updated individually
- A project can update itself based on chages in layers
## Please contribute
- Documentation critiques
- Documentation suggestions
- Feature suggestions
- Feature improvements
- Edge case identification
- Code improvements
Raw data
{
"_id": null,
"home_page": null,
"name": "cookie-composer",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "cookie-composer, cookiecutter, scaffold",
"author": null,
"author_email": "Corey Oordt <coreyoordt@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/e0/93/126df2008d5f9d8e45c40290525b23a057470a5eac853fad940785bfd061/cookie_composer-0.13.1.tar.gz",
"platform": null,
"description": "# Cookie Composer\n\n<!-- start-badges -->\n\n[![PyPI](https://img.shields.io/pypi/v/cookie-composer)][pypi_]\n[![Status](https://img.shields.io/pypi/status/cookie-composer)][status]\n[![Python Version](https://img.shields.io/pypi/pyversions/cookie-composer)][python version]\n[![License](https://img.shields.io/pypi/l/cookie-composer)][license]\n[![codecov](https://codecov.io/gh/callowayproject/cookie-composer/branch/master/graph/badge.svg?token=YO2JQLV1OB)](https://codecov.io/gh/callowayproject/cookie-composer)\n\n[pypi_]: https://pypi.org/project/cookie-composer/\n[status]: https://pypi.org/project/cookie-composer/\n[python version]: https://pypi.org/project/cookie-composer\n[license]: https://github.com/callowayproject/cookie-composer/blob/master/LICENSE\n\nDocumentation: https://callowayproject.github.io/cookie-composer/\n\n<!-- end-badges -->\n\nCookie composer builds on the [cookie cutter](https://github.com/cookiecutter/cookiecutter) project to generate projects based on one or more cookiecutter templates.\n\n## Goals\n\n- Create new projects from a composition of several templates\n- Add new capabilities to an existing repository by applying a template\n- Apply template updates to the generated project\n\n## Introduction\n\nCookie Cutter treats templates like sandwiches. There are templates for hamburgers, clubs, and any other kind of sandwich you can dream up. You might have options and defaults on a template, like `Hold the mustard?[False]:` or `Mustard type [dijon]:`, but those are decided by the template author. \n\n\n<img src=\"https://raw.githubusercontent.com/coordt/cookie-composer/master/docsrc/_static/img/sandwiches.png\" alt=\"Templates are treated like finished sandwiches\" style=\"zoom:50%;\" />\n\nIf you look closely at the sandwiches (templates), there is usually many things in common. What if we treated the templates as compositions of other templates:\n\n<img src=\"https://raw.githubusercontent.com/coordt/cookie-composer/master/docsrc/_static/img/compositions.png\" alt=\"Sandwiches as a composition of layers\" style=\"zoom:50%;\" />\n\nYou now can manage several smaller and specialized templates that provide functionality. Each template's options will be specific to what that template needs.\n\n<img src=\"https://raw.githubusercontent.com/coordt/cookie-composer/master/docsrc/_static/img/layers.png\" alt=\"Templates broken out as layers on a sandwich\" style=\"zoom:50%;\" />\n\nCookie Composer uses a composition file to describe the layers required, and even override a template's default answers.\n\n```yaml\ntemplate: bottom-bun\ncontext:\n toasting_level: light\n buttered: False\n---\ntemplate: burger\n---\ntemplate: cheese\ncontext:\n kind: swiss\n---\ntemplate: bacon\ncontext:\n cooking_level: crispy\n---\ntemplate: ketchup\n---\ntemplate: mustard\ncontext:\n type: yellow\n---\ntemplate: top-bun\ncontext:\n toasting_level: light\n buttered: False\n```\n\nWe have created [a repo of highly composable templates](https://github.com/coordt/cookiecomposer-templates) as examples or reference. However, Cookie Composer is designed to handle any Cookie Cutter template.\n\n## Purpose\n\n- Separate out parts to a repo into composable templates\n - Boilerplate\n - README, CONTRIBUTING, docs, Makefile, license, tooling configurations\n - Project-specific\n - Django\n - Flask\n - Library\n - Data science\n - CI/CD specific\n - Helm chart\n - GitHub Actions vs. Jenkins vs. ...\n - Documentation specific\n - Sphinx\n - MkDocs\n- Each composable template is managed and updated individually\n- A project can update itself based on chages in layers\n\n\n## Please contribute\n\n- Documentation critiques\n- Documentation suggestions\n- Feature suggestions\n- Feature improvements\n- Edge case identification\n- Code improvements\n",
"bugtrack_url": null,
"license": "BSD-3-Clause",
"summary": "Create new projects from a composition of several templates",
"version": "0.13.1",
"project_urls": {
"Documentation": "https://callowayproject.github.io/cookie-composer/",
"Homepage": "https://github.com/callowayproject/cookie-composer"
},
"split_keywords": [
"cookie-composer",
" cookiecutter",
" scaffold"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "ac122011215eb294fe558e832a107ff0d58e6d21bd511b7b755f5faa33f2ad08",
"md5": "dc70980a033a26c6b16a3cc7d7e25816",
"sha256": "fee4767e093ffbd343b021762316a7630e49f721d8f1c77d51385c44c620676c"
},
"downloads": -1,
"filename": "cookie_composer-0.13.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "dc70980a033a26c6b16a3cc7d7e25816",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 45593,
"upload_time": "2024-05-05T13:53:58",
"upload_time_iso_8601": "2024-05-05T13:53:58.961788Z",
"url": "https://files.pythonhosted.org/packages/ac/12/2011215eb294fe558e832a107ff0d58e6d21bd511b7b755f5faa33f2ad08/cookie_composer-0.13.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e093126df2008d5f9d8e45c40290525b23a057470a5eac853fad940785bfd061",
"md5": "2529a78d28bd76128c0a80c9354e3b69",
"sha256": "993005e3466c28f1e2ca0e56d6c4807b9e78d663b216d29722bae50ea90e92ca"
},
"downloads": -1,
"filename": "cookie_composer-0.13.1.tar.gz",
"has_sig": false,
"md5_digest": "2529a78d28bd76128c0a80c9354e3b69",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 75890,
"upload_time": "2024-05-05T13:54:00",
"upload_time_iso_8601": "2024-05-05T13:54:00.251666Z",
"url": "https://files.pythonhosted.org/packages/e0/93/126df2008d5f9d8e45c40290525b23a057470a5eac853fad940785bfd061/cookie_composer-0.13.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-05-05 13:54:00",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "callowayproject",
"github_project": "cookie-composer",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "cookie-composer"
}