-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
34423db
commit a563627
Showing
7 changed files
with
171 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
name: PyPi | ||
|
||
on: | ||
push: | ||
tags: | ||
- "v*.*.*" | ||
|
||
jobs: | ||
publish_pypi: | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v3 | ||
- name: Set up Python | ||
uses: actions/setup-python@v4 | ||
with: | ||
python-version: "3.10" | ||
- name: Install | ||
run: pip3 install --quiet --upgrade setuptools wheel twine | ||
- name: Build | ||
run: python3 setup.py sdist bdist_wheel | ||
- name: Publish | ||
env: | ||
TWINE_USERNAME: __token__ | ||
TWINE_PASSWORD: ${{ secrets.TEST_PYPI_TOKEN }} | ||
TWINE_REPOSITORY_URL: https://test.pypi.org/legacy/ | ||
run: twine upload dist/* | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,12 +1,132 @@ | ||
# d42-typing | ||
|
||
Local install: | ||
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](#features) | ||
- [How it works](#how-it-works) | ||
- [Example](#example) | ||
- [Scalar schema](#scalar-schema) | ||
- [Dict schema](#dict-schema) | ||
- [Working type hints for PyCharm](#working-type-hints-for-pycharm) | ||
- [Installation & Usage](#installation--usage) | ||
- [How to configurate type auto-generation in PyCharm](#how-to-configurate-type-auto-generation-in-pycharm) | ||
|
||
|
||
## 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 | ||
```python | ||
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 | ||
```python | ||
# --- 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 | ||
|
||
``` | ||
pip install -e . | ||
|
||
#### Working type hints for PyCharm | ||
|
||
<img src="assets/type_hints.png" alt="drawing" width="400"/> | ||
|
||
## Installation & Usage | ||
|
||
To install `d42-typing`, use the following command: | ||
|
||
```sh | ||
pip install d42-typing | ||
``` | ||
|
||
Run | ||
To generate type hints, run the following command: | ||
|
||
```sh | ||
d42-typing --path-to-schemas scenarios/schemas -a -v | ||
# d42-typing --help | ||
``` | ||
d42-typing --help | ||
d42-typing --path-to-schemas _tests/schemas/new | ||
``` | ||
|
||
### 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` | ||
|
||
<img src="assets/file_watcher_1.png" alt="drawing" width="400"/> <img src="assets/file_watcher_2.png" alt="drawing" width="400"/> | ||
|
||
2. Hide .pyi files (if needed): | ||
|
||
Go to Settings → Editor → File Types → Ignored Files and Folders tab |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters