mypy plugin for PynamoDB
Project description
pynamodb-mypy
A plugin for mypy which gives it deeper understanding of PynamoDB (beyond what's possible through type stubs).
Usage
Add it to the plugins option of the [mypy] section in your mypy.ini:
[mypy]
plugins = pynamodb_mypy
Nullable attributes
When declaring attributes with null=True, the value types would become optional. For example:
from pynamodb.attributes import UnicodeAttribute
from pynamodb.models import Model
class MyModel(Model):
my_key = UnicodeAttribute()
my_value = UnicodeAttribute(null=True)
...
my_model = MyModel.get('key')
if my_model.my_value.lower() == 'foo': # error: Item "None" of "Optional[str]" has no attribute "lower"
print("Value is foo")
would have to be changed to, e.g.:
if my_model.my_value and my_model.my_value.lower() == 'foo':
print("Value is foo")
Typed model initializers
When declaring models, the __init__ method would be typed to accept only the attributes declared in the model. For example:
from pynamodb.models import Model
from pynamodb.attributes import NumberAttribute
from pynamodb.attributes import UnicodeAttribute
class MyModel(Model):
my_key = UnicodeAttribute(hash_key=True)
my_value = NumberAttribute(null=True)
# Existing attributes would be enforced:
_ = MyModel(my_key='key', my_value=42, my_other_value='other_value') # error: Unexpected keyword argument "my_other_value" for "MyModel"
# Typing would be enforced:
_ = MyModel(my_key='key', my_value='42') # error: Argument 2 to "MyModel" has incompatible type "str"; expected "Optional[int]"
# Nullability will be enforced::
_ = MyModel(my_key='key', my_value=None)
_ = MyModel(my_key=None, my_value=None) # error: Argument "my_key" to "MyModel" has incompatible type "None"; expected "str"
# The hash key and range key can also be passed as positional arguments:
_ = MyModel('key')
_ = MyModel(42) # error: Argument 1 to "MyModel" has incompatible type "int"; expected "str"
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pynamodb-mypy-0.1.2.tar.gz.
File metadata
- Download URL: pynamodb-mypy-0.1.2.tar.gz
- Upload date:
- Size: 9.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fb8fcaf965d3c85464ac85203625b11b4faa2dd3f150d6ddb993df1c26c1bf0d
|
|
| MD5 |
0fb1bf6980b3ae057afbafdabbc64c9f
|
|
| BLAKE2b-256 |
76b90639e096a44fa187f621f0821161898f72718cc9c3d2c4c37b3d236523c7
|
File details
Details for the file pynamodb_mypy-0.1.2-py3-none-any.whl.
File metadata
- Download URL: pynamodb_mypy-0.1.2-py3-none-any.whl
- Upload date:
- Size: 9.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a7eba5ab3a50a8206f42b476807fd0ea18723aad1ef94dce9318e3394f3cbcb6
|
|
| MD5 |
1ff79698fcc9290203de00449be6130e
|
|
| BLAKE2b-256 |
5ec34855b1ab1e17344f9a25af9fc3fb2ca915fa11b56c63bd161094ae7863e0
|