diff --git a/android_env/components/adb_call_parser.py b/android_env/components/adb_call_parser.py index 9e06bff3..53efe478 100644 --- a/android_env/components/adb_call_parser.py +++ b/android_env/components/adb_call_parser.py @@ -280,7 +280,15 @@ def _install_apk( ['install', '-r', '-t', '-g', fpath], timeout=timeout ) case 'blob': - with tempfile.NamedTemporaryFile(suffix='.apk') as f: + + # `delete_on_close` was only added in Python 3.12 so we add a switch + # here to still support previous Python versions. + if sys.version_info >= (3, 12): + kwargs = {'suffix': '.apk', 'delete_on_close': False} + else: + kwargs = {'suffix': '.apk'} + + with tempfile.NamedTemporaryFile(**kwargs) as f: fpath = f.name f.write(install_apk.blob.contents) diff --git a/android_env/components/adb_call_parser_test.py b/android_env/components/adb_call_parser_test.py index 30dd8936..7b178d71 100644 --- a/android_env/components/adb_call_parser_test.py +++ b/android_env/components/adb_call_parser_test.py @@ -98,8 +98,13 @@ def test_install_apk_from_blob(self, mock_tempfile): ['install', '-r', '-t', '-g', '/my/home/test.apk'], None ) # pytype: disable=attribute-error + expected_tempfile_kwargs = ( + {'suffix': '.apk', 'delete_on_close': False} + if sys.version_info > (3, 12) + else {'suffix': '.apk'} + ) mock_tempfile.assert_has_calls([ - mock.call(suffix='.apk'), # Constructor + mock.call(**expected_tempfile_kwargs), # Constructor mock.call().__enter__(), # Enter context mock.call().__enter__().write(blob_content), # Call write function mock.call().__exit__(None, None, None), # Exit context