mirror of
https://github.com/Garmelon/PFERD.git
synced 2023-12-21 10:23:01 +01:00
Add Transforms and Transformables
This commit is contained in:
parent
a051e3bcca
commit
3c808879c9
@ -11,16 +11,16 @@ import requests.auth
|
||||
|
||||
from .organizer import Organizer
|
||||
from .tmp_dir import TmpDir
|
||||
from .transform import Transformable
|
||||
from .utils import stream_to_path
|
||||
|
||||
|
||||
@dataclass
|
||||
class HttpDownloadInfo:
|
||||
class HttpDownloadInfo(Transformable):
|
||||
"""
|
||||
This class describes a single file to be downloaded.
|
||||
"""
|
||||
|
||||
path: Path
|
||||
url: str
|
||||
parameters: Dict[str, Any] = field(default_factory=dict)
|
||||
|
||||
|
@ -10,6 +10,7 @@ import requests
|
||||
|
||||
from ..organizer import Organizer
|
||||
from ..tmp_dir import TmpDir
|
||||
from ..transform import Transformable
|
||||
from ..utils import soupify, stream_to_path
|
||||
from .authenticators import IliasAuthenticator
|
||||
|
||||
@ -19,12 +20,11 @@ class ContentTypeException(Exception):
|
||||
|
||||
|
||||
@dataclass
|
||||
class IliasDownloadInfo:
|
||||
class IliasDownloadInfo(Transformable):
|
||||
"""
|
||||
This class describes a single file to be downloaded.
|
||||
"""
|
||||
|
||||
path: Path
|
||||
url: str
|
||||
modification_date: datetime.datetime
|
||||
# parameters: Dict[str, Any] = field(default_factory=dict)
|
||||
|
42
PFERD/transform.py
Normal file
42
PFERD/transform.py
Normal file
@ -0,0 +1,42 @@
|
||||
"""
|
||||
Transforms let the user define functions to decide where the downloaded files
|
||||
should be placed locally. They let the user do more advanced things like moving
|
||||
only files whose names match a regex, or renaming files from one numbering
|
||||
scheme to another.
|
||||
"""
|
||||
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
from typing import Callable, List, Optional, TypeVar
|
||||
|
||||
|
||||
Transform = Callable[[Path], Optional[Path]]
|
||||
|
||||
|
||||
@dataclass
|
||||
class Transformable:
|
||||
"""
|
||||
An object that can be transformed by a Transform.
|
||||
"""
|
||||
|
||||
path: Path
|
||||
|
||||
|
||||
TF = TypeVar("TF", bound=Transformable)
|
||||
|
||||
|
||||
def apply_transform(
|
||||
transform: Callable[[Path], Optional[Path]],
|
||||
transformables: List[TF],
|
||||
) -> List[TF]:
|
||||
"""
|
||||
Apply a Transform to multiple Transformables, discarding those that were
|
||||
not transformed by the Transform.
|
||||
"""
|
||||
|
||||
result: List[TF] = []
|
||||
for transformable in transformables:
|
||||
if new_path := transform(transformable.path):
|
||||
transformable.path = new_path
|
||||
result.append(transformable)
|
||||
return result
|
Loading…
Reference in New Issue
Block a user