(headers: MultiMapping[str])
| 244 | |
| 245 | |
| 246 | def parse_mode(headers: MultiMapping[str]) -> black.Mode: |
| 247 | try: |
| 248 | line_length = int(headers.get(LINE_LENGTH_HEADER, black.DEFAULT_LINE_LENGTH)) |
| 249 | except ValueError: |
| 250 | raise HeaderError("Invalid line length header value") from None |
| 251 | |
| 252 | if PYTHON_VARIANT_HEADER in headers: |
| 253 | value = headers[PYTHON_VARIANT_HEADER] |
| 254 | try: |
| 255 | pyi, versions = parse_python_variant_header(value) |
| 256 | except InvalidVariantHeader as e: |
| 257 | raise HeaderError( |
| 258 | f"Invalid value for {PYTHON_VARIANT_HEADER}: {e.args[0]}", |
| 259 | ) from None |
| 260 | else: |
| 261 | pyi = False |
| 262 | versions = set() |
| 263 | |
| 264 | skip_string_normalization = bool( |
| 265 | headers.get(SKIP_STRING_NORMALIZATION_HEADER, False) |
| 266 | ) |
| 267 | skip_magic_trailing_comma = bool(headers.get(SKIP_MAGIC_TRAILING_COMMA, False)) |
| 268 | skip_source_first_line = bool(headers.get(SKIP_SOURCE_FIRST_LINE, False)) |
| 269 | |
| 270 | preview = bool(headers.get(PREVIEW, False)) |
| 271 | unstable = bool(headers.get(UNSTABLE, False)) |
| 272 | enable_features: set[black.Preview] = set() |
| 273 | enable_unstable_features = headers.get(ENABLE_UNSTABLE_FEATURE, "").split(",") |
| 274 | for piece in enable_unstable_features: |
| 275 | piece = piece.strip() |
| 276 | if piece: |
| 277 | try: |
| 278 | enable_features.add(black.Preview[piece]) |
| 279 | except KeyError: |
| 280 | raise HeaderError( |
| 281 | f"Invalid value for {ENABLE_UNSTABLE_FEATURE}: {piece}", |
| 282 | ) from None |
| 283 | |
| 284 | return black.FileMode( |
| 285 | target_versions=versions, |
| 286 | is_pyi=pyi, |
| 287 | line_length=line_length, |
| 288 | skip_source_first_line=skip_source_first_line, |
| 289 | string_normalization=not skip_string_normalization, |
| 290 | magic_trailing_comma=not skip_magic_trailing_comma, |
| 291 | preview=preview, |
| 292 | unstable=unstable, |
| 293 | enabled_features=enable_features, |
| 294 | ) |
| 295 | |
| 296 | |
| 297 | def parse_python_variant_header(value: str) -> tuple[bool, set[black.TargetVersion]]: |
no test coverage detected