Name | plain.dev JSON |
Version |
0.19.2
JSON |
| download |
home_page | None |
Summary | Local development tools for Plain. |
upload_time | 2025-01-24 19:54:32 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.11 |
license | None |
keywords |
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
<!-- This file is compiled from plain-dev/plain/dev/README.md. Do not edit this file directly. -->
# plain.dev
A single command that runs everything you need for local development.
![Plain dev command example](https://github.com/dropseed/plain/assets/649496/3643bb64-a99b-4a8e-adab-8c6b81791ea9)
The `plain.dev` package can be [installed from PyPI](https://pypi.org/project/plain.dev/), and does *not* need to be added to `INSTALLED_PACKAGES`.
- [`plain dev`](#plain-dev)
- [`plain dev services`](#plain-dev-services)
- [`plain pre-commit`](#plain-pre-commit)
- [`plain contrib`](#plain-contrib)
- [VS Code debugging](#vscode-debugging)
## `plain dev`
The `plain dev` command does several things:
- Sets `PLAIN_CSRF_TRUSTED_ORIGINS` to localhost by default
- Runs `plain preflight` to check for any issues
- Executes any pending model migrations
- Starts `gunicorn` with `--reload`
- Runs `plain tailwind compile --watch`, if `plain.tailwind` is installed
- Any custom process defined in `pyproject.toml` at `tool.plain.dev.run`
- Necessary services (ex. Postgres) defined in `pyproject.toml` at `tool.plain.dev.services`
### Services
Use services to define databases or other processes that your app *needs* to be functional. The services will be started automatically in `plain dev`, but also in `plain pre-commit` (so preflight and tests have a database).
Ultimately, how you run your development database is up to you. But a recommended starting point is to use Docker:
```toml
# pyproject.toml
[tool.plain.dev.services]
postgres = {cmd = "docker run --name app-postgres --rm -p 54321:5432 -v $(pwd)/.plain/dev/pgdata:/var/lib/postgresql/data -e POSTGRES_PASSWORD=postgres postgres:15 postgres"}
```
### Custom processes
Unlike [services](#services), custom processes are *only* run during `plain dev`. This is a good place to run something like [ngrok](https://ngrok.com/) or a [Plain worker](../../../plain-worker), which you might need to use your local site, but don't need running for executing tests, for example.
```toml
# pyproject.toml
[tool.plain.dev.run]
ngrok = {command = "ngrok http $PORT"}
```
## `plain dev services`
Starts your [services](#services) by themselves.
## `plain pre-commit`
A built-in pre-commit hook that can be installed with `plain pre-commit --install`.
Runs:
- Custom commands defined in `pyproject.toml` at `tool.plain.pre-commit.run`
- `plain code check`, if [`plain.code`](https://plainframework.com/docs/plain-code/plain/code/) is installed
- `uv lock --locked`, if using uv
- `plain preflight --database default`
- `plain migrate --check`
- `plain makemigrations --dry-run --check`
- `plain compile`
- `plain test`
## VS Code debugging
![Debug Plain with VS Code](https://github.com/dropseed/plain-public/assets/649496/250138b6-7702-4ab6-bf38-e0c8e3c56d06)
Since `plain dev` runs multiple processes at once, the regular [pdb](https://docs.python.org/3/library/pdb.html) debuggers don't quite work.
Instead, we include [microsoft/debugpy](https://github.com/microsoft/debugpy) and an `attach` function to make it even easier to use VS Code's debugger.
First, import and run the `debug.attach()` function:
```python
class HomeView(TemplateView):
template_name = "home.html"
def get_template_context(self):
context = super().get_template_context()
# Make sure the debugger is attached (will need to be if runserver reloads)
from plain.dev import debug; debug.attach()
# Add a breakpoint (or use the gutter in VS Code to add one)
breakpoint()
return context
```
When you load the page, you'll see "Waiting for debugger to attach...".
You can then run the VS Code debugger and attach to an existing Python process, at localhost:5678.
Raw data
{
"_id": null,
"home_page": null,
"name": "plain.dev",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": null,
"keywords": null,
"author": null,
"author_email": "Dave Gaeddert <dave.gaeddert@dropseed.dev>",
"download_url": "https://files.pythonhosted.org/packages/f6/d0/6dca2941c994fd874d44dbaa093cd3c09f9d1a5a5198df90c6fc3ad85d4e/plain_dev-0.19.2.tar.gz",
"platform": null,
"description": "<!-- This file is compiled from plain-dev/plain/dev/README.md. Do not edit this file directly. -->\n\n# plain.dev\n\nA single command that runs everything you need for local development.\n\n![Plain dev command example](https://github.com/dropseed/plain/assets/649496/3643bb64-a99b-4a8e-adab-8c6b81791ea9)\n\nThe `plain.dev` package can be [installed from PyPI](https://pypi.org/project/plain.dev/), and does *not* need to be added to `INSTALLED_PACKAGES`.\n\n- [`plain dev`](#plain-dev)\n- [`plain dev services`](#plain-dev-services)\n- [`plain pre-commit`](#plain-pre-commit)\n- [`plain contrib`](#plain-contrib)\n- [VS Code debugging](#vscode-debugging)\n\n## `plain dev`\n\nThe `plain dev` command does several things:\n\n- Sets `PLAIN_CSRF_TRUSTED_ORIGINS` to localhost by default\n- Runs `plain preflight` to check for any issues\n- Executes any pending model migrations\n- Starts `gunicorn` with `--reload`\n- Runs `plain tailwind compile --watch`, if `plain.tailwind` is installed\n- Any custom process defined in `pyproject.toml` at `tool.plain.dev.run`\n- Necessary services (ex. Postgres) defined in `pyproject.toml` at `tool.plain.dev.services`\n\n### Services\n\nUse services to define databases or other processes that your app *needs* to be functional. The services will be started automatically in `plain dev`, but also in `plain pre-commit` (so preflight and tests have a database).\n\nUltimately, how you run your development database is up to you. But a recommended starting point is to use Docker:\n\n```toml\n# pyproject.toml\n[tool.plain.dev.services]\npostgres = {cmd = \"docker run --name app-postgres --rm -p 54321:5432 -v $(pwd)/.plain/dev/pgdata:/var/lib/postgresql/data -e POSTGRES_PASSWORD=postgres postgres:15 postgres\"}\n```\n\n### Custom processes\n\nUnlike [services](#services), custom processes are *only* run during `plain dev`. This is a good place to run something like [ngrok](https://ngrok.com/) or a [Plain worker](../../../plain-worker), which you might need to use your local site, but don't need running for executing tests, for example.\n\n```toml\n# pyproject.toml\n[tool.plain.dev.run]\nngrok = {command = \"ngrok http $PORT\"}\n```\n\n## `plain dev services`\n\nStarts your [services](#services) by themselves.\n\n## `plain pre-commit`\n\nA built-in pre-commit hook that can be installed with `plain pre-commit --install`.\n\nRuns:\n\n- Custom commands defined in `pyproject.toml` at `tool.plain.pre-commit.run`\n- `plain code check`, if [`plain.code`](https://plainframework.com/docs/plain-code/plain/code/) is installed\n- `uv lock --locked`, if using uv\n- `plain preflight --database default`\n- `plain migrate --check`\n- `plain makemigrations --dry-run --check`\n- `plain compile`\n- `plain test`\n\n## VS Code debugging\n\n![Debug Plain with VS Code](https://github.com/dropseed/plain-public/assets/649496/250138b6-7702-4ab6-bf38-e0c8e3c56d06)\n\nSince `plain dev` runs multiple processes at once, the regular [pdb](https://docs.python.org/3/library/pdb.html) debuggers don't quite work.\n\nInstead, we include [microsoft/debugpy](https://github.com/microsoft/debugpy) and an `attach` function to make it even easier to use VS Code's debugger.\n\nFirst, import and run the `debug.attach()` function:\n\n```python\nclass HomeView(TemplateView):\n template_name = \"home.html\"\n\n def get_template_context(self):\n context = super().get_template_context()\n\n # Make sure the debugger is attached (will need to be if runserver reloads)\n from plain.dev import debug; debug.attach()\n\n # Add a breakpoint (or use the gutter in VS Code to add one)\n breakpoint()\n\n return context\n```\n\nWhen you load the page, you'll see \"Waiting for debugger to attach...\".\n\nYou can then run the VS Code debugger and attach to an existing Python process, at localhost:5678.\n",
"bugtrack_url": null,
"license": null,
"summary": "Local development tools for Plain.",
"version": "0.19.2",
"project_urls": null,
"split_keywords": [],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "666122a6359c16230a2de61f5a5534f4735da435084898bf645483d4028a8e8b",
"md5": "f85479beed151600e3520ccf3a5557b9",
"sha256": "02309ed6794eb5c688ffdab3ac37abae8785af76daf454d7b7742ded6aeb432d"
},
"downloads": -1,
"filename": "plain_dev-0.19.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "f85479beed151600e3520ccf3a5557b9",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11",
"size": 32584,
"upload_time": "2025-01-24T19:54:30",
"upload_time_iso_8601": "2025-01-24T19:54:30.392139Z",
"url": "https://files.pythonhosted.org/packages/66/61/22a6359c16230a2de61f5a5534f4735da435084898bf645483d4028a8e8b/plain_dev-0.19.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f6d06dca2941c994fd874d44dbaa093cd3c09f9d1a5a5198df90c6fc3ad85d4e",
"md5": "674c8463d1e788e873a1b94c018e465c",
"sha256": "2a1990c1e70fe1439f492acef05b9492d25ba4318aea4478bba382beba9c363d"
},
"downloads": -1,
"filename": "plain_dev-0.19.2.tar.gz",
"has_sig": false,
"md5_digest": "674c8463d1e788e873a1b94c018e465c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 39955,
"upload_time": "2025-01-24T19:54:32",
"upload_time_iso_8601": "2025-01-24T19:54:32.151422Z",
"url": "https://files.pythonhosted.org/packages/f6/d0/6dca2941c994fd874d44dbaa093cd3c09f9d1a5a5198df90c6fc3ad85d4e/plain_dev-0.19.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-24 19:54:32",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "plain.dev"
}