override fun determineHandler()

in jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/python/PythonLambdaHandlerResolver.kt [85:110]


    override fun determineHandler(element: PsiElement): String? {
        if (element.node?.elementType != PyTokenTypes.IDENTIFIER) {
            return null
        }
        val project = element.project
        val function = element.parent as? PyFunction ?: return null
        val virtualFile = element.containingFile.virtualFile ?: return null

        if (function.parent is PyFile &&
            function.parameterList.parameters.size == 2 &&
            // Ignore files that are considered test sources. Ignore the IDE warning, it uses IDE extension points.
            !TestSourcesFilter.isTestSources(virtualFile, project) &&
            // ignore pytest tests: they start with test_ by convention:
            // https://pytest.readthedocs.io/en/reorganize-docs/new-docs/user/naming_conventions.html#id1
            function.name?.startsWith("test_") != true
        ) {
            val requirementsFileDir = runCatching { PythonLambdaBuilder.locateRequirementsTxt(virtualFile).parent }.getOrNull() ?: return null
            val filePath = if (virtualFile.parent != requirementsFileDir) {
                VfsUtil.getRelativePath(virtualFile.parent, requirementsFileDir)?.let { "$it/" } ?: return null
            } else {
                ""
            }
            return "$filePath${virtualFile.nameWithoutExtension}.${function.name}"
        }
        return null
    }