Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release/v1.43.0 #2358

Merged
merged 63 commits into from
Mar 22, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
dd9d814
Fix no allowed origin (#2180)
c2tarun Nov 8, 2021
ce2744d
Raise InvalidEventException when RestApiId/ApiId is not resolved to a…
aahung Nov 9, 2021
3c2da6d
Raise a validation exception if the responses section in an openApi d…
moelasmar Nov 9, 2021
cc28051
chore: Add auto PR labeler (#2219)
jfuss Nov 15, 2021
1174f0f
Fix DestinationConfig in streaming event sources (#2215)
hawflau Nov 15, 2021
c8e4da9
fix: handle non-dict DefinitionBody path item in _openapi_postprocess…
torresxb1 Nov 15, 2021
b45aef2
Run unit tests in parallel (#2222)
aahung Nov 15, 2021
78d641b
Handle when Api resource doesn't have properties (#2221)
aahung Nov 15, 2021
2fd3bec
Chore: Only add labels on open of PRs (#2225)
jfuss Nov 19, 2021
bbc7e30
Merge pull request #2231 from aws/hotfix_lambda_urls
CoshUS Nov 19, 2021
26855df
Merge pull request #2233 from aws/hotfix_remove_lambdaurls
CoshUS Nov 20, 2021
038f208
Handle when function http event auth or DefaultAuthorizer is not a st…
aahung Nov 22, 2021
e816e50
chore: bump version to 1.42.0 (#2235)
mndeveci Nov 23, 2021
c7da9d4
Revert "chore: bump version to 1.42.0 (#2235)" (#2237)
CoshUS Nov 23, 2021
3a0ef76
merge: release 1.42.0
mndeveci Nov 23, 2021
6504848
Validate swagger path item objects (#2251)
aahung Nov 29, 2021
c8057b0
Validate swagger method value is a valid dict before processing (#2250)
aahung Nov 29, 2021
8ca5bdd
fix: fix validation errors log message that calls join on a string (#…
torresxb1 Nov 29, 2021
d2cf4b7
[FOSS] hot fix and improvement (#2207)
mingkun2020 Dec 3, 2021
d16cd21
fix: Check type of resource type is a string (#2252)
mildaniel Dec 6, 2021
323312a
merge: fix open api set_path_default_authorizer (#2248)
mndeveci Dec 8, 2021
6daf706
Do not abort SAR loop on throttling (#2240)
marekaiv Dec 14, 2021
3808cc4
Improve error message for an invalid ResourcePolicy element (#2271)
marekaiv Dec 20, 2021
8b89575
Fixing DisableExecuteApiEndpoint property for REST and adding integ t…
sattigar Dec 21, 2021
a5db070
fix: Py27hash fix (#2182)
torresxb1 Jan 3, 2022
ab6943a
chore: bump version to 1.43.0 (#2276)
hawflau Jan 4, 2022
1fb7686
Update integ test expected result to incorporate py27hashfix changes …
hawflau Jan 11, 2022
b3fd85d
docs: update examples link (#2277)
Phuurl Jan 11, 2022
85177ef
fix: Raise exception if provided Auth.Authorizers.Identity isn't a di…
mildaniel Jan 17, 2022
a65e59e
fix: Correct CognitoUserPool SmsConfiguration validation type (#1582)
lafiosca Jan 17, 2022
4b446dd
fix: accept empty components property in Open Api Definition (#2296)
moelasmar Jan 18, 2022
6c5981b
Corrected gitpod link to open this repo instead of aws-sam-cli (#2170)
JiteshKanojia Jan 20, 2022
24df81b
docs: updating EventBridgeRule documentation (#2236)
TheWesDias Jan 20, 2022
9364229
Update INTEGRATION_TESTS.md (#2300)
hawflau Jan 20, 2022
a308593
Clean up Py2 dependencies and update to use native unittest.mock (#2299)
hawflau Jan 20, 2022
ee31707
add undocumented SecurityPolicy to ApiGateway domain configuration (#…
tylersouthwick Jan 20, 2022
aec6e18
fix: Add handling for OpenApi definition that has tags with invalid f…
qingchm Jan 20, 2022
749634d
Remove six as dependency (#2302)
hawflau Jan 21, 2022
ac27136
Fix all warnings in tests (#2303)
hawflau Jan 21, 2022
7eb3587
fix: Raise Invalid Resource When DisableExecuteApiEndpoint: False And…
CoshUS Jan 21, 2022
59df2db
handle 'Invalid Swagger Document' and refactor some validation into S…
torresxb1 Jan 24, 2022
db77d0c
Update PR template to add integration tests in checklist (#2306)
hawflau Jan 24, 2022
c575b54
Conditionally exposing metadata to translated resources. (#2224)
andrew-glenn Jan 25, 2022
f292456
Improve exception processing for Route53 with invalid type (#2284)
wchengru Jan 31, 2022
521abe3
Check S3 lambda configuration type is list (#2310)
mildaniel Feb 1, 2022
b1b3a9c
tests: add test for DefaultAuthorizers not a string in API (#2313)
jfuss Feb 7, 2022
f37ba41
fix(apigw): ValueError is not caught by int() (#2305)
wchengru Feb 7, 2022
802334b
Add checks for authorizer event source types (#2307)
mildaniel Feb 7, 2022
979825f
Add method for determining service availability in a region (#2321)
marekaiv Feb 14, 2022
059b082
chore: Enable pylint on project (#2326)
jfuss Feb 16, 2022
2956d26
fix: Update validation for dead letter queue (#2324)
jonife Feb 21, 2022
87d2a88
fix: fix paths IF intrinsic bug (#2330)
torresxb1 Feb 22, 2022
dfb1307
Py27dict deepcopy performance (#2331)
marekaiv Feb 24, 2022
d42d64b
Update function_with_custom_code_deploy integration test case (#2320)
hawflau Feb 28, 2022
09c3625
fix: Update tag count check for apigw v2 resources (#2333)
mildaniel Feb 28, 2022
4bf6a16
chore: Remove duplicated Docs (#2334)
jfuss Mar 2, 2022
802d006
validate Lambda Authorizer property identity (#2322)
jonife Mar 7, 2022
7bd24e5
chore: update setup.cfg key to use underscore (#2051)
mgorny Mar 9, 2022
b2f24d1
test: Add retries on flaky integration test (#2343)
mildaniel Mar 9, 2022
d796f30
chore: remove py3.6 support and add py3.9 and py3.10 (#2311)
mndeveci Mar 10, 2022
4f7649e
Revert "chore: bump version to 1.43.0 (#2276)" (#2345)
hawflau Mar 14, 2022
efef989
Revert "handle 'Invalid Swagger Document' and refactor some validatio…
torresxb1 Mar 14, 2022
594c54f
chore: Version bump to 1.43.0 (#2347)
hawflau Mar 15, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 2 additions & 1 deletion .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@

*Checklist:*

- [ ] Add/update tests using:
- [ ] Add/update [unit tests](https://github.com/aws/serverless-application-model/blob/develop/DEVELOPMENT_GUIDE.md#unit-testing-with-multiple-python-versions) using:
- [ ] Correct values
- [ ] Bad/wrong values (None, empty, wrong type, length, etc.)
- [ ] [Intrinsic Functions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html)
- [ ] Add/update [integration tests](https://github.com/aws/serverless-application-model/blob/develop/INTEGRATION_TESTS.md)
- [ ] `make pr` passes
- [ ] Update documentation
- [ ] Verify transformed template deploys and application functions as expected
Expand Down
7 changes: 7 additions & 0 deletions .github/workflows/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
This folder has Github Actions for this repo.

** pr-labler **

This is responsible for tagging our prs automattically. The primary thing it does is tags internal vs external (to the team) PRs.
This is run on `pull_request_target` which only runs what is in the repo not what is in the Pull Request. This is done to help guard against
a PR running and changing. For this, the Action should NEVER download or checkout the PR. It is purely for tagging/labeling not CI.
31 changes: 31 additions & 0 deletions .github/workflows/pr-labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: "Pull Request Labeler"
on:
pull_request_target:
types: [opened]

jobs:
apply-internal-external-label:
permissions:
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v5
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const maintainers = ['jfuss', 'c2tarun', 'hoffa', 'awood45', 'CoshUS', 'aahung', 'hawflau', 'mndeveci', 'ssenchenko', 'wchengru', 'mingkun2020', 'qingchm', 'moelasmar', 'xazhao', 'mildaniel', 'marekaiv', 'torresxb1']
if (maintainers.includes(context.payload.sender.login)) {
github.rest.issues.addLabels({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
labels: ['pr/internal']
})
} else {
github.rest.issues.addLabels({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
labels: ['pr/external']
})
}
125 changes: 114 additions & 11 deletions .pylintrc
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,21 @@

# Add files or directories to the ignore list. They should be base names, not
# paths.
ignore=compat.py
ignore=compat.py, __main__.py

# Pickle collected data for later comparisons.
persistent=yes

# List of plugins (as comma separated values of python modules names) to load,
# usually to register additional checkers.
load-plugins=
pylint.extensions.check_elif, # Else If Used checker
pylint.extensions.emptystring, # compare to empty string
pylint.extensions.comparetozero, # compare to 0
pylint.extensions.docparams, # Parameter documentation checker

# Use multiple processes to speed up Pylint.
# Pylint has a bug on multitread, turn it off.
jobs=1

# Allow loading of arbitrary C extensions. Extensions are imported into the
Expand Down Expand Up @@ -59,7 +64,103 @@ confidence=
# --enable=similarities". If you want to run only the classes checker, but have
# no Warning level messages displayed, use"--disable=all --enable=classes
# --disable=W"
disable=R0201,W0613,I0021,I0020,W1618,W1619,R0902,R0903,W0231,W0611,R0913,W0703,C0330,R0204,I0011,R0904
disable=
W0613, # Unused argument %r
W0640, # Cell variable %s defined in loop A variable used in a closure is defined in a loop
R0902, # Too many instance attributes (%s/%s)
R0903, # Too few public methods (%s/%s)
R0913, # Too many arguments (%s/%s)
W0703, # Catching too general exception %s
R0904, # Too many public methods (%s/%s)
R0914, # Too many local variables (%s/%s)
R0915, # Too many statements
C0415, # Import outside toplevel (%s) Used when an import statement is used anywhere other than the module toplevel. Move this import to the top of the file.
C0115, # missing-class-docstring
# below are docstring lint rules, in order to incrementally improve our docstring while
# without introduce too much effort at a time, we exclude most of the docstring lint rules.
# We will remove them one by one.
# W9005, # "%s" has constructor parameters documented in class and __init__
W9006, # "%s" not documented as being raised
# W9008, # Redundant returns documentation
# W9010, # Redundant yields documentation
W9011, # Missing return documentation
W9012, # Missing return type documentation
# W9013, # Missing yield documentation
# W9014, # Missing yield type documentation
# W9015, # "%s" missing in parameter documentation
W9016, # "%s" missing in parameter type documentation
# W9017, # "%s" differing in parameter documentation
# W9018, # "%s" differing in parameter type documentation
# W9019, # "%s" useless ignored parameter documentation
# W9020, # "%s" useless ignored parameter type documentation
# Constant name style warnings. We will remove them one by one.
C0103, # Class constant name "%s" doesn't conform to UPPER_CASE naming style ('([^\\W\\da-z][^\\Wa-z]*|__.*__)$' pattern) (invalid-name)
# New recommendations, disable for now to avoid introducing behaviour changes.
R1729, # Use a generator instead '%s' (use-a-generator)
R1732, # Consider using 'with' for resource-allocating operations (consider-using-with)
# This applies to CPython only.
I1101, # Module 'math' has no 'pow' member, but source is unavailable. Consider adding this module to extension-pkg-allow-list if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member)
# Added to allow linting. Need to work on removing over time
R0801, # dupilcated code
R0401, # Cyclic import
C0411, # import ordering
W9015, # missing parameter in doc strings
W0612, # unused variable
R0205, # useless-object-inheritanc
C0301, # line to long
R0201, # no self use, method could be a function
C0114, # missing-module-docstring
W1202, # Use lazy % formatting in logging functions (logging-format-interpolation)
E1101, # No member
W0622, # Redefining built-in 'property' (redefined-builtin)
W0611, # unused imports
W0231, # super not called
W0212, # protected-access
W0201, # attribute-defined-outside-init
R1725, # Consider using Python 3 style super() without arguments (super-with-arguments)
C2001, # Avoid comparisons to zero (compare-to-zero)
R0912, # too many branches
W0235, # Useless super delegation in method '__init__' (useless-super-delegation)
C0412, # Imports from package samtranslator are not grouped (ungrouped-imports)
W0223, # abstract-method
W0107, # unnecessary-pass
W0707, # raise-missing-from
R1720, # no-else-raise
W0621, # redefined-outer-name
E0203, # access-member-before-definition
W0221, # arguments-differ
R1710, # inconsistent-return-statements
R1702, # too-many-nested-blocks
C0123, # Use isinstance() rather than type() for a typecheck. (unidiomatic-typecheck)
W0105, # String statement has no effect (pointless-string-statement)
C0206, # Consider iterating with .items() (consider-using-dict-items)
W9008, # Redundant returns documentation (redundant-returns-doc)
E0602, # undefined-variable
C0112, # empty-docstring
C0116, # missing-function-docstring
C0200, # consider-using-enumerate
R5501, # Consider using "elif" instead of "else if" (else-if-used)
W9017, # differing-param-doc
W9018, # differing-type-doc
W0511, # fixme
C0325, # superfluous-parens
R1701, # consider-merging-isinstance
C0302, # too-many-lines
C0303, # trailing-whitespace
R1721, # unnecessary-comprehension
C0121, # singleton-comparison
E1305, # too-many-format-args
R1724, # no-else-continue
E0611, # no-name-in-module
W9013, # missing-yield-doc
W9014, # missing-yield-type-doc
C0201, # consider-iterating-dictionary
W0237, # arguments-renamed
R1718, # consider-using-set-comprehension
R1723, # no-else-break
E1133, # not-an-iterable
E1135, # unsupported-membership-test
R1705, # no-else-return


[REPORTS]
Expand Down Expand Up @@ -162,18 +263,20 @@ module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
module-name-hint=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$

# Regular expression matching correct method names
method-rgx=[a-z_][a-z0-9_]{2,30}$
method-rgx=[a-z_][a-z0-9_]{2,50}$

# Naming hint for method names
method-name-hint=[a-z_][a-z0-9_]{2,30}$

# Regular expression which should only match function or class names that do
# not require a docstring.
no-docstring-rgx=.*
no-docstring-rgx=^_

# Minimum line length for functions/classes that require docstrings, shorter
# ones are exempt.
docstring-min-length=-1
# To improve our docstring without spending too much effort at a time,
# here set it to 30 and decrease it gradually in the future.
docstring-min-length=30


[FORMAT]
Expand Down Expand Up @@ -221,16 +324,16 @@ notes=FIXME,XXX
[SIMILARITIES]

# Minimum lines number of a similarity.
min-similarity-lines=5
min-similarity-lines=12

# Ignore comments when computing similarities.
ignore-comments=no
ignore-comments=yes

# Ignore docstrings when computing similarities.
ignore-docstrings=no
ignore-docstrings=yes

# Ignore imports when computing similarities.
ignore-imports=no
ignore-imports=yes


[SPELLING]
Expand Down Expand Up @@ -259,7 +362,7 @@ ignore-mixin-members=yes
# List of module names for which member attributes should not be checked
# (useful for modules/projects where namespaces are manipulated during runtime
# and thus existing member attributes cannot be deduced by static analysis
ignored-modules=six.moves
ignored-modules=

# List of classes names for which member attributes should not be checked
# (useful for classes with attributes dynamically set).
Expand Down Expand Up @@ -315,7 +418,7 @@ max-args=5
ignored-argument-names=_.*

# Maximum number of locals for function / method body
max-locals=15
max-locals=17

# Maximum number of return / yield for function / method body
max-returns=6
Expand Down
13 changes: 5 additions & 8 deletions DEVELOPMENT_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Windows users, consider using [pipenv](https://docs.pipenv.org/).
-------------------------
For setting up a local development environment, we recommend using Gitpod - a service that allows you to spin up an in-browser Visual Studio Code-compatible editor, with everything set up and ready to go for development on this project. Just click the button below to create your private workspace:

[![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/awslabs/aws-sam-cli)
[![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/aws/serverless-application-model.git)

This will start a new Gitpod workspace, and immediately kick off a build of the code. Once it's done, you can start working.

Expand All @@ -26,9 +26,8 @@ Environment Setup
-----------------
### 1. Install Python Versions

Our officially supported Python versions are 2.7, 3.6, 3.7 and 3.8. Follow the idioms from this [excellent cheatsheet](http://python-future.org/compatible_idioms.html) to
make sure your code is compatible with both Python 2.7 and 3 (>=3.6) versions.
Our CI/CD pipeline is setup to run unit tests against both Python 2.7 and 3 versions. So make sure you test it with both versions before sending a Pull Request.
Our officially supported Python versions are 3.6, 3.7 and 3.8.
Our CI/CD pipeline is setup to run unit tests against Python 3 versions. Make sure you test it before sending a Pull Request.
See [Unit testing with multiple Python versions](#unit-testing-with-multiple-python-versions).

[pyenv](https://github.com/pyenv/pyenv) is a great tool to
Expand All @@ -41,12 +40,11 @@ easily setup multiple Python versions. For
1. Install PyEnv -
`curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash`
1. Restart shell so the path changes take effect - `exec $SHELL`
1. `pyenv install 2.7.17`
1. `pyenv install 3.6.12`
1. `pyenv install 3.7.9`
1. `pyenv install 3.8.6`
1. Make Python versions available in the project:
`pyenv local 2.7.17 3.6.12 3.7.9 3.8.6`
`pyenv local 3.6.12 3.7.9 3.8.6`

Note: also make sure the following lines were written into your `.bashrc` (or `.zshrc`, depending on which shell you are using):
```
Expand Down Expand Up @@ -117,11 +115,10 @@ Running Tests
### Unit testing with one Python version

If you're trying to do a quick run, it's ok to use the current python version. Run `make pr`.
If you're using Python2.7, you can run `make pr2.7` instead.

### Unit testing with multiple Python versions

Currently, our officially supported Python versions are 2.7, 3.6, 3.7 and 3.8. For the most
Currently, our officially supported Python versions are 3.6, 3.7 and 3.8. For the most
part, code that works in Python3.6 will work in Python3.7 and Python3.8. You only run into problems if you are
trying to use features released in a higher version (for example features introduced into Python3.7
will not work in Python3.6). If you want to test in many versions, you can create a virtualenv for
Expand Down
2 changes: 1 addition & 1 deletion INTEGRATION_TESTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

These tests run SAM against AWS services by translating SAM templates, deploying them to Cloud Formation and verifying the resulting objects.

They must run successfully under Python 2 and 3.
They must run successfully under Python 3.

## Run the tests

Expand Down
1 change: 1 addition & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ recursive-include samtranslator/validator/sam_schema *.json
include samtranslator/policy_templates_data/policy_templates.json
include samtranslator/policy_templates_data/schema.json
include README.md
include THIRD_PARTY_LICENSES

prune tests
11 changes: 6 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ init:
pip install -e '.[dev]'

test:
pytest --cov samtranslator --cov-report term-missing --cov-fail-under 95 tests/*
pytest --cov samtranslator --cov-report term-missing --cov-fail-under 95 -n auto tests/*

test-cov-report:
pytest --cov samtranslator --cov-report term-missing --cov-report html --cov-fail-under 95 tests/*
Expand All @@ -20,14 +20,15 @@ black:
black-check:
black --check setup.py samtranslator/* tests/* integration/* bin/*.py

lint:
# Linter performs static analysis to catch latent bugs
pylint --rcfile .pylintrc samtranslator

# Command to run everytime you make changes to verify everything works
dev: test

# Verifications to run before sending a pull request
pr: black-check init dev

# Verifications to run before sending a pull request, skipping black check because black requires Python 3.6+
pr2.7: init dev
pr: black-check lint init dev

define HELP_MESSAGE

Expand Down
23 changes: 23 additions & 0 deletions THIRD_PARTY_LICENSES
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
The AWS Serverless Application Model includes the following third-party software/licensing:

** py27hash; version 1.0.2 -- https://pypi.org/project/py27hash/
Copyright (c) 2020 NeuML LLC

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
----------------
8 changes: 4 additions & 4 deletions appveyor-integration-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ image: Ubuntu

environment:
matrix:
- TOXENV: py27
PYTHON_VERSION: '2.7'
- TOXENV: py36
PYTHON_VERSION: '3.6'
- TOXENV: py37
PYTHON_VERSION: '3.7'
- TOXENV: py38
PYTHON_VERSION: '3.8'
- TOXENV: py39
PYTHON_VERSION: '3.9'
- TOXENV: py310
PYTHON_VERSION: '3.10'

build: off

Expand Down
8 changes: 4 additions & 4 deletions appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ image: Ubuntu

environment:
matrix:
- TOXENV: py27
PYTHON_VERSION: '2.7'
- TOXENV: py36
PYTHON_VERSION: '3.6'
- TOXENV: py37
PYTHON_VERSION: '3.7'
- TOXENV: py38
PYTHON_VERSION: '3.8'
- TOXENV: py39
PYTHON_VERSION: '3.9'
- TOXENV: py310
PYTHON_VERSION: '3.10'

build: off

Expand Down
Loading