@@ -324,10 +324,15 @@ def chmod(self, perm, *, silent: bool = False, **kwargs) -> bool:
324
324
return self .fs .chmod (self .path , perm , silent = silent , ** kwargs )
325
325
326
326
def makedirs (self , * args , ** kwargs ) -> None :
327
+ # overwrites luigi's makedirs method
327
328
parent = self .parent
328
329
if parent :
329
330
parent .touch (* args , ** kwargs )
330
331
332
+ def _prepare_dir (self , ** kwargs ) -> None :
333
+ dir_target = self if isinstance (self , self .directory_class ) else self .parent
334
+ dir_target .touch (** kwargs ) # type: ignore[union-attr]
335
+
331
336
@abstractproperty
332
337
def fs (self ) -> FileSystem :
333
338
...
@@ -478,8 +483,11 @@ def copy_to(
478
483
dir_perm : int | None = None ,
479
484
** kwargs ,
480
485
) -> str :
486
+ if isinstance (dst , FileSystemTarget ):
487
+ dst ._prepare_dir (perm = dir_perm , ** kwargs )
488
+
481
489
# TODO: complain when dst not local? forward to copy_from request depending on protocol?
482
- return self .fs .copy (self .path , get_path (dst ), perm = perm , dir_perm = dir_perm , ** kwargs )
490
+ return self .fs .copy (self .path , get_path (dst ), perm = perm , ** kwargs )
483
491
484
492
def copy_from (
485
493
self ,
@@ -489,12 +497,14 @@ def copy_from(
489
497
dir_perm : int | None = None ,
490
498
** kwargs ,
491
499
) -> str :
500
+ self ._prepare_dir (perm = dir_perm , ** kwargs )
501
+
492
502
if isinstance (src , FileSystemFileTarget ):
493
- return src .copy_to (self .abspath , perm = perm , dir_perm = dir_perm , ** kwargs )
503
+ return src .copy_to (self .abspath , perm = perm or self . fs . default_file_perm , ** kwargs )
494
504
495
- # when src is a plain string, let the fs handle it
496
505
# TODO: complain when src not local? forward to copy_to request depending on protocol?
497
- return self .fs .copy (get_path (src ), self .path , perm = perm , dir_perm = dir_perm , ** kwargs )
506
+ # when src is a plain string, let the fs handle it
507
+ return self .fs .copy (get_path (src ), self .path , perm = perm , ** kwargs )
498
508
499
509
def move_to (
500
510
self ,
@@ -504,8 +514,11 @@ def move_to(
504
514
dir_perm : int | None = None ,
505
515
** kwargs ,
506
516
) -> str :
517
+ if isinstance (dst , FileSystemTarget ):
518
+ dst ._prepare_dir (perm = dir_perm , ** kwargs )
519
+
507
520
# TODO: complain when dst not local? forward to copy_from request depending on protocol?
508
- return self .fs .move (self .path , get_path (dst ), perm = perm , dir_perm = dir_perm , ** kwargs )
521
+ return self .fs .move (self .path , get_path (dst ), perm = perm , ** kwargs )
509
522
510
523
def move_from (
511
524
self ,
@@ -515,12 +528,14 @@ def move_from(
515
528
dir_perm : int | None = None ,
516
529
** kwargs ,
517
530
) -> str :
531
+ self ._prepare_dir (perm = dir_perm , ** kwargs )
532
+
518
533
if isinstance (src , FileSystemFileTarget ):
519
- return src .move_to (self .abspath , perm = perm , dir_perm = dir_perm , ** kwargs )
534
+ return src .move_to (self .abspath , perm = perm or self . fs . default_file_perm , ** kwargs )
520
535
521
536
# when src is a plain string, let the fs handle it
522
537
# TODO: complain when src not local? forward to copy_to request depending on protocol?
523
- return self .fs .move (get_path (src ), self .path , perm = perm , dir_perm = dir_perm , ** kwargs )
538
+ return self .fs .move (get_path (src ), self .path , perm = perm , ** kwargs )
524
539
525
540
526
541
class FileSystemDirectoryTarget (FileSystemTarget ):
0 commit comments