Skip to main content

.pyi typing stubs generation for d42 schemas

Project description

PyPI Python Version

d42-typing

d42-typing is a Python package designed to enhance type-checking capabilities within the d42 ecosystem. This package introduces generated type definitions that make it easier to work with D42 schemas by providing a more structured and robust type-checking mechanism.

Features

  • Type Definitions: Provides comprehensive type definitions for various entities within Device42.
  • Improved Type Checking: Enhances code safety and reliability by utilizing Python's type hints.

How it works

  • Generates Python type hints from d42 schemas.
  • Creates .pyi files for each schema file in a specified folder (or default).
  • Provides overloads for the fake method from d42 library.

Example

Scalar schema

from d42 import schema

# --- scalar.py
ValueSchema = schema.int | schema.float

# --- scalar.pyi 
from ... import ...

ValueSchema: Union[IntSchema, FloatSchema]

# --- blahblah.pyi
from ... import ...

@overload
def fake(schema: ValueSchema) -> Union[int, float]:
    pass

Dict schema

# --- dict.py
from d42 import schema

DictSchema = schema.dict({
    'id': schema.int,
    'name': schema.str('default_name') | schema.str('custom_name'),
    'phone': schema.str | schema.none,
})

# --- dict.pyi
from ... import ...

class _D42MetaUserSchema(type):

    @overload
    def __getitem__(cls, arg: Literal['id']) -> IntSchema:
        pass

    @overload
    def __getitem__(cls, arg: Literal['name']) -> StrSchema:
        pass

    @overload
    def __getitem__(cls, arg: Literal['phone']) -> Union[StrSchema, NoneSchema]:
        pass

    def __mod__(self, other):
        pass

    def __add__(self, other):
        pass

class UserSchema(metaclass=_D42MetaUserSchema):

    class type(TypedDict, total=False):
        id: IntSchema.type
        name: StrSchema.type
        phone: Union[StrSchema.type, NoneSchema.type]

# --- blahblah.pyi
from typing import overload
from typing import Type
from _tests.schemas.test import UserSchema

@overload
def fake(schema: Type[UserSchema]) -> UserSchema.type:
    pass

Working type hints for PyCharm

drawing

Installation & Usage

To install d42-typing, use the following command:

pip install d42-typing

To generate type hints, run the following command:

d42-typing --path-to-schemas scenarios/schemas -a -v
# d42-typing --help

How to configurate type auto-generation in PyCharm

  1. Set FileWatcher in PyCharm for auto-generating stubs

    • Go to Pycharm → Settings → Tools → File Watchers
    • Set the scope pattern: file[project]:packages/e2e/schemas/*.py

    drawing drawing

  2. Hide .pyi files (if needed):

    Go to Settings → Editor → File Types → Ignored Files and Folders tab

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

d42_typing-0.0.3.tar.gz (24.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

d42_typing-0.0.3-py3-none-any.whl (51.1 kB view details)

Uploaded Python 3

File details

Details for the file d42_typing-0.0.3.tar.gz.

File metadata

  • Download URL: d42_typing-0.0.3.tar.gz
  • Upload date:
  • Size: 24.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.15

File hashes

Hashes for d42_typing-0.0.3.tar.gz
Algorithm Hash digest
SHA256 21d5e13fb55f555a37f125d18c22ee46eadc7191aee3bb62ff3c83404d3f6ae1
MD5 5e0abe9034d59046dd44521935dcab32
BLAKE2b-256 7787dd02abe720c18bc38e712b8c8c7d4b00c5ac68fd2114dd845e4b620754f7

See more details on using hashes here.

File details

Details for the file d42_typing-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: d42_typing-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 51.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.15

File hashes

Hashes for d42_typing-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 9a4b114203d1c4be1acf558c51d395436793d25b62d6a4ed56a1eaf344f572df
MD5 7289a48ae95feffe1c5435dcde7e3839
BLAKE2b-256 fb26cfe0729efc23fc13ae5133d151c2fca3d928deabb5d1ded061e34de87d20

See more details on using hashes here.

Supported by

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