file_manager: upload request fix

Make sure that inotify watches are added for new directories created via the upload endpoint.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
Eric Callahan 2021-06-12 17:18:24 -04:00
parent 6770a965a6
commit 92423911a9
1 changed files with 15 additions and 7 deletions

View File

@ -501,7 +501,7 @@ class FileManager:
# Don't start if another print is currently in progress # Don't start if another print is currently in progress
start_print = start_print and not print_ongoing start_print = start_print and not print_ongoing
self.notify_sync_lock = NotifySyncLock(upload_info['dest_path']) self.notify_sync_lock = NotifySyncLock(upload_info['dest_path'])
finfo = self._process_uploaded_file(upload_info) finfo = await self._process_uploaded_file(upload_info)
await self.gcode_metadata.parse_metadata( await self.gcode_metadata.parse_metadata(
upload_info['filename'], finfo).wait() upload_info['filename'], finfo).wait()
if start_print: if start_print:
@ -527,7 +527,7 @@ class FileManager:
upload_info: Dict[str, Any] upload_info: Dict[str, Any]
) -> Dict[str, Any]: ) -> Dict[str, Any]:
self.notify_sync_lock = NotifySyncLock(upload_info['dest_path']) self.notify_sync_lock = NotifySyncLock(upload_info['dest_path'])
self._process_uploaded_file(upload_info) await self._process_uploaded_file(upload_info)
await self.notify_sync_lock.wait(5.) await self.notify_sync_lock.wait(5.)
self.notify_sync_lock = None self.notify_sync_lock = None
return { return {
@ -538,13 +538,21 @@ class FileManager:
'action': "create_file" 'action': "create_file"
} }
def _process_uploaded_file(self, async def _process_uploaded_file(self,
upload_info: Dict[str, Any] upload_info: Dict[str, Any]
) -> Dict[str, Any]: ) -> Dict[str, Any]:
try: try:
if upload_info['dir_path']: if upload_info['dir_path']:
os.makedirs(os.path.dirname( cur_path = self.file_paths[upload_info['root']]
upload_info['dest_path']), exist_ok=True) dirs: List[str]
dirs = upload_info['dir_path'].strip('/').split('/')
for subdir in dirs:
cur_path = os.path.join(cur_path, subdir)
if os.path.exists(cur_path):
continue
os.mkdir(cur_path)
# wait for inotify to create a watch before proceeding
await asyncio.sleep(.1)
if upload_info['unzip_ufp']: if upload_info['unzip_ufp']:
tmp_path = upload_info['tmp_file_path'] tmp_path = upload_info['tmp_file_path']
finfo = self.get_path_info(tmp_path) finfo = self.get_path_info(tmp_path)