<86>Jul 25 08:51:47 userdel[1164114]: delete user 'rooter' <86>Jul 25 08:51:47 userdel[1164114]: removed group 'rooter' owned by 'rooter' <86>Jul 25 08:51:47 userdel[1164114]: removed shadow group 'rooter' owned by 'rooter' <86>Jul 25 08:51:47 groupadd[1164152]: group added to /etc/group: name=rooter, GID=1820 <86>Jul 25 08:51:47 groupadd[1164152]: group added to /etc/gshadow: name=rooter <86>Jul 25 08:51:47 groupadd[1164152]: new group: name=rooter, GID=1820 <86>Jul 25 08:51:47 useradd[1164176]: new user: name=rooter, UID=1820, GID=1820, home=/root, shell=/bin/bash, from=none <86>Jul 25 08:51:47 userdel[1164215]: delete user 'builder' <86>Jul 25 08:51:47 userdel[1164215]: removed group 'builder' owned by 'builder' <86>Jul 25 08:51:47 userdel[1164215]: removed shadow group 'builder' owned by 'builder' <86>Jul 25 08:51:47 groupadd[1164240]: group added to /etc/group: name=builder, GID=1821 <86>Jul 25 08:51:47 groupadd[1164240]: group added to /etc/gshadow: name=builder <86>Jul 25 08:51:47 groupadd[1164240]: new group: name=builder, GID=1821 <86>Jul 25 08:51:47 useradd[1164255]: new user: name=builder, UID=1821, GID=1821, home=/usr/src, shell=/bin/bash, from=none <13>Jul 25 08:51:53 rpmi: libgdbm6-1.26-alt1 sisyphus+418729.200.2.1 1779276077 installed <13>Jul 25 08:51:53 rpmi: libgdbm_compat4-1.26-alt1 sisyphus+418729.200.2.1 1779276077 installed <13>Jul 25 08:51:54 rpmi: libsqlite3-3.50.4-alt1 sisyphus+391668.100.1.1 1754321138 installed <13>Jul 25 08:51:54 rpmi: libmpdec3-2.5.1-alt3 sisyphus+314490.500.5.1 1675432033 installed <13>Jul 25 08:51:54 rpmi: libexpat-2.7.4-alt1 sisyphus+407132.100.1.1 1770196717 installed <13>Jul 25 08:51:54 rpmi: openssl-config-3.5.0-alt1 sisyphus+399237.100.1.1 1762346864 installed <13>Jul 25 08:51:54 rpmi: libp11-kit-1:0.26.2-alt3.g0eedd4d sisyphus+424637.100.1.1 1783530782 installed <13>Jul 25 08:51:54 rpmi: libtasn1-4.21.0-alt2 sisyphus+420751.100.1.1 1781163748 installed <13>Jul 25 08:51:54 rpmi: rpm-macros-alternatives-0.5.3-alt1 sisyphus+371878.100.1.1 1737988822 installed <13>Jul 25 08:51:54 rpmi: alternatives-0.5.3-alt1 sisyphus+371878.100.1.1 1737988822 installed <13>Jul 25 08:51:54 rpmi: ca-certificates-2026.04.22-alt1 sisyphus+415942.100.6.1 1777316293 installed <13>Jul 25 08:51:54 rpmi: ca-trust-0.2.0-alt1 sisyphus+344843.100.1.1 1712743326 installed <13>Jul 25 08:51:54 rpmi: p11-kit-trust-1:0.26.2-alt3.g0eedd4d sisyphus+424637.100.1.1 1783530782 installed <13>Jul 25 08:51:54 rpmi: libcrypto3-3.5.7-alt1 sisyphus+425332.100.3.1 1784733668 installed <13>Jul 25 08:51:54 rpmi: libssl3-3.5.7-alt1 sisyphus+425332.100.3.1 1784733668 installed <13>Jul 25 08:51:54 rpmi: python3-modules-sqlite3-3.14.6-alt1 sisyphus+423624.100.33.1 1784227742 installed <13>Jul 25 08:51:54 rpmi: python3-3.14.6-alt1 sisyphus+423624.100.33.1 1784227742 installed <13>Jul 25 08:51:55 rpmi: python3-base-3.14.6-alt1 sisyphus+423624.100.33.1 1784227742 installed <13>Jul 25 08:51:55 rpmi: python3-module-py3dephell-0.3.1-alt1 sisyphus+365261.200.1.1 1734463433 installed <13>Jul 25 08:51:55 rpmi: tests-for-installed-python3-pkgs-0.1.29-alt1 sisyphus+398029.2500.12.1 1762716341 installed <13>Jul 25 08:51:55 rpmi: rpm-build-python3-0.1.29-alt1 sisyphus+398029.2500.12.1 1762716341 installed <13>Jul 25 08:51:59 rpmi: python3-module-packaging-26.2-alt1 sisyphus+416502.100.2.1 1777385153 installed <13>Jul 25 08:51:59 rpmi: python3-module-more-itertools-11.1.0-alt1 sisyphus+419223.100.2.1 1779891386 installed <13>Jul 25 08:51:59 rpmi: python3-module-jaraco.functools-4.6.0-alt1 sisyphus+425293.100.1.2 1784631981 installed <13>Jul 25 08:51:59 rpmi: python3-module-xmod-1.8.1-alt1 sisyphus+354658.1700.13.1 1723248064 installed <13>Jul 25 08:51:59 rpmi: python3-module-urllib3-2:2.7.0-alt2 sisyphus+423624.121100.34.1 1784353520 installed <13>Jul 25 08:51:59 rpmi: python3-module-six-1.17.0-alt1.1 sisyphus+373470.100.1.1 1738920023 installed <13>Jul 25 08:52:00 rpmi: python3-module-Pygments-2.20.0-alt1 sisyphus+413985.100.1.1 1775208360 installed <13>Jul 25 08:52:00 rpmi: python3-module-dateutil-2.9.0.post0-alt1 sisyphus+378451.100.1.1 1742313746 installed <13>Jul 25 08:52:00 rpmi: python3-module-runs-1.2.2-alt1 sisyphus+354658.2200.13.1 1723248163 installed <13>Jul 25 08:52:00 rpmi: python3-module-editor-1.6.6-alt1 sisyphus+354658.2300.20.1 1723501752 installed <13>Jul 25 08:52:00 rpmi: python3-module-wheel-0.47.0-alt1 sisyphus+416101.100.1.1 1776938753 installed <13>Jul 25 08:52:00 rpmi: python3-module-pluggy-1.6.0-alt1.1 sisyphus+413474.300.2.1 1774829688 installed <13>Jul 25 08:52:00 rpmi: python3-module-platformdirs-4.10.0-alt1 sisyphus+419460.100.1.1 1779982322 installed <13>Jul 25 08:52:00 rpmi: python3-module-shellingham-1.5.4-alt1 sisyphus+332574.100.1.1 1698135363 installed <13>Jul 25 08:52:00 rpmi: python3-module-typing_extensions-4.15.0-alt2 sisyphus+399838.100.1.1 1762946472 installed <13>Jul 25 08:52:00 rpmi: python3-module-uc-micro-py-2.0.0-alt1 sisyphus+411114.100.1.1 1773327270 installed <13>Jul 25 08:52:00 rpmi: python3-module-linkify-it-py-2.1.0-alt1.1 sisyphus+413476.100.1.1 1774817789 installed <13>Jul 25 08:52:00 rpmi: python3-module-mdurl-0.1.2-alt1 sisyphus+318894.1000.3.1 1682420700 installed <13>Jul 25 08:52:00 rpmi: python3-module-markdown-it-4.0.0-alt1 sisyphus+394327.100.1.1 1757330325 installed <13>Jul 25 08:52:00 rpmi: python3-module-rich-15.0.0-alt1 sisyphus+415092.100.2.1 1776162196 installed <13>Jul 25 08:52:00 rpmi: python3-module-jaraco.context-6.1.2-alt1 sisyphus+412384.100.1.1 1774283927 installed <13>Jul 25 08:52:00 rpmi: python3-module-readchar-4.1.0-alt2 sisyphus+402615.2700.16.1 1772180110 installed <13>Jul 25 08:52:00 rpmi: python3-module-iniconfig-2.3.0-alt1 sisyphus+397749.100.2.1 1761040670 installed <13>Jul 25 08:52:00 rpmi: python3-module-sortedcontainers-2.4.0-alt1 sisyphus+272042.100.1.1 1621262424 installed <13>Jul 25 08:52:00 rpmi: python3-module-idna-3.18-alt1 sisyphus+420750.100.1.1 1781166339 installed <13>Jul 25 08:52:00 rpmi: python3-module-charset-normalizer-3.4.9-alt1 sisyphus+424623.100.1.1 1783521675 installed <13>Jul 25 08:52:00 rpmi: python3-module-requests-2.34.2-alt1 sisyphus+418161.200.3.1 1779090568 installed <13>Jul 25 08:52:00 rpmi: python3-module-jmespath-1.1.0-alt1.1 sisyphus+406642.40.2.1 1769696012 installed <13>Jul 25 08:52:00 rpmi: python3-module-wcwidth-0.8.2-alt1 sisyphus+423417.100.1.1 1782812581 installed <13>Jul 25 08:52:00 rpmi: python3-module-jinxed-2.1.0-alt1 sisyphus+424360.100.1.1 1783334915 installed <13>Jul 25 08:52:00 rpmi: python3-modules-curses-3.14.6-alt1 sisyphus+423624.100.33.1 1784227742 installed <13>Jul 25 08:52:00 rpmi: python3-module-blessed-1.47.0-alt1 sisyphus+424772.100.1.1 1783674878 installed <13>Jul 25 08:52:00 rpmi: python3-module-annotated_doc-0.0.4-alt1 sisyphus+401429.100.1.1 1764433640 installed <13>Jul 25 08:52:00 rpmi: python3-module-typer-0.27.0-alt1 sisyphus+426477.440.2.1 1784895769 installed <13>Jul 25 08:52:00 rpmi: python3-module-typer-slim-0.27.0-alt1 sisyphus+426477.440.2.1 1784895769 installed <13>Jul 25 08:52:00 rpmi: python3-module-jaraco.text-4.2.0-alt1 sisyphus+408107.100.3.1 1771429608 installed <13>Jul 25 08:52:00 rpmi: python3-module-pkg-resources-1:80.10.2-alt2.1 sisyphus+413485.1000.2.3 1774838477 installed <13>Jul 25 08:52:00 rpmi: libyaml2-6.0.2-alt1 sisyphus+393301.100.1.1 1756210811 installed <13>Jul 25 08:52:00 rpmi: libpython3-3.14.6-alt1 sisyphus+423624.100.33.1 1784227742 installed <13>Jul 25 08:52:02 rpmi: python3-dev-3.14.6-alt1 sisyphus+423624.100.33.1 1784227742 installed <13>Jul 25 08:52:02 rpmi: python3-module-setuptools-1:83.0.0-alt1 sisyphus+424341.100.2.1 1783427124 installed <13>Jul 25 08:52:02 rpmi: python3-module-yaml-6.0.3-alt1 sisyphus+423624.2274.33.1 1784229099 installed <13>Jul 25 08:52:02 rpmi: python3-module-inquirer-3.3.0-alt1 sisyphus+354658.2400.20.1 1723501784 installed <13>Jul 25 08:52:04 rpmi: python3-module-botocore-1.42.94-alt1 sisyphus+416114.100.1.1 1776943245 installed <13>Jul 25 08:52:04 rpmi: python3-module-hypothesis-6.160.0-alt1 sisyphus+426362.140.2.1 1784893295 installed <13>Jul 25 08:52:04 rpmi: python3-module-pytest-9.0.3-alt1 sisyphus+414567.100.1.1 1775647126 installed <13>Jul 25 08:52:04 rpmi: python3-module-websockets-16.1-alt1 sisyphus+423624.11540.33.1 1784238017 installed <13>Jul 25 08:52:04 rpmi: python3-module-pip-26.1.2-alt1 sisyphus+419707.100.2.1 1780313939 installed <13>Jul 25 08:52:04 rpmi: python3-module-click-8.4.2-alt1 sisyphus+422757.100.2.1 1782720497 installed Building target platforms: i586 Building for target i586 Wrote: /usr/src/in/nosrpm/python3-module-chalice-1.32.0-alt1.nosrc.rpm (w1.gzdio) <13>Jul 25 08:52:06 rpmi: python3-module-pyproject-installer-0.6.0-alt1 sisyphus+424779.100.1.1 1783678406 installed Installing python3-module-chalice-1.32.0-alt1.src.rpm Building target platforms: i586 Building for target i586 Executing(%prep): /bin/sh -e /usr/src/tmp/rpmb-tmp.3H5EXg + umask 022 + /bin/mkdir -p /usr/src/RPM/BUILD + cd /usr/src/RPM/BUILD + cd /usr/src/RPM/BUILD + rm -rf chalice-1.32.0 + echo 'Source #0 (chalice-1.32.0.tar):' Source #0 (chalice-1.32.0.tar): + /bin/tar -xf /usr/src/RPM/SOURCES/chalice-1.32.0.tar + cd chalice-1.32.0 + /bin/chmod -c -Rf u+rwX,go-w . + exit 0 Executing(%build): /bin/sh -e /usr/src/tmp/rpmb-tmp.vIvchw + umask 022 + /bin/mkdir -p /usr/src/RPM/BUILD + cd /usr/src/RPM/BUILD + cd chalice-1.32.0 + export 'CFLAGS=-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -march=i586 -mtune=generic' + CFLAGS='-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -march=i586 -mtune=generic' + export 'CXXFLAGS=-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -march=i586 -mtune=generic' + CXXFLAGS='-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -march=i586 -mtune=generic' + export 'FFLAGS=-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -march=i586 -mtune=generic' + FFLAGS='-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -march=i586 -mtune=generic' + /usr/bin/python3 -m pyproject_installer -v build INFO : pyproject_installer.build_cmd._build : Building wheel INFO : pyproject_installer.build_cmd._build : Source tree: /usr/src/RPM/BUILD/chalice-1.32.0 INFO : pyproject_installer.build_cmd._build : Output dir: /usr/src/RPM/BUILD/chalice-1.32.0/dist DEBUG : pyproject_installer.lib.build_backend : Validating source path DEBUG : pyproject_installer.lib.build_backend : Checking for PEP517 spec INFO : pyproject_installer.lib.build_backend : pyproject.toml was not found, using defaults INFO : backend_caller.py : Calling hook build_wheel in subprocess INFO : backend_caller.py : Build backend: setuptools.build_meta:__legacy__ INFO : backend_caller.py : Hook args: ['/usr/src/RPM/BUILD/chalice-1.32.0/dist'] INFO : backend_caller.py : Hook kwargs: {'config_settings': None} /usr/lib/python3/site-packages/setuptools/dist.py:765: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: Apache Software License See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! self._finalize_license_expression() INFO : root : running bdist_wheel INFO : root : running build INFO : root : running build_py INFO : root : creating build/lib/chalice INFO : root : copying chalice/utils.py -> build/lib/chalice INFO : root : copying chalice/test.py -> build/lib/chalice INFO : root : copying chalice/policy.py -> build/lib/chalice INFO : root : copying chalice/pipeline.py -> build/lib/chalice INFO : root : copying chalice/package.py -> build/lib/chalice INFO : root : copying chalice/logs.py -> build/lib/chalice INFO : root : copying chalice/local.py -> build/lib/chalice INFO : root : copying chalice/invoke.py -> build/lib/chalice INFO : root : copying chalice/constants.py -> build/lib/chalice INFO : root : copying chalice/config.py -> build/lib/chalice INFO : root : copying chalice/compat.py -> build/lib/chalice INFO : root : copying chalice/awsclient.py -> build/lib/chalice INFO : root : copying chalice/app.py -> build/lib/chalice INFO : root : copying chalice/analyzer.py -> build/lib/chalice INFO : root : copying chalice/__init__.py -> build/lib/chalice INFO : root : creating build/lib/chalice/vendored INFO : root : copying chalice/vendored/__init__.py -> build/lib/chalice/vendored INFO : root : creating build/lib/chalice/deploy INFO : root : copying chalice/deploy/validate.py -> build/lib/chalice/deploy INFO : root : copying chalice/deploy/sweeper.py -> build/lib/chalice/deploy INFO : root : copying chalice/deploy/swagger.py -> build/lib/chalice/deploy INFO : root : copying chalice/deploy/planner.py -> build/lib/chalice/deploy INFO : root : copying chalice/deploy/packager.py -> build/lib/chalice/deploy INFO : root : copying chalice/deploy/models.py -> build/lib/chalice/deploy INFO : root : copying chalice/deploy/executor.py -> build/lib/chalice/deploy INFO : root : copying chalice/deploy/deployer.py -> build/lib/chalice/deploy INFO : root : copying chalice/deploy/appgraph.py -> build/lib/chalice/deploy INFO : root : copying chalice/deploy/__init__.py -> build/lib/chalice/deploy INFO : root : creating build/lib/chalice/cli INFO : root : copying chalice/cli/reloader.py -> build/lib/chalice/cli INFO : root : copying chalice/cli/newproj.py -> build/lib/chalice/cli INFO : root : copying chalice/cli/factory.py -> build/lib/chalice/cli INFO : root : copying chalice/cli/__init__.py -> build/lib/chalice/cli INFO : root : creating build/lib/chalice/cdk INFO : root : copying chalice/cdk/construct.py -> build/lib/chalice/cdk INFO : root : copying chalice/cdk/__init__.py -> build/lib/chalice/cdk INFO : root : creating build/lib/chalice/api INFO : root : copying chalice/api/__init__.py -> build/lib/chalice/api INFO : root : creating build/lib/chalice/vendored/botocore INFO : root : copying chalice/vendored/botocore/regions.py -> build/lib/chalice/vendored/botocore INFO : root : copying chalice/vendored/botocore/__init__.py -> build/lib/chalice/vendored/botocore INFO : root : creating build/lib/chalice/cli/filewatch INFO : root : copying chalice/cli/filewatch/stat.py -> build/lib/chalice/cli/filewatch INFO : root : copying chalice/cli/filewatch/eventbased.py -> build/lib/chalice/cli/filewatch INFO : root : copying chalice/cli/filewatch/__init__.py -> build/lib/chalice/cli/filewatch INFO : root : running egg_info INFO : root : creating chalice.egg-info INFO : root : writing chalice.egg-info/PKG-INFO INFO : root : writing dependency_links to chalice.egg-info/dependency_links.txt INFO : root : writing entry points to chalice.egg-info/entry_points.txt INFO : root : writing requirements to chalice.egg-info/requires.txt INFO : root : writing top-level names to chalice.egg-info/top_level.txt INFO : root : writing manifest file 'chalice.egg-info/SOURCES.txt' INFO : root : reading manifest file 'chalice.egg-info/SOURCES.txt' INFO : root : reading manifest template 'MANIFEST.in' WARNING : root : warning: no previously-included files matching '__pycache__' found under directory '*' WARNING : root : warning: no previously-included files matching '*.py[co]' found under directory '*' INFO : root : adding license file 'LICENSE' INFO : root : adding license file 'NOTICE' INFO : root : writing manifest file 'chalice.egg-info/SOURCES.txt' /usr/lib/python3/site-packages/setuptools/command/build_py.py:215: _Warning: Package 'chalice.templates' is absent from the `packages` configuration. !! ******************************************************************************** ############################ # Package would be ignored # ############################ Python recognizes 'chalice.templates' as an importable package[^1], but it is absent from setuptools' `packages` configuration. This leads to an ambiguous overall configuration. If you want to distribute this package, please make sure that 'chalice.templates' is explicitly added to the `packages` configuration field. Alternatively, you can also rely on setuptools' discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" on setuptools documentation page: - https://setuptools.pypa.io/en/latest/userguide/package_discovery.html If you don't want 'chalice.templates' to be distributed and are already explicitly excluding 'chalice.templates' via `find_namespace_packages(...)/find_namespace` or `find_packages(...)/find`, you can try to use `exclude_package_data`, or `include-package-data=False` in combination with a more fine grained `package-data` configuration. You can read more about "package data files" on setuptools documentation page: - https://setuptools.pypa.io/en/latest/userguide/datafiles.html [^1]: For Python, any directory (with suitable naming) can be imported, even if it does not contain any `.py` files. On the other hand, currently there is no concept of package data directory, all directories are treated like packages. ******************************************************************************** !! check.warn(importable) INFO : root : copying chalice/policies-extra.json -> build/lib/chalice INFO : root : copying chalice/policies.json -> build/lib/chalice INFO : root : copying chalice/py.typed -> build/lib/chalice INFO : root : creating build/lib/chalice/templates/0000-rest-api INFO : root : copying chalice/templates/0000-rest-api/.gitignore -> build/lib/chalice/templates/0000-rest-api INFO : root : copying chalice/templates/0000-rest-api/app.py -> build/lib/chalice/templates/0000-rest-api INFO : root : copying chalice/templates/0000-rest-api/metadata.json -> build/lib/chalice/templates/0000-rest-api INFO : root : copying chalice/templates/0000-rest-api/requirements-dev.txt -> build/lib/chalice/templates/0000-rest-api INFO : root : copying chalice/templates/0000-rest-api/requirements.txt -> build/lib/chalice/templates/0000-rest-api INFO : root : creating build/lib/chalice/templates/0000-rest-api/.chalice INFO : root : copying chalice/templates/0000-rest-api/.chalice/config.json -> build/lib/chalice/templates/0000-rest-api/.chalice INFO : root : creating build/lib/chalice/templates/0000-rest-api/chalicelib INFO : root : copying chalice/templates/0000-rest-api/chalicelib/__init__.py -> build/lib/chalice/templates/0000-rest-api/chalicelib INFO : root : creating build/lib/chalice/templates/0000-rest-api/tests INFO : root : copying chalice/templates/0000-rest-api/tests/__init__.py -> build/lib/chalice/templates/0000-rest-api/tests INFO : root : copying chalice/templates/0000-rest-api/tests/test_app.py -> build/lib/chalice/templates/0000-rest-api/tests INFO : root : creating build/lib/chalice/templates/0002-s3-event-handler INFO : root : copying chalice/templates/0002-s3-event-handler/.gitignore -> build/lib/chalice/templates/0002-s3-event-handler INFO : root : copying chalice/templates/0002-s3-event-handler/app.py -> build/lib/chalice/templates/0002-s3-event-handler INFO : root : copying chalice/templates/0002-s3-event-handler/metadata.json -> build/lib/chalice/templates/0002-s3-event-handler INFO : root : copying chalice/templates/0002-s3-event-handler/requirements-dev.txt -> build/lib/chalice/templates/0002-s3-event-handler INFO : root : copying chalice/templates/0002-s3-event-handler/requirements.txt -> build/lib/chalice/templates/0002-s3-event-handler INFO : root : creating build/lib/chalice/templates/0002-s3-event-handler/.chalice INFO : root : copying chalice/templates/0002-s3-event-handler/.chalice/config.json -> build/lib/chalice/templates/0002-s3-event-handler/.chalice INFO : root : creating build/lib/chalice/templates/0002-s3-event-handler/chalicelib INFO : root : copying chalice/templates/0002-s3-event-handler/chalicelib/__init__.py -> build/lib/chalice/templates/0002-s3-event-handler/chalicelib INFO : root : creating build/lib/chalice/templates/0002-s3-event-handler/tests INFO : root : copying chalice/templates/0002-s3-event-handler/tests/__init__.py -> build/lib/chalice/templates/0002-s3-event-handler/tests INFO : root : copying chalice/templates/0002-s3-event-handler/tests/test_app.py -> build/lib/chalice/templates/0002-s3-event-handler/tests INFO : root : creating build/lib/chalice/templates/0007-lambda-only INFO : root : copying chalice/templates/0007-lambda-only/.gitignore -> build/lib/chalice/templates/0007-lambda-only INFO : root : copying chalice/templates/0007-lambda-only/app.py -> build/lib/chalice/templates/0007-lambda-only INFO : root : copying chalice/templates/0007-lambda-only/metadata.json -> build/lib/chalice/templates/0007-lambda-only INFO : root : copying chalice/templates/0007-lambda-only/requirements-dev.txt -> build/lib/chalice/templates/0007-lambda-only INFO : root : copying chalice/templates/0007-lambda-only/requirements.txt -> build/lib/chalice/templates/0007-lambda-only INFO : root : creating build/lib/chalice/templates/0007-lambda-only/.chalice INFO : root : copying chalice/templates/0007-lambda-only/.chalice/config.json -> build/lib/chalice/templates/0007-lambda-only/.chalice INFO : root : creating build/lib/chalice/templates/0007-lambda-only/chalicelib INFO : root : copying chalice/templates/0007-lambda-only/chalicelib/__init__.py -> build/lib/chalice/templates/0007-lambda-only/chalicelib INFO : root : creating build/lib/chalice/templates/0007-lambda-only/tests INFO : root : copying chalice/templates/0007-lambda-only/tests/__init__.py -> build/lib/chalice/templates/0007-lambda-only/tests INFO : root : copying chalice/templates/0007-lambda-only/tests/test_app.py -> build/lib/chalice/templates/0007-lambda-only/tests INFO : root : creating build/lib/chalice/templates/0009-legacy INFO : root : copying chalice/templates/0009-legacy/.gitignore -> build/lib/chalice/templates/0009-legacy INFO : root : copying chalice/templates/0009-legacy/app.py -> build/lib/chalice/templates/0009-legacy INFO : root : copying chalice/templates/0009-legacy/metadata.json -> build/lib/chalice/templates/0009-legacy INFO : root : copying chalice/templates/0009-legacy/requirements.txt -> build/lib/chalice/templates/0009-legacy INFO : root : creating build/lib/chalice/templates/0009-legacy/.chalice INFO : root : copying chalice/templates/0009-legacy/.chalice/config.json -> build/lib/chalice/templates/0009-legacy/.chalice INFO : root : creating build/lib/chalice/templates/6001-cdk-ddb INFO : root : copying chalice/templates/6001-cdk-ddb/README.rst -> build/lib/chalice/templates/6001-cdk-ddb INFO : root : copying chalice/templates/6001-cdk-ddb/metadata.json -> build/lib/chalice/templates/6001-cdk-ddb INFO : root : copying chalice/templates/6001-cdk-ddb/requirements.txt -> build/lib/chalice/templates/6001-cdk-ddb INFO : root : creating build/lib/chalice/templates/6001-cdk-ddb/infrastructure INFO : root : copying chalice/templates/6001-cdk-ddb/infrastructure/app.py -> build/lib/chalice/templates/6001-cdk-ddb/infrastructure INFO : root : copying chalice/templates/6001-cdk-ddb/infrastructure/cdk.json -> build/lib/chalice/templates/6001-cdk-ddb/infrastructure INFO : root : copying chalice/templates/6001-cdk-ddb/infrastructure/requirements.txt -> build/lib/chalice/templates/6001-cdk-ddb/infrastructure INFO : root : creating build/lib/chalice/templates/6001-cdk-ddb/infrastructure/stacks INFO : root : copying chalice/templates/6001-cdk-ddb/infrastructure/stacks/__init__.py -> build/lib/chalice/templates/6001-cdk-ddb/infrastructure/stacks INFO : root : copying chalice/templates/6001-cdk-ddb/infrastructure/stacks/chaliceapp.py -> build/lib/chalice/templates/6001-cdk-ddb/infrastructure/stacks INFO : root : creating build/lib/chalice/templates/6001-cdk-ddb/runtime INFO : root : copying chalice/templates/6001-cdk-ddb/runtime/.gitignore -> build/lib/chalice/templates/6001-cdk-ddb/runtime INFO : root : copying chalice/templates/6001-cdk-ddb/runtime/app.py -> build/lib/chalice/templates/6001-cdk-ddb/runtime INFO : root : copying chalice/templates/6001-cdk-ddb/runtime/requirements.txt -> build/lib/chalice/templates/6001-cdk-ddb/runtime INFO : root : creating build/lib/chalice/templates/6001-cdk-ddb/runtime/.chalice INFO : root : copying chalice/templates/6001-cdk-ddb/runtime/.chalice/config.json -> build/lib/chalice/templates/6001-cdk-ddb/runtime/.chalice INFO : root : installing to build/bdist.linux-i686/wheel INFO : root : running install INFO : root : running install_lib INFO : root : creating build/bdist.linux-i686/wheel INFO : root : creating build/bdist.linux-i686/wheel/chalice INFO : root : creating build/bdist.linux-i686/wheel/chalice/templates INFO : root : creating build/bdist.linux-i686/wheel/chalice/templates/6001-cdk-ddb INFO : root : creating build/bdist.linux-i686/wheel/chalice/templates/6001-cdk-ddb/runtime INFO : root : creating build/bdist.linux-i686/wheel/chalice/templates/6001-cdk-ddb/runtime/.chalice INFO : root : copying build/lib/chalice/templates/6001-cdk-ddb/runtime/.chalice/config.json -> build/bdist.linux-i686/wheel/./chalice/templates/6001-cdk-ddb/runtime/.chalice INFO : root : copying build/lib/chalice/templates/6001-cdk-ddb/runtime/requirements.txt -> build/bdist.linux-i686/wheel/./chalice/templates/6001-cdk-ddb/runtime INFO : root : copying build/lib/chalice/templates/6001-cdk-ddb/runtime/app.py -> build/bdist.linux-i686/wheel/./chalice/templates/6001-cdk-ddb/runtime INFO : root : copying build/lib/chalice/templates/6001-cdk-ddb/runtime/.gitignore -> build/bdist.linux-i686/wheel/./chalice/templates/6001-cdk-ddb/runtime INFO : root : creating build/bdist.linux-i686/wheel/chalice/templates/6001-cdk-ddb/infrastructure INFO : root : creating build/bdist.linux-i686/wheel/chalice/templates/6001-cdk-ddb/infrastructure/stacks INFO : root : copying build/lib/chalice/templates/6001-cdk-ddb/infrastructure/stacks/chaliceapp.py -> build/bdist.linux-i686/wheel/./chalice/templates/6001-cdk-ddb/infrastructure/stacks INFO : root : copying build/lib/chalice/templates/6001-cdk-ddb/infrastructure/stacks/__init__.py -> build/bdist.linux-i686/wheel/./chalice/templates/6001-cdk-ddb/infrastructure/stacks INFO : root : copying build/lib/chalice/templates/6001-cdk-ddb/infrastructure/requirements.txt -> build/bdist.linux-i686/wheel/./chalice/templates/6001-cdk-ddb/infrastructure INFO : root : copying build/lib/chalice/templates/6001-cdk-ddb/infrastructure/cdk.json -> build/bdist.linux-i686/wheel/./chalice/templates/6001-cdk-ddb/infrastructure INFO : root : copying build/lib/chalice/templates/6001-cdk-ddb/infrastructure/app.py -> build/bdist.linux-i686/wheel/./chalice/templates/6001-cdk-ddb/infrastructure INFO : root : copying build/lib/chalice/templates/6001-cdk-ddb/requirements.txt -> build/bdist.linux-i686/wheel/./chalice/templates/6001-cdk-ddb INFO : root : copying build/lib/chalice/templates/6001-cdk-ddb/metadata.json -> build/bdist.linux-i686/wheel/./chalice/templates/6001-cdk-ddb INFO : root : copying build/lib/chalice/templates/6001-cdk-ddb/README.rst -> build/bdist.linux-i686/wheel/./chalice/templates/6001-cdk-ddb INFO : root : creating build/bdist.linux-i686/wheel/chalice/templates/0009-legacy INFO : root : creating build/bdist.linux-i686/wheel/chalice/templates/0009-legacy/.chalice INFO : root : copying build/lib/chalice/templates/0009-legacy/.chalice/config.json -> build/bdist.linux-i686/wheel/./chalice/templates/0009-legacy/.chalice INFO : root : copying build/lib/chalice/templates/0009-legacy/requirements.txt -> build/bdist.linux-i686/wheel/./chalice/templates/0009-legacy INFO : root : copying build/lib/chalice/templates/0009-legacy/metadata.json -> build/bdist.linux-i686/wheel/./chalice/templates/0009-legacy INFO : root : copying build/lib/chalice/templates/0009-legacy/app.py -> build/bdist.linux-i686/wheel/./chalice/templates/0009-legacy INFO : root : copying build/lib/chalice/templates/0009-legacy/.gitignore -> build/bdist.linux-i686/wheel/./chalice/templates/0009-legacy INFO : root : creating build/bdist.linux-i686/wheel/chalice/templates/0007-lambda-only INFO : root : creating build/bdist.linux-i686/wheel/chalice/templates/0007-lambda-only/tests INFO : root : copying build/lib/chalice/templates/0007-lambda-only/tests/test_app.py -> build/bdist.linux-i686/wheel/./chalice/templates/0007-lambda-only/tests INFO : root : copying build/lib/chalice/templates/0007-lambda-only/tests/__init__.py -> build/bdist.linux-i686/wheel/./chalice/templates/0007-lambda-only/tests INFO : root : creating build/bdist.linux-i686/wheel/chalice/templates/0007-lambda-only/chalicelib INFO : root : copying build/lib/chalice/templates/0007-lambda-only/chalicelib/__init__.py -> build/bdist.linux-i686/wheel/./chalice/templates/0007-lambda-only/chalicelib INFO : root : creating build/bdist.linux-i686/wheel/chalice/templates/0007-lambda-only/.chalice INFO : root : copying build/lib/chalice/templates/0007-lambda-only/.chalice/config.json -> build/bdist.linux-i686/wheel/./chalice/templates/0007-lambda-only/.chalice INFO : root : copying build/lib/chalice/templates/0007-lambda-only/requirements.txt -> build/bdist.linux-i686/wheel/./chalice/templates/0007-lambda-only INFO : root : copying build/lib/chalice/templates/0007-lambda-only/requirements-dev.txt -> build/bdist.linux-i686/wheel/./chalice/templates/0007-lambda-only INFO : root : copying build/lib/chalice/templates/0007-lambda-only/metadata.json -> build/bdist.linux-i686/wheel/./chalice/templates/0007-lambda-only INFO : root : copying build/lib/chalice/templates/0007-lambda-only/app.py -> build/bdist.linux-i686/wheel/./chalice/templates/0007-lambda-only INFO : root : copying build/lib/chalice/templates/0007-lambda-only/.gitignore -> build/bdist.linux-i686/wheel/./chalice/templates/0007-lambda-only INFO : root : creating build/bdist.linux-i686/wheel/chalice/templates/0002-s3-event-handler INFO : root : creating build/bdist.linux-i686/wheel/chalice/templates/0002-s3-event-handler/tests INFO : root : copying build/lib/chalice/templates/0002-s3-event-handler/tests/test_app.py -> build/bdist.linux-i686/wheel/./chalice/templates/0002-s3-event-handler/tests INFO : root : copying build/lib/chalice/templates/0002-s3-event-handler/tests/__init__.py -> build/bdist.linux-i686/wheel/./chalice/templates/0002-s3-event-handler/tests INFO : root : creating build/bdist.linux-i686/wheel/chalice/templates/0002-s3-event-handler/chalicelib INFO : root : copying build/lib/chalice/templates/0002-s3-event-handler/chalicelib/__init__.py -> build/bdist.linux-i686/wheel/./chalice/templates/0002-s3-event-handler/chalicelib INFO : root : creating build/bdist.linux-i686/wheel/chalice/templates/0002-s3-event-handler/.chalice INFO : root : copying build/lib/chalice/templates/0002-s3-event-handler/.chalice/config.json -> build/bdist.linux-i686/wheel/./chalice/templates/0002-s3-event-handler/.chalice INFO : root : copying build/lib/chalice/templates/0002-s3-event-handler/requirements.txt -> build/bdist.linux-i686/wheel/./chalice/templates/0002-s3-event-handler INFO : root : copying build/lib/chalice/templates/0002-s3-event-handler/requirements-dev.txt -> build/bdist.linux-i686/wheel/./chalice/templates/0002-s3-event-handler INFO : root : copying build/lib/chalice/templates/0002-s3-event-handler/metadata.json -> build/bdist.linux-i686/wheel/./chalice/templates/0002-s3-event-handler INFO : root : copying build/lib/chalice/templates/0002-s3-event-handler/app.py -> build/bdist.linux-i686/wheel/./chalice/templates/0002-s3-event-handler INFO : root : copying build/lib/chalice/templates/0002-s3-event-handler/.gitignore -> build/bdist.linux-i686/wheel/./chalice/templates/0002-s3-event-handler INFO : root : creating build/bdist.linux-i686/wheel/chalice/templates/0000-rest-api INFO : root : creating build/bdist.linux-i686/wheel/chalice/templates/0000-rest-api/tests INFO : root : copying build/lib/chalice/templates/0000-rest-api/tests/test_app.py -> build/bdist.linux-i686/wheel/./chalice/templates/0000-rest-api/tests INFO : root : copying build/lib/chalice/templates/0000-rest-api/tests/__init__.py -> build/bdist.linux-i686/wheel/./chalice/templates/0000-rest-api/tests INFO : root : creating build/bdist.linux-i686/wheel/chalice/templates/0000-rest-api/chalicelib INFO : root : copying build/lib/chalice/templates/0000-rest-api/chalicelib/__init__.py -> build/bdist.linux-i686/wheel/./chalice/templates/0000-rest-api/chalicelib INFO : root : creating build/bdist.linux-i686/wheel/chalice/templates/0000-rest-api/.chalice INFO : root : copying build/lib/chalice/templates/0000-rest-api/.chalice/config.json -> build/bdist.linux-i686/wheel/./chalice/templates/0000-rest-api/.chalice INFO : root : copying build/lib/chalice/templates/0000-rest-api/requirements.txt -> build/bdist.linux-i686/wheel/./chalice/templates/0000-rest-api INFO : root : copying build/lib/chalice/templates/0000-rest-api/requirements-dev.txt -> build/bdist.linux-i686/wheel/./chalice/templates/0000-rest-api INFO : root : copying build/lib/chalice/templates/0000-rest-api/metadata.json -> build/bdist.linux-i686/wheel/./chalice/templates/0000-rest-api INFO : root : copying build/lib/chalice/templates/0000-rest-api/app.py -> build/bdist.linux-i686/wheel/./chalice/templates/0000-rest-api INFO : root : copying build/lib/chalice/templates/0000-rest-api/.gitignore -> build/bdist.linux-i686/wheel/./chalice/templates/0000-rest-api INFO : root : copying build/lib/chalice/py.typed -> build/bdist.linux-i686/wheel/./chalice INFO : root : copying build/lib/chalice/policies.json -> build/bdist.linux-i686/wheel/./chalice INFO : root : copying build/lib/chalice/policies-extra.json -> build/bdist.linux-i686/wheel/./chalice INFO : root : creating build/bdist.linux-i686/wheel/chalice/api INFO : root : copying build/lib/chalice/api/__init__.py -> build/bdist.linux-i686/wheel/./chalice/api INFO : root : creating build/bdist.linux-i686/wheel/chalice/cdk INFO : root : copying build/lib/chalice/cdk/__init__.py -> build/bdist.linux-i686/wheel/./chalice/cdk INFO : root : copying build/lib/chalice/cdk/construct.py -> build/bdist.linux-i686/wheel/./chalice/cdk INFO : root : creating build/bdist.linux-i686/wheel/chalice/cli INFO : root : creating build/bdist.linux-i686/wheel/chalice/cli/filewatch INFO : root : copying build/lib/chalice/cli/filewatch/__init__.py -> build/bdist.linux-i686/wheel/./chalice/cli/filewatch INFO : root : copying build/lib/chalice/cli/filewatch/eventbased.py -> build/bdist.linux-i686/wheel/./chalice/cli/filewatch INFO : root : copying build/lib/chalice/cli/filewatch/stat.py -> build/bdist.linux-i686/wheel/./chalice/cli/filewatch INFO : root : copying build/lib/chalice/cli/__init__.py -> build/bdist.linux-i686/wheel/./chalice/cli INFO : root : copying build/lib/chalice/cli/factory.py -> build/bdist.linux-i686/wheel/./chalice/cli INFO : root : copying build/lib/chalice/cli/newproj.py -> build/bdist.linux-i686/wheel/./chalice/cli INFO : root : copying build/lib/chalice/cli/reloader.py -> build/bdist.linux-i686/wheel/./chalice/cli INFO : root : creating build/bdist.linux-i686/wheel/chalice/deploy INFO : root : copying build/lib/chalice/deploy/__init__.py -> build/bdist.linux-i686/wheel/./chalice/deploy INFO : root : copying build/lib/chalice/deploy/appgraph.py -> build/bdist.linux-i686/wheel/./chalice/deploy INFO : root : copying build/lib/chalice/deploy/deployer.py -> build/bdist.linux-i686/wheel/./chalice/deploy INFO : root : copying build/lib/chalice/deploy/executor.py -> build/bdist.linux-i686/wheel/./chalice/deploy INFO : root : copying build/lib/chalice/deploy/models.py -> build/bdist.linux-i686/wheel/./chalice/deploy INFO : root : copying build/lib/chalice/deploy/packager.py -> build/bdist.linux-i686/wheel/./chalice/deploy INFO : root : copying build/lib/chalice/deploy/planner.py -> build/bdist.linux-i686/wheel/./chalice/deploy INFO : root : copying build/lib/chalice/deploy/swagger.py -> build/bdist.linux-i686/wheel/./chalice/deploy INFO : root : copying build/lib/chalice/deploy/sweeper.py -> build/bdist.linux-i686/wheel/./chalice/deploy INFO : root : copying build/lib/chalice/deploy/validate.py -> build/bdist.linux-i686/wheel/./chalice/deploy INFO : root : creating build/bdist.linux-i686/wheel/chalice/vendored INFO : root : creating build/bdist.linux-i686/wheel/chalice/vendored/botocore INFO : root : copying build/lib/chalice/vendored/botocore/__init__.py -> build/bdist.linux-i686/wheel/./chalice/vendored/botocore INFO : root : copying build/lib/chalice/vendored/botocore/regions.py -> build/bdist.linux-i686/wheel/./chalice/vendored/botocore INFO : root : copying build/lib/chalice/vendored/__init__.py -> build/bdist.linux-i686/wheel/./chalice/vendored INFO : root : copying build/lib/chalice/__init__.py -> build/bdist.linux-i686/wheel/./chalice INFO : root : copying build/lib/chalice/analyzer.py -> build/bdist.linux-i686/wheel/./chalice INFO : root : copying build/lib/chalice/app.py -> build/bdist.linux-i686/wheel/./chalice INFO : root : copying build/lib/chalice/awsclient.py -> build/bdist.linux-i686/wheel/./chalice INFO : root : copying build/lib/chalice/compat.py -> build/bdist.linux-i686/wheel/./chalice INFO : root : copying build/lib/chalice/config.py -> build/bdist.linux-i686/wheel/./chalice INFO : root : copying build/lib/chalice/constants.py -> build/bdist.linux-i686/wheel/./chalice INFO : root : copying build/lib/chalice/invoke.py -> build/bdist.linux-i686/wheel/./chalice INFO : root : copying build/lib/chalice/local.py -> build/bdist.linux-i686/wheel/./chalice INFO : root : copying build/lib/chalice/logs.py -> build/bdist.linux-i686/wheel/./chalice INFO : root : copying build/lib/chalice/package.py -> build/bdist.linux-i686/wheel/./chalice INFO : root : copying build/lib/chalice/pipeline.py -> build/bdist.linux-i686/wheel/./chalice INFO : root : copying build/lib/chalice/policy.py -> build/bdist.linux-i686/wheel/./chalice INFO : root : copying build/lib/chalice/test.py -> build/bdist.linux-i686/wheel/./chalice INFO : root : copying build/lib/chalice/utils.py -> build/bdist.linux-i686/wheel/./chalice INFO : root : running install_egg_info INFO : root : Copying chalice.egg-info to build/bdist.linux-i686/wheel/./chalice-1.32.0-py3.14.egg-info INFO : root : running install_scripts INFO : root : creating build/bdist.linux-i686/wheel/chalice-1.32.0.dist-info/WHEEL INFO : wheel : creating '/usr/src/RPM/BUILD/chalice-1.32.0/dist/.tmp-3_6oe446/chalice-1.32.0-py3-none-any.whl' and adding 'build/bdist.linux-i686/wheel' to it INFO : wheel : adding 'chalice/__init__.py' INFO : wheel : adding 'chalice/analyzer.py' INFO : wheel : adding 'chalice/app.py' INFO : wheel : adding 'chalice/awsclient.py' INFO : wheel : adding 'chalice/compat.py' INFO : wheel : adding 'chalice/config.py' INFO : wheel : adding 'chalice/constants.py' INFO : wheel : adding 'chalice/invoke.py' INFO : wheel : adding 'chalice/local.py' INFO : wheel : adding 'chalice/logs.py' INFO : wheel : adding 'chalice/package.py' INFO : wheel : adding 'chalice/pipeline.py' INFO : wheel : adding 'chalice/policies-extra.json' INFO : wheel : adding 'chalice/policies.json' INFO : wheel : adding 'chalice/policy.py' INFO : wheel : adding 'chalice/py.typed' INFO : wheel : adding 'chalice/test.py' INFO : wheel : adding 'chalice/utils.py' INFO : wheel : adding 'chalice/api/__init__.py' INFO : wheel : adding 'chalice/cdk/__init__.py' INFO : wheel : adding 'chalice/cdk/construct.py' INFO : wheel : adding 'chalice/cli/__init__.py' INFO : wheel : adding 'chalice/cli/factory.py' INFO : wheel : adding 'chalice/cli/newproj.py' INFO : wheel : adding 'chalice/cli/reloader.py' INFO : wheel : adding 'chalice/cli/filewatch/__init__.py' INFO : wheel : adding 'chalice/cli/filewatch/eventbased.py' INFO : wheel : adding 'chalice/cli/filewatch/stat.py' INFO : wheel : adding 'chalice/deploy/__init__.py' INFO : wheel : adding 'chalice/deploy/appgraph.py' INFO : wheel : adding 'chalice/deploy/deployer.py' INFO : wheel : adding 'chalice/deploy/executor.py' INFO : wheel : adding 'chalice/deploy/models.py' INFO : wheel : adding 'chalice/deploy/packager.py' INFO : wheel : adding 'chalice/deploy/planner.py' INFO : wheel : adding 'chalice/deploy/swagger.py' INFO : wheel : adding 'chalice/deploy/sweeper.py' INFO : wheel : adding 'chalice/deploy/validate.py' INFO : wheel : adding 'chalice/templates/0000-rest-api/.gitignore' INFO : wheel : adding 'chalice/templates/0000-rest-api/app.py' INFO : wheel : adding 'chalice/templates/0000-rest-api/metadata.json' INFO : wheel : adding 'chalice/templates/0000-rest-api/requirements-dev.txt' INFO : wheel : adding 'chalice/templates/0000-rest-api/requirements.txt' INFO : wheel : adding 'chalice/templates/0000-rest-api/.chalice/config.json' INFO : wheel : adding 'chalice/templates/0000-rest-api/chalicelib/__init__.py' INFO : wheel : adding 'chalice/templates/0000-rest-api/tests/__init__.py' INFO : wheel : adding 'chalice/templates/0000-rest-api/tests/test_app.py' INFO : wheel : adding 'chalice/templates/0002-s3-event-handler/.gitignore' INFO : wheel : adding 'chalice/templates/0002-s3-event-handler/app.py' INFO : wheel : adding 'chalice/templates/0002-s3-event-handler/metadata.json' INFO : wheel : adding 'chalice/templates/0002-s3-event-handler/requirements-dev.txt' INFO : wheel : adding 'chalice/templates/0002-s3-event-handler/requirements.txt' INFO : wheel : adding 'chalice/templates/0002-s3-event-handler/.chalice/config.json' INFO : wheel : adding 'chalice/templates/0002-s3-event-handler/chalicelib/__init__.py' INFO : wheel : adding 'chalice/templates/0002-s3-event-handler/tests/__init__.py' INFO : wheel : adding 'chalice/templates/0002-s3-event-handler/tests/test_app.py' INFO : wheel : adding 'chalice/templates/0007-lambda-only/.gitignore' INFO : wheel : adding 'chalice/templates/0007-lambda-only/app.py' INFO : wheel : adding 'chalice/templates/0007-lambda-only/metadata.json' INFO : wheel : adding 'chalice/templates/0007-lambda-only/requirements-dev.txt' INFO : wheel : adding 'chalice/templates/0007-lambda-only/requirements.txt' INFO : wheel : adding 'chalice/templates/0007-lambda-only/.chalice/config.json' INFO : wheel : adding 'chalice/templates/0007-lambda-only/chalicelib/__init__.py' INFO : wheel : adding 'chalice/templates/0007-lambda-only/tests/__init__.py' INFO : wheel : adding 'chalice/templates/0007-lambda-only/tests/test_app.py' INFO : wheel : adding 'chalice/templates/0009-legacy/.gitignore' INFO : wheel : adding 'chalice/templates/0009-legacy/app.py' INFO : wheel : adding 'chalice/templates/0009-legacy/metadata.json' INFO : wheel : adding 'chalice/templates/0009-legacy/requirements.txt' INFO : wheel : adding 'chalice/templates/0009-legacy/.chalice/config.json' INFO : wheel : adding 'chalice/templates/6001-cdk-ddb/README.rst' INFO : wheel : adding 'chalice/templates/6001-cdk-ddb/metadata.json' INFO : wheel : adding 'chalice/templates/6001-cdk-ddb/requirements.txt' INFO : wheel : adding 'chalice/templates/6001-cdk-ddb/infrastructure/app.py' INFO : wheel : adding 'chalice/templates/6001-cdk-ddb/infrastructure/cdk.json' INFO : wheel : adding 'chalice/templates/6001-cdk-ddb/infrastructure/requirements.txt' INFO : wheel : adding 'chalice/templates/6001-cdk-ddb/infrastructure/stacks/__init__.py' INFO : wheel : adding 'chalice/templates/6001-cdk-ddb/infrastructure/stacks/chaliceapp.py' INFO : wheel : adding 'chalice/templates/6001-cdk-ddb/runtime/.gitignore' INFO : wheel : adding 'chalice/templates/6001-cdk-ddb/runtime/app.py' INFO : wheel : adding 'chalice/templates/6001-cdk-ddb/runtime/requirements.txt' INFO : wheel : adding 'chalice/templates/6001-cdk-ddb/runtime/.chalice/config.json' INFO : wheel : adding 'chalice/vendored/__init__.py' INFO : wheel : adding 'chalice/vendored/botocore/__init__.py' INFO : wheel : adding 'chalice/vendored/botocore/regions.py' INFO : wheel : adding 'chalice-1.32.0.dist-info/licenses/LICENSE' INFO : wheel : adding 'chalice-1.32.0.dist-info/licenses/NOTICE' INFO : wheel : adding 'chalice-1.32.0.dist-info/METADATA' INFO : wheel : adding 'chalice-1.32.0.dist-info/WHEEL' INFO : wheel : adding 'chalice-1.32.0.dist-info/entry_points.txt' INFO : wheel : adding 'chalice-1.32.0.dist-info/top_level.txt' INFO : wheel : adding 'chalice-1.32.0.dist-info/RECORD' INFO : root : removing build/bdist.linux-i686/wheel INFO : pyproject_installer.build_cmd._build : Built wheel: chalice-1.32.0-py3-none-any.whl + exit 0 Executing(%install): /bin/sh -e /usr/src/tmp/rpmb-tmp.2dT3vN + umask 022 + /bin/mkdir -p /usr/src/RPM/BUILD + cd /usr/src/RPM/BUILD + /bin/chmod -Rf u+rwX -- /usr/src/tmp/python3-module-chalice-buildroot + : + /bin/rm -rf -- /usr/src/tmp/python3-module-chalice-buildroot + PATH=/usr/libexec/rpm-build:/usr/src/bin:/usr/bin:/bin:/usr/local/bin:/usr/games + cd chalice-1.32.0 + /usr/bin/python3 -m pyproject_installer -v install --destdir=/usr/src/tmp/python3-module-chalice-buildroot INFO : pyproject_installer.install_cmd._install : Installing wheel INFO : pyproject_installer.install_cmd._install : Wheel directory: /usr/src/RPM/BUILD/chalice-1.32.0/dist INFO : pyproject_installer.install_cmd._install : Wheel filename: chalice-1.32.0-py3-none-any.whl INFO : pyproject_installer.install_cmd._install : Destination: /usr/src/tmp/python3-module-chalice-buildroot DEBUG : pyproject_installer.lib.wheel : Parsing wheel filename DEBUG : pyproject_installer.lib.wheel : Validating wheel file DEBUG : pyproject_installer.lib.wheel : Validating wheel spec version DEBUG : pyproject_installer.lib.wheel : Parsing wheel spec metadata DEBUG : pyproject_installer.lib.wheel : Validating RECORD INFO : pyproject_installer.install_cmd._install : Wheel installation root: /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages DEBUG : pyproject_installer.install_cmd._install : Filtering out not allowed file: chalice-1.32.0.dist-info/licenses/LICENSE DEBUG : pyproject_installer.install_cmd._install : Filtering out not allowed file: chalice-1.32.0.dist-info/licenses/NOTICE DEBUG : pyproject_installer.install_cmd._install : Filtering out not allowed file: chalice-1.32.0.dist-info/WHEEL DEBUG : pyproject_installer.install_cmd._install : Filtering out not allowed file: chalice-1.32.0.dist-info/top_level.txt DEBUG : pyproject_installer.install_cmd._install : Filtering out not allowed file: chalice-1.32.0.dist-info/RECORD INFO : pyproject_installer.install_cmd._install : Extracting wheel INFO : pyproject_installer.install_cmd._install : Generating entrypoints scripts DEBUG : pyproject_installer.lib.scripts : Installing console script: chalice INFO : pyproject_installer.install_cmd._install : Wheel was installed + /usr/lib/rpm/brp-alt Cleaning files in /usr/src/tmp/python3-module-chalice-buildroot (auto) removed './usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/runtime/.gitignore' removed './usr/lib/python3/site-packages/chalice/templates/0009-legacy/.gitignore' removed './usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/.gitignore' removed './usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/.gitignore' removed './usr/lib/python3/site-packages/chalice/templates/0000-rest-api/.gitignore' Verifying and fixing files in /usr/src/tmp/python3-module-chalice-buildroot (binconfig,pkgconfig,libtool,desktop,gnuconfig) Checking contents of files in /usr/src/tmp/python3-module-chalice-buildroot/ (default) Compressing files in /usr/src/tmp/python3-module-chalice-buildroot (auto) Adjusting library links in /usr/src/tmp/python3-module-chalice-buildroot ./usr/lib: (from :0) Verifying ELF objects in /usr/src/tmp/python3-module-chalice-buildroot (arch=normal,fhs=normal,lfs=relaxed,lint=relaxed,rpath=normal,stack=normal,textrel=normal,unresolved=normal) Splitting links to aliased files under /{,s}bin in /usr/src/tmp/python3-module-chalice-buildroot Bytecompiling python3 modules in /usr/src/tmp/python3-module-chalice-buildroot using /usr/bin/python3 compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/api/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cdk/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cdk/construct.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cli/filewatch/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cli/filewatch/eventbased.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cli/filewatch/stat.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cli/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cli/factory.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cli/newproj.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cli/reloader.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/appgraph.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/deployer.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/executor.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/models.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/packager.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/planner.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/swagger.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/sweeper.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/validate.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0000-rest-api/chalicelib/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0000-rest-api/tests/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0000-rest-api/tests/test_app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0000-rest-api/app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/chalicelib/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/tests/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/tests/test_app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/chalicelib/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/tests/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/tests/test_app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0009-legacy/app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/infrastructure/stacks/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/infrastructure/stacks/chaliceapp.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/infrastructure/app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/runtime/app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/vendored/botocore/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/vendored/botocore/regions.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/vendored/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/analyzer.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/awsclient.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/compat.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/config.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/constants.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/invoke.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/local.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/logs.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/package.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/pipeline.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/policy.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/test.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/utils.py Bytecompiling python3 modules with optimization in /usr/src/tmp/python3-module-chalice-buildroot using /usr/bin/python3 -O compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/api/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cdk/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cdk/construct.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cli/filewatch/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cli/filewatch/eventbased.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cli/filewatch/stat.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cli/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cli/factory.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cli/newproj.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cli/reloader.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/appgraph.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/deployer.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/executor.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/models.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/packager.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/planner.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/swagger.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/sweeper.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/validate.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0000-rest-api/chalicelib/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0000-rest-api/tests/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0000-rest-api/tests/test_app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0000-rest-api/app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/chalicelib/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/tests/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/tests/test_app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/chalicelib/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/tests/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/tests/test_app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0009-legacy/app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/infrastructure/stacks/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/infrastructure/stacks/chaliceapp.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/infrastructure/app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/runtime/app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/vendored/botocore/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/vendored/botocore/regions.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/vendored/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/analyzer.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/awsclient.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/compat.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/config.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/constants.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/invoke.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/local.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/logs.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/package.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/pipeline.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/policy.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/test.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/utils.py Bytecompiling python3 modules with optimization-2 in /usr/src/tmp/python3-module-chalice-buildroot using /usr/bin/python3 -OO compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/api/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cdk/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cdk/construct.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cli/filewatch/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cli/filewatch/eventbased.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cli/filewatch/stat.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cli/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cli/factory.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cli/newproj.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/cli/reloader.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/appgraph.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/deployer.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/executor.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/models.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/packager.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/planner.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/swagger.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/sweeper.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/deploy/validate.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0000-rest-api/chalicelib/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0000-rest-api/tests/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0000-rest-api/tests/test_app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0000-rest-api/app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/chalicelib/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/tests/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/tests/test_app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/chalicelib/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/tests/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/tests/test_app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/0009-legacy/app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/infrastructure/stacks/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/infrastructure/stacks/chaliceapp.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/infrastructure/app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/runtime/app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/vendored/botocore/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/vendored/botocore/regions.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/vendored/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/__init__.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/analyzer.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/app.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/awsclient.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/compat.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/config.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/constants.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/invoke.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/local.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/logs.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/package.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/pipeline.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/policy.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/test.py compile /usr/src/tmp/python3-module-chalice-buildroot/usr/lib/python3/site-packages/chalice/utils.py Hardlinking identical .pyc and .opt-?.pyc files './usr/lib/python3/site-packages/chalice/__pycache__/__init__.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/__pycache__/__init__.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/__pycache__/__init__.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/__pycache__/__init__.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/__pycache__/analyzer.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/__pycache__/analyzer.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/__pycache__/app.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/__pycache__/app.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/__pycache__/awsclient.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/__pycache__/awsclient.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/__pycache__/compat.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/__pycache__/compat.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/__pycache__/compat.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/__pycache__/compat.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/__pycache__/config.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/__pycache__/config.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/__pycache__/constants.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/__pycache__/constants.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/__pycache__/constants.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/__pycache__/constants.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/__pycache__/invoke.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/__pycache__/invoke.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/__pycache__/local.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/__pycache__/local.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/__pycache__/logs.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/__pycache__/logs.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/__pycache__/package.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/__pycache__/package.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/__pycache__/package.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/__pycache__/package.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/__pycache__/pipeline.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/__pycache__/pipeline.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/__pycache__/pipeline.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/__pycache__/pipeline.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/__pycache__/test.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/__pycache__/test.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/__pycache__/test.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/__pycache__/test.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/__pycache__/utils.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/__pycache__/utils.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/api/__pycache__/__init__.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/api/__pycache__/__init__.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/cdk/__pycache__/__init__.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/cdk/__pycache__/__init__.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/cdk/__pycache__/__init__.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/cdk/__pycache__/__init__.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/cdk/__pycache__/construct.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/cdk/__pycache__/construct.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/cli/__pycache__/__init__.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/cli/__pycache__/__init__.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/cli/__pycache__/factory.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/cli/__pycache__/factory.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/cli/__pycache__/newproj.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/cli/__pycache__/newproj.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/cli/__pycache__/reloader.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/cli/__pycache__/reloader.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/cli/filewatch/__pycache__/__init__.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/cli/filewatch/__pycache__/__init__.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/cli/filewatch/__pycache__/eventbased.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/cli/filewatch/__pycache__/eventbased.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/cli/filewatch/__pycache__/stat.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/cli/filewatch/__pycache__/stat.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/cli/filewatch/__pycache__/stat.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/cli/filewatch/__pycache__/stat.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/deploy/__pycache__/__init__.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/deploy/__pycache__/__init__.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/deploy/__pycache__/__init__.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/deploy/__pycache__/__init__.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/deploy/__pycache__/appgraph.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/deploy/__pycache__/appgraph.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/deploy/__pycache__/appgraph.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/deploy/__pycache__/appgraph.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/deploy/__pycache__/deployer.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/deploy/__pycache__/deployer.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/deploy/__pycache__/executor.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/deploy/__pycache__/executor.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/deploy/__pycache__/models.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/deploy/__pycache__/models.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/deploy/__pycache__/models.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/deploy/__pycache__/models.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/deploy/__pycache__/packager.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/deploy/__pycache__/packager.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/deploy/__pycache__/planner.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/deploy/__pycache__/planner.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/deploy/__pycache__/planner.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/deploy/__pycache__/planner.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/deploy/__pycache__/swagger.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/deploy/__pycache__/swagger.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/deploy/__pycache__/swagger.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/deploy/__pycache__/swagger.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/deploy/__pycache__/sweeper.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/deploy/__pycache__/sweeper.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/deploy/__pycache__/sweeper.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/deploy/__pycache__/sweeper.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/deploy/__pycache__/validate.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/deploy/__pycache__/validate.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/templates/0000-rest-api/__pycache__/app.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/templates/0000-rest-api/__pycache__/app.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/templates/0000-rest-api/__pycache__/app.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/templates/0000-rest-api/__pycache__/app.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/templates/0000-rest-api/chalicelib/__pycache__/__init__.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/templates/0000-rest-api/chalicelib/__pycache__/__init__.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/templates/0000-rest-api/chalicelib/__pycache__/__init__.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/templates/0000-rest-api/chalicelib/__pycache__/__init__.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/templates/0000-rest-api/tests/__pycache__/__init__.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/templates/0000-rest-api/tests/__pycache__/__init__.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/templates/0000-rest-api/tests/__pycache__/__init__.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/templates/0000-rest-api/tests/__pycache__/__init__.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/templates/0000-rest-api/tests/__pycache__/test_app.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/templates/0000-rest-api/tests/__pycache__/test_app.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/__pycache__/app.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/__pycache__/app.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/__pycache__/app.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/__pycache__/app.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/chalicelib/__pycache__/__init__.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/chalicelib/__pycache__/__init__.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/chalicelib/__pycache__/__init__.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/chalicelib/__pycache__/__init__.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/tests/__pycache__/__init__.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/tests/__pycache__/__init__.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/tests/__pycache__/__init__.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/tests/__pycache__/__init__.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/tests/__pycache__/test_app.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/tests/__pycache__/test_app.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/tests/__pycache__/test_app.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/templates/0002-s3-event-handler/tests/__pycache__/test_app.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/__pycache__/app.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/__pycache__/app.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/__pycache__/app.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/__pycache__/app.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/chalicelib/__pycache__/__init__.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/chalicelib/__pycache__/__init__.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/chalicelib/__pycache__/__init__.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/chalicelib/__pycache__/__init__.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/tests/__pycache__/__init__.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/tests/__pycache__/__init__.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/tests/__pycache__/__init__.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/tests/__pycache__/__init__.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/tests/__pycache__/test_app.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/templates/0007-lambda-only/tests/__pycache__/test_app.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/templates/0009-legacy/__pycache__/app.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/templates/0009-legacy/__pycache__/app.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/templates/0009-legacy/__pycache__/app.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/templates/0009-legacy/__pycache__/app.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/infrastructure/__pycache__/app.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/infrastructure/__pycache__/app.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/infrastructure/__pycache__/app.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/infrastructure/__pycache__/app.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/infrastructure/stacks/__pycache__/__init__.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/infrastructure/stacks/__pycache__/__init__.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/infrastructure/stacks/__pycache__/__init__.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/infrastructure/stacks/__pycache__/__init__.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/infrastructure/stacks/__pycache__/chaliceapp.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/infrastructure/stacks/__pycache__/chaliceapp.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/infrastructure/stacks/__pycache__/chaliceapp.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/infrastructure/stacks/__pycache__/chaliceapp.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/runtime/__pycache__/app.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/runtime/__pycache__/app.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/runtime/__pycache__/app.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/templates/6001-cdk-ddb/runtime/__pycache__/app.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/vendored/__pycache__/__init__.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/vendored/__pycache__/__init__.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/vendored/__pycache__/__init__.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/vendored/__pycache__/__init__.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/vendored/botocore/__pycache__/__init__.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/vendored/botocore/__pycache__/__init__.cpython-314.pyc' './usr/lib/python3/site-packages/chalice/vendored/botocore/__pycache__/__init__.cpython-314.opt-2.pyc' => './usr/lib/python3/site-packages/chalice/vendored/botocore/__pycache__/__init__.cpython-314.opt-1.pyc' './usr/lib/python3/site-packages/chalice/vendored/botocore/__pycache__/regions.cpython-314.opt-1.pyc' => './usr/lib/python3/site-packages/chalice/vendored/botocore/__pycache__/regions.cpython-314.pyc' Executing(%check): /bin/sh -e /usr/src/tmp/rpmb-tmp.aawodG + umask 022 + /bin/mkdir -p /usr/src/RPM/BUILD + cd /usr/src/RPM/BUILD + cd chalice-1.32.0 + export 'CFLAGS=-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -march=i586 -mtune=generic' + CFLAGS='-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -march=i586 -mtune=generic' + export 'CXXFLAGS=-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -march=i586 -mtune=generic' + CXXFLAGS='-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -march=i586 -mtune=generic' + export 'FFLAGS=-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -march=i586 -mtune=generic' + FFLAGS='-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -march=i586 -mtune=generic' + export NO_INTERNET=YES + NO_INTERNET=YES + /usr/bin/python3 -m pyproject_installer run -- python3 -m pytest --ignore=chalice/templates --ignore=docs --ignore=tests/aws/test_features.py --ignore=tests/aws/test_websockets.py --ignore=tests/unit/deploy/test_packager.py --ignore=tests/integration/test_package.py --ignore=tests/functional/test_awsclient.py --deselect=tests/functional/cli/test_cli.py::test_can_generate_pipeline_for_all --deselect=tests/functional/test_deployer.py::test_no_error_message_printed_on_empty_reqs_file INFO : Creating venv INFO : Installing console scripts INFO : Installing package: /usr/src/RPM/BUILD/chalice-1.32.0/dist/chalice-1.32.0-py3-none-any.whl INFO : Running command: ['/usr/src/RPM/BUILD/chalice-1.32.0/.run_venv/bin/python3', '-m', 'pyproject_installer', 'install', '/usr/src/RPM/BUILD/chalice-1.32.0/dist/chalice-1.32.0-py3-none-any.whl'] INFO : Running command: ['python3', '-m', 'pytest', '--ignore=chalice/templates', '--ignore=docs', '--ignore=tests/aws/test_features.py', '--ignore=tests/aws/test_websockets.py', '--ignore=tests/unit/deploy/test_packager.py', '--ignore=tests/integration/test_package.py', '--ignore=tests/functional/test_awsclient.py', '--deselect=tests/functional/cli/test_cli.py::test_can_generate_pipeline_for_all', '--deselect=tests/functional/test_deployer.py::test_no_error_message_printed_on_empty_reqs_file'] ============================= test session starts ============================== platform linux -- Python 3.14.6, pytest-9.0.3, pluggy-1.6.0 rootdir: /usr/src/RPM/BUILD/chalice-1.32.0 plugins: hypothesis-6.160.0 HYPOTHESIS PROFILE: None collected 1181 items / 2 deselected / 1179 selected tests/functional/api/test_package.py FFFF [ 0%] tests/functional/cdk/test_construct.py sss [ 0%] tests/functional/cli/test_cli.py .....F..FFFF.F....................... [ 3%] tests/functional/cli/test_factory.py .............................. [ 6%] tests/functional/cli/test_reloader.py s.s.s.s.s. [ 7%] tests/functional/test_deployer.py ................... [ 8%] tests/functional/test_local.py ........ [ 9%] tests/functional/test_package.py ....................................... [ 12%] ........ [ 13%] tests/functional/test_utils.py .......... [ 14%] tests/integration/test_cli.py . [ 14%] tests/unit/cli/filewatch/test_eventbased.py sssssss [ 14%] tests/unit/cli/filewatch/test_stat.py . [ 15%] tests/unit/cli/test_cli.py .. [ 15%] tests/unit/cli/test_newproj.py .............. [ 16%] tests/unit/deploy/test_appgraph.py ............................. [ 18%] tests/unit/deploy/test_deployer.py ..................................... [ 21%] .................... [ 23%] tests/unit/deploy/test_executor.py ................................. [ 26%] tests/unit/deploy/test_models.py ....... [ 27%] tests/unit/deploy/test_planner.py ...................................... [ 30%] ...................................................................... [ 36%] tests/unit/deploy/test_swagger.py ................................. [ 39%] tests/unit/deploy/test_validate.py ............................. [ 41%] tests/unit/test_analyzer.py FF.FFF...FFFFFF.FFFFFF.FFFFFFFFFFFFFFFFF.FFF [ 45%] .FFFFFFF.FFFFFFFFFFFF [ 46%] tests/unit/test_app.py ................................................. [ 51%] ........................................................................ [ 57%] ........................................................................ [ 63%] ................................. [ 66%] tests/unit/test_awsclient.py ...................... [ 68%] tests/unit/test_config.py ..........................F................... [ 71%] .... [ 72%] tests/unit/test_invoke.py ......... [ 73%] tests/unit/test_local.py ............................................... [ 77%] ............................................... [ 81%] tests/unit/test_logs.py ............... [ 82%] tests/unit/test_package.py ............................................. [ 86%] ...................................................... [ 90%] tests/unit/test_pipeline.py ...................... [ 92%] tests/unit/test_policy.py ........... [ 93%] tests/unit/test_test.py ...................... [ 95%] tests/unit/test_utils.py .................................... [ 98%] tests/unit/vendored/botocore/test_regions.py ................... [100%] =================================== FAILURES =================================== _______ test_can_package_different_formats[cloudformation-json-sam.json] _______ runner = package_format = 'cloudformation', template_format = 'json' expected_filename = 'sam.json' @pytest.mark.parametrize('package_format,template_format,expected_filename', [ ('cloudformation', 'json', 'sam.json'), ('cloudformation', 'yaml', 'sam.yaml'), ('terraform', 'json', 'chalice.tf.json'), ]) def test_can_package_different_formats(runner, package_format, template_format, expected_filename): with runner.isolated_filesystem(): newproj.create_new_project_skeleton('testproject') > package_app('testproject', output_dir='packagedir', stage='dev', package_format=package_format, template_format=template_format) tests/functional/api/test_package.py:26: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ chalice/api/__init__.py:27: in package_app packager.package_app(config, output_dir, stage) chalice/package.py:1481: in package_app resources = self._resource_builder.construct_resources( chalice/package.py:118: in construct_resources self._build_stage.execute(config, resources) chalice/deploy/deployer.py:652: in execute step.handle(config, resource) chalice/deploy/deployer.py:419: in handle handler(config, resource) chalice/deploy/deployer.py:637: in handle_autogeniampolicy policy = self._policy_gen.generate_policy(config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/policy.py:86: in generate_policy app_policy = policy_from_source_code(app_source) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/policy.py:27: in policy_from_source_code client_calls = get_client_calls_for_app(source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:74: in get_client_calls_for_app binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:683: in bind_types self._type_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='app', ctx=Store())], value=Call(func=Name(id='Chalice', ctx=Load(...)), args=[], keywords=[keyword(arg='app_name', value=Constant(...))]), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError _______ test_can_package_different_formats[cloudformation-yaml-sam.yaml] _______ runner = package_format = 'cloudformation', template_format = 'yaml' expected_filename = 'sam.yaml' @pytest.mark.parametrize('package_format,template_format,expected_filename', [ ('cloudformation', 'json', 'sam.json'), ('cloudformation', 'yaml', 'sam.yaml'), ('terraform', 'json', 'chalice.tf.json'), ]) def test_can_package_different_formats(runner, package_format, template_format, expected_filename): with runner.isolated_filesystem(): newproj.create_new_project_skeleton('testproject') > package_app('testproject', output_dir='packagedir', stage='dev', package_format=package_format, template_format=template_format) tests/functional/api/test_package.py:26: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ chalice/api/__init__.py:27: in package_app packager.package_app(config, output_dir, stage) chalice/package.py:1481: in package_app resources = self._resource_builder.construct_resources( chalice/package.py:118: in construct_resources self._build_stage.execute(config, resources) chalice/deploy/deployer.py:652: in execute step.handle(config, resource) chalice/deploy/deployer.py:419: in handle handler(config, resource) chalice/deploy/deployer.py:637: in handle_autogeniampolicy policy = self._policy_gen.generate_policy(config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/policy.py:86: in generate_policy app_policy = policy_from_source_code(app_source) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/policy.py:27: in policy_from_source_code client_calls = get_client_calls_for_app(source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:74: in get_client_calls_for_app binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:683: in bind_types self._type_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='app', ctx=Store())], value=Call(func=Name(id='Chalice', ctx=Load(...)), args=[], keywords=[keyword(arg='app_name', value=Constant(...))]), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError ______ test_can_package_different_formats[terraform-json-chalice.tf.json] ______ runner = package_format = 'terraform', template_format = 'json' expected_filename = 'chalice.tf.json' @pytest.mark.parametrize('package_format,template_format,expected_filename', [ ('cloudformation', 'json', 'sam.json'), ('cloudformation', 'yaml', 'sam.yaml'), ('terraform', 'json', 'chalice.tf.json'), ]) def test_can_package_different_formats(runner, package_format, template_format, expected_filename): with runner.isolated_filesystem(): newproj.create_new_project_skeleton('testproject') > package_app('testproject', output_dir='packagedir', stage='dev', package_format=package_format, template_format=template_format) tests/functional/api/test_package.py:26: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ chalice/api/__init__.py:27: in package_app packager.package_app(config, output_dir, stage) chalice/package.py:1481: in package_app resources = self._resource_builder.construct_resources( chalice/package.py:118: in construct_resources self._build_stage.execute(config, resources) chalice/deploy/deployer.py:652: in execute step.handle(config, resource) chalice/deploy/deployer.py:419: in handle handler(config, resource) chalice/deploy/deployer.py:637: in handle_autogeniampolicy policy = self._policy_gen.generate_policy(config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/policy.py:86: in generate_policy app_policy = policy_from_source_code(app_source) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/policy.py:27: in policy_from_source_code client_calls = get_client_calls_for_app(source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:74: in get_client_calls_for_app binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:683: in bind_types self._type_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='app', ctx=Store())], value=Call(func=Name(id='Chalice', ctx=Load(...)), args=[], keywords=[keyword(arg='app_name', value=Constant(...))]), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError _______________________ test_can_override_chalice_config _______________________ runner = def test_can_override_chalice_config(runner): with runner.isolated_filesystem(): newproj.create_new_project_skeleton('testproject') chalice_config = { 'environment_variables': { 'FOO': 'BAR', } } > package_app('testproject', output_dir='packagedir', stage='dev', chalice_config=chalice_config) tests/functional/api/test_package.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ chalice/api/__init__.py:27: in package_app packager.package_app(config, output_dir, stage) chalice/package.py:1481: in package_app resources = self._resource_builder.construct_resources( chalice/package.py:118: in construct_resources self._build_stage.execute(config, resources) chalice/deploy/deployer.py:652: in execute step.handle(config, resource) chalice/deploy/deployer.py:419: in handle handler(config, resource) chalice/deploy/deployer.py:637: in handle_autogeniampolicy policy = self._policy_gen.generate_policy(config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/policy.py:86: in generate_policy app_policy = policy_from_source_code(app_source) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/policy.py:27: in policy_from_source_code client_calls = get_client_calls_for_app(source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:74: in get_client_calls_for_app binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:683: in bind_types self._type_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='app', ctx=Store())], value=Call(func=Name(id='Chalice', ctx=Load(...)), args=[], keywords=[keyword(arg='app_name', value=Constant(...))]), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError ____________________ test_gen_policy_command_creates_policy ____________________ runner = def test_gen_policy_command_creates_policy(runner): with runner.isolated_filesystem(): newproj.create_new_project_skeleton('testproject') os.chdir('testproject') result = runner.invoke(cli.cli, ['gen-policy'], obj={}) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/functional/cli/test_cli.py:133: AssertionError ___________________________ test_can_package_command ___________________________ runner = mock_cli_factory = def test_can_package_command(runner, mock_cli_factory): with runner.isolated_filesystem(): newproj.create_new_project_skeleton('testproject') os.chdir('testproject') result = _run_cli_command(runner, cli.package, ['outdir']) > assert result.exit_code == 0, result.output E AssertionError: E assert 1 == 0 E + where 1 = .exit_code tests/functional/cli/test_cli.py:244: AssertionError ______________________ test_can_package_with_yaml_command ______________________ runner = def test_can_package_with_yaml_command(runner): with runner.isolated_filesystem(): newproj.create_new_project_skeleton('testproject') os.chdir('testproject') result = _run_cli_command(runner, cli.package, ['--template-format', 'yaml', 'outdir']) > assert result.exit_code == 0, result.output E AssertionError: E assert 1 == 0 E + where 1 = .exit_code tests/functional/cli/test_cli.py:257: AssertionError ____________________ test_case_insensitive_template_format _____________________ runner = def test_case_insensitive_template_format(runner): with runner.isolated_filesystem(): newproj.create_new_project_skeleton('testproject') os.chdir('testproject') result = _run_cli_command(runner, cli.package, ['--template-format', 'YAML', 'outdir']) > assert result.exit_code == 0, result.output E AssertionError: E assert 1 == 0 E + where 1 = .exit_code tests/functional/cli/test_cli.py:270: AssertionError ______________________ test_can_package_with_single_file _______________________ runner = def test_can_package_with_single_file(runner): with runner.isolated_filesystem(): newproj.create_new_project_skeleton('testproject') os.chdir('testproject') result = _run_cli_command( runner, cli.package, ['--single-file', 'package.zip']) > assert result.exit_code == 0, result.output E AssertionError: E assert 1 == 0 E + where 1 = .exit_code tests/functional/cli/test_cli.py:281: AssertionError _______________________ test_debug_flag_enables_logging ________________________ runner = def test_debug_flag_enables_logging(runner): with runner.isolated_filesystem(): newproj.create_new_project_skeleton('testproject') os.chdir('testproject') result = runner.invoke( cli.cli, ['--debug', 'package', 'outdir'], obj={}) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/functional/cli/test_cli.py:311: AssertionError ------------------------------ Captured log call ------------------------------- DEBUG botocore.hooks:hooks.py:482 Changing event name from creating-client-class.iot-data to creating-client-class.iot-data-plane DEBUG botocore.hooks:hooks.py:482 Changing event name from before-call.apigateway to before-call.api-gateway DEBUG botocore.hooks:hooks.py:482 Changing event name from request-created.machinelearning.Predict to request-created.machine-learning.Predict DEBUG botocore.hooks:hooks.py:482 Changing event name from before-parameter-build.autoscaling.CreateLaunchConfiguration to before-parameter-build.auto-scaling.CreateLaunchConfiguration DEBUG botocore.hooks:hooks.py:482 Changing event name from before-parameter-build.route53 to before-parameter-build.route-53 DEBUG botocore.hooks:hooks.py:482 Changing event name from request-created.cloudsearchdomain.Search to request-created.cloudsearch-domain.Search DEBUG botocore.hooks:hooks.py:482 Changing event name from docs.*.autoscaling.CreateLaunchConfiguration.complete-section to docs.*.auto-scaling.CreateLaunchConfiguration.complete-section DEBUG botocore.hooks:hooks.py:482 Changing event name from before-parameter-build.logs.CreateExportTask to before-parameter-build.cloudwatch-logs.CreateExportTask DEBUG botocore.hooks:hooks.py:482 Changing event name from docs.*.logs.CreateExportTask.complete-section to docs.*.cloudwatch-logs.CreateExportTask.complete-section DEBUG botocore.hooks:hooks.py:482 Changing event name from before-parameter-build.cloudsearchdomain.Search to before-parameter-build.cloudsearch-domain.Search DEBUG botocore.hooks:hooks.py:482 Changing event name from docs.*.cloudsearchdomain.Search.complete-section to docs.*.cloudsearch-domain.Search.complete-section DEBUG botocore.loaders:loaders.py:181 Loading JSON file: /usr/lib/python3/site-packages/botocore/data/endpoints.json _________________________ test_can_analyze_chalice_app _________________________ def test_can_analyze_chalice_app(): > assert chalice_aws_calls("""\ from chalice import Chalice import boto3 app = Chalice(app_name='james1') ec2 = boto3.client('ec2') @app.route('/') def index(): ec2.describe_instances() return {} """) == {'ec2': set(['describe_instances'])} tests/unit/test_analyzer.py:44: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:21: in chalice_aws_calls calls = analyzer.get_client_calls_for_app(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:74: in get_client_calls_for_app binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:683: in bind_types self._type_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='app', ctx=Store())], value=Call(func=Name(id='Chalice', ctx=Load(...)), args=[], keywords=[keyword(arg='app_name', value=Constant(...))]), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError ---------------------------- Captured log teardown ----------------------------- DEBUG chalice.cli.filewatch.stat:stat.py:79 File added: /usr/src/tmp/pytest-of-builder/pytest-0/test_can_reload_when_file_crea1/foo, triggering restart. DEBUG chalice.cli.filewatch.stat:stat.py:84 File updated: /usr/src/tmp/pytest-of-builder/pytest-0/test_can_reload_when_file_modi1/foo, triggering restart. DEBUG chalice.cli.filewatch.stat:stat.py:79 File added: /usr/src/tmp/pytest-of-builder/pytest-0/test_can_reload_when_subdir_fi1/subdir/foo.txt, triggering restart. __________________________ test_inferred_module_type ___________________________ def test_inferred_module_type(): > assert known_types_for_module("""\ import boto3 import os a = 1 """) == {'boto3': Boto3ModuleType()} tests/unit/test_analyzer.py:60: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:29: in known_types_for_module t.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='a', ctx=Store())], value=Constant(value=1, kind=None), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError ______________________ test_recursive_comprehension_none _______________________ def test_recursive_comprehension_none(): > assert aws_calls("""\ xs = [] def recursive_function(): [recursive_function() for x in xs] recursive_function() """) == {} tests/unit/test_analyzer.py:76: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='xs', ctx=Store())], value=List(elts=[], ctx=Load()), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError _____________________ test_recursive_function_client_calls _____________________ def test_recursive_function_client_calls(): > assert aws_calls("""\ import boto3 def recursive_function(): recursive_function() boto3.client('ec2').describe_instances() recursive_function() """) == {'ec2': set(['describe_instances'])} tests/unit/test_analyzer.py:85: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:477: in visit_Call self._infer_function_call(node) chalice/analyzer.py:507: in _infer_function_call child_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:540: in visit_FunctionDef self.visit(child) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:477: in visit_Call self._infer_function_call(node) chalice/analyzer.py:507: in _infer_function_call child_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:540: in visit_FunctionDef self.visit(child) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:444: in visit_Call self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:424: in visit_Attribute self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='ec2', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError ____________________________ test_mutual_recursion _____________________________ def test_mutual_recursion(): > assert aws_calls("""\ import boto3 ec2 = boto3.client('ec2') def a(): b() ec2.run_instances() def b(): ec2.describe_instances() a() a() """) == {'ec2': set(['describe_instances', 'run_instances'])} tests/unit/test_analyzer.py:95: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='ec2', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError __________________________ test_inferred_client_type ___________________________ def test_inferred_client_type(): > assert known_types_for_module("""\ import boto3 a = boto3.client('ec2') """) == {'boto3': Boto3ModuleType(), 'a': Boto3ClientType('ec2')} tests/unit/test_analyzer.py:138: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:29: in known_types_for_module t.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='ec2', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError _____________________ test_inferred_client_type_each_part ______________________ def test_inferred_client_type_each_part(): > assert known_types_for_module("""\ import boto3 a = boto3.client b = a('ec2') """) == {'boto3': Boto3ModuleType(), 'a': Boto3CreateClientType(), 'b': Boto3ClientType('ec2')} tests/unit/test_analyzer.py:146: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:29: in known_types_for_module t.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Name(id='a', ctx=Load()), args=[Constant(value='ec2', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError ___________________________ test_infer_client_method ___________________________ def test_infer_client_method(): > assert known_types_for_module("""\ import boto3 a = boto3.client('ec2').describe_instances """) == {'boto3': Boto3ModuleType(), 'a': Boto3ClientMethodType('ec2', 'describe_instances')} tests/unit/test_analyzer.py:156: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:29: in known_types_for_module t.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:424: in visit_Attribute self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='ec2', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError _______________________ test_infer_client_method_called ________________________ def test_infer_client_method_called(): > assert known_types_for_module("""\ import boto3 a = boto3.client('ec2').describe_instances() """) == {'boto3': Boto3ModuleType(), 'a': Boto3ClientMethodCallType('ec2', 'describe_instances')} tests/unit/test_analyzer.py:164: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:29: in known_types_for_module t.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:444: in visit_Call self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:424: in visit_Attribute self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='ec2', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError ______________________ test_infer_type_on_function_scope _______________________ def test_infer_type_on_function_scope(): > assert known_types_for_function("""\ import boto3 def foo(): d = boto3.client('dynamodb') e = d.list_tables() foo() """, name='foo') == { 'd': Boto3ClientType('dynamodb'), 'e': Boto3ClientMethodCallType('dynamodb', 'list_tables') } tests/unit/test_analyzer.py:172: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:38: in known_types_for_function t.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:477: in visit_Call self._infer_function_call(node) chalice/analyzer.py:507: in _infer_function_call child_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:540: in visit_FunctionDef self.visit(child) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError _______________________ test_can_understand_return_types _______________________ def test_can_understand_return_types(): > assert known_types_for_module("""\ import boto3 def create_client(): d = boto3.client('dynamodb') return d e = create_client() """) == { 'boto3': Boto3ModuleType(), 'create_client': FunctionType(Boto3ClientType('dynamodb')), 'e': Boto3ClientType('dynamodb'), } tests/unit/test_analyzer.py:185: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:29: in known_types_for_module t.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:477: in visit_Call self._infer_function_call(node) chalice/analyzer.py:507: in _infer_function_call child_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:540: in visit_FunctionDef self.visit(child) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError _______________________________ test_single_call _______________________________ def test_single_call(): > assert aws_calls("""\ import boto3 d = boto3.client('dynamodb') d.list_tables() """) == {'dynamodb': set(['list_tables'])} tests/unit/test_analyzer.py:216: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError _____________________________ test_multiple_calls ______________________________ def test_multiple_calls(): > assert aws_calls("""\ import boto3 d = boto3.client('dynamodb') d.list_tables() d.create_table(TableName='foobar') """) == {'dynamodb': set(['list_tables', 'create_table'])} tests/unit/test_analyzer.py:224: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError ____________________________ test_multiple_services ____________________________ def test_multiple_services(): > assert aws_calls("""\ import boto3 d = boto3.client('dynamodb') asdf = boto3.client('s3') d.list_tables() asdf.get_object(Bucket='foo', Key='bar') d.create_table(TableName='foobar') """) == {'dynamodb': set(['list_tables', 'create_table']), 's3': set(['get_object'])} tests/unit/test_analyzer.py:233: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError ---------------------------- Captured log teardown ----------------------------- DEBUG chalice.cli.filewatch.stat:stat.py:79 File added: /usr/src/tmp/pytest-of-builder/pytest-0/test_can_reload_when_file_crea1/foo, triggering restart. _____________________________ test_basic_aliasing ______________________________ def test_basic_aliasing(): > assert aws_calls("""\ import boto3 d = boto3.client('dynamodb') alias = d alias.list_tables() """) == {'dynamodb': set(['list_tables'])} tests/unit/test_analyzer.py:245: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError ------------------------------ Captured log setup ------------------------------ DEBUG chalice.cli.filewatch.stat:stat.py:84 File updated: /usr/src/tmp/pytest-of-builder/pytest-0/test_can_reload_when_file_modi1/foo, triggering restart. ------------------------------ Captured log call ------------------------------- DEBUG chalice.cli.filewatch.stat:stat.py:79 File added: /usr/src/tmp/pytest-of-builder/pytest-0/test_can_reload_when_subdir_fi1/subdir/foo.txt, triggering restart. ____________________________ test_multiple_aliasing ____________________________ def test_multiple_aliasing(): > assert aws_calls("""\ import boto3 d = boto3.client('dynamodb') alias = d alias2 = alias alias3 = alias2 alias3.list_tables() """) == {'dynamodb': set(['list_tables'])} tests/unit/test_analyzer.py:254: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError ______________________ test_multiple_aliasing_non_chained ______________________ def test_multiple_aliasing_non_chained(): > assert aws_calls("""\ import boto3 d = boto3.client('dynamodb') alias = d alias2 = alias alias3 = alias alias3.list_tables() """) == {'dynamodb': set(['list_tables'])} tests/unit/test_analyzer.py:265: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError _________________________ test_original_name_replaced __________________________ def test_original_name_replaced(): > assert aws_calls("""\ import boto3 import some_other_thing d = boto3.client('dynamodb') d.list_tables() d = some_other_thing d.create_table() """) == {'dynamodb': set(['list_tables'])} tests/unit/test_analyzer.py:282: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError ____________________________ test_multiple_targets _____________________________ def test_multiple_targets(): > assert aws_calls("""\ import boto3 a = b = boto3.client('dynamodb') b.list_tables() a.create_table() """) == {'dynamodb': set(['create_table', 'list_tables'])} tests/unit/test_analyzer.py:293: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError _______________________________ test_in_function _______________________________ def test_in_function(): > assert aws_calls("""\ import boto3 def foo(): d = boto3.client('dynamodb') d.list_tables() foo() """) == {'dynamodb': set(['list_tables'])} tests/unit/test_analyzer.py:302: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:477: in visit_Call self._infer_function_call(node) chalice/analyzer.py:507: in _infer_function_call child_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:540: in visit_FunctionDef self.visit(child) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError _________________________ test_ignores_built_in_scope __________________________ def test_ignores_built_in_scope(): > assert aws_calls("""\ import boto3 a = boto3.client('dynamodb') def foo(): if a is not None: try: a.list_tables() except Exception as e: a.create_table() foo() """) == {'dynamodb': set(['create_table', 'list_tables'])} tests/unit/test_analyzer.py:312: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError ___________________________ test_understands_scopes ____________________________ def test_understands_scopes(): > assert aws_calls("""\ import boto3, mock d = mock.Mock() def foo(): d = boto3.client('dynamodb') d.list_tables() """) == {} tests/unit/test_analyzer.py:326: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='d', ctx=Store())], value=Call(func=Attribute(value=Name(...), attr='Mock', ctx=Load(...)), args=[], keywords=[]), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError __________________________ test_function_return_types __________________________ def test_function_return_types(): > assert aws_calls("""\ import boto3 def create_client(): return boto3.client('dynamodb') create_client().list_tables() """) == {'dynamodb': set(['list_tables'])} tests/unit/test_analyzer.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:444: in visit_Call self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:424: in visit_Attribute self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:477: in visit_Call self._infer_function_call(node) chalice/analyzer.py:507: in _infer_function_call child_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:540: in visit_FunctionDef self.visit(child) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:563: in visit_Return self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError _________________________ test_propagates_return_types _________________________ def test_propagates_return_types(): > assert aws_calls("""\ import boto3 def create_client1(): return create_client2() def create_client2(): return create_client3() def create_client3(): return boto3.client('dynamodb') create_client1().list_tables() """) == {'dynamodb': set(['list_tables'])} tests/unit/test_analyzer.py:345: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:444: in visit_Call self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:424: in visit_Attribute self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:477: in visit_Call self._infer_function_call(node) chalice/analyzer.py:507: in _infer_function_call child_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:540: in visit_FunctionDef self.visit(child) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:563: in visit_Return self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:477: in visit_Call self._infer_function_call(node) chalice/analyzer.py:507: in _infer_function_call child_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:540: in visit_FunctionDef self.visit(child) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:563: in visit_Return self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:477: in visit_Call self._infer_function_call(node) chalice/analyzer.py:507: in _infer_function_call child_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:540: in visit_FunctionDef self.visit(child) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:563: in visit_Return self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError ________________________ test_decorator_list_is_ignored ________________________ def test_decorator_list_is_ignored(): > assert known_types_for_function("""\ import boto3 import decorators @decorators.retry(10) def foo(): d = boto3.client('dynamodb') e = d.list_tables() foo() """, name='foo') == { 'd': Boto3ClientType('dynamodb'), 'e': Boto3ClientMethodCallType('dynamodb', 'list_tables') } tests/unit/test_analyzer.py:358: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:38: in known_types_for_function t.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:477: in visit_Call self._infer_function_call(node) chalice/analyzer.py:507: in _infer_function_call child_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:540: in visit_FunctionDef self.visit(child) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError _________________________ test_can_map_function_params _________________________ def test_can_map_function_params(): > assert aws_calls("""\ import boto3 d = boto3.client('dynamodb') def make_call(client): a = 1 return client.list_tables() make_call(d) """) == {'dynamodb': set(['list_tables'])} tests/unit/test_analyzer.py:374: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError ---------------------------- Captured log teardown ----------------------------- DEBUG chalice.cli.filewatch.stat:stat.py:79 File added: /usr/src/tmp/pytest-of-builder/pytest-0/test_can_reload_when_subdir_fi1/subdir/foo.txt, triggering restart. _______________ test_can_understand_shadowed_vars_from_func_arg ________________ def test_can_understand_shadowed_vars_from_func_arg(): > assert aws_calls("""\ import boto3 d = boto3.client('dynamodb') def make_call(d): return d.list_tables() make_call('foo') """) == {} tests/unit/test_analyzer.py:385: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError ______________ test_can_understand_shadowed_vars_from_local_scope ______________ def test_can_understand_shadowed_vars_from_local_scope(): > assert aws_calls("""\ import boto3, mock d = boto3.client('dynamodb') def make_call(e): d = mock.Mock() return d.list_tables() make_call(d) """) == {} tests/unit/test_analyzer.py:395: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError ___________________ test_can_map_function_with_multiple_args ___________________ def test_can_map_function_with_multiple_args(): > assert aws_calls("""\ import boto3, mock m = mock.Mock() d = boto3.client('dynamodb') def make_call(other, client): a = 1 other.create_table() return client.list_tables() make_call(m, d) """) == {'dynamodb': set(['list_tables'])} tests/unit/test_analyzer.py:406: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='m', ctx=Store())], value=Call(func=Attribute(value=Name(...), attr='Mock', ctx=Load(...)), args=[], keywords=[]), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError _________________________ test_multiple_function_calls _________________________ def test_multiple_function_calls(): > assert aws_calls("""\ import boto3, mock m = mock.Mock() d = boto3.client('dynamodb') def make_call(other, client): a = 1 other.create_table() return other_call(a, 2, 3, client) def other_call(a, b, c, client): return client.list_tables() make_call(m, d) """) == {'dynamodb': set(['list_tables'])} tests/unit/test_analyzer.py:419: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='m', ctx=Store())], value=Call(func=Attribute(value=Name(...), attr='Mock', ctx=Load(...)), args=[], keywords=[]), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError ____________________ test_can_lookup_var_names_to_functions ____________________ def test_can_lookup_var_names_to_functions(): > assert aws_calls("""\ import boto3 service_name = 'dynamodb' d = boto3.client(service_name) d.list_tables() """) == {'dynamodb': set(['list_tables'])} tests/unit/test_analyzer.py:434: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='service_name', ctx=Store())], value=Constant(value='dynamodb', kind=None), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError ____________________ test_map_string_literals_across_scopes ____________________ def test_map_string_literals_across_scopes(): > assert aws_calls("""\ import boto3 service_name = 'dynamodb' def foo(): service_name = 's3' d = boto3.client(service_name) d.list_buckets() d = boto3.client(service_name) d.list_tables() foo() """) == {'s3': set(['list_buckets']), 'dynamodb': set(['list_tables'])} tests/unit/test_analyzer.py:443: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='service_name', ctx=Store())], value=Constant(value='dynamodb', kind=None), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError ________________________ test_can_handle_lambda_keyword ________________________ def test_can_handle_lambda_keyword(): > assert aws_calls("""\ def foo(a): return sorted(bar.values(), key=lambda x: x.baz[a - 1], reverse=True) bar = {} foo(12) """) == {} tests/unit/test_analyzer.py:457: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='bar', ctx=Store())], value=Dict(keys=[], values=[]), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError _____________________ test_dict_comp_with_no_client_calls ______________________ def test_dict_comp_with_no_client_calls(): > assert aws_calls("""\ import boto3 foo = {i: i for i in range(10)} """) == {} tests/unit/test_analyzer.py:468: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='foo', ctx=Store())], value=DictComp(key=Name(id='i', ctx=Load(...)), value=Name(id='i', ctx=Load(...)), generators=[comprehension(target=Name(...), iter=Call(...), ifs=[], is_async=0)]), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError ______________________ test_can_detect_calls_in_gen_expr _______________________ def test_can_detect_calls_in_gen_expr(): > assert aws_calls("""\ import boto3 service_name = 'dynamodb' d = boto3.client('dynamodb') (d.list_tables() for i in [1,2,3]) """) == {'dynamodb': set(['list_tables'])} tests/unit/test_analyzer.py:482: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='service_name', ctx=Store())], value=Constant(value='dynamodb', kind=None), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError ________________________ test_can_handle_gen_from_call _________________________ def test_can_handle_gen_from_call(): > assert aws_calls("""\ import boto3 service_name = 'dynamodb' d = boto3.client('dynamodb') (i for i in d.list_tables()) """) == {'dynamodb': set(['list_tables'])} tests/unit/test_analyzer.py:491: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='service_name', ctx=Store())], value=Constant(value='dynamodb', kind=None), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError _________________ test_can_detect_calls_in_multiple_gen_exprs __________________ def test_can_detect_calls_in_multiple_gen_exprs(): > assert aws_calls("""\ import boto3 d = boto3.client('dynamodb') (d for i in [1,2,3]) (d.list_tables() for j in [1,2,3]) """) == {'dynamodb': set(['list_tables'])} tests/unit/test_analyzer.py:500: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError ___________________ test_can_handle_list_expr_with_api_calls ___________________ def test_can_handle_list_expr_with_api_calls(): > assert aws_calls("""\ import boto3 d = boto3.client('dynamodb') [d.list_tables() for y in [1,2,3]] """) == {'dynamodb': set(['list_tables'])} tests/unit/test_analyzer.py:516: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError ______________________ test_can_handle_multiple_listcomps ______________________ def test_can_handle_multiple_listcomps(): > assert aws_calls("""\ bar_key = 'bar' baz_key = 'baz' items = [{'foo': 'sun', 'bar': 'moon', 'baz': 'stars'}] foos = [i['foo'] for i in items] bars = [j[bar_key] for j in items] bazs = [k[baz_key] for k in items] """) == {} tests/unit/test_analyzer.py:524: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='bar_key', ctx=Store())], value=Constant(value='bar', kind=None), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError _______________________ test_can_analyze_lambda_function _______________________ def test_can_analyze_lambda_function(): > assert chalice_aws_calls("""\ from chalice import Chalice import boto3 app = Chalice(app_name='james1') ec2 = boto3.client('ec2') @app.lambda_function(name='lambda1') def index(): ec2.describe_instances() return {} """) == {'ec2': set(['describe_instances'])} tests/unit/test_analyzer.py:535: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:21: in chalice_aws_calls calls = analyzer.get_client_calls_for_app(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:74: in get_client_calls_for_app binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:683: in bind_types self._type_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='app', ctx=Store())], value=Call(func=Name(id='Chalice', ctx=Load(...)), args=[], keywords=[keyword(arg='app_name', value=Constant(...))]), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError __________________________ test_can_analyze_schedule ___________________________ def test_can_analyze_schedule(): > assert chalice_aws_calls("""\ from chalice import Chalice import boto3 app = Chalice(app_name='james1') s3cli = boto3.client('s3') @app.schedule('rate(1 hour)') def index(): s3cli.list_buckets() return {} """) == {'s3': set(['list_buckets'])} tests/unit/test_analyzer.py:548: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:21: in chalice_aws_calls calls = analyzer.get_client_calls_for_app(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:74: in get_client_calls_for_app binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:683: in bind_types self._type_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='app', ctx=Store())], value=Call(func=Name(id='Chalice', ctx=Load(...)), args=[], keywords=[keyword(arg='app_name', value=Constant(...))]), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError _________________________ test_can_analyze_combination _________________________ def test_can_analyze_combination(): > assert chalice_aws_calls("""\ from chalice import Chalice import boto3 app = Chalice(app_name='james1') s3 = boto3.client('s3') ec = boto3.client('ec2') @app.route('/') def index(): ec2.describe_instances() return {} @app.schedule('rate(1 hour)') def index_sc(): s3.list_buckets() return {} @app.lambda_function(name='lambda1') def index_lm(): ec.describe_instances() return {} @random def foo(): return {} """) == {'s3': set(['list_buckets']), 'ec2': set(['describe_instances'])} tests/unit/test_analyzer.py:561: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:21: in chalice_aws_calls calls = analyzer.get_client_calls_for_app(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:74: in get_client_calls_for_app binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:683: in bind_types self._type_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='app', ctx=Store())], value=Call(func=Name(id='Chalice', ctx=Load(...)), args=[], keywords=[keyword(arg='app_name', value=Constant(...))]), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError __________________________ test_can_handle_dict_comp ___________________________ def test_can_handle_dict_comp(): > assert aws_calls("""\ import boto3 ddb = boto3.client('dynamodb') tables = {t: t for t in ddb.list_tables()} """) == {'dynamodb': set(['list_tables'])} tests/unit/test_analyzer.py:590: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError _________________________ test_can_handle_dict_comp_if _________________________ def test_can_handle_dict_comp_if(): > assert aws_calls("""\ import boto3 ddb = boto3.client('dynamodb') tables = {t: t for t in [1] if ddb.list_tables()} """) == {'dynamodb': set(['list_tables'])} tests/unit/test_analyzer.py:598: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError ________________________ test_can_handle_dict_comp_ifs _________________________ def test_can_handle_dict_comp_ifs(): > assert aws_calls("""\ import boto3 d = boto3.client('dynamodb') {x: y for x in d.create_table()\ for y in d.update_table()\ if d.list_tables()} {x: y for x in d.create_table()\ for y in d.update_table()\ if d.list_tables()} """) == {'dynamodb': set(['list_tables', 'create_table', 'update_table'])} tests/unit/test_analyzer.py:612: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError _________________________ test_can_handle_async_await __________________________ @pytest.mark.skipif(sys.version[0] == '2', reason=( 'Async await syntax is not in Python 2' )) def test_can_handle_async_await(): > assert aws_calls("""\ import boto3 import asyncio async def test(): d = boto3.client('dynamodb') d.list_tables() await asyncio.sleep(1) test() """) == {'dynamodb': set(['list_tables'])} tests/unit/test_analyzer.py:628: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:15: in aws_calls calls = analyzer.get_client_calls(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:57: in get_client_calls binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:477: in visit_Call self._infer_function_call(node) chalice/analyzer.py:507: in _infer_function_call child_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:549: in visit_AsyncFunctionDef self.visit_FunctionDef(converted) chalice/analyzer.py:540: in visit_FunctionDef self.visit(child) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='dynamodb', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError _________________________ test_can_analyze_custom_auth _________________________ def test_can_analyze_custom_auth(): > assert chalice_aws_calls("""\ from chalice import Chalice import boto3 ec2 = boto3.client('ec2') app = Chalice(app_name='custom-auth') @app.authorizer() def index(auth_request): ec2.describe_instances() return {} """) == {'ec2': set(['describe_instances'])} tests/unit/test_analyzer.py:640: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:21: in chalice_aws_calls calls = analyzer.get_client_calls_for_app(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:74: in get_client_calls_for_app binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:683: in bind_types self._type_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='ec2', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError __________________________ test_can_analyze_s3_events __________________________ def test_can_analyze_s3_events(): > assert chalice_aws_calls("""\ from chalice import Chalice import boto3 s3 = boto3.client('s3') app = Chalice(app_name='s3-event') @app.on_s3_event(bucket='mybucket') def index(event): s3.list_buckets() return {} """) == {'s3': set(['list_buckets'])} tests/unit/test_analyzer.py:655: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:21: in chalice_aws_calls calls = analyzer.get_client_calls_for_app(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:74: in get_client_calls_for_app binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:683: in bind_types self._type_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='s3', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError _________________________ test_can_analyze_sns_events __________________________ def test_can_analyze_sns_events(): > assert chalice_aws_calls("""\ from chalice import Chalice import boto3 s3 = boto3.client('s3') app = Chalice(app_name='sns-event') @app.on_sns_message(topic='mytopic') def index(event): s3.list_buckets() return {} """) == {'s3': set(['list_buckets'])} tests/unit/test_analyzer.py:670: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:21: in chalice_aws_calls calls = analyzer.get_client_calls_for_app(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:74: in get_client_calls_for_app binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:683: in bind_types self._type_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='s3', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError _________________________ test_can_analyze_sqs_events __________________________ def test_can_analyze_sqs_events(): > assert chalice_aws_calls("""\ from chalice import Chalice import boto3 s3 = boto3.client('s3') app = Chalice(app_name='sqs-event') @app.on_sqs_message(queue='myqueue') def index(event): s3.list_buckets() return {} """) == {'s3': set(['list_buckets'])} tests/unit/test_analyzer.py:685: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:21: in chalice_aws_calls calls = analyzer.get_client_calls_for_app(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:74: in get_client_calls_for_app binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:683: in bind_types self._type_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='s3', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError __________________ test_can_analyze_transfer_manager_methods ___________________ def test_can_analyze_transfer_manager_methods(): > assert chalice_aws_calls("""\ from chalice import Chalice import boto3 s3 = boto3.client('s3') app = Chalice(app_name='sqs-event') @app.on_s3_event(bucket='mybucket') def index(event): s3.download_file(event.bucket, event.key, 'foo') return {} """) == {'s3': set(['download_file'])} tests/unit/test_analyzer.py:700: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:21: in chalice_aws_calls calls = analyzer.get_client_calls_for_app(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:74: in get_client_calls_for_app binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:683: in bind_types self._type_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ chalice/analyzer.py:410: in visit_Assign self.generic_visit(node) /usr/lib/python3.14/ast.py:517: in generic_visit self.visit(value) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Call(func=Attribute(value=Name(id='boto3', ctx=Load(...)), attr='client', ctx=Load()), args=[Constant(value='s3', kind=None)], keywords=[]) def visit_Call(self, node): # type: (ast.Call) -> None self.generic_visit(node) # func -> Node that's being called # args -> Arguments being passed. inferred_func_type = self._get_inferred_type_for_node(node.func) if inferred_func_type == Boto3CreateClientType(): # e_0 : B3CCT -> B3CT[S] # e_1 : S str which is a service name # e_0(e_1) : B3CT[e_1] if len(node.args) >= 1: service_arg = node.args[0] > if isinstance(service_arg, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:454: AttributeError ___________________ test_can_handle_replacing_function_name ____________________ def test_can_handle_replacing_function_name(): > assert chalice_aws_calls("""\ from chalice import Chalice import boto3 app = Chalice(app_name='sqs-event') def index(): pass @app.on_sqs_message(queue='myqueue') def index(event): foo = boto3.client('s3').list_buckets() """) == {'s3': set(['list_buckets'])} tests/unit/test_analyzer.py:715: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:21: in chalice_aws_calls calls = analyzer.get_client_calls_for_app(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:74: in get_client_calls_for_app binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:683: in bind_types self._type_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='app', ctx=Store())], value=Call(func=Name(id='Chalice', ctx=Load(...)), args=[], keywords=[keyword(arg='app_name', value=Constant(...))]), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError ______________________ test_can_handle_multiple_shadowing ______________________ def test_can_handle_multiple_shadowing(): > assert chalice_aws_calls("""\ from chalice import Chalice import boto3 app = Chalice(app_name='sqs-event') def index(): pass @app.on_sqs_message(queue='myqueue') def index(event): foo = boto3.client('s3').list_buckets() @app.on_s3_event(bucket='mybucket') def index(event): bar = boto3.client('s3').head_bucket(Bucket='foo') """) == {'s3': set(['list_buckets', 'head_bucket'])} tests/unit/test_analyzer.py:732: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:21: in chalice_aws_calls calls = analyzer.get_client_calls_for_app(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:74: in get_client_calls_for_app binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:683: in bind_types self._type_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='app', ctx=Store())], value=Call(func=Name(id='Chalice', ctx=Load(...)), args=[], keywords=[keyword(arg='app_name', value=Constant(...))]), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError _____________________ test_can_handle_forward_declaration ______________________ def test_can_handle_forward_declaration(): > assert chalice_aws_calls("""\ from chalice import Chalice import boto3 app = Chalice(app_name='forward-declaration') def get_regions(): return boto3.client('s3').list_buckets() @app.route('/') def index(): return get_regions() """) == {'s3': set(['list_buckets'])} tests/unit/test_analyzer.py:753: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:21: in chalice_aws_calls calls = analyzer.get_client_calls_for_app(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:74: in get_client_calls_for_app binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:683: in bind_types self._type_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='app', ctx=Store())], value=Call(func=Name(id='Chalice', ctx=Load(...)), args=[], keywords=[keyword(arg='app_name', value=Constant(...))]), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError _______________________ test_can_handle_post_declaration _______________________ def test_can_handle_post_declaration(): > assert chalice_aws_calls("""\ from chalice import Chalice import boto3 app = Chalice(app_name='post-declaration') @app.route('/') def index(): return get_regions() def get_regions(): return boto3.client('s3').list_buckets() """) == {'s3': set(['list_buckets'])} tests/unit/test_analyzer.py:770: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:21: in chalice_aws_calls calls = analyzer.get_client_calls_for_app(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:74: in get_client_calls_for_app binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:683: in bind_types self._type_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='app', ctx=Store())], value=Call(func=Name(id='Chalice', ctx=Load(...)), args=[], keywords=[keyword(arg='app_name', value=Constant(...))]), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError _____________________ test_can_handle_shadowed_declaration _____________________ def test_can_handle_shadowed_declaration(): > assert chalice_aws_calls("""\ from chalice import Chalice import boto3 app = Chalice(app_name='shadowed-declaration') def get_regions(): return boto3.client('s3').list_buckets() @app.route('/') def index(): return get_regions() def get_regions(): return boto3.client('s3').head_bucket(Bucket='foo') """) == {'s3': set(['head_bucket'])} tests/unit/test_analyzer.py:787: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_analyzer.py:21: in chalice_aws_calls calls = analyzer.get_client_calls_for_app(real_source_code) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ chalice/analyzer.py:74: in get_client_calls_for_app binder = t.bind_types() ^^^^^^^^^^^^^^ chalice/analyzer.py:683: in bind_types self._type_infer.bind_types() chalice/analyzer.py:352: in bind_types self.visit(self._current_ast_namespace) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:515: in generic_visit self.visit(item) chalice/analyzer.py:662: in visit return ast.NodeVisitor.visit(self, node) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/ast.py:507: in visit return visitor(node) ^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = node = Assign(targets=[Name(id='app', ctx=Store())], value=Call(func=Name(id='Chalice', ctx=Load(...)), args=[], keywords=[keyword(arg='app_name', value=Constant(...))]), type_comment=None) def visit_Assign(self, node): # type: (ast.Assign) -> None # The LHS gets the inferred type of the RHS. # We do this post-traversal to let the type inference # run on the children first. self.generic_visit(node) rhs_inferred_type = self._get_inferred_type_for_node(node.value) if rhs_inferred_type is None: # Special casing assignment to a string literal. > if isinstance(node.value, ast.Str): ^^^^^^^ E AttributeError: module 'ast' has no attribute 'Str' chalice/analyzer.py:414: AttributeError _________________________ test_can_load_python_version _________________________ def test_can_load_python_version(): c = Config('dev') major, minor = sys.version_info[0], sys.version_info[1] > assert c.lambda_python_version == f'python{major}.{minor}' E AssertionError: assert 'python3.13' == 'python3.14' E E - python3.14 E ? ^ E + python3.13 E ? ^ tests/unit/test_config.py:370: AssertionError =============================== warnings summary =============================== tests/functional/cli/test_cli.py::test_create_new_project_creates_app tests/functional/cli/test_cli.py::test_create_project_with_prompted_app_name tests/functional/cli/test_cli.py::test_can_load_project_config_after_project_creation tests/functional/cli/test_cli.py::test_default_new_project_adds_index_route tests/functional/cli/test_cli.py::test_cli_with_absolute_path[None] tests/functional/cli/test_cli.py::test_cli_with_absolute_path[.] tests/functional/cli/test_cli.py::test_cli_with_absolute_path[getcwd] tests/functional/cli/test_cli.py::test_chalice_cli_mode_env_var_always_set /usr/src/RPM/BUILD/chalice-1.32.0/chalice/cli/__init__.py:425: UserWarning: You are currently running python3.14, but the closest supported version on AWS Lambda is python3.13 Please use python3.13, otherwise you may run into deployment issues. validate_python_version(Config.create()) tests/functional/test_deployer.py: 1 warning tests/unit/deploy/test_deployer.py: 2 warnings tests/unit/deploy/test_validate.py: 8 warnings /usr/src/RPM/BUILD/chalice-1.32.0/chalice/deploy/validate.py:46: UserWarning: You are currently running python3.14, but the closest supported version on AWS Lambda is python3.13 Please use python3.13, otherwise you may run into deployment issues. validate_python_version(config) tests/unit/test_app.py::test_can_map_kinesis_event tests/unit/test_app.py::test_can_map_kinesis_event tests/unit/test_test.py::test_can_generate_kinesis_event tests/unit/test_test.py::test_can_generate_kinesis_event tests/unit/test_test.py::test_can_generate_kinesis_event /usr/src/RPM/BUILD/chalice-1.32.0/chalice/app.py:2098: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). self.timestamp: datetime.datetime = datetime.datetime.utcfromtimestamp( tests/unit/test_app.py::test_can_map_ddb_event /usr/src/RPM/BUILD/chalice-1.32.0/chalice/app.py:2115: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). self.timestamp: datetime.datetime = datetime.datetime.utcfromtimestamp( tests/unit/test_app.py::test_bytes_when_binary_type_is_application_json /usr/lib/python3/site-packages/_pytest/python.py:170: PytestReturnNotNoneWarning: Test functions should return None, but tests/unit/test_app.py::test_bytes_when_binary_type_is_application_json returned . Did you mean to use `assert` instead of `return`? See https://docs.pytest.org/en/stable/how-to/assert.html#return-not-none for more information. warnings.warn( tests/unit/test_local.py::TestLocalBuiltinAuthorizers::test_can_understand_cognito_token /usr/src/RPM/BUILD/chalice-1.32.0/chalice/local.py:349: UserWarning: CognitoUserPoolAuthorizer is not a supported in local mode. All requests made against a route will be authorized to allow local testing. warnings.warn( tests/unit/test_logs.py::test_follow_logs_defaults_to_ten_minutes /usr/src/RPM/BUILD/chalice-1.32.0/tests/unit/test_logs.py:285: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). ten_minutes = datetime.utcnow() - timedelta(minutes=10) tests/unit/test_logs.py::test_follow_logs_defaults_to_ten_minutes /usr/src/RPM/BUILD/chalice-1.32.0/chalice/logs.py:41: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). start_time = datetime.utcnow() - timedelta(minutes=10) tests/unit/test_logs.py::test_dont_default_if_explicit_since_is_provided /usr/src/RPM/BUILD/chalice-1.32.0/tests/unit/test_logs.py:291: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). utcnow = datetime.utcnow() -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ FAILED tests/functional/api/test_package.py::test_can_package_different_formats[cloudformation-json-sam.json] FAILED tests/functional/api/test_package.py::test_can_package_different_formats[cloudformation-yaml-sam.yaml] FAILED tests/functional/api/test_package.py::test_can_package_different_formats[terraform-json-chalice.tf.json] FAILED tests/functional/api/test_package.py::test_can_override_chalice_config FAILED tests/functional/cli/test_cli.py::test_gen_policy_command_creates_policy FAILED tests/functional/cli/test_cli.py::test_can_package_command - Assertion... FAILED tests/functional/cli/test_cli.py::test_can_package_with_yaml_command FAILED tests/functional/cli/test_cli.py::test_case_insensitive_template_format FAILED tests/functional/cli/test_cli.py::test_can_package_with_single_file - ... FAILED tests/functional/cli/test_cli.py::test_debug_flag_enables_logging - as... FAILED tests/unit/test_analyzer.py::test_can_analyze_chalice_app - AttributeE... FAILED tests/unit/test_analyzer.py::test_inferred_module_type - AttributeErro... FAILED tests/unit/test_analyzer.py::test_recursive_comprehension_none - Attri... FAILED tests/unit/test_analyzer.py::test_recursive_function_client_calls - At... FAILED tests/unit/test_analyzer.py::test_mutual_recursion - AttributeError: m... FAILED tests/unit/test_analyzer.py::test_inferred_client_type - AttributeErro... FAILED tests/unit/test_analyzer.py::test_inferred_client_type_each_part - Att... FAILED tests/unit/test_analyzer.py::test_infer_client_method - AttributeError... FAILED tests/unit/test_analyzer.py::test_infer_client_method_called - Attribu... FAILED tests/unit/test_analyzer.py::test_infer_type_on_function_scope - Attri... FAILED tests/unit/test_analyzer.py::test_can_understand_return_types - Attrib... FAILED tests/unit/test_analyzer.py::test_single_call - AttributeError: module... FAILED tests/unit/test_analyzer.py::test_multiple_calls - AttributeError: mod... FAILED tests/unit/test_analyzer.py::test_multiple_services - AttributeError: ... FAILED tests/unit/test_analyzer.py::test_basic_aliasing - AttributeError: mod... FAILED tests/unit/test_analyzer.py::test_multiple_aliasing - AttributeError: ... FAILED tests/unit/test_analyzer.py::test_multiple_aliasing_non_chained - Attr... FAILED tests/unit/test_analyzer.py::test_original_name_replaced - AttributeEr... FAILED tests/unit/test_analyzer.py::test_multiple_targets - AttributeError: m... FAILED tests/unit/test_analyzer.py::test_in_function - AttributeError: module... FAILED tests/unit/test_analyzer.py::test_ignores_built_in_scope - AttributeEr... FAILED tests/unit/test_analyzer.py::test_understands_scopes - AttributeError:... FAILED tests/unit/test_analyzer.py::test_function_return_types - AttributeErr... FAILED tests/unit/test_analyzer.py::test_propagates_return_types - AttributeE... FAILED tests/unit/test_analyzer.py::test_decorator_list_is_ignored - Attribut... FAILED tests/unit/test_analyzer.py::test_can_map_function_params - AttributeE... FAILED tests/unit/test_analyzer.py::test_can_understand_shadowed_vars_from_func_arg FAILED tests/unit/test_analyzer.py::test_can_understand_shadowed_vars_from_local_scope FAILED tests/unit/test_analyzer.py::test_can_map_function_with_multiple_args FAILED tests/unit/test_analyzer.py::test_multiple_function_calls - AttributeE... FAILED tests/unit/test_analyzer.py::test_can_lookup_var_names_to_functions - ... FAILED tests/unit/test_analyzer.py::test_map_string_literals_across_scopes - ... FAILED tests/unit/test_analyzer.py::test_can_handle_lambda_keyword - Attribut... FAILED tests/unit/test_analyzer.py::test_dict_comp_with_no_client_calls - Att... FAILED tests/unit/test_analyzer.py::test_can_detect_calls_in_gen_expr - Attri... FAILED tests/unit/test_analyzer.py::test_can_handle_gen_from_call - Attribute... FAILED tests/unit/test_analyzer.py::test_can_detect_calls_in_multiple_gen_exprs FAILED tests/unit/test_analyzer.py::test_can_handle_list_expr_with_api_calls FAILED tests/unit/test_analyzer.py::test_can_handle_multiple_listcomps - Attr... FAILED tests/unit/test_analyzer.py::test_can_analyze_lambda_function - Attrib... FAILED tests/unit/test_analyzer.py::test_can_analyze_schedule - AttributeErro... FAILED tests/unit/test_analyzer.py::test_can_analyze_combination - AttributeE... FAILED tests/unit/test_analyzer.py::test_can_handle_dict_comp - AttributeErro... FAILED tests/unit/test_analyzer.py::test_can_handle_dict_comp_if - AttributeE... FAILED tests/unit/test_analyzer.py::test_can_handle_dict_comp_ifs - Attribute... FAILED tests/unit/test_analyzer.py::test_can_handle_async_await - AttributeEr... FAILED tests/unit/test_analyzer.py::test_can_analyze_custom_auth - AttributeE... FAILED tests/unit/test_analyzer.py::test_can_analyze_s3_events - AttributeErr... FAILED tests/unit/test_analyzer.py::test_can_analyze_sns_events - AttributeEr... FAILED tests/unit/test_analyzer.py::test_can_analyze_sqs_events - AttributeEr... FAILED tests/unit/test_analyzer.py::test_can_analyze_transfer_manager_methods FAILED tests/unit/test_analyzer.py::test_can_handle_replacing_function_name FAILED tests/unit/test_analyzer.py::test_can_handle_multiple_shadowing - Attr... FAILED tests/unit/test_analyzer.py::test_can_handle_forward_declaration - Att... FAILED tests/unit/test_analyzer.py::test_can_handle_post_declaration - Attrib... FAILED tests/unit/test_analyzer.py::test_can_handle_shadowed_declaration - At... FAILED tests/unit/test_config.py::test_can_load_python_version - AssertionErr... === 67 failed, 1097 passed, 15 skipped, 2 deselected, 30 warnings in 46.97s ==== INFO : Command's result: FAILURE INFO : Command's error: Command '['python3', '-m', 'pytest', '--ignore=chalice/templates', '--ignore=docs', '--ignore=tests/aws/test_features.py', '--ignore=tests/aws/test_websockets.py', '--ignore=tests/unit/deploy/test_packager.py', '--ignore=tests/integration/test_package.py', '--ignore=tests/functional/test_awsclient.py', '--deselect=tests/functional/cli/test_cli.py::test_can_generate_pipeline_for_all', '--deselect=tests/functional/test_deployer.py::test_no_error_message_printed_on_empty_reqs_file']' returned non-zero exit status 1. error: Bad exit status from /usr/src/tmp/rpmb-tmp.aawodG (%check) RPM build errors: Bad exit status from /usr/src/tmp/rpmb-tmp.aawodG (%check) Command exited with non-zero status 1 34.67user 3.11system 0:55.67elapsed 67%CPU (0avgtext+0avgdata 344492maxresident)k 0inputs+0outputs (0major+618435minor)pagefaults 0swaps hsh-rebuild: rebuild of `python3-module-chalice-1.32.0-alt1.src.rpm' failed. Command exited with non-zero status 1 7.41user 5.00system 1:23.79elapsed 14%CPU (0avgtext+0avgdata 144912maxresident)k 77176inputs+0outputs (0major+362013minor)pagefaults 0swaps