Manage Python / Django projects
Project description
manageprojects - Manage Python / Django projects
Mix the idea of Ansible with CookieCutter Templates and Django Migrations to manage and update your Python Packages and Django Projects...
The main idea it to transfer changes of a CookieCutter template back to the created project. Manageproject used git to create a patch of the template changes and applies it to the created project.
install
Currently just clone the project and just start the cli (that will create a virtualenv and installs every dependencies)
e.g.:
~$ git clone https://github.com/jedie/manageprojects.git
~$ cd manageprojects
~/manageprojects$ ./cli.py --help
workflow
1. Create a new project
Use start-project
command and a github url as Cookiecutter template, e.g.:
~/manageprojects$ ./cli.py start-project https://github.com/jedie/cookiecutter_templates/ --directory piptools-python ~/my_new_project/
~/manageprojects$ cd ~/my_new_project/your_cool_package/
~/my_new_project/your_cool_package/$ git init
~/my_new_project/your_cool_package/$ git add .
~/my_new_project/your_cool_package/$ git commit --message "my cool new project"
Note: https://github.com/jedie/cookiecutter_templates is a multi template repository, the piptools-python
template is here: https://github.com/jedie/cookiecutter_templates/tree/main/piptools-python
After running the start-project
command, look into the created files.
Manage projects stores all needed meta information about the used Cookiecutter template into pyproject.toml
, e.g.:
~/manageprojects$ cat ~/my_new_project/your_cool_package/pyproject.toml
...
[manageprojects] # https://github.com/jedie/manageprojects
initial_revision = "6e4c875"
initial_date = 2022-11-10T12:37:20+01:00
cookiecutter_template = "https://github.com/jedie/cookiecutter_templates/"
cookiecutter_directory = "piptools-python"
[manageprojects.cookiecutter_context.cookiecutter]
...
2. Update existing project
If the source Cookiecutter changed, then you can apply these changes to your created project, e.g.:
~/manageprojects$ ./cli.py update-project ~/my_new_project/your_cool_package/
After this, manageproject will update the own meta information in pyproject.toml
by add applied_migrations
with the information about the current Cookiecutter version, e.g.:
~/manageprojects$ cat ~/my_new_project/your_cool_package/pyproject.toml
...
[manageprojects] # https://github.com/jedie/manageprojects
initial_revision = "6e4c875"
initial_date = 2022-11-10T12:37:20+01:00
cookiecutter_template = "https://github.com/jedie/cookiecutter_templates/"
cookiecutter_directory = "piptools-python"
applied_migrations = [
"dd69dcf", # 2022-11-22T19:48:28+01:00
]
...
How?
Everything is based on git ;)
- manageprojects knows the git hash of the used Cookiecutter Template at creation time and the current git hash.
- It builds a git patch between these two commits.
- This patch will be applied to the created project sources.
So theoretically the changes in the template are applied to the project.
However, this does not work in every case, because git can't match the changes.
See below:
drawbacks
One problem is that git can't apply all changes.
But git apply
is used with --reject
.
It applies the parts of the patch that are applicable,
and leave the rejected hunks in corresponding *.rej
files.
There is a cool tool, called wiggle
: https://github.com/neilbrown/wiggle
It tries to apply rejected patches by perform word-wise diffs.
Just run wiggle
via manageproject CLI, e.g.:
~/manageprojects$ ./cli.py wiggle ~/my_new_project/your_cool_package/
Helper: Reverse a project into a Cookiecutter template
A existing managed project can be converted back to a Cookiecutter template, e.g.:
~/manageprojects$ ./cli.py reverse ~/my_new_project/ ~/cookiecutter_template/
Links
- Own Cookiecutter Templates: https://github.com/jedie/cookiecutter_templates
- https://github.com/cookiecutter/cookiecutter
- Available Cookiecutters template on GitHub: https://github.com/search?q=cookiecutter&type=Repositories
- Packaging Python Projects: https://packaging.python.org/en/latest/tutorials/packaging-projects/
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for manageprojects-0.7.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d9a2ee14c9e6d44e0cc4ac92ce18e765bb24dd10a880cc9b34aea149ab30c562 |
|
MD5 | dd26389f336aa18a012d5edd6535fbf7 |
|
BLAKE2b-256 | 2712f45a8007cc589a77bc4ab958e10666dd4463f1ff78d49158f6a9385ac0fa |