[**cookiedough**(1)](https://fossil.include-once.org/cookiedough/file/manpage/cookiedough.md)
is a GUI browser for cookiecutter templates. And can of course extract them.
It comes with a database of around 4150 cookietemplates, grouped by category, and allows some
rudimentary filtering. Still **beta**, but usable.
![screenshot main window](https://imgur.com/wn9mEny.png)
# Installation / Use
Just install it as normal pip package:
~$ pip3 install -U cookiedough
And start it from a terminal window:
~/projects$ cookiedough
Keep an eye on the terminal when rolling out a template. Not all prompts
might be captured by monkeypatching.
# Notes
There's some usage information in the man page, and in the βHelpβHelp.
## Bugs / Caveats
* No support for template dictionary variables. (They're not widely used though.)
* Database does not contain any directoried templates yet. (A few exist however.)
* The README colorization is fairly basic. (But more processsing would
slow it down too much.)
* It can crash when speed-scrolling through the templates. (Perhaps PSG
vs Tk threads issue.)
* Tkinter might also crash when encountering emojis. (Either install
Symbola font and get rid of Noto Color Emoji. Or upgrade to tcl/tk
8.6.10, or go back to Ubuntu 18.04 where it miraculously worked.)
## See also
* [Improving your cookiecutter.json](https://fossil.include-once.org/cookiedough/wiki/improve)
* [How/what to contribute](https://fossil.include-once.org/cookiedough/wiki/contribute)
* [uidata struct](https://fossil.include-once.org/cookiedough/wiki/uidata)
* [usage](https://fossil.include-once.org/cookiedough/wiki/usage)
## API
Unlike cookiecutter, there aren't many public APIs in a GUI tool. The
internal database is easily accessible though:
import cookiedough
ls = cookiedough.repos.search(["pyproject.toml", "\w+test"])
There's not much in the update module yet, besides the scoring method:
cookiedough.update.score(ls.values()[0])
Whereas the rollout module provides the cc config interface:
ccc = cookiecutter.rollout.CookieCutterConfig()
print(ccc.fn, ccc.dir, ccc.replay)
d = ccc.read_config()
As well as the `.cutting()` wrapper, or even `.hijack_prompt()` and `.task()`.
## from `project` import `meta`
| meta | info |
|:---------------|:----------------------------------------------------------------|
| depends | [pysimplegui](https://pypi.org/project/PySimpleGUI/), sys:[tkinter](https://docs.python.org/3/library/tkinter.html), [cookiecutter](https://pypi.org/project/cookiecutter/), [pluginconf](https://pypi.org/project/pluginconf/), [appdirs](https://pypi.org/project/appdirs/), [requests](https://pypi.org/project/requests/), ... |
| compat | Python β₯3.8, BSD/Linux |
| compliancy | xdg, pluginspec, !pep8, !desktop, !xdnd, mallard, man, !netrc, dotenv, !http_proxy, nobackup, !releases.json, !doap, !packfile |
| system usage | rare (xdg-open only) |
| paths | ~/.config/cookiedough/ |
| testing | `None` |
| docs | minimal wiki, mallard/yelp, news |
| activity | backburner |
| state | beta |
| support | email |
| contrib | mail, fossil |
| announce | [freshcode.club](https://freshcode.club/projects/cookiedough) |