List of data files patterns (absolute local paths or URLs). For each pattern there should also be a list of allowed extensions to keep, or a None ot keep all the files for the pattern.
| 739 | |
| 740 | |
| 741 | class DataFilesPatternsList(list[str]): |
| 742 | """ |
| 743 | List of data files patterns (absolute local paths or URLs). |
| 744 | For each pattern there should also be a list of allowed extensions |
| 745 | to keep, or a None ot keep all the files for the pattern. |
| 746 | """ |
| 747 | |
| 748 | def __init__( |
| 749 | self, |
| 750 | patterns: list[str], |
| 751 | allowed_extensions: list[Optional[list[str]]], |
| 752 | ): |
| 753 | super().__init__(patterns) |
| 754 | self.allowed_extensions = allowed_extensions |
| 755 | |
| 756 | def __add__(self, other): |
| 757 | return DataFilesList([*self, *other], self.allowed_extensions + other.allowed_extensions) |
| 758 | |
| 759 | @classmethod |
| 760 | def from_patterns( |
| 761 | cls, patterns: list[str], allowed_extensions: Optional[list[str]] = None |
| 762 | ) -> "DataFilesPatternsList": |
| 763 | return cls(patterns, [allowed_extensions] * len(patterns)) |
| 764 | |
| 765 | def resolve( |
| 766 | self, |
| 767 | base_path: str, |
| 768 | download_config: Optional[DownloadConfig] = None, |
| 769 | ) -> "DataFilesList": |
| 770 | base_path = base_path if base_path is not None else Path().resolve().as_posix() |
| 771 | data_files = [] |
| 772 | for pattern, allowed_extensions in zip(self, self.allowed_extensions): |
| 773 | try: |
| 774 | data_files.extend( |
| 775 | resolve_pattern( |
| 776 | pattern, |
| 777 | base_path=base_path, |
| 778 | allowed_extensions=allowed_extensions, |
| 779 | download_config=download_config, |
| 780 | ) |
| 781 | ) |
| 782 | except FileNotFoundError: |
| 783 | if not has_magic(pattern): |
| 784 | raise |
| 785 | origin_metadata = _get_origin_metadata(data_files, download_config=download_config) |
| 786 | return DataFilesList(data_files, origin_metadata) |
| 787 | |
| 788 | def filter_extensions(self, extensions: list[str]) -> "DataFilesPatternsList": |
| 789 | return DataFilesPatternsList( |
| 790 | self, [allowed_extensions + extensions for allowed_extensions in self.allowed_extensions] |
| 791 | ) |
| 792 | |
| 793 | |
| 794 | class DataFilesPatternsDict(dict[str, DataFilesPatternsList]): |
no outgoing calls