An open API service indexing awesome lists of open source software.

https://github.com/pythoninthegrass/mvp

minimum viable python
https://github.com/pythoninthegrass/mvp

Last synced: 9 months ago
JSON representation

minimum viable python

Awesome Lists containing this project

README

          

# mvp

**minimum viable python**

## Summary
Sets up a new development environment for a Mac or Linux (i.e., UNIX) box.

**Table of Contents**
* [mvp](#mvp)
* [Summary](#summary)
* [Setup](#setup)
* [Minimum requirements](#minimum-requirements)
* [Recommended requirements](#recommended-requirements)
* [Development](#development)
* [Cookiecutter](#cookiecutter)
* [Devbox](#devbox)
* [Taskfile](#taskfile)
* [Tilt](#tilt)
* [TODO](#todo)
* [Further Reading](#further-reading)

## Setup

### Minimum requirements

* [Python 3.11](https://www.python.org/downloads/)

### Recommended requirements

* [asdf](https://asdf-vm.com/guide/getting-started.html)
* [devbox](https://www.jetpack.io/devbox/docs/quickstart/)
* [task](https://taskfile.dev/#/installation)

## Development

### Cookiecutter

* [Install cookiecutter](https://cookiecutter.readthedocs.io/en/stable/README.html#installation)

```bash
# asdf (my vote)
asdf plugin add cookiecutter
asdf install cookiecutter latest
asdf set -u cookiecutter latest

# pipx
pipx install cookiecutter

# python user directory
python -m pip install --user cookiecutter
```

* Use cookiecutter to create a new project

```bash
# interactive
cookiecutter gh:pythoninthegrass/mvp

# non-interactive
cookiecutter gh:pythoninthegrass/mvp

# local debugging
cd /tmp
cookiecutter ~/git/mvp --no-input -f
```

### Devbox

Devbox takes care of setting up a dev environment automatically.

Under the hood it uses [Nix Package Manager](https://search.nixos.org/packages).

```bash
# install base dependencies
make install

# install devbox
task install-devbox

# enter dev environment w/deps
devbox shell

# run repl
python

# exit dev environment
exit

# run tests
devbox run test
```

### Taskfile
```bash
λ task
task: [default] task --list
task: Available tasks for this project:
* default: Default task
* format: Run formatters
* install: Install project dependencies
* install-devbox: Install devbox
* lint: Run linters
* pre-commit: Run pre-commit hooks
* pyclean: Remove .pyc and __pycache__
* test: Run tests
* docker:build: Build the docker image
* docker:down: Stop and remove containers, networks, and volumes with docker compose
* docker:exec: Shell into a running container
* docker:login: Login to the container registry
* docker:logs: Follow the logs of a running container
* docker:net: Create docker network
* docker:prune: Prune docker
* docker:push: Push the docker image to the registry
* docker:stop: Stop the project with docker compose
* docker:up: Start the project with docker compose
* docker:vol: Create docker volume
* orbstack:create: Create an orbstack VM (aliases: orb:create)
* orbstack:delete: Delete an orbstack VM (aliases: orb:delete)
* orbstack:exec: SSH into an orbstack VM (aliases: orb:exec)
* orbstack:list: List orbstack VMs (aliases: orb:list)
* orbstack:start: Start an orbstack VM (aliases: orb:start)
* orbstack:stop: Stop an orbstack VM (aliases: orb:stop)
* orbstack:update: Update orbstack app (aliases: orb:update)
* redis:start: Start Redis server
* redis:stop: Stop Redis server
* uv:export-reqs: Export requirements.txt
* uv:install: Install project dependencies
* uv:install-uv: Install uv
* uv:lock: Update the project's lockfile.
* uv:sync: Sync dependencies with lockfile
* uv:update-deps: Update dependencies
* uv:venv: Create a virtual environment
```

### Tilt
```bash
minikube start --memory=2048 --cpus=2 --kubernetes-version=v1.28.3 -p minikube
git clone https://github.com/tilt-dev/tilt-example-python
cd tilt-example-python/3-recommended
tilt up
minikube stop
minikube delete
rm -rf tilt-example-python
```

## TODO
* [Open Issues](https://github.com/pythoninthegrass/mvp/issues)
* QA [Ansible playbook](ansible/playbook.yml)
* Test
* macOS
* Ubuntu
* Write boilerplate pytest tests
* CI/CD

## Further Reading
* [python](https://www.python.org/)
* [asdf](https://asdf-vm.com/guide/getting-started.html#_2-download-asdf)
* [poetry](https://python-poetry.org/docs/)
* [docker-compose](https://docs.docker.com/compose/install/)
* [pre-commit hooks](https://pre-commit.com/)