Skip to content

Commit e2da139

Browse files
vchikoti1998rli
andauthored
Add support for Lambda runtime Python 3.10 (#3594)
* Add support for Lambda runtime Python 3.10 * Added sdk files * detekt issues * Added test data * Changed to official sdks --------- Co-authored-by: Richard Li <[email protected]>
1 parent c3712ee commit e2da139

File tree

14 files changed

+67
-6
lines changed

14 files changed

+67
-6
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "feature",
3+
"description" : "Add support for Lambda runtime Python 3.10"
4+
}

core/src/software/aws/toolkits/core/lambda/LambdaRuntime.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ enum class LambdaRuntime(
2828
PYTHON3_7(Runtime.PYTHON3_7),
2929
PYTHON3_8(Runtime.PYTHON3_8, architectures = ARM_COMPATIBLE),
3030
PYTHON3_9(Runtime.PYTHON3_9, minSamDebugging = "1.28.0", minSamInit = "1.28.0", architectures = ARM_COMPATIBLE),
31+
PYTHON3_10(Runtime.PYTHON3_10, minSamDebugging = "1.78.0", minSamInit = "1.78.0", architectures = ARM_COMPATIBLE),
3132
DOTNET5_0(null, minSamInit = "1.16.0", runtimeOverride = "dotnet5.0"),
3233
DOTNET6_0(Runtime.DOTNET6, minSamDebugging = "1.40.1", minSamInit = "1.40.1", architectures = ARM_COMPATIBLE);
3334

jetbrains-core/it/software/aws/toolkits/jetbrains/services/lambda/python/PythonLocalLambdaRunConfigurationIntegrationTest.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ class PythonLocalLambdaRunConfigurationIntegrationTest(private val runtime: Runt
4545
fun data(): Collection<Array<Runtime>> = listOf(
4646
arrayOf(Runtime.PYTHON3_7),
4747
arrayOf(Runtime.PYTHON3_8),
48-
arrayOf(Runtime.PYTHON3_9)
48+
arrayOf(Runtime.PYTHON3_9),
49+
arrayOf(Runtime.PYTHON3_10)
4950
)
5051
}
5152

jetbrains-core/resources/META-INF/ext-python.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
<sam.imageDebuggerSupport implementation="software.aws.toolkits.jetbrains.services.lambda.python.Python37ImageDebugSupport"/>
2323
<sam.imageDebuggerSupport implementation="software.aws.toolkits.jetbrains.services.lambda.python.Python38ImageDebugSupport"/>
2424
<sam.imageDebuggerSupport implementation="software.aws.toolkits.jetbrains.services.lambda.python.Python39ImageDebugSupport"/>
25+
<sam.imageDebuggerSupport implementation="software.aws.toolkits.jetbrains.services.lambda.python.Python310ImageDebugSupport"/>
2526
<sam.projectWizard id="PYTHON" implementationClass="software.aws.toolkits.jetbrains.services.lambda.python.PythonSamProjectWizard"/>
2627
</extensions>
2728
<extensions defaultExtensionNs="aws.toolkit.codewhisperer">

jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/python/PythonDebugSupport.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,13 @@ class Python39ImageDebugSupport : PythonImageDebugSupport() {
9393
override val bootstrapPath: String = "/var/runtime/bootstrap.py"
9494
}
9595

96+
class Python310ImageDebugSupport : PythonImageDebugSupport() {
97+
override val id: String = LambdaRuntime.PYTHON3_10.toString()
98+
override fun displayName() = LambdaRuntime.PYTHON3_10.toString().capitalize()
99+
override val pythonPath: String = "/var/lang/bin/python3.10"
100+
override val bootstrapPath: String = "/var/runtime/bootstrap.py"
101+
}
102+
96103
private const val DEBUGGER_VOLUME_PATH = "/tmp/lambci_debug_files"
97104

98105
private fun createDebugProcess(

jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/python/PythonRuntimeGroup.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@ class PythonRuntimeGroup : SdkBasedRuntimeGroup() {
2222
override val supportedRuntimes = listOf(
2323
LambdaRuntime.PYTHON3_7,
2424
LambdaRuntime.PYTHON3_8,
25-
LambdaRuntime.PYTHON3_9
25+
LambdaRuntime.PYTHON3_9,
26+
LambdaRuntime.PYTHON3_10
2627
)
2728

2829
override fun runtimeForSdk(sdk: Sdk): LambdaRuntime? = when {
30+
sdk.sdkType is PythonSdkType && PythonSdkType.getLanguageLevelForSdk(sdk).isAtLeast(LanguageLevel.PYTHON310) -> LambdaRuntime.PYTHON3_10
2931
sdk.sdkType is PythonSdkType && PythonSdkType.getLanguageLevelForSdk(sdk).isAtLeast(LanguageLevel.PYTHON39) -> LambdaRuntime.PYTHON3_9
3032
sdk.sdkType is PythonSdkType && PythonSdkType.getLanguageLevelForSdk(sdk).isAtLeast(LanguageLevel.PYTHON38) -> LambdaRuntime.PYTHON3_8
3133
sdk.sdkType is PythonSdkType && PythonSdkType.getLanguageLevelForSdk(sdk).isAtLeast(LanguageLevel.PYTHON37) -> LambdaRuntime.PYTHON3_7

jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/python/PythonSamProjectWizard.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ import software.aws.toolkits.jetbrains.services.lambda.wizard.SdkSelector
2222
import software.aws.toolkits.jetbrains.services.lambda.wizard.TemplateParameters
2323
import software.aws.toolkits.resources.message
2424

25-
private val pythonTemplateRuntimes = setOf(LambdaRuntime.PYTHON3_7, LambdaRuntime.PYTHON3_8, LambdaRuntime.PYTHON3_9)
26-
private val eventBridgeTemplateRuntimes = setOf(LambdaRuntime.PYTHON3_7, LambdaRuntime.PYTHON3_8, LambdaRuntime.PYTHON3_9)
25+
private val pythonTemplateRuntimes = setOf(LambdaRuntime.PYTHON3_7, LambdaRuntime.PYTHON3_8, LambdaRuntime.PYTHON3_9, LambdaRuntime.PYTHON3_10)
26+
private val eventBridgeTemplateRuntimes = setOf(LambdaRuntime.PYTHON3_7, LambdaRuntime.PYTHON3_8, LambdaRuntime.PYTHON3_9, LambdaRuntime.PYTHON3_10)
2727

2828
class PythonSamProjectWizard : SamProjectWizard {
2929
override fun createSdkSelectionPanel(projectLocation: TextFieldWithBrowseButton?): SdkSelector = when {

jetbrains-core/tst/software/aws/toolkits/jetbrains/services/lambda/execution/local/LocalLambdaRunConfigurationTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -654,7 +654,7 @@ class LocalLambdaRunConfigurationTest {
654654
<option name="inputIsFile" value="false" />
655655
<option name="logicalFunctionName" />
656656
<option name="regionId" value="us-west-2" />
657-
<option name="runtime" value="python3.9" />
657+
<option name="runtime" value="python3.10" />
658658
<option name="templateFile" />
659659
<option name="useTemplate" value="false" />
660660
<method v="2" />
@@ -672,7 +672,7 @@ class LocalLambdaRunConfigurationTest {
672672
assertThat(runConfiguration.logicalId()).isNull()
673673
assertThat(runConfiguration.handler()).isEqualTo("helloworld.App::handleRequest")
674674
assertThat(runConfiguration.architecture()).isEqualTo(LambdaArchitecture.ARM64.toString())
675-
assertThat(runConfiguration.runtime()).isEqualTo(LambdaRuntime.PYTHON3_9)
675+
assertThat(runConfiguration.runtime()).isEqualTo(LambdaRuntime.PYTHON3_10)
676676
assertThat(runConfiguration.environmentVariables()).containsAllEntriesOf(mapOf("Foo" to "Bar"))
677677
assertThat(runConfiguration.regionId()).isEqualTo("us-west-2")
678678
assertThat(runConfiguration.credentialProviderId()).isEqualTo("profile:default")

jetbrains-core/tst/software/aws/toolkits/jetbrains/services/lambda/python/PythonHandlerCompletionProviderTest.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,10 @@ class PythonHandlerCompletionProviderTest {
3333
val provider = HandlerCompletionProvider(projectRule.project, LambdaRuntime.PYTHON3_9)
3434
assertFalse(provider.isCompletionSupported)
3535
}
36+
37+
@Test
38+
fun completionIsNotSupportedPython310() {
39+
val provider = HandlerCompletionProvider(projectRule.project, LambdaRuntime.PYTHON3_10)
40+
assertFalse(provider.isCompletionSupported)
41+
}
3642
}

jetbrains-core/tst/software/aws/toolkits/jetbrains/services/lambda/python/PythonRuntimeGroupTest.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,12 @@ class PythonRuntimeGroupTest {
4040

4141
assertThat(sut.determineRuntime(module)).isEqualTo(LambdaRuntime.PYTHON3_9)
4242
}
43+
44+
@Test
45+
fun testRuntimeDetection310() {
46+
val module = projectRule.module
47+
projectRule.setModuleSdk(module, PyTestSdk("3.10.0"))
48+
49+
assertThat(sut.determineRuntime(module)).isEqualTo(LambdaRuntime.PYTHON3_10)
50+
}
4351
}

0 commit comments

Comments
 (0)