83) -> Tuple[NormalizedName, Version, BuildTag, FrozenSet[Tag]]:
85 raise InvalidWheelFilename(
86 f"Invalid wheel filename (extension must be '.whl'): {filename}"
87 )
88
89 filename = filename[:-4]
91 if dashes not in (4, 5):
92 raise InvalidWheelFilename(
93 f"Invalid wheel filename (wrong number of parts): {filename}"
94 )
95
97 name_part = parts[0]
98
100 raise InvalidWheelFilename(f"Invalid project name: {filename}")
101 name = canonicalize_name(name_part)
102 version = Version(parts[1])
103 if dashes == 5:
104 build_part = parts[2]
106 if build_match is None:
107 raise InvalidWheelFilename(
108 f"Invalid build number: {build_part} in '{filename}'"
109 )
111 else:
112 build = ()
113 tags = parse_tag(parts[-1])
114 return (name, version, build, tags)
115
116