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

fix: add 3.11 to classifiers and upgrade Docker #5225

Merged
merged 12 commits into from
Jun 2, 2023
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ lint:
# Linter performs static analysis to catch latent bugs
ruff samcli
# mypy performs type check
mypy --no-incremental setup.py samcli tests
mypy --exclude /testdata/ --exclude /init/templates/ --no-incremental setup.py samcli tests

# Command to run everytime you make changes to verify everything works
dev: lint test
Expand Down
2 changes: 1 addition & 1 deletion mypy.ini
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ warn_return_any=True
warn_unused_configs=True
no_implicit_optional=True
warn_redundant_casts=True
warn_unused_ignores=True
warn_unused_ignores=False # @jfuss Done as a stop gap since different py versions have different errors
warn_unreachable=True

#
Expand Down
10 changes: 5 additions & 5 deletions requirements/base.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,21 @@ click~=8.0
Flask<2.3
#Need to add Schemas latest SDK.
boto3>=1.19.5,==1.*
jmespath~=0.10.0
ruamel_yaml==0.17.21
jmespath~=1.0.1
ruamel_yaml~=0.17.21
PyYAML>=5.4.1,==5.*
cookiecutter~=2.1.1
aws-sam-translator==1.68.0
#docker minor version updates can include breaking changes. Auto update micro version only.
docker~=4.2.0
docker~=6.1.0
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Integ tests seem to be passing.

dateparser~=1.1
requests==2.31.0
requests~=2.31.0
serverlessrepo==0.1.10
aws_lambda_builders==1.32.0
tomlkit==0.11.8
watchdog==2.1.2
rich~=13.3.3
pyopenssl==23.0.0
pyopenssl~=23.0.0

# Needed for supporting Protocol in Python 3.7, Protocol class became public with python3.8
typing_extensions~=4.4.0
Expand Down
14 changes: 11 additions & 3 deletions requirements/dev.txt
Original file line number Diff line number Diff line change
@@ -1,22 +1,30 @@
-r pre-dev.txt

coverage==5.3
coverage==7.2.7
pytest-cov==4.0.0


# type checking and related stubs
# mypy adds new rules in new minor versions, which could cause our PR check to fail
# here we fix its version and upgrade it manually in the future
mypy==0.790
mypy==1.3.0
boto3-stubs[apigateway,cloudformation,ecr,iam,lambda,s3,schemas,secretsmanager,signer,stepfunctions,sts,xray]==1.26.131
types-pywin32==306.0.0.0
types-PyYAML==6.0.12
types-chevron==0.14.2.4
types-psutil==5.9.5.12
types-setuptools==65.4.0.0
types-Pygments==2.15.0.1
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks for adding the others!

types-colorama==0.4.15.11
types-dateparser==1.1.4.9
types-docutils==0.20.0.1
types-jsonschema==4.17.0.8
types-pyOpenSSL==23.2.0.0
types-requests==2.31.0.1
types-urllib3==1.26.25.13

# Test requirements
pytest==7.2.2
pytest~=7.2.2
parameterized==0.9.0
pytest-xdist==3.2.0
pytest-forked==1.6.0
Expand Down
18 changes: 11 additions & 7 deletions requirements/reproducible-linux.txt
Original file line number Diff line number Diff line change
Expand Up @@ -241,9 +241,9 @@ dateparser==1.1.8 \
--hash=sha256:070b29b5bbf4b1ec2cd51c96ea040dc68a614de703910a91ad1abba18f9f379f \
--hash=sha256:86b8b7517efcc558f085a142cdb7620f0921543fcabdb538c8a4c4001d8178e3
# via aws-sam-cli (setup.py)
docker==4.2.2 \
--hash=sha256:03a46400c4080cb6f7aa997f881ddd84fef855499ece219d75fbdb53289c17ab \
--hash=sha256:26eebadce7e298f55b76a88c4f8802476c5eaddbdbe38dbc6cce8781c47c9b54
docker==6.1.3 \
--hash=sha256:aa6d17830045ba5ef0168d5eaa34d37beeb113948c413affe1d5991fc11f9a20 \
--hash=sha256:aecd2277b8bf8e506e484f6ab7aec39abe0038e29fa4a6d3ba86c3fe01844ed9
# via aws-sam-cli (setup.py)
flask==2.2.5 \
--hash=sha256:58107ed83443e86067e41eff4631b058178191a355886f8e479e347fa1285fdf \
Expand All @@ -268,9 +268,9 @@ jinja2-time==0.2.0 \
--hash=sha256:d14eaa4d315e7688daa4969f616f226614350c48730bfa1692d2caebd8c90d40 \
--hash=sha256:d3eab6605e3ec8b7a0863df09cc1d23714908fa61aa6986a845c20ba488b4efa
# via cookiecutter
jmespath==0.10.0 \
--hash=sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9 \
--hash=sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f
jmespath==1.0.1 \
--hash=sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980 \
--hash=sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe
# via
# aws-sam-cli (setup.py)
# boto3
Expand Down Expand Up @@ -371,6 +371,10 @@ networkx==2.6.3 \
--hash=sha256:80b6b89c77d1dfb64a4c7854981b60aeea6360ac02c6d4e4913319e0a313abef \
--hash=sha256:c0946ed31d71f1b732b5aaa6da5a0388a345019af232ce2f49c766e2d6795c51
# via cfn-lint
packaging==23.1 \
--hash=sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61 \
--hash=sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f
# via docker
pbr==5.11.1 \
--hash=sha256:567f09558bae2b3ab53cb3c1e2e33e726ff3338e7bae3db5dc954b3a44eef12b \
--hash=sha256:aefc51675b0b533d56bb5fd1c8c6c0522fe31896679882e1c4c63d5e4a0fccb3
Expand Down Expand Up @@ -630,7 +634,6 @@ six==1.16.0 \
--hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \
--hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254
# via
# docker
# junit-xml
# python-dateutil
# serverlessrepo
Expand Down Expand Up @@ -664,6 +667,7 @@ urllib3==1.26.15 \
--hash=sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42
# via
# botocore
# docker
# requests
watchdog==2.1.2 \
--hash=sha256:0237db4d9024859bea27d0efb59fe75eef290833fd988b8ead7a879b0308c2db \
Expand Down
18 changes: 11 additions & 7 deletions requirements/reproducible-mac.txt
Original file line number Diff line number Diff line change
Expand Up @@ -259,9 +259,9 @@ dateparser==1.1.8 \
--hash=sha256:070b29b5bbf4b1ec2cd51c96ea040dc68a614de703910a91ad1abba18f9f379f \
--hash=sha256:86b8b7517efcc558f085a142cdb7620f0921543fcabdb538c8a4c4001d8178e3
# via aws-sam-cli (setup.py)
docker==4.2.2 \
--hash=sha256:03a46400c4080cb6f7aa997f881ddd84fef855499ece219d75fbdb53289c17ab \
--hash=sha256:26eebadce7e298f55b76a88c4f8802476c5eaddbdbe38dbc6cce8781c47c9b54
docker==6.1.3 \
--hash=sha256:aa6d17830045ba5ef0168d5eaa34d37beeb113948c413affe1d5991fc11f9a20 \
--hash=sha256:aecd2277b8bf8e506e484f6ab7aec39abe0038e29fa4a6d3ba86c3fe01844ed9
# via aws-sam-cli (setup.py)
flask==2.2.5 \
--hash=sha256:58107ed83443e86067e41eff4631b058178191a355886f8e479e347fa1285fdf \
Expand Down Expand Up @@ -299,9 +299,9 @@ jinja2-time==0.2.0 \
--hash=sha256:d14eaa4d315e7688daa4969f616f226614350c48730bfa1692d2caebd8c90d40 \
--hash=sha256:d3eab6605e3ec8b7a0863df09cc1d23714908fa61aa6986a845c20ba488b4efa
# via cookiecutter
jmespath==0.10.0 \
--hash=sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9 \
--hash=sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f
jmespath==1.0.1 \
--hash=sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980 \
--hash=sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe
# via
# aws-sam-cli (setup.py)
# boto3
Expand Down Expand Up @@ -402,6 +402,10 @@ networkx==2.6.3 \
--hash=sha256:80b6b89c77d1dfb64a4c7854981b60aeea6360ac02c6d4e4913319e0a313abef \
--hash=sha256:c0946ed31d71f1b732b5aaa6da5a0388a345019af232ce2f49c766e2d6795c51
# via cfn-lint
packaging==23.1 \
--hash=sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61 \
--hash=sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f
# via docker
pbr==5.11.1 \
--hash=sha256:567f09558bae2b3ab53cb3c1e2e33e726ff3338e7bae3db5dc954b3a44eef12b \
--hash=sha256:aefc51675b0b533d56bb5fd1c8c6c0522fe31896679882e1c4c63d5e4a0fccb3
Expand Down Expand Up @@ -703,7 +707,6 @@ six==1.16.0 \
--hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \
--hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254
# via
# docker
# junit-xml
# python-dateutil
# serverlessrepo
Expand Down Expand Up @@ -742,6 +745,7 @@ urllib3==1.26.15 \
--hash=sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42
# via
# botocore
# docker
# requests
watchdog==2.1.2 \
--hash=sha256:0237db4d9024859bea27d0efb59fe75eef290833fd988b8ead7a879b0308c2db \
Expand Down
2 changes: 1 addition & 1 deletion samcli/cli/global_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ def get_value(
self,
config_entry: ConfigEntry,
default: Optional[T] = None,
value_type: Type[T] = T,
value_type: Type[T] = T, # type: ignore
is_flag: bool = False,
reload_config: bool = False,
) -> Optional[T]:
Expand Down
13 changes: 2 additions & 11 deletions samcli/cli/hidden_imports.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,22 @@
Keeps list of hidden/dynamic imports that is being used in SAM CLI, so that pyinstaller can include these packages
"""
import pkgutil
from typing import cast
from types import ModuleType

from typing_extensions import Protocol


class HasPathAndName(Protocol):
__path__: str
__name__: str


def walk_modules(module: HasPathAndName, visited: set) -> None:
def walk_modules(module: ModuleType, visited: set) -> None:
"""Recursively find all modules from a parent module"""
for pkg in pkgutil.walk_packages(module.__path__, module.__name__ + "."):
if pkg.name in visited:
continue
visited.add(pkg.name)
if pkg.ispkg:
submodule = __import__(pkg.name)
submodule = cast(HasPathAndName, submodule)
walk_modules(submodule, visited)


samcli_modules = set(["samcli"])
samcli = __import__("samcli")
samcli = cast(HasPathAndName, samcli)
walk_modules(samcli, samcli_modules)

SAM_CLI_HIDDEN_IMPORTS = list(samcli_modules) + [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ def _link_using_terraform_config(self, source_tf_resource: TFResource, cfn_resou
return

for cfn_resource in cfn_resources:
self._resource_pair.cfn_resource_update_call_back_function(cfn_resource, dest_resources) # type: ignore
self._resource_pair.cfn_resource_update_call_back_function(cfn_resource, dest_resources)

def _link_using_linking_fields(self, cfn_resource: Dict) -> None:
"""
Expand Down Expand Up @@ -298,7 +298,7 @@ def _link_using_linking_fields(self, cfn_resource: Dict) -> None:
return

LOG.debug("The value of the source resource linking field after mapping %s", dest_resources)
self._resource_pair.cfn_resource_update_call_back_function(cfn_resource, dest_resources) # type: ignore
self._resource_pair.cfn_resource_update_call_back_function(cfn_resource, dest_resources)

def _process_resolved_resources(
self,
Expand Down
2 changes: 1 addition & 1 deletion samcli/hook_packages/terraform/lib/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ def _calculate_configuration_attribute_value_hash(
else:
sorted_references_list = sorted(
configuration_attribute_value,
key=lambda x: x.value if isinstance(x, ConstantValue) else f"{x.module_address}.{x.value}", # type: ignore
key=lambda x: x.value if isinstance(x, ConstantValue) else f"{x.module_address}.{x.value}",
)
for ref in sorted_references_list:
md5.update(
Expand Down
2 changes: 1 addition & 1 deletion samcli/lib/build/workflows.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from typing import List

CONFIG = namedtuple(
"Capability",
"CONFIG",
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this right?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I could ignore them but mypy complains. This is the "name-match" error mypy throws.

[
"language",
"dependency_manager",
Expand Down
2 changes: 1 addition & 1 deletion samcli/lib/deploy/deployer.py
Original file line number Diff line number Diff line change
Expand Up @@ -624,7 +624,7 @@ def sync(
msg = ""

if exists:
kwargs["DisableRollback"] = disable_rollback
kwargs["DisableRollback"] = disable_rollback # type: ignore

result = self.update_stack(**kwargs)
self.wait_for_execute(stack_name, "UPDATE", disable_rollback, on_failure=on_failure)
Expand Down
2 changes: 1 addition & 1 deletion samcli/lib/hook/hook_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from pathlib import Path
from typing import Dict, NamedTuple, Optional, cast

import jsonschema # type: ignore
import jsonschema

from .exceptions import InvalidHookPackageConfigException

Expand Down
6 changes: 3 additions & 3 deletions samcli/lib/iac/cdk/cdk_iac.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ class CdkIacImplementation(IaCPluginInterface):
the CDK project type
"""

def read_project(self, lookup_paths: List[LookupPath]) -> SamCliProject:
def read_project(self, lookup_paths: List[LookupPath]) -> SamCliProject: # type: ignore
pass

def write_project(self, project: SamCliProject, build_dir: str) -> bool:
def write_project(self, project: SamCliProject, build_dir: str) -> bool: # type: ignore
pass

def update_packaged_locations(self, stack: Stack) -> bool:
def update_packaged_locations(self, stack: Stack) -> bool: # type: ignore
pass

@staticmethod
Expand Down
5 changes: 2 additions & 3 deletions samcli/lib/iac/cfn/cfn_iac.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
"""
Provide a CFN implementation of IaCPluginInterface
"""

import logging
import os
from typing import List, Optional
Expand Down Expand Up @@ -72,11 +71,11 @@ def read_project(self, lookup_paths: List[LookupPath]) -> SamCliProject:
stack = self._build_stack(self._template_file)
return SamCliProject([stack])

def write_project(self, project: SamCliProject, build_dir: str) -> bool:
def write_project(self, project: SamCliProject, build_dir: str) -> bool: # type: ignore
# TODO
pass

def update_packaged_locations(self, stack: Stack) -> bool:
def update_packaged_locations(self, stack: Stack) -> bool: # type: ignore
# TODO
pass

Expand Down
4 changes: 2 additions & 2 deletions samcli/lib/pipeline/bootstrap/stage.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import click
import requests
from botocore.exceptions import ClientError
from OpenSSL import SSL, crypto # type: ignore
from OpenSSL import SSL, crypto

from samcli.commands.pipeline.bootstrap.guided_context import BITBUCKET, GITHUB_ACTIONS, GITLAB, OPEN_ID_CONNECT
from samcli.commands.pipeline.bootstrap.pipeline_oidc_provider import PipelineOidcProvider
Expand Down Expand Up @@ -222,7 +222,7 @@ def generate_thumbprint(oidc_provider_url: Optional[str]) -> Optional[str]:
# If we attempt to get the cert chain without exchanging some traffic it will be empty
c.sendall(str.encode("HEAD / HTTP/1.0\n\n"))
peerCertChain = c.get_peer_cert_chain()
cert = peerCertChain[-1]
cert = peerCertChain[-1] # type: ignore

# Dump the certificate in DER/ASN1 format so that its SHA1 hash can be computed
dumped_cert = crypto.dump_certificate(crypto.FILETYPE_ASN1, cert)
Expand Down
6 changes: 4 additions & 2 deletions samcli/lib/providers/provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -463,9 +463,11 @@ def binary_media_types(self) -> List[str]:
return list(self.binary_media_types_set)


_CorsTuple = namedtuple("Cors", ["allow_origin", "allow_methods", "allow_headers", "allow_credentials", "max_age"])
_CorsTuple = namedtuple(
"_CorsTuple", ["allow_origin", "allow_methods", "allow_headers", "allow_credentials", "max_age"]
)

_CorsTuple.__new__.__defaults__ = ( # type: ignore
_CorsTuple.__new__.__defaults__ = (
None, # Allow Origin defaults to None
None, # Allow Methods is optional and defaults to empty
None, # Allow Headers is optional and defaults to empty
Expand Down
2 changes: 1 addition & 1 deletion samcli/lib/utils/lock_distributor.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ def __init__(
self._manager = manager
self._dict_lock = self._create_new_lock()
self._locks = (
self._manager.dict()
self._manager.dict() # type: ignore
if self._lock_type == LockDistributorType.PROCESS and self._manager is not None
else dict()
)
Expand Down
3 changes: 0 additions & 3 deletions samcli/local/docker/container.py
Original file line number Diff line number Diff line change
Expand Up @@ -206,9 +206,6 @@ def create(self):
# Ex: 128m => 128MB
kwargs["mem_limit"] = "{}m".format(self._memory_limit_mb)

if self.network_id == "host":
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removing this as this never worked anyways.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we add a help text or note. along with a pinned issue for this?

kwargs["network_mode"] = self.network_id

real_container = self.docker_client.containers.create(self._image, **kwargs)
self.id = real_container.id

Expand Down
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ def read_version():
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.11",
"Topic :: Internet",
"Topic :: Software Development :: Build Tools",
"Topic :: Utilities",
Expand Down
Loading