2021-11-20 14:40:07 +00:00
|
|
|
from classes.file import File
|
|
|
|
|
|
|
|
import os
|
|
|
|
import pathlib
|
|
|
|
|
2021-11-25 12:42:00 +00:00
|
|
|
from configparser import SectionProxy
|
|
|
|
from typing import Union
|
|
|
|
|
|
|
|
|
2021-11-20 14:40:07 +00:00
|
|
|
class Directory:
|
2021-11-25 12:42:00 +00:00
|
|
|
"""Class representing a Directory on the local filesystem
|
|
|
|
"""
|
2021-11-20 14:40:07 +00:00
|
|
|
@classmethod
|
2021-11-25 12:42:00 +00:00
|
|
|
def fromConfig(cls, config: SectionProxy) -> Directory: # pylint: disable=undefined-variable
|
|
|
|
"""Create Directory object from a Directory section in the Config file
|
|
|
|
|
|
|
|
Args:
|
|
|
|
config (configparser.SectionProxy): Configuration section defining
|
|
|
|
a Directory
|
|
|
|
|
|
|
|
Raises:
|
|
|
|
ValueError: Raised if section does not contain Location parameter
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
classes.directory.Directory: Directory object for the location
|
|
|
|
specified in the config section
|
|
|
|
"""
|
2021-11-20 14:40:07 +00:00
|
|
|
if "Location" in config.keys():
|
|
|
|
return cls(config.name.split()[1], config["Location"])
|
|
|
|
else:
|
2021-11-25 12:42:00 +00:00
|
|
|
raise ValueError("Definition for Directory " +
|
|
|
|
config.name.split()[1] + " does not contain Location!")
|
|
|
|
|
|
|
|
def __init__(self, name: str, location: Union[str, pathlib.Path]):
|
|
|
|
"""Initialize a new Directory object
|
2021-11-20 14:40:07 +00:00
|
|
|
|
2021-11-25 12:42:00 +00:00
|
|
|
Args:
|
|
|
|
name (str): Name of the Directory object
|
|
|
|
location (str, pathlib.Path): Filesystem location of the Directory
|
|
|
|
|
|
|
|
Raises:
|
|
|
|
ValueError: Raised if passed location does not exist or is not a
|
|
|
|
directory
|
|
|
|
"""
|
2021-11-20 14:40:07 +00:00
|
|
|
self.name = name
|
|
|
|
|
|
|
|
if os.path.isdir(location):
|
|
|
|
self.location = pathlib.Path(location)
|
|
|
|
else:
|
2021-11-25 12:42:00 +00:00
|
|
|
raise ValueError(
|
|
|
|
f"Location {location} for Directory {name} does not exist or is not a directory.")
|
|
|
|
|
|
|
|
def getFiles(self) -> list[File]:
|
|
|
|
"""Get all Files in Directory
|
2021-11-20 14:40:07 +00:00
|
|
|
|
2021-11-25 12:42:00 +00:00
|
|
|
Returns:
|
|
|
|
list: List of names (str) of files within the Directory
|
|
|
|
"""
|
2021-11-20 14:40:07 +00:00
|
|
|
files = [f for f in os.listdir(self.location) if os.path.isfile]
|
2021-11-25 12:42:00 +00:00
|
|
|
return [File(f, self) for f in files]
|