plain.dev


Nameplain.dev JSON
Version 0.13.0 PyPI version JSON
download
home_pagehttps://plainframework.com
SummaryLocal development tools for Plain.
upload_time2024-11-11 04:15:23
maintainerNone
docs_urlNone
authorDave Gaeddert
requires_python<4.0,>=3.11
licenseBSD-3-Clause
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
- `poetry check --lock`, if using [Poetry](https://python-poetry.org/)
- `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": "https://plainframework.com",
    "name": "plain.dev",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.11",
    "maintainer_email": null,
    "keywords": null,
    "author": "Dave Gaeddert",
    "author_email": "dave.gaeddert@dropseed.dev",
    "download_url": "https://files.pythonhosted.org/packages/61/c7/a6fe9ef44453a048f89385ff35ce48ff1a8999e92b5d3885367fb29f213b/plain_dev-0.13.0.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- `poetry check --lock`, if using [Poetry](https://python-poetry.org/)\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": "BSD-3-Clause",
    "summary": "Local development tools for Plain.",
    "version": "0.13.0",
    "project_urls": {
        "Documentation": "https://plainframework.com/docs/",
        "Homepage": "https://plainframework.com",
        "Repository": "https://github.com/dropseed/plain"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "dcca410ab7cf299f907af105473a936b4ea55fd84b4ce059b6461ffff679bc30",
                "md5": "f143f713da679b0709fb6bfd7c90a67b",
                "sha256": "e321b637cc0240f63d88d605fa7b40c4c7ac77518ec8b71af5d68750ee2e6fe9"
            },
            "downloads": -1,
            "filename": "plain_dev-0.13.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "f143f713da679b0709fb6bfd7c90a67b",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.11",
            "size": 30701,
            "upload_time": "2024-11-11T04:15:22",
            "upload_time_iso_8601": "2024-11-11T04:15:22.057073Z",
            "url": "https://files.pythonhosted.org/packages/dc/ca/410ab7cf299f907af105473a936b4ea55fd84b4ce059b6461ffff679bc30/plain_dev-0.13.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "61c7a6fe9ef44453a048f89385ff35ce48ff1a8999e92b5d3885367fb29f213b",
                "md5": "3fec28e256eff2f9a833570522458c05",
                "sha256": "32722bf41cfe6eabf2a0aa118bceb9192ecd10e65650f5e3e2061602a457c8e3"
            },
            "downloads": -1,
            "filename": "plain_dev-0.13.0.tar.gz",
            "has_sig": false,
            "md5_digest": "3fec28e256eff2f9a833570522458c05",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.11",
            "size": 23328,
            "upload_time": "2024-11-11T04:15:23",
            "upload_time_iso_8601": "2024-11-11T04:15:23.650996Z",
            "url": "https://files.pythonhosted.org/packages/61/c7/a6fe9ef44453a048f89385ff35ce48ff1a8999e92b5d3885367fb29f213b/plain_dev-0.13.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-11 04:15:23",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "dropseed",
    "github_project": "plain",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "plain.dev"
}
        
Elapsed time: 0.55877s