Skip to content

Commit 51a3975

Browse files
author
Lucas McDonald
committed
sync
1 parent 009c5f9 commit 51a3975

File tree

12 files changed

+460
-2
lines changed

12 files changed

+460
-2
lines changed

.gitignore

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,9 @@ specification_compliance_report.html
1818
/.smithy.lsp.log
1919

2020
# logs
21-
*.log
21+
*.log
22+
23+
# Performance testing artifacts
24+
*.png
25+
*.dot
26+
*.prof

DynamoDbEncryption/Makefile

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
CORES=2
55

6+
ENABLE_EXTERN_PROCESSING=1
67
TRANSPILE_TESTS_IN_RUST=1
78

89
include ../SharedMakefile.mk
@@ -99,3 +100,94 @@ SERVICE_DEPS_DynamoDbEncryptionTransforms := \
99100
DynamoDbEncryption/dafny/DynamoDbEncryption \
100101
DynamoDbEncryption/dafny/StructuredEncryption \
101102
DynamoDbEncryption/dafny/DynamoDbItemEncryptor
103+
104+
# Python
105+
106+
PYTHON_MODULE_NAME=aws_dbesdk_dynamodb
107+
108+
TRANSLATION_RECORD_PYTHON := \
109+
--translation-record ../submodules/MaterialProviders/StandardLibrary/runtimes/python/src/smithy_dafny_standard_library/internaldafny/generated/dafny_src-py.dtr \
110+
--translation-record ../submodules/MaterialProviders/ComAmazonawsKms/runtimes/python/src/aws_cryptography_internal_kms/internaldafny/generated/dafny_src-py.dtr \
111+
--translation-record ../submodules/MaterialProviders/ComAmazonawsDynamodb/runtimes/python/src/aws_cryptography_internal_dynamodb/internaldafny/generated/dafny_src-py.dtr \
112+
--translation-record ../submodules/MaterialProviders/AwsCryptographyPrimitives/runtimes/python/src/aws_cryptography_primitives/internaldafny/generated/dafny_src-py.dtr \
113+
--translation-record ../submodules/MaterialProviders/AwsCryptographicMaterialProviders/runtimes/python/src/aws_cryptographic_material_providers/internaldafny/generated/dafny_src-py.dtr
114+
115+
PYTHON_DEPENDENCY_MODULE_NAMES := \
116+
--dependency-library-name=aws.cryptography.primitives=aws_cryptography_primitives \
117+
--dependency-library-name=com.amazonaws.kms=aws_cryptography_internal_kms \
118+
--dependency-library-name=com.amazonaws.dynamodb=aws_cryptography_internal_dynamodb \
119+
--dependency-library-name=aws.cryptography.materialProviders=aws_cryptographic_material_providers \
120+
--dependency-library-name=aws.cryptography.keyStore=aws_cryptographic_material_providers \
121+
--dependency-library-name=aws.cryptography.dbEncryptionSdk.structuredEncryption=aws_dbesdk_dynamodb \
122+
--dependency-library-name=aws.cryptography.dbEncryptionSdk.dynamoDb=aws_dbesdk_dynamodb \
123+
--dependency-library-name=aws.cryptography.dbEncryptionSdk.dynamoDb.itemEncryptor=aws_dbesdk_dynamodb \
124+
--dependency-library-name=aws.cryptography.dbEncryptionSdk.dynamoDb.transforms=aws_dbesdk_dynamodb \
125+
126+
# Override default test_python to run tox environment for Dafny tests
127+
test_python:
128+
rm -rf runtimes/python/.tox
129+
python3 -m tox -c runtimes/python -e dafnytests --verbose
130+
131+
# Constants for languages that drop extern names (Python, Go)
132+
133+
DYNAMODB_TYPES_FILE_PATH=dafny/DynamoDbEncryption/Model/AwsCryptographyDbEncryptionSdkDynamoDbTypes.dfy
134+
DYNAMODB_TYPES_FILE_WITH_EXTERN_STRING="module {:extern \"software.amazon.cryptography.dbencryptionsdk.dynamodb.internaldafny.types\" } AwsCryptographyDbEncryptionSdkDynamoDbTypes"
135+
DYNAMODB_TYPES_FILE_WITHOUT_EXTERN_STRING="module AwsCryptographyDbEncryptionSdkDynamoDbTypes"
136+
137+
DYNAMODB_INDEX_FILE_PATH=dafny/DynamoDbEncryption/src/Index.dfy
138+
DYNAMODB_INDEX_FILE_WITH_EXTERN_STRING="module {:extern \"software.amazon.cryptography.dbencryptionsdk.dynamodb.internaldafny\" } DynamoDbEncryption"
139+
DYNAMODB_INDEX_FILE_WITHOUT_EXTERN_STRING="module DynamoDbEncryption"
140+
141+
ITEMENCRYPTOR_TYPES_FILE_PATH=dafny/DynamoDbItemEncryptor/Model/AwsCryptographyDbEncryptionSdkDynamoDbItemEncryptorTypes.dfy
142+
ITEMENCRYPTOR_TYPES_FILE_WITH_EXTERN_STRING="module {:extern \"software.amazon.cryptography.dbencryptionsdk.dynamodb.itemencryptor.internaldafny.types\" } AwsCryptographyDbEncryptionSdkDynamoDbItemEncryptorTypes"
143+
ITEMENCRYPTOR_TYPES_FILE_WITHOUT_EXTERN_STRING="module AwsCryptographyDbEncryptionSdkDynamoDbItemEncryptorTypes"
144+
145+
ITEMENCRYPTOR_INDEX_FILE_PATH=dafny/DynamoDbItemEncryptor/src/Index.dfy
146+
ITEMENCRYPTOR_INDEX_FILE_WITH_EXTERN_STRING="module {:extern \"software.amazon.cryptography.dbencryptionsdk.dynamodb.itemencryptor.internaldafny\" } DynamoDbItemEncryptor"
147+
ITEMENCRYPTOR_INDEX_FILE_WITHOUT_EXTERN_STRING="module DynamoDbItemEncryptor"
148+
149+
ITEMENCRYPTOR_LEGACY_FILE_PATH=dafny/DynamoDbItemEncryptor/src/InternalLegacyOverride.dfy
150+
ITEMENCRYPTOR_LEGACY_FILE_WITH_EXTERN_STRING="module {:extern \"software.amazon.cryptography.dbencryptionsdk.dynamodb.itemencryptor.internaldafny.legacy\"} InternalLegacyOverride {"
151+
ITEMENCRYPTOR_LEGACY_FILE_WITHOUT_EXTERN_STRING="module InternalLegacyOverride {"
152+
153+
TRANSFORMS_TYPES_FILE_PATH=dafny/DynamoDbEncryptionTransforms/Model/AwsCryptographyDbEncryptionSdkDynamoDbTransformsTypes.dfy
154+
TRANSFORMS_TYPES_FILE_WITH_EXTERN_STRING="module {:extern \"software.amazon.cryptography.dbencryptionsdk.dynamodb.transforms.internaldafny.types\" } AwsCryptographyDbEncryptionSdkDynamoDbTransformsTypes"
155+
TRANSFORMS_TYPES_FILE_WITHOUT_EXTERN_STRING="module AwsCryptographyDbEncryptionSdkDynamoDbTransformsTypes"
156+
157+
TRANSFORMS_INDEX_FILE_PATH=dafny/DynamoDbEncryptionTransforms/src/Index.dfy
158+
TRANSFORMS_INDEX_FILE_WITH_EXTERN_STRING="module {:extern \"software.amazon.cryptography.dbencryptionsdk.dynamodb.transforms.internaldafny\" } DynamoDbEncryptionTransforms"
159+
TRANSFORMS_INDEX_FILE_WITHOUT_EXTERN_STRING="module DynamoDbEncryptionTransforms"
160+
161+
STRUCTUREDENCRYPTION_TYPES_FILE_PATH=dafny/StructuredEncryption/Model/AwsCryptographyDbEncryptionSdkStructuredEncryptionTypes.dfy
162+
STRUCTUREDENCRYPTION_TYPES_FILE_WITH_EXTERN_STRING="module {:extern \"software.amazon.cryptography.dbencryptionsdk.structuredencryption.internaldafny.types\" } AwsCryptographyDbEncryptionSdkStructuredEncryptionTypes"
163+
STRUCTUREDENCRYPTION_TYPES_FILE_WITHOUT_EXTERN_STRING="module AwsCryptographyDbEncryptionSdkStructuredEncryptionTypes"
164+
165+
STRUCTUREDENCRYPTION_INDEX_FILE_PATH=dafny/StructuredEncryption/src/Index.dfy
166+
STRUCTUREDENCRYPTION_INDEX_FILE_WITH_EXTERN_STRING="module {:extern \"software.amazon.cryptography.dbencryptionsdk.structuredencryption.internaldafny\" } StructuredEncryption"
167+
STRUCTUREDENCRYPTION_INDEX_FILE_WITHOUT_EXTERN_STRING="module StructuredEncryption"
168+
169+
_sed_types_file_remove_extern:
170+
$(MAKE) _sed_file SED_FILE_PATH=$(DYNAMODB_TYPES_FILE_PATH) SED_BEFORE_STRING=$(DYNAMODB_TYPES_FILE_WITH_EXTERN_STRING) SED_AFTER_STRING=$(DYNAMODB_TYPES_FILE_WITHOUT_EXTERN_STRING)
171+
$(MAKE) _sed_file SED_FILE_PATH=$(ITEMENCRYPTOR_TYPES_FILE_PATH) SED_BEFORE_STRING=$(ITEMENCRYPTOR_TYPES_FILE_WITH_EXTERN_STRING) SED_AFTER_STRING=$(ITEMENCRYPTOR_TYPES_FILE_WITHOUT_EXTERN_STRING)
172+
$(MAKE) _sed_file SED_FILE_PATH=$(TRANSFORMS_TYPES_FILE_PATH) SED_BEFORE_STRING=$(TRANSFORMS_TYPES_FILE_WITH_EXTERN_STRING) SED_AFTER_STRING=$(TRANSFORMS_TYPES_FILE_WITHOUT_EXTERN_STRING)
173+
$(MAKE) _sed_file SED_FILE_PATH=$(STRUCTUREDENCRYPTION_TYPES_FILE_PATH) SED_BEFORE_STRING=$(STRUCTUREDENCRYPTION_TYPES_FILE_WITH_EXTERN_STRING) SED_AFTER_STRING=$(STRUCTUREDENCRYPTION_TYPES_FILE_WITHOUT_EXTERN_STRING)
174+
175+
_sed_index_file_remove_extern:
176+
$(MAKE) _sed_file SED_FILE_PATH=$(DYNAMODB_INDEX_FILE_PATH) SED_BEFORE_STRING=$(DYNAMODB_INDEX_FILE_WITH_EXTERN_STRING) SED_AFTER_STRING=$(DYNAMODB_INDEX_FILE_WITHOUT_EXTERN_STRING)
177+
$(MAKE) _sed_file SED_FILE_PATH=$(ITEMENCRYPTOR_INDEX_FILE_PATH) SED_BEFORE_STRING=$(ITEMENCRYPTOR_INDEX_FILE_WITH_EXTERN_STRING) SED_AFTER_STRING=$(ITEMENCRYPTOR_INDEX_FILE_WITHOUT_EXTERN_STRING)
178+
$(MAKE) _sed_file SED_FILE_PATH=$(ITEMENCRYPTOR_LEGACY_FILE_PATH) SED_BEFORE_STRING=$(ITEMENCRYPTOR_LEGACY_FILE_WITH_EXTERN_STRING) SED_AFTER_STRING=$(ITEMENCRYPTOR_LEGACY_FILE_WITHOUT_EXTERN_STRING)
179+
$(MAKE) _sed_file SED_FILE_PATH=$(TRANSFORMS_INDEX_FILE_PATH) SED_BEFORE_STRING=$(TRANSFORMS_INDEX_FILE_WITH_EXTERN_STRING) SED_AFTER_STRING=$(TRANSFORMS_INDEX_FILE_WITHOUT_EXTERN_STRING)
180+
$(MAKE) _sed_file SED_FILE_PATH=$(STRUCTUREDENCRYPTION_INDEX_FILE_PATH) SED_BEFORE_STRING=$(STRUCTUREDENCRYPTION_INDEX_FILE_WITH_EXTERN_STRING) SED_AFTER_STRING=$(STRUCTUREDENCRYPTION_INDEX_FILE_WITHOUT_EXTERN_STRING)
181+
182+
_sed_types_file_add_extern:
183+
$(MAKE) _sed_file SED_FILE_PATH=$(DYNAMODB_TYPES_FILE_PATH) SED_BEFORE_STRING=$(DYNAMODB_TYPES_FILE_WITHOUT_EXTERN_STRING) SED_AFTER_STRING=$(DYNAMODB_TYPES_FILE_WITH_EXTERN_STRING)
184+
$(MAKE) _sed_file SED_FILE_PATH=$(ITEMENCRYPTOR_TYPES_FILE_PATH) SED_BEFORE_STRING=$(ITEMENCRYPTOR_TYPES_FILE_WITHOUT_EXTERN_STRING) SED_AFTER_STRING=$(ITEMENCRYPTOR_TYPES_FILE_WITH_EXTERN_STRING)
185+
$(MAKE) _sed_file SED_FILE_PATH=$(TRANSFORMS_TYPES_FILE_PATH) SED_BEFORE_STRING=$(TRANSFORMS_TYPES_FILE_WITHOUT_EXTERN_STRING) SED_AFTER_STRING=$(TRANSFORMS_TYPES_FILE_WITH_EXTERN_STRING)
186+
$(MAKE) _sed_file SED_FILE_PATH=$(STRUCTUREDENCRYPTION_TYPES_FILE_PATH) SED_BEFORE_STRING=$(STRUCTUREDENCRYPTION_TYPES_FILE_WITHOUT_EXTERN_STRING) SED_AFTER_STRING=$(STRUCTUREDENCRYPTION_TYPES_FILE_WITH_EXTERN_STRING)
187+
188+
_sed_index_file_add_extern:
189+
$(MAKE) _sed_file SED_FILE_PATH=$(DYNAMODB_INDEX_FILE_PATH) SED_BEFORE_STRING=$(DYNAMODB_INDEX_FILE_WITHOUT_EXTERN_STRING) SED_AFTER_STRING=$(DYNAMODB_INDEX_FILE_WITH_EXTERN_STRING)
190+
$(MAKE) _sed_file SED_FILE_PATH=$(ITEMENCRYPTOR_INDEX_FILE_PATH) SED_BEFORE_STRING=$(ITEMENCRYPTOR_INDEX_FILE_WITHOUT_EXTERN_STRING) SED_AFTER_STRING=$(ITEMENCRYPTOR_INDEX_FILE_WITH_EXTERN_STRING)
191+
$(MAKE) _sed_file SED_FILE_PATH=$(ITEMENCRYPTOR_LEGACY_FILE_PATH) SED_BEFORE_STRING=$(ITEMENCRYPTOR_LEGACY_FILE_WITHOUT_EXTERN_STRING) SED_AFTER_STRING=$(ITEMENCRYPTOR_LEGACY_FILE_WITH_EXTERN_STRING)
192+
$(MAKE) _sed_file SED_FILE_PATH=$(TRANSFORMS_INDEX_FILE_PATH) SED_BEFORE_STRING=$(TRANSFORMS_INDEX_FILE_WITHOUT_EXTERN_STRING) SED_AFTER_STRING=$(TRANSFORMS_INDEX_FILE_WITH_EXTERN_STRING)
193+
$(MAKE) _sed_file SED_FILE_PATH=$(STRUCTUREDENCRYPTION_INDEX_FILE_PATH) SED_BEFORE_STRING=$(STRUCTUREDENCRYPTION_INDEX_FILE_WITHOUT_EXTERN_STRING) SED_AFTER_STRING=$(STRUCTUREDENCRYPTION_INDEX_FILE_WITH_EXTERN_STRING)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Python build artifacts
2+
__pycache__
3+
**/__pycache__
4+
*.pyc
5+
src/**.egg-info/
6+
build
7+
poetry.lock
8+
**/poetry.lock
9+
dist
10+
11+
# Dafny-generated Python
12+
**/internaldafny/generated
13+
14+
# Python test artifacts
15+
.tox
16+
.pytest_cache
17+
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Python AWS Database Encryption SDK for DynamoDB
2+
3+
[![MPL-python-tests](https://github.com/aws/aws-database-encryption-sdk-dynamodb/actions/workflows/push.yml/badge.svg)](https://github.com/aws/aws-database-encryption-sdk-dynamodb/actions/workflows/push.yml)
4+
[![Code style: black](https://img.shields.io/badge/code_style-black-000000.svg)](https://github.com/ambv/black)
5+
[![Documentation Status](https://readthedocs.org/projects/aws-dbesdk-dynamodb-python/badge/)](https://aws-dbesdk-dynamodb-python.readthedocs.io/en/latest/)
6+
7+
This is the official implementation of the AWS Database Encryption SDK for DynamoDB in Python.
8+
9+
The latest documentation can be found at [Read the Docs](https://aws-dbesdk-dynamodb-python.readthedocs.io/en/latest/).
10+
11+
Find the source code on [GitHub](https://github.com/aws/aws-database-encryption-sdk-dynamodb).
12+
13+
## Security
14+
15+
If you discover a potential security issue in this project
16+
we ask that you notify AWS/Amazon Security via our
17+
[vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/).
18+
Please **do not** create a public GitHub issue.
19+
20+
## Getting Started
21+
22+
### Required Prerequisites
23+
24+
- Python 3.11+
25+
- aws-cryptographic-material-providers 1.10.0+
26+
27+
### Installation
28+
29+
> **Note:**
30+
> If you have not already installed [cryptography](https://cryptography.io/en/latest/), you might need to install additional prerequisites as
31+
> detailed in the [cryptography installation guide](https://cryptography.io/en/latest/installation/) for your operating system.
32+
33+
```bash
34+
$ pip install aws-dbesdk-dynamodb
35+
```
36+
37+
### Concepts
38+
39+
The AWS Database Encryption SDK for DynamoDB (DBESDK-DynamoDB) is available in multiple languages.
40+
The concepts in the Python implementation of the DBESDK-DynamoDB are the same as in other languages.
41+
For more information on concepts in the DBESDK-DynamoDB, see the [README](https://github.com/aws/aws-database-encryption-sdk-dynamodb/blob/main/README.md) for all languages.
42+
43+
DBESDK-DynamoDB uses cryptographic material providers from the AWS Cryptographic Material Providers Library (MPL).
44+
For more information on the MPL, see its [README](https://github.com/aws/aws-database-encryption-sdk-dynamodb/blob/main/README.md) or [readthedocs](https://aws-cryptographic-material-providers-library.readthedocs.io/en/latest/) page.
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
[tool.poetry]
2+
name = "aws-dbesdk-dynamodb"
3+
version = "0.1.0"
4+
description = ""
5+
authors = ["AWS Crypto Tools <[email protected]>"]
6+
packages = [
7+
{ include = "aws_dbesdk_dynamodb", from = "src" },
8+
]
9+
# Include all of the following .gitignored files in package distributions,
10+
# even though it is not included in version control
11+
include = ["**/internaldafny/generated/*.py"]
12+
13+
[tool.poetry.dependencies]
14+
python = "^3.11.0"
15+
aws-cryptographic-material-providers = { path = "../../../submodules/MaterialProviders/AwsCryptographicMaterialProviders/runtimes/python", develop = false}
16+
17+
# Package testing
18+
19+
[tool.poetry.group.test]
20+
optional = true
21+
22+
[tool.poetry.group.test.dependencies]
23+
pytest = "^7.4.0"
24+
pytest-cov = "^6"
25+
mock = "^4.0.3"
26+
27+
# Package release
28+
29+
[tool.poetry.group.release]
30+
optional = true
31+
32+
[tool.poetry.group.release.dependencies]
33+
poetry = "1.8.3"
34+
twine = "5.1.1"
35+
wheel = "0.38.4"
36+
37+
# Package documentation
38+
39+
[tool.poetry.group.docs]
40+
optional = true
41+
42+
[tool.poetry.group.docs.dependencies]
43+
toml = "^0.10.2"
44+
myst-parser = "^4"
45+
sphinx = "^7"
46+
sphinx_rtd_theme = "^2"
47+
48+
# Package linting
49+
50+
[tool.poetry.group.linting]
51+
optional = true
52+
53+
[tool.poetry.group.linting.dependencies]
54+
ruff = "^0.11.5"
55+
black = "^25.1.0"
56+
57+
[tool.ruff]
58+
exclude = [
59+
# Don't bother linting Dafny-generated code
60+
"internaldafny",
61+
# Don't re-lint Smithy-generated code
62+
"smithygenerated",
63+
]
64+
line-length=120
65+
indent-width=4
66+
target-version = "py311"
67+
68+
[tool.ruff.lint]
69+
# Choose linting tools
70+
select = [
71+
# pycodestyle: spacing, line length
72+
"E",
73+
# pyflakes: unused imports/variables
74+
"F",
75+
# isort: import sorting
76+
"I",
77+
# pydocstyle: docstring style
78+
"D",
79+
]
80+
# Ignore incompatible linting options
81+
ignore=[
82+
"D203", # `incorrect-blank-line-before-class`; incompatible with `no-blank-line-before-class` (D211)
83+
"D212", # `multi-line-summary-first-line`; incompatible with `multi-line-summary-second-line` (D213)
84+
]
85+
86+
[tool.ruff.lint.per-file-ignores]
87+
"src/aws_dbesdk_dynamodb/internal/*" = [
88+
# Ignore all "public"-related linting errors for internal modules
89+
"D100", "D101", "D102", "D103", "D104", "D105", "D106", "D107",
90+
# Ignore opinionated docstring linting errors for internal modules
91+
"D205", "D400", "D401", "D403", "D404", "D415",
92+
]
93+
"test/*" = [
94+
# Ignore all "public"- and docstring-related linting errors for test modules
95+
"D100", "D101", "D102", "D103", "D104", "D105", "D106", "D107",
96+
# Ignore opinionated docstring linting errors for test modules
97+
"D205", "D400", "D401", "D403", "D404", "D415",
98+
]
99+
100+
[tool.black]
101+
# Don't bother linting Dafny-generated code; don't re-lint Smithy-generated code
102+
exclude = "/(internaldafny|smithygenerated)(/|$)"
103+
104+
[build-system]
105+
requires = ["poetry-core<2.0.0"]
106+
build-backend = "poetry.core.masonry.api"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Python build artifacts
2+
__pycache__
3+
**/__pycache__
4+
*.pyc
5+
src/**.egg-info/
6+
build
7+
poetry.lock
8+
**/poetry.lock
9+
dist
10+
11+
# Dafny-generated Python
12+
**/internaldafny/generated/*.py
13+
14+
# Python test artifacts
15+
.tox
16+
.pytest_cache
17+
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
[tool.poetry]
2+
name = "aws-dbesdk-dynamodb-examples"
3+
version = "0.1.0"
4+
description = ""
5+
authors = ["AWS Crypto Tools <[email protected]>"]
6+
7+
[tool.poetry.dependencies]
8+
python = "^3.11.0"
9+
aws-dbesdk-dynamodb = { path = "../../../DynamoDbEncryption/runtimes/python", develop = false}
10+
11+
[tool.poetry.group.test.dependencies]
12+
pytest = "^7.4.0"
13+
tox = "^3"
14+
15+
[build-system]
16+
requires = ["poetry-core<2.0.0"]
17+
build-backend = "poetry.core.masonry.api"
18+
19+
# Package linting
20+
21+
[tool.poetry.group.linting]
22+
optional = true
23+
24+
[tool.poetry.group.linting.dependencies]
25+
ruff = "^0.11.5"
26+
black = "^25.1.0"
27+
28+
[tool.ruff]
29+
line-length=120
30+
indent-width=4
31+
target-version = "py311"
32+
33+
[tool.ruff.lint]
34+
# Choose linting tools
35+
select = [
36+
# pycodestyle: spacing, line length
37+
"E",
38+
# pyflakes: unused imports/variables
39+
"F",
40+
# isort: import sorting
41+
"I",
42+
# pydocstyle: docstring style
43+
"D",
44+
]
45+
# Ignore incompatible linting options
46+
ignore=[
47+
"D203", # `incorrect-blank-line-before-class`; incompatible with `no-blank-line-before-class` (D211)
48+
"D212", # `multi-line-summary-first-line`; incompatible with `multi-line-summary-second-line` (D213)
49+
]

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ You need an Amazon Web Services (AWS) account to use the DB-ESDK for DynamoDB as
6868
- .NET
6969
- Dafny
7070
- Rust
71+
- Python
7172

7273
# Contributing
7374

0 commit comments

Comments
 (0)