Compare commits

...

3 Commits
0.0.6 ... 0.0.9

Author SHA1 Message Date
ef969d3d3b 0.0.9
fix upload_file and delete_file to return boolean as it did before switching the ftps client module for A1/P1 devices
2024-02-11 15:40:28 -05:00
3d92d73879 0.0.8
fix delete command
2024-02-10 17:56:50 -05:00
41dad23c49 pin paho-mqtt to versions less than 2 2024-02-10 13:33:09 -05:00
3 changed files with 42 additions and 35 deletions

View File

@ -125,7 +125,7 @@ class IoTFTPSClient:
with open(dest, "wb") as file:
self.ftps_session.retrbinary(f"RETR {source}", file.write)
def upload_file(self, source: str, dest: str, callback=None):
def upload_file(self, source: str, dest: str, callback=None) -> bool:
"""upload a file to a path inside the FTPS server"""
file_size = os.path.getsize(source)
@ -133,43 +133,50 @@ class IoTFTPSClient:
block_size = max(file_size // 100, 8192)
rest = None
# Taken from ftplib.storbinary but with custom ssl handling
# due to the shitty bambu p1p ftps server TODO fix properly.
with open(source, "rb") as fp:
self.ftps_session.voidcmd('TYPE I')
try:
# Taken from ftplib.storbinary but with custom ssl handling
# due to the shitty bambu p1p ftps server TODO fix properly.
with open(source, "rb") as fp:
self.ftps_session.voidcmd('TYPE I')
with self.ftps_session.transfercmd(f"STOR {dest}", rest) as conn:
while 1:
buf = fp.read(block_size)
with self.ftps_session.transfercmd(f"STOR {dest}", rest) as conn:
while 1:
buf = fp.read(block_size)
if not buf:
break
if not buf:
break
conn.sendall(buf)
conn.sendall(buf)
if callback:
callback(buf)
if callback:
callback(buf)
# shutdown ssl layer
if ftplib._SSLSocket is not None and isinstance(conn, ftplib._SSLSocket):
# Yeah this is suposed to be conn.unwrap
# But since we operate in prot p mode
# we can close the connection always.
# This is cursed but it works.
if "vsFTPd" in self.welcome:
conn.unwrap()
else:
conn.shutdown(socket.SHUT_RDWR)
# shutdown ssl layer
if ftplib._SSLSocket is not None and isinstance(conn, ftplib._SSLSocket):
# Yeah this is suposed to be conn.unwrap
# But since we operate in prot p mode
# we can close the connection always.
# This is cursed but it works.
if "vsFTPd" in self.welcome:
conn.unwrap()
else:
conn.shutdown(socket.SHUT_RDWR)
return self.ftps_session.voidresp()
return True
except Exception as ex:
print(f"unexpected exception occurred: {ex}")
pass
return False
# Old api call.
# self.ftps_session.storbinary(
# f"STOR {dest}", file, blocksize=block_size, callback=callback)
def delete_file(self, path: str):
def delete_file(self, path: str) -> bool:
"""delete a file from under a path inside the FTPS server"""
self.ftps_session.delete(path)
try:
self.ftps_session.delete(path)
return True
except Exception as ex:
print(f"unexpected exception occurred: {ex}")
pass
return False
def move_file(self, source: str, dest: str):
"""move a file inside the FTPS server to another path inside the FTPS server"""

View File

@ -509,8 +509,8 @@ class BambuPrinter:
# noinspection PyUnusedLocal
def _gcode_M29(self, data: str) -> bool:
self._logger.debug("ignoring M28 command.")
self._send("M28 disabled for Bambu")
self._logger.debug("ignoring M29 command.")
self._send("M29 disabled for Bambu")
return True
def _gcode_M30(self, data: str) -> bool:
@ -811,7 +811,7 @@ class BambuPrinter:
if file is not None:
ftp = IoTFTPSClient(f"{host}", 990, "bblp", f"{access_code}", ssl_implicit=True)
try:
if ftp.delete_file(filename):
if ftp.delete_file(file["path"]):
self._logger.debug(f"{filename} deleted")
else:
raise Exception("delete failed")

View File

@ -14,7 +14,7 @@ plugin_package = "octoprint_bambu_printer"
plugin_name = "OctoPrint-BambuPrinter"
# The plugin's version. Can be overwritten within OctoPrint's internal data via __plugin_version__ in the plugin module
plugin_version = "0.0.6"
plugin_version = "0.0.9"
# The plugin's description. Can be overwritten within OctoPrint's internal data via __plugin_description__ in the plugin
# module
@ -33,7 +33,7 @@ plugin_url = "https://github.com/jneilliii/OctoPrint-BambuPrinter"
plugin_license = "AGPLv3"
# Any additional requirements besides OctoPrint should be listed here
plugin_requires = ["paho-mqtt", "python-dateutil", "pybambu>=1.0.1"]
plugin_requires = ["paho-mqtt<2", "python-dateutil", "pybambu>=1.0.1"]
### --------------------------------------------------------------------------------------------------------------------
### More advanced options that you usually shouldn't have to touch follow after this point