{"record":{"id":"84bec08503976097","repo":"apache/beam","slug":"cannot-find-sdk-builder-type-key-in-available-builder-keys","errorCode":null,"errorMessage":"Cannot find SDK builder type {key} in {available_builder_keys}","messagePattern":"Cannot find SDK builder type (.+?) in (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"sdks/python/apache_beam/runners/portability/sdk_container_builder.py","lineNumber":150,"sourceCode":"  @classmethod\n  def build_container_image(cls, pipeline_options: PipelineOptions) -> str:\n    setup_options = pipeline_options.view_as(SetupOptions)\n    container_build_engine = setup_options.prebuild_sdk_container_engine\n    builder_cls = cls._get_subclass_by_key(container_build_engine)\n    builder = builder_cls(pipeline_options)\n    return builder._build()\n\n  @classmethod\n  def _get_subclass_by_key(cls, key: str) -> type['SdkContainerImageBuilder']:\n    available_builders = [\n        subclass for subclass in cls.get_all_subclasses()\n        if subclass._builder_key() == key\n    ]\n    if not available_builders:\n      available_builder_keys = [\n          subclass._builder_key() for subclass in cls.get_all_subclasses()\n      ]\n      raise ValueError(\n          f'Cannot find SDK builder type {key} in '\n          f'{available_builder_keys}')\n    elif len(available_builders) > 1:\n      raise ValueError(f'Found multiple builders under key {key}')\n    return available_builders[0]\n\n\nclass _SdkContainerImageLocalBuilder(SdkContainerImageBuilder):\n  \"\"\"SdkContainerLocalBuilder builds the sdk container image with local\n  docker.\"\"\"\n  @classmethod\n  def _builder_key(cls):\n    return 'local_docker'\n\n  def _invoke_docker_build_and_push(self, container_image_name):\n    try:\n      _LOGGER.info(\"Building sdk container, this may take a few minutes...\")\n      now = time.time()","sourceCodeStart":132,"sourceCodeEnd":168,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/python/apache_beam/runners/portability/sdk_container_builder.py#L132-L168","documentation":"SdkContainerImageBuilder._get_subclass_by_key looks up a registered container-image builder subclass by its builder key. If no subclass matches the requested key, it raises ValueError listing all available builder keys so the caller can pick a valid one.","triggerScenarios":"Calling build_container_image (viaSdkContainerBuilder) with an sdk_builder key string that no registered _SdkContainerImage*Builder subclass claims, e.g. passing 'docker' or 'cloud_build' misspelled or unsupported for the SDK version.","commonSituations":"Typos in the container build option; using a builder key introduced in a newer Beam version than installed; custom subclass not imported/registered so get_all_subclasses doesn't see it.","solutions":["Use one of the keys listed in the error message verbatim","Check the Beam docs/source for valid SdkContainerImageBuilder keys for your version","Upgrade apache-beam if the desired builder key only exists in newer releases","If using a custom builder, ensure its module is imported so the subclass registers"],"exampleFix":"// before\nbuilder = SdkContainerImageBuilder._get_subclass_by_key('cloudbuild')\n// after\nbuilder = SdkContainerImageBuilder._get_subclass_by_key('cloud_build')","handlingStrategy":"validation","validationCode":"available = [s._builder_key() for s in SdkContainerImageBuilder.get_all_subclasses()]\nassert key in available, f'{key!r} not a valid builder key; pick from {available}'","typeGuard":"def is_known_builder_key(key: str) -> bool:\n    return key in {s._builder_key() for s in SdkContainerImageBuilder.get_all_subclasses()}","tryCatchPattern":"try:\n    builder = SdkContainerImageBuilder._get_subclass_by_key(key)\nexcept ValueError as e:\n    logger.error('Invalid SDK builder key %s: %s', key, e)\n    builder = SdkContainerImageBuilder._get_subclass_by_key('local')  # sane default","preventionTips":["Copy builder keys from the Beam version you pinned, not from docs for another version","Enumerate get_all_subclasses() keys at startup in scripts that parameterize the key","Pin your apache-beam version so key names can't drift under you"],"tags":["apache-beam","container-image","lookup-failure","invalid-key"],"backgroundTag":"invalid-enum-value","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}