{"id":"2d2bed38bf207c17","repo":"python-poetry/poetry","slug":"dependency-unknown-direct-dependency-type-depe","errorCode":null,"errorMessage":"{dependency}: unknown direct dependency type {dependency.source_type}","messagePattern":"(.+?): unknown direct dependency type (.+?)","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"src/poetry/puzzle/provider.py","lineNumber":304,"sourceCode":"\n        elif dependency.is_vcs():\n            dependency = cast(\"VCSDependency\", dependency)\n            package = self._search_for_vcs(dependency)\n\n        elif dependency.is_file():\n            dependency = cast(\"FileDependency\", dependency)\n            package = self._search_for_file(dependency)\n\n        elif dependency.is_directory():\n            dependency = cast(\"DirectoryDependency\", dependency)\n            package = self._search_for_directory(dependency)\n\n        elif dependency.is_url():\n            dependency = cast(\"URLDependency\", dependency)\n            package = self._search_for_url(dependency)\n\n        else:\n            raise RuntimeError(\n                f\"{dependency}: unknown direct dependency type {dependency.source_type}\"\n            )\n\n        if dependency.is_vcs():\n            dependency._source_reference = package.source_reference\n            dependency._source_resolved_reference = package.source_resolved_reference\n            dependency._source_subdirectory = package.source_subdirectory\n\n        dependency._constraint = package.version\n        dependency._pretty_constraint = package.version.text\n\n        self._deferred_cache[dependency] = package\n\n        return package\n\n    def search_for(self, dependency: Dependency) -> list[DependencyPackage]:\n        \"\"\"\n        Search for the specifications that match the given dependency.","sourceCodeStart":286,"sourceCodeEnd":322,"githubUrl":"https://github.com/python-poetry/poetry/blob/92b74dcfe348d0e01e14d40d6c1fa47a4ee04a54/src/poetry/puzzle/provider.py#L286-L322","documentation":"Raised by Provider.search_for_direct_origin_dependency() when a dependency claims direct-origin status (is_vcs/is_file/is_directory/is_url all false) but source_type is set to an unrecognised value. The else branch fires because none of the known direct-origin handlers matched.","triggerScenarios":"A Dependency object has source_type set to something other than 'vcs'/'file'/'directory'/'url' (or null) and is passed to search_for_direct_origin_dependency. This is almost always a programmatic/serialisation bug rather than user config.","commonSituations":"A custom Dependency subclass introducing a new source_type without extending the provider; a dependency deserialised from a malformed lockfile with a garbage source_type; internal code constructing a Dependency with an unrecognised source_type.","solutions":["Inspect the dependency's source_type value to identify the unknown type.","If you introduced a new source type, extend search_for_direct_origin_dependency with a matching branch.","Recreate the dependency from a clean pyproject.toml declaration rather than constructing it ad hoc.","Check for a corrupted/edited poetry.lock that produced an odd source_type on load."],"exampleFix":"// before: Dependency with unknown source_type\ndep = Dependency(name='x', constraint='*', source_type='ftp')\nprovider.search_for_direct_origin_dependency(dep)\nRuntimeError: unknown direct dependency type ftp\n\n// after: use a supported source_type\ndep = Dependency(name='x', constraint='*', source_type='url', url='https://...')","handlingStrategy":"type-guard","validationCode":"SUPPORTED = {\"vcs\", \"file\", \"directory\", \"url\", None}\n\ndef source_type_supported(dep) -> bool:\n    return getattr(dep, \"source_type\", None) in SUPPORTED","typeGuard":"SUPPORTED_DIRECT = {\"vcs\", \"file\", \"directory\", \"url\"}\n\ndef is_known_direct_origin(dep) -> bool:\n    return getattr(dep, \"source_type\", None) in SUPPORTED_DIRECT","tryCatchPattern":"from poetry.puzzle.provider import Provider\n\ntry:\n    provider.search_for_direct_origin_dependency(dep)\nexcept RuntimeError as e:\n    if \"unknown direct dependency type\" in str(e):\n        # rebuild dep with a supported source_type\n        ...","preventionTips":["Construct Dependency objects with only supported source_type values.","When extending source types, also extend the provider's branch logic.","Do not load dependencies from hand-edited/corrupt lockfiles.","Add unit tests asserting source_type validity when building deps programmatically."],"tags":["dependency","puzzle","source-type","resolver","internal-api"],"analyzedSha":"92b74dcfe348d0e01e14d40d6c1fa47a4ee04a54","analyzedAt":"2026-08-04T20:33:34.072Z","schemaVersion":2}