pydantic-to-typescript


Namepydantic-to-typescript JSON
Version 2.0.0 PyPI version JSON
download
home_pageNone
SummaryConvert pydantic models to typescript interfaces
upload_time2024-11-22 03:33:59
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT
keywords annotations interface pydantic typescript validation
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # pydantic-to-typescript

[![PyPI version](https://badge.fury.io/py/pydantic-to-typescript.svg)](https://badge.fury.io/py/pydantic-to-typescript)
[![CI/CD](https://github.com/phillipdupuis/pydantic-to-typescript/actions/workflows/cicd.yml/badge.svg)](https://github.com/phillipdupuis/pydantic-to-typescript/actions/workflows/cicd.yml)
[![Coverage Status](https://coveralls.io/repos/github/phillipdupuis/pydantic-to-typescript/badge.svg?branch=master)](https://coveralls.io/github/phillipdupuis/pydantic-to-typescript?branch=master)

A simple CLI tool for converting pydantic models into typescript interfaces. Useful for any scenario in which python and javascript applications are interacting, since it allows you to have a single source of truth for type definitions.

This tool requires that you have the lovely json2ts CLI utility installed. Instructions can be found here: https://www.npmjs.com/package/json-schema-to-typescript

### Installation

```bash
$ pip install pydantic-to-typescript
```

---

### CLI

| Prop                            | Description                                                                                                                                                                                                                      |
| :------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ‑‑module            | name or filepath of the python module you would like to convert. All the pydantic models within it will be converted to typescript interfaces. Discoverable submodules will also be checked.                                     |
| ‑‑output            | name of the file the typescript definitions should be written to. Ex: './frontend/apiTypes.ts'                                                                                                                                   |
| ‑‑exclude           | name of a pydantic model which should be omitted from the resulting typescript definitions. This option can be defined multiple times, ex: `--exclude Foo --exclude Bar` to exclude both the Foo and Bar models from the output. |
| ‑‑json2ts‑cmd | optional, the command used to invoke json2ts. The default is 'json2ts'. Specify this if you have it installed locally (ex: 'yarn json2ts') or if the exact path to the executable is required (ex: /myproject/node_modules/bin/json2ts)                 |

---

### Usage

Define your pydantic models (ex: /backend/api.py):

```python
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List, Optional

api = FastAPI()

class LoginCredentials(BaseModel):
    username: str
    password: str

class Profile(BaseModel):
    username: str
    age: Optional[int]
    hobbies: List[str]

class LoginResponseData(BaseModel):
    token: str
    profile: Profile

@api.post('/login/', response_model=LoginResponseData)
def login(body: LoginCredentials):
    profile = Profile(**body.dict(), age=72, hobbies=['cats'])
    return LoginResponseData(token='very-secure', profile=profile)
```

Execute the command for converting these models into typescript definitions, via:

```bash
$ pydantic2ts --module backend.api --output ./frontend/apiTypes.ts
```

or:

```bash
$ pydantic2ts --module ./backend/api.py --output ./frontend/apiTypes.ts
```

or:

```python
from pydantic2ts import generate_typescript_defs

generate_typescript_defs("backend.api", "./frontend/apiTypes.ts")
```

The models are now defined in typescript...

```ts
/* tslint:disable */
/**
/* This file was automatically generated from pydantic models by running pydantic2ts.
/* Do not modify it by hand - just update the pydantic models and then re-run the script
*/

export interface LoginCredentials {
  username: string;
  password: string;
}
export interface LoginResponseData {
  token: string;
  profile: Profile;
}
export interface Profile {
  username: string;
  age?: number;
  hobbies: string[];
}
```

...and can be used in your typescript code with complete confidence.

```ts
import { LoginCredentials, LoginResponseData } from "./apiTypes.ts";

async function login(
  credentials: LoginCredentials,
  resolve: (data: LoginResponseData) => void,
  reject: (error: string) => void
) {
  try {
    const response: Response = await fetch("/login/", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify(credentials),
    });
    const data: LoginResponseData = await response.json();
    resolve(data);
  } catch (error) {
    reject(error.message);
  }
}
```

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "pydantic-to-typescript",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "annotations, interface, pydantic, typescript, validation",
    "author": null,
    "author_email": "Phillip Dupuis <phillip_dupuis@alumni.brown.edu>",
    "download_url": "https://files.pythonhosted.org/packages/59/ac/8dc13be6720267b5edffb3b0d8c1abdcccc5743d7bda4257ab0a5dccc7b9/pydantic_to_typescript-2.0.0.tar.gz",
    "platform": null,
    "description": "# pydantic-to-typescript\n\n[![PyPI version](https://badge.fury.io/py/pydantic-to-typescript.svg)](https://badge.fury.io/py/pydantic-to-typescript)\n[![CI/CD](https://github.com/phillipdupuis/pydantic-to-typescript/actions/workflows/cicd.yml/badge.svg)](https://github.com/phillipdupuis/pydantic-to-typescript/actions/workflows/cicd.yml)\n[![Coverage Status](https://coveralls.io/repos/github/phillipdupuis/pydantic-to-typescript/badge.svg?branch=master)](https://coveralls.io/github/phillipdupuis/pydantic-to-typescript?branch=master)\n\nA simple CLI tool for converting pydantic models into typescript interfaces. Useful for any scenario in which python and javascript applications are interacting, since it allows you to have a single source of truth for type definitions.\n\nThis tool requires that you have the lovely json2ts CLI utility installed. Instructions can be found here: https://www.npmjs.com/package/json-schema-to-typescript\n\n### Installation\n\n```bash\n$ pip install pydantic-to-typescript\n```\n\n---\n\n### CLI\n\n| Prop                            | Description                                                                                                                                                                                                                      |\n| :------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| &#8209;&#8209;module            | name or filepath of the python module you would like to convert. All the pydantic models within it will be converted to typescript interfaces. Discoverable submodules will also be checked.                                     |\n| &#8209;&#8209;output            | name of the file the typescript definitions should be written to. Ex: './frontend/apiTypes.ts'                                                                                                                                   |\n| &#8209;&#8209;exclude           | name of a pydantic model which should be omitted from the resulting typescript definitions. This option can be defined multiple times, ex: `--exclude Foo --exclude Bar` to exclude both the Foo and Bar models from the output. |\n| &#8209;&#8209;json2ts&#8209;cmd | optional, the command used to invoke json2ts. The default is 'json2ts'. Specify this if you have it installed locally (ex: 'yarn json2ts') or if the exact path to the executable is required (ex: /myproject/node_modules/bin/json2ts)                 |\n\n---\n\n### Usage\n\nDefine your pydantic models (ex: /backend/api.py):\n\n```python\nfrom fastapi import FastAPI\nfrom pydantic import BaseModel\nfrom typing import List, Optional\n\napi = FastAPI()\n\nclass LoginCredentials(BaseModel):\n    username: str\n    password: str\n\nclass Profile(BaseModel):\n    username: str\n    age: Optional[int]\n    hobbies: List[str]\n\nclass LoginResponseData(BaseModel):\n    token: str\n    profile: Profile\n\n@api.post('/login/', response_model=LoginResponseData)\ndef login(body: LoginCredentials):\n    profile = Profile(**body.dict(), age=72, hobbies=['cats'])\n    return LoginResponseData(token='very-secure', profile=profile)\n```\n\nExecute the command for converting these models into typescript definitions, via:\n\n```bash\n$ pydantic2ts --module backend.api --output ./frontend/apiTypes.ts\n```\n\nor:\n\n```bash\n$ pydantic2ts --module ./backend/api.py --output ./frontend/apiTypes.ts\n```\n\nor:\n\n```python\nfrom pydantic2ts import generate_typescript_defs\n\ngenerate_typescript_defs(\"backend.api\", \"./frontend/apiTypes.ts\")\n```\n\nThe models are now defined in typescript...\n\n```ts\n/* tslint:disable */\n/**\n/* This file was automatically generated from pydantic models by running pydantic2ts.\n/* Do not modify it by hand - just update the pydantic models and then re-run the script\n*/\n\nexport interface LoginCredentials {\n  username: string;\n  password: string;\n}\nexport interface LoginResponseData {\n  token: string;\n  profile: Profile;\n}\nexport interface Profile {\n  username: string;\n  age?: number;\n  hobbies: string[];\n}\n```\n\n...and can be used in your typescript code with complete confidence.\n\n```ts\nimport { LoginCredentials, LoginResponseData } from \"./apiTypes.ts\";\n\nasync function login(\n  credentials: LoginCredentials,\n  resolve: (data: LoginResponseData) => void,\n  reject: (error: string) => void\n) {\n  try {\n    const response: Response = await fetch(\"/login/\", {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify(credentials),\n    });\n    const data: LoginResponseData = await response.json();\n    resolve(data);\n  } catch (error) {\n    reject(error.message);\n  }\n}\n```\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Convert pydantic models to typescript interfaces",
    "version": "2.0.0",
    "project_urls": {
        "Homepage": "https://github.com/phillipdupuis/pydantic-to-typescript",
        "Repository": "https://github.com/phillipdupuis/pydantic-to-typescript"
    },
    "split_keywords": [
        "annotations",
        " interface",
        " pydantic",
        " typescript",
        " validation"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c39cf51312f3063a8b6e1e09e6527a81d3b1828ad5fc8a65c14376f85cf65502",
                "md5": "a6eff61a33bd20326f513477b816bf59",
                "sha256": "5bc5e1a940c1a39e4e3a6124bd3bda1b0fc6df85c673a4781b94a1f4150cae15"
            },
            "downloads": -1,
            "filename": "pydantic_to_typescript-2.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "a6eff61a33bd20326f513477b816bf59",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 9693,
            "upload_time": "2024-11-22T03:33:57",
            "upload_time_iso_8601": "2024-11-22T03:33:57.199550Z",
            "url": "https://files.pythonhosted.org/packages/c3/9c/f51312f3063a8b6e1e09e6527a81d3b1828ad5fc8a65c14376f85cf65502/pydantic_to_typescript-2.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "59ac8dc13be6720267b5edffb3b0d8c1abdcccc5743d7bda4257ab0a5dccc7b9",
                "md5": "e97a0d4107fcf81d9279e997ed2fa367",
                "sha256": "06e92e8d10759ffebe3abdd4de14015bbf80809fa9960273be6041d8509662be"
            },
            "downloads": -1,
            "filename": "pydantic_to_typescript-2.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "e97a0d4107fcf81d9279e997ed2fa367",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 35484,
            "upload_time": "2024-11-22T03:33:59",
            "upload_time_iso_8601": "2024-11-22T03:33:59.026885Z",
            "url": "https://files.pythonhosted.org/packages/59/ac/8dc13be6720267b5edffb3b0d8c1abdcccc5743d7bda4257ab0a5dccc7b9/pydantic_to_typescript-2.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-22 03:33:59",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "phillipdupuis",
    "github_project": "pydantic-to-typescript",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "pydantic-to-typescript"
}
        
Elapsed time: 0.36632s