Coverage for src / crump / file_types.py: 97%
37 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-02-11 14:40 +0000
« prev ^ index » next coverage.py v7.13.1, created at 2026-02-11 14:40 +0000
1"""File type enumerations for Crump."""
3from __future__ import annotations
5from enum import Enum
8class OutputFileType(Enum):
9 """Supported output file formats for data extraction."""
11 CSV = "csv"
12 PARQUET = "parquet"
14 @classmethod
15 def from_extension(cls, extension: str) -> OutputFileType:
16 """Determine output file type from file extension.
18 Args:
19 extension: File extension (with or without leading dot)
21 Returns:
22 OutputFileType enum value
24 Raises:
25 ValueError: If extension is not supported
26 """
27 ext = extension.lower().lstrip(".")
28 if ext == "csv":
29 return cls.CSV
30 elif ext in ["parquet", "pq"]:
31 return cls.PARQUET
32 else:
33 raise ValueError(f"Unsupported output file extension: {extension}")
35 @classmethod
36 def from_path(cls, path: str) -> OutputFileType:
37 """Determine output file type from file path.
39 Args:
40 path: File path
42 Returns:
43 OutputFileType enum value
45 Raises:
46 ValueError: If path extension is not supported
47 """
48 from pathlib import Path
50 return cls.from_extension(Path(path).suffix)
53class InputFileType(Enum):
54 """Supported input file formats for data processing."""
56 CSV = "csv"
57 PARQUET = "parquet"
58 CDF = "cdf"
60 @classmethod
61 def from_extension(cls, extension: str, default: InputFileType | None = None) -> InputFileType:
62 """Determine input file type from file extension.
64 Args:
65 extension: File extension (with or without leading dot)
66 default: Default value to return if extension not recognized
68 Returns:
69 InputFileType enum value
71 Raises:
72 ValueError: If extension is not supported and no default provided
73 """
74 ext = extension.lower().lstrip(".")
75 if ext == "csv":
76 return cls.CSV
77 elif ext in ["parquet", "pq"]:
78 return cls.PARQUET
79 elif ext == "cdf":
80 return cls.CDF
81 elif default is not None:
82 return default
83 else:
84 raise ValueError(f"Unsupported input file extension: {extension}")
86 @classmethod
87 def from_path(cls, path: str, default: InputFileType | None = None) -> InputFileType:
88 """Determine input file type from file path.
90 Args:
91 path: File path
92 default: Default value to return if extension not recognized
94 Returns:
95 InputFileType enum value
97 Raises:
98 ValueError: If path extension is not supported and no default provided
99 """
100 from pathlib import Path
102 return cls.from_extension(Path(path).suffix, default=default)