Skip to main content

Manage Python / Django projects

Project description

manageprojects - Manage Python / Django projects

tests codecov manageprojects @ PyPi Python Versions License GPL

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/

Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

manageprojects-0.4.0rc2.tar.gz (39.6 kB view details)

Uploaded Source

Built Distribution

manageprojects-0.4.0rc2-py3-none-any.whl (48.4 kB view details)

Uploaded Python 3

File details

Details for the file manageprojects-0.4.0rc2.tar.gz.

File metadata

  • Download URL: manageprojects-0.4.0rc2.tar.gz
  • Upload date:
  • Size: 39.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.6

File hashes

Hashes for manageprojects-0.4.0rc2.tar.gz
Algorithm Hash digest
SHA256 8151d4fb82097bb0ff1d441978414ca252dd6c64cfe3ff2c759fd4f3b02f5678
MD5 32db148bf75c262b294d302cd860bc19
BLAKE2b-256 e08243f2a36ca2d5088af2e0a6884fb03676864b83e396887cfb75accadfa70f

See more details on using hashes here.

Provenance

File details

Details for the file manageprojects-0.4.0rc2-py3-none-any.whl.

File metadata

File hashes

Hashes for manageprojects-0.4.0rc2-py3-none-any.whl
Algorithm Hash digest
SHA256 61f9e09920f4732544387e8f3e5daa58bad04888211f06bde05222edd4031e55
MD5 363ca55ba2f561372d900b807981b1a2
BLAKE2b-256 cd542800c62f2693f36a52544a8221228d2d67e2cb57cf51789be180c10efa0e

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page