create dir package
- create classes for common directory types
This commit is contained in:
parent
0889c40bb5
commit
af908f51ca
4
src/dir/__init__.py
Normal file
4
src/dir/__init__.py
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
from .directory import Directory
|
||||||
|
from .root import Root
|
||||||
|
from .artist import Artist
|
||||||
|
from .album import Album
|
17
src/dir/album.py
Normal file
17
src/dir/album.py
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
from .directory import Directory
|
||||||
|
from pathlib import Path
|
||||||
|
from log import Log
|
||||||
|
|
||||||
|
|
||||||
|
class Album(Directory):
|
||||||
|
def __init__(self, path: Path, log: Log):
|
||||||
|
super().__init__(path, log, 'ALB')
|
||||||
|
|
||||||
|
def populate(self, log: Log) -> list:
|
||||||
|
contents = list()
|
||||||
|
for e in self.path.iterdir():
|
||||||
|
if e.is_file():
|
||||||
|
contents.append(self.create_file(e))
|
||||||
|
elif e.is_dir():
|
||||||
|
self.log.warning('POP', f"Directory {e} ignored.")
|
||||||
|
return contents
|
19
src/dir/artist.py
Normal file
19
src/dir/artist.py
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
from log import Log
|
||||||
|
|
||||||
|
from .directory import Directory
|
||||||
|
from .album import Album
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
class Artist(Directory):
|
||||||
|
def __init__(self, path: Path, log: Log):
|
||||||
|
super().__init__(path, log, 'ART')
|
||||||
|
|
||||||
|
def populate(self, log: Log) -> list:
|
||||||
|
contents = list()
|
||||||
|
for e in self.path.iterdir():
|
||||||
|
if e.is_file():
|
||||||
|
self.log.warning('POP', f"File {e} ignored.")
|
||||||
|
elif e.is_dir():
|
||||||
|
contents.append(Album(e, log))
|
||||||
|
return contents
|
27
src/dir/directory.py
Normal file
27
src/dir/directory.py
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
from pathlib import Path
|
||||||
|
from .file import File, Track, Art, MiscFile
|
||||||
|
from abc import ABC, abstractmethod
|
||||||
|
from log import Log, LogCat
|
||||||
|
|
||||||
|
|
||||||
|
class Directory(ABC):
|
||||||
|
def __init__(self, path: Path, log: Log, logcat: str):
|
||||||
|
self.path = path
|
||||||
|
self.log = LogCat(log.queue, logcat)
|
||||||
|
|
||||||
|
self.contents = self.populate(log)
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def populate(self, log: Log) -> list:
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def create_file(file: Path) -> File:
|
||||||
|
suffix = file.suffix
|
||||||
|
|
||||||
|
if suffix in ['.flac']:
|
||||||
|
return Track(file)
|
||||||
|
elif suffix in ['.jpg', '.jpeg', '.png']:
|
||||||
|
return Art(file)
|
||||||
|
else:
|
||||||
|
return MiscFile(file)
|
4
src/dir/file/__init__.py
Normal file
4
src/dir/file/__init__.py
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
from .file import File
|
||||||
|
from .track import Track
|
||||||
|
from .miscfile import MiscFile
|
||||||
|
from .art import Art
|
7
src/dir/file/art.py
Normal file
7
src/dir/file/art.py
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
from . import File
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
class Art(File):
|
||||||
|
def __init__(self, location: Path):
|
||||||
|
super().__init__(location)
|
60
src/dir/file/file.py
Normal file
60
src/dir/file/file.py
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
from pathlib import Path
|
||||||
|
from abc import ABC
|
||||||
|
|
||||||
|
|
||||||
|
audio_extensions = ['.flac']
|
||||||
|
art_extensions = ['.jpg', '.jpeg', '.png']
|
||||||
|
|
||||||
|
class File(ABC):
|
||||||
|
def __init__(self, location: Path):
|
||||||
|
self.path = location
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return str(self.path)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_audio(self):
|
||||||
|
return self.extension in audio_extensions
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_art(self):
|
||||||
|
return self.extension in art_extensions
|
||||||
|
|
||||||
|
@property
|
||||||
|
def art_named_correctly(self):
|
||||||
|
return self.filename == "cover.jpg"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def filename(self) -> str:
|
||||||
|
return self.path.name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def stem(self) -> str:
|
||||||
|
return self.path.stem
|
||||||
|
|
||||||
|
@property
|
||||||
|
def extension(self) -> str:
|
||||||
|
return self.path.suffix
|
||||||
|
|
||||||
|
@property
|
||||||
|
def artist(self) -> Path:
|
||||||
|
return self.path.parent.parent
|
||||||
|
|
||||||
|
def artist_out(self, root: Path) -> Path:
|
||||||
|
return root / self.artist.parts[-1]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def album(self) -> Path:
|
||||||
|
return self.path.parent
|
||||||
|
|
||||||
|
def album_out(self, root: Path) -> Path:
|
||||||
|
return root /self.artist_out(root) / self.album.parts[-1]
|
||||||
|
|
||||||
|
def artist_output(self, root: Path) -> Path:
|
||||||
|
return root / self.artist.parts[-1]
|
||||||
|
|
||||||
|
def album_output(self, root: Path) -> Path:
|
||||||
|
return root / self.artist.parts[-1] / self.album.parts[-1]
|
||||||
|
|
||||||
|
def output_file(self, root: Path, extension: str) -> Path:
|
||||||
|
return root / self.artist.parts[-1] / self.album.parts[-1] / f"{self.stem}.{extension}"
|
7
src/dir/file/miscfile.py
Normal file
7
src/dir/file/miscfile.py
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
from . import File
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
class MiscFile(File):
|
||||||
|
def __init__(self, location: Path):
|
||||||
|
super().__init__(location)
|
7
src/dir/file/track.py
Normal file
7
src/dir/file/track.py
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
from . import File
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
class Track(File):
|
||||||
|
def __init__(self, location: Path):
|
||||||
|
super().__init__(location)
|
18
src/dir/root.py
Normal file
18
src/dir/root.py
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
from .directory import Directory
|
||||||
|
from .artist import Artist
|
||||||
|
from pathlib import Path
|
||||||
|
from log import Log
|
||||||
|
|
||||||
|
|
||||||
|
class Root(Directory):
|
||||||
|
def __init__(self, path: Path, log: Log):
|
||||||
|
super().__init__(path, log, 'ROOT')
|
||||||
|
|
||||||
|
def populate(self, log: Log) -> list:
|
||||||
|
contents = list()
|
||||||
|
for e in self.path.iterdir():
|
||||||
|
if e.is_file():
|
||||||
|
self.log.warning('POP', f"File {e} ignored.")
|
||||||
|
elif e.is_dir():
|
||||||
|
contents.append(Artist(e, log))
|
||||||
|
return contents
|
Loading…
Reference in New Issue
Block a user