<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_workflow_config(runtime, code_dir, project_dir):
 """ Get a workflow config that corresponds to the runtime provided. This method examines contents of the project and code directories to determine the most appropriate workflow for the given runtime. Currently the decision is based on the presence of a supported manifest file. For runtimes that have more than one workflow, we choose a workflow by examining ``code_dir`` followed by ``project_dir`` for presence of a supported manifest. Parameters runtime str The runtime of the config code_dir str Directory where Lambda function code is present project_dir str Root of the Serverless application project. Returns ------- namedtuple(Capability) namedtuple that represents the Builder Workflow Config """


    selectors_by_runtime = {
        "python2.7": BasicWorkflowSelector(PYTHON_PIP_CONFIG),
        "python3.6": BasicWorkflowSelector(PYTHON_PIP_CONFIG),
        "python3.7": BasicWorkflowSelector(PYTHON_PIP_CONFIG),
        "nodejs4.3": BasicWorkflowSelector(NODEJS_NPM_CONFIG),
        "nodejs6.10": BasicWorkflowSelector(NODEJS_NPM_CONFIG),
        "nodejs8.10": BasicWorkflowSelector(NODEJS_NPM_CONFIG),
        "ruby2.5": BasicWorkflowSelector(RUBY_BUNDLER_CONFIG),
        "dotnetcore2.0": BasicWorkflowSelector(DOTNET_CLIPACKAGE_CONFIG),
        "dotnetcore2.1": BasicWorkflowSelector(DOTNET_CLIPACKAGE_CONFIG),

        # When Maven builder exists, add to this list so we can automatically choose a builder based on the supported
        # manifest
        "java8": ManifestWorkflowSelector([
            # Gradle builder needs custom executable paths to find `gradlew` binary
            JAVA_GRADLE_CONFIG._replace(executable_search_paths=[code_dir, project_dir]),
            JAVA_KOTLIN_GRADLE_CONFIG._replace(executable_search_paths=[code_dir, project_dir]),
            JAVA_MAVEN_CONFIG
        ]),
    }

    if runtime not in selectors_by_runtime:
        raise UnsupportedRuntimeException("'{}' runtime is not supported".format(runtime))

    selector = selectors_by_runtime[runtime]

    try:
        config = selector.get_config(code_dir, project_dir)
        return config
    except ValueError as ex:
        raise UnsupportedRuntimeException("Unable to find a supported build workflow for runtime '{}'. Reason: {}"
                                          .format(runtime, str(ex)))