@@ -356,24 +356,42 @@ def obtain_current_accounts(collaborators):
356356class Open (PortalCommand ):
357357 """Open file"""
358358
359- def __init__ (self , function , receiver , path ):
359+ def __init__ (self , function , receiver , path , properties , objects ):
360360 super ().__init__ (function , receiver )
361361 self .path = automatic_resolution (path , receiver .context )
362+ self .properties = properties
363+ self .objects = objects or []
362364
363365 def get_parameter (self ):
364- return self .path .relative_encode
366+ if self .properties and self .properties .is_dir :
367+ param = Object ()
368+ param .paths = [self .path .join (filename ).absolute_encode for filename in self .objects ] if self .objects else [self .path .absolute ]
369+ param .snapshot = None
370+ param .password = None
371+ param .portalName = None
372+ param .showDeleted = False
373+ uid = (
374+ str (self .properties .volume .id )
375+ if self ._receiver .context != Context .Invitations
376+ else f'share/{ self ._receiver .invite } '
377+ )
378+ return uid , encode_request_parameter (param )
379+ return self .path .relative_encode , # pylint: disable=trailing-comma-tuple
365380
366381 def _before_command (self ):
367382 raise_or_suppress_access_error (self ._receiver , self .path )
368- logger .info ('Getting handle: %s' , self .path )
383+ if self .properties and self .properties .is_dir and self .objects :
384+ logger .info ('Getting handle: %s' , [self .path .join (o ).relative for o in self .objects ])
385+ else :
386+ logger .info ('Getting handle: %s' , self .path )
369387
370388 def _execute (self ):
371389 with self .trace_execution ():
372- return self ._function (self ._receiver , self .get_parameter ())
390+ return self ._function (self ._receiver , * self .get_parameter ())
373391
374392 async def _a_execute (self ):
375393 with self .trace_execution ():
376- return await self ._function (self ._receiver , self .get_parameter ())
394+ return await self ._function (self ._receiver , * self .get_parameter ())
377395
378396 def _handle_exception (self , e ):
379397 path = self .path .relative
@@ -385,86 +403,34 @@ def _handle_exception(self, e):
385403
386404class Download (PortalCommand ):
387405
388- def __init__ (self , function , receiver , path , destination ):
406+ def __init__ (self , function , receiver , path , properties = None , objects = None , destination = None ):
389407 super ().__init__ (function , receiver )
390408 self .path = automatic_resolution (path , receiver .context )
391- self .destination = destination
392-
393- def get_parameter (self ):
394- return commonfs .determine_directory_and_filename (self .path .reference , destination = self .destination )
395-
396- def _before_command (self ):
397- logger .info ('Downloading: %s' , self .path )
398-
399- def _execute (self ):
400- directory , name = self .get_parameter ()
401- with self .trace_execution ():
402- with Open (self ._function , self ._receiver , self .path ) as handle :
403- return synfs .write (directory , name , handle )
404-
405- async def _a_execute (self ):
406- directory , name = self .get_parameter ()
407- with self .trace_execution ():
408- async with Open (self ._function , self ._receiver , self .path ) as handle :
409- return await asynfs .write (directory , name , handle )
410-
411-
412- class OpenMany (PortalCommand ):
413-
414- def __init__ (self , function , receiver , resource , directory , * objects ):
415- super ().__init__ (function , receiver )
416- self .uid = str (resource .cloudFolderInfo .uid ) if receiver .context != Context .Invitations else f'share/{ receiver .invite } '
417- self .directory = automatic_resolution (directory , receiver .context )
418- self .objects = objects
419-
420- def _before_command (self ):
421- raise_or_suppress_access_error (self ._receiver , self .directory )
422- logger .info ('Getting handle: %s' , [self .directory .join (o ).relative for o in self .objects ])
423-
424- def get_parameter (self ):
425- param = Object ()
426- param .paths = [self .directory .join (filename ).absolute_encode for filename in self .objects ]
427- param .snapshot = None
428- param .password = None
429- param .portalName = None
430- param .showDeleted = False
431- return encode_request_parameter (param )
432-
433- def _execute (self ):
434- with self .trace_execution ():
435- return self ._function (self ._receiver , self .uid , self .get_parameter ())
436-
437- async def _a_execute (self ):
438- with self .trace_execution ():
439- return await self ._function (self ._receiver , self .uid , self .get_parameter ())
440-
441-
442- class DownloadMany (PortalCommand ):
443-
444- def __init__ (self , function , receiver , resource , directory , objects , destination ):
445- super ().__init__ (function , receiver )
446- self .resource = resource
447- self .directory = automatic_resolution (directory , receiver .context )
409+ self .properties = properties
448410 self .objects = objects
449411 self .destination = destination
450412
451413 def get_parameter (self ):
452- return commonfs .determine_directory_and_filename (self .directory .reference , self .objects , destination = self .destination , archive = True )
414+ archive = self .properties .is_dir if self .properties else False
415+ return commonfs .determine_directory_and_filename (self .path .reference , self .objects ,
416+ self .destination , archive )
453417
454418 def _before_command (self ):
455- for o in self .objects :
456- logger .info ('Downloading: %s' , self .directory .join (o ).relative )
419+ if self .properties and self .properties .is_dir and self .objects :
420+ logger .info ('Downloading: %s' , [self .path .join (o ).relative for o in self .objects ])
421+ else :
422+ logger .info ('Downloading: %s' , self .path )
457423
458424 def _execute (self ):
459425 directory , name = self .get_parameter ()
460426 with self .trace_execution ():
461- with OpenMany (self ._function , self ._receiver , self .resource , self .directory , * self .objects ) as handle :
427+ with Open (self ._function , self ._receiver , self .path , self .properties , self .objects ) as handle :
462428 return synfs .write (directory , name , handle )
463429
464430 async def _a_execute (self ):
465431 directory , name = self .get_parameter ()
466432 with self .trace_execution ():
467- async with OpenMany (self ._function , self ._receiver , self .resource , self .directory , * self .objects ) as handle :
433+ async with Open (self ._function , self ._receiver , self .path , self .properties , self .objects ) as handle :
468434 return await asynfs .write (directory , name , handle )
469435
470436
0 commit comments