|
| 1 | +from enum import StrEnum |
| 2 | +from typing import Literal |
| 3 | + |
| 4 | +type CompressionType = Literal["zip", "tar_gz"] |
| 5 | +type CompressionTypeSpecValue = Literal["Zip", "TarGz"] |
| 6 | + |
| 7 | + |
| 8 | +class CompressionTypeEnum(StrEnum): |
| 9 | + ZIP = "Zip" |
| 10 | + TAR_GZ = "TarGz" |
| 11 | + |
| 12 | + |
| 13 | +_COMPRESSION_TYPE_TO_SPEC: dict[CompressionType, CompressionTypeSpecValue] = { |
| 14 | + "zip": "Zip", |
| 15 | + "tar_gz": "TarGz", |
| 16 | +} |
| 17 | +_COMPRESSION_TYPE_FROM_SPEC: dict[CompressionTypeSpecValue, CompressionType] = { |
| 18 | + value: key for key, value in _COMPRESSION_TYPE_TO_SPEC.items() |
| 19 | +} |
| 20 | + |
| 21 | + |
| 22 | +def normalize_compression_type( |
| 23 | + value: CompressionType | CompressionTypeEnum | str, |
| 24 | +) -> CompressionType: |
| 25 | + if isinstance(value, CompressionTypeEnum): |
| 26 | + return _COMPRESSION_TYPE_FROM_SPEC[value.value] |
| 27 | + |
| 28 | + lowered_value = value.strip().lower() |
| 29 | + if lowered_value in _COMPRESSION_TYPE_TO_SPEC: |
| 30 | + return lowered_value # pyright: ignore[reportReturnType] |
| 31 | + |
| 32 | + if value in _COMPRESSION_TYPE_FROM_SPEC: |
| 33 | + return _COMPRESSION_TYPE_FROM_SPEC[value] # pyright: ignore[index] |
| 34 | + |
| 35 | + raise ValueError( |
| 36 | + f"Invalid compression type: {value}. Valid compression types are: " |
| 37 | + f"{', '.join(_COMPRESSION_TYPE_TO_SPEC)}" |
| 38 | + ) |
| 39 | + |
| 40 | + |
| 41 | +def compression_type_to_spec( |
| 42 | + value: CompressionType | CompressionTypeEnum | str, |
| 43 | +) -> CompressionTypeSpecValue: |
| 44 | + return _COMPRESSION_TYPE_TO_SPEC[normalize_compression_type(value)] |
0 commit comments