Move all ftp operations to printer file system.

This commit is contained in:
Anton Skrypnyk
2024-07-25 16:51:15 +03:00
parent 55b78cea05
commit 1f7eed6b23
16 changed files with 439 additions and 428 deletions

View File

@ -0,0 +1,30 @@
from __future__ import annotations
from datetime import datetime
from pathlib import Path
from octoprint.util import get_formatted_size, get_formatted_datetime
from octoprint_bambu_printer.printer.file_system.bambu_timelapse_file_info import (
BambuTimelapseFileInfo,
)
from octoprint_bambu_printer.printer.file_system.file_info import FileInfo
def test_timelapse_info_valid():
file_name = "part.mp4"
file_size = 1000
file_date = datetime(2020, 1, 1)
file_timestamp = file_date.timestamp()
file_info = FileInfo(file_name, Path(file_name), file_size, file_date)
timelapse = BambuTimelapseFileInfo.from_file_info(file_info)
assert timelapse.to_dict() == {
"bytes": file_size,
"date": get_formatted_datetime(datetime.fromtimestamp(file_timestamp)),
"name": file_name,
"size": get_formatted_size(file_size),
"thumbnail": "/plugin/bambu_printer/thumbnail/"
+ file_name.replace(".mp4", ".jpg").replace(".avi", ".jpg"),
"timestamp": file_timestamp,
"url": f"/plugin/bambu_printer/timelapse/{file_name}",
}

View File

@ -1,20 +1,14 @@
from __future__ import annotations
from collections.abc import Callable
from datetime import datetime, timezone
import logging
from pathlib import Path
import time
from typing import Any
import unittest
from unittest.mock import MagicMock, Mock
import unittest.mock
from unittest.mock import MagicMock
import pybambu
import pybambu.commands
from octoprint_bambu_printer.printer.bambu_virtual_printer import BambuVirtualPrinter
from octoprint_bambu_printer.printer.remote_sd_card_file_list import (
RemoteSDCardFileList,
)
from octoprint_bambu_printer.printer.file_system.ftps_client import IoTFTPSClient
from octoprint_bambu_printer.printer.states.idle_state import IdleState
from octoprint_bambu_printer.printer.states.paused_state import PausedState
from octoprint_bambu_printer.printer.states.printing_state import PrintingState
@ -88,40 +82,31 @@ def files_info_ftp():
@fixture
def ftps_session_mock(files_info_ftp):
with unittest.mock.patch(
"octoprint_bambu_printer.printer.ftpsclient.ftpsclient.IoTFTPSClient"
) as ftps_client_mock:
ftps_session = MagicMock()
ftps_session.size.side_effect = DictGetter(
{file: info[0] for file, info in files_info_ftp.items()}
)
ftps_session = MagicMock()
ftps_session.size.side_effect = DictGetter(
{file: info[0] for file, info in files_info_ftp.items()}
)
ftps_session.sendcmd.side_effect = DictGetter(
{f"MDTM {file}": info[1] for file, info in files_info_ftp.items()}
)
ftps_session.sendcmd.side_effect = DictGetter(
{f"MDTM {file}": info[1] for file, info in files_info_ftp.items()}
)
all_files = list(files_info_ftp.keys())
file_registry = DictGetter(
{
("", ".3mf"): list(
filter(lambda f: Path(f).parent == Path("."), all_files)
),
("cache/", ".3mf"): list(
map(
lambda f: Path(f).name,
filter(lambda f: Path(f).parent == Path("cache/"), all_files),
)
),
}
)
ftps_client_mock.list_files.side_effect = lambda folder, ext: file_registry(
(folder, ext)
)
ftps_client_mock.ftps_session = ftps_session
RemoteSDCardFileList._connect_ftps_server = MagicMock(
return_value=ftps_client_mock
)
yield
all_files = list(files_info_ftp.keys())
ftps_session.nlst.side_effect = DictGetter(
{
"": list(filter(lambda f: Path(f).parent == Path("."), all_files))
+ ["Mock folder"],
"cache/": list(
map(
lambda f: Path(f).name,
filter(lambda f: Path(f).parent == Path("cache/"), all_files),
)
)
+ ["Mock folder"],
}
)
IoTFTPSClient.open_ftps_session = MagicMock(return_value=ftps_session)
yield
@fixture(scope="function")