mirror of
https://git.selfprivacy.org/SelfPrivacy/selfprivacy-rest-api.git
synced 2024-11-25 21:41:27 +00:00
refactor(services): add folder owner derivation
This commit is contained in:
parent
c34eb6d447
commit
ad66513f27
|
@ -9,6 +9,7 @@ from selfprivacy_api.jobs import Job
|
||||||
from selfprivacy_api.utils.block_devices import BlockDevice
|
from selfprivacy_api.utils.block_devices import BlockDevice
|
||||||
|
|
||||||
from selfprivacy_api.services.generic_size_counter import get_storage_usage
|
from selfprivacy_api.services.generic_size_counter import get_storage_usage
|
||||||
|
from selfprivacy_api.services.owned_path import OwnedPath
|
||||||
|
|
||||||
|
|
||||||
class ServiceStatus(Enum):
|
class ServiceStatus(Enum):
|
||||||
|
@ -152,10 +153,29 @@ class Service(ABC):
|
||||||
def get_drive() -> str:
|
def get_drive() -> str:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@staticmethod
|
@classmethod
|
||||||
@abstractmethod
|
def get_folders(cls) -> str:
|
||||||
def get_folders() -> str:
|
"""
|
||||||
pass
|
get a plain list of occupied directories
|
||||||
|
Default extracts info from overriden get_owned_folders()
|
||||||
|
"""
|
||||||
|
if cls.get_owned_folders == Service.get_owned_folders:
|
||||||
|
raise NotImplementedError(
|
||||||
|
"you need to implement at least one of get_folders() or get_owned_folders()"
|
||||||
|
)
|
||||||
|
return [owned_folder.path for owned_folder in cls.get_owned_folders()]
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_owned_folders(cls) -> str:
|
||||||
|
"""
|
||||||
|
Get a list of occupied directories with ownership info
|
||||||
|
Default extracts info from overriden get_folders()
|
||||||
|
"""
|
||||||
|
if cls.get_folders == Service.get_folders:
|
||||||
|
raise NotImplementedError(
|
||||||
|
"you need to implement at least one of get_folders() or get_owned_folders()"
|
||||||
|
)
|
||||||
|
return [cls.owned_path(path) for path in cls.get_folders()]
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_foldername(path: str) -> str:
|
def get_foldername(path: str) -> str:
|
||||||
|
@ -165,6 +185,15 @@ class Service(ABC):
|
||||||
def move_to_volume(self, volume: BlockDevice) -> Job:
|
def move_to_volume(self, volume: BlockDevice) -> Job:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def owned_path(cls, path: str):
|
||||||
|
"""A default guess on folder ownership"""
|
||||||
|
return OwnedPath(
|
||||||
|
path=path,
|
||||||
|
owner=cls.get_user(),
|
||||||
|
group=cls.get_group(),
|
||||||
|
)
|
||||||
|
|
||||||
def pre_backup(self):
|
def pre_backup(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
20
tests/test_services.py
Normal file
20
tests/test_services.py
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
"""
|
||||||
|
Tests for generic service methods
|
||||||
|
"""
|
||||||
|
from pytest import raises
|
||||||
|
|
||||||
|
from selfprivacy_api.services.test_service import DummyService
|
||||||
|
from selfprivacy_api.services.service import Service
|
||||||
|
|
||||||
|
|
||||||
|
def test_unimplemented_folders_raises():
|
||||||
|
with raises(NotImplementedError):
|
||||||
|
Service.get_folders()
|
||||||
|
with raises(NotImplementedError):
|
||||||
|
Service.get_owned_folders()
|
||||||
|
|
||||||
|
class OurDummy(DummyService, folders=["testydir", "dirtessimo"]):
|
||||||
|
pass
|
||||||
|
|
||||||
|
owned_folders = OurDummy.get_owned_folders()
|
||||||
|
assert owned_folders is not None
|
Loading…
Reference in a new issue