aboutsummaryrefslogtreecommitdiffstats
path: root/solo-tool-project
diff options
context:
space:
mode:
Diffstat (limited to 'solo-tool-project')
-rw-r--r--solo-tool-project/src/solo_tool/session_manager.py31
-rw-r--r--solo-tool-project/test/session_manager_unittest.py10
2 files changed, 38 insertions, 3 deletions
diff --git a/solo-tool-project/src/solo_tool/session_manager.py b/solo-tool-project/src/solo_tool/session_manager.py
index 4fae19f..ece67d8 100644
--- a/solo-tool-project/src/solo_tool/session_manager.py
+++ b/solo-tool-project/src/solo_tool/session_manager.py
@@ -1,9 +1,28 @@
+from typing import BinaryIO, Protocol
+from abc import abstractmethod
from glob import glob
import json
from pathlib import Path
from . import SoloTool
-class FileSystemSessionManager:
+class SessionManager(Protocol):
+ @abstractmethod
+ def getSessions(self) -> list[str]:
+ raise NotImplementedError
+
+ @abstractmethod
+ def loadSession(self, key: str, player=None) -> SoloTool:
+ raise NotImplementedError
+
+ @abstractmethod
+ def saveSession(self, soloTool: SoloTool, key: str) -> None:
+ raise NotImplementedError
+
+ @abstractmethod
+ def addSong(self, name: str, content: BinaryIO) -> None:
+ raise NotImplementedError
+
+class _FileSystemSessionManager(SessionManager):
def __init__(self, songPool: str, sessionPath: str):
self._songPool = Path(songPool)
self._sessionPath = Path(sessionPath)
@@ -39,5 +58,11 @@ class FileSystemSessionManager:
with open(self._sessionPath / f"{key}.json", "w") as f:
json.dump(session, f)
-def getSessionManager(songPool: str, sessionPath: str) -> FileSystemSessionManager:
- return FileSystemSessionManager(songPool, sessionPath)
+ def addSong(self, name: str, content: BinaryIO):
+ from shutil import copyfileobj
+ newSong = self._songPool / name
+ with open(newSong, "wb") as f:
+ copyfileobj(content, f)
+
+def getSessionManager(songPool: str, sessionPath: str) -> SessionManager:
+ return _FileSystemSessionManager(songPool, sessionPath)
diff --git a/solo-tool-project/test/session_manager_unittest.py b/solo-tool-project/test/session_manager_unittest.py
index bd6fbb6..bef4e5d 100644
--- a/solo-tool-project/test/session_manager_unittest.py
+++ b/solo-tool-project/test/session_manager_unittest.py
@@ -64,3 +64,13 @@ def test_loadAndSaveEmptySession(sessionManager, sessionPath, soloTool, tmp_path
assert reloadedTool.songs == []
+def test_uploadSong(sessionManager, songPool, tmp_path):
+ song = tmp_path / "song-to-be-uploaded.mp3"
+ song.touch()
+
+ expected = songPool / "song-to-be-uploaded.mp3"
+ assert not expected.exists()
+
+ with open(song, "rb") as f:
+ sessionManager.addSong("song-to-be-uploaded.mp3", f)
+ assert expected.exists()