1515from  office365 .sharepoint .storagemetrics .storage_metrics  import  StorageMetrics 
1616from  office365 .sharepoint .utilities .move_copy_options  import  MoveCopyOptions 
1717from  office365 .sharepoint .utilities .move_copy_util  import  MoveCopyUtil 
18+ from  office365 .sharepoint .types .resource_path  import  ResourcePath  as  SPResPath 
1819
1920
2021class  Folder (BaseEntity ):
@@ -128,9 +129,29 @@ def _copy_folder():
128129            opts  =  MoveCopyOptions (keep_both = keep_both , reset_author_and_created_on_copy = reset_author_and_created )
129130            MoveCopyUtil .copy_folder (self .context , self ._build_full_url (self .serverRelativeUrl ),
130131                                     self ._build_full_url (new_relative_url ), opts )
132+ 
131133        self .ensure_property ("ServerRelativeUrl" , _copy_folder )
132134        return  target_folder 
133135
136+     def  copy_to_by_path (self , new_relative_path , keep_both = False , reset_author_and_created = False ):
137+         """Copies the folder with files to the destination Path. 
138+ 
139+         :type new_relative_path: str 
140+         :type keep_both: bool 
141+         :type reset_author_and_created: bool 
142+         """ 
143+ 
144+         target_folder  =  Folder (self .context )
145+         target_folder .set_property ("ServerRelativePath" , SPResPath (new_relative_path ))
146+ 
147+         def  _copy_folder ():
148+             opts  =  MoveCopyOptions (keep_both = keep_both , reset_author_and_created_on_copy = reset_author_and_created )
149+             MoveCopyUtil .copy_folder_by_path (self .context , self ._build_full_url (self .server_relative_path .DecodedUrl ),
150+                                              self ._build_full_url (new_relative_path ), opts )
151+ 
152+         self .ensure_property ("ServerRelativePath" , _copy_folder )
153+         return  target_folder 
154+ 
134155    def  move_to (self , new_relative_url , retain_editor_and_modified = False ):
135156        """Moves the folder with files to the destination URL. 
136157
@@ -148,6 +169,24 @@ def _move_folder():
148169        self .ensure_property ("ServerRelativeUrl" , _move_folder )
149170        return  target_folder 
150171
172+     def  move_to_by_path (self , new_relative_path , retain_editor_and_modified = False ):
173+         """Moves the folder with files to the destination Path. 
174+ 
175+         :type new_relative_path: str 
176+         :type retain_editor_and_modified: bool 
177+         """ 
178+         target_folder  =  Folder (self .context )
179+         target_folder .set_property ("ServerRelativePath" , SPResPath (new_relative_path ))
180+ 
181+         def  _move_folder ():
182+             MoveCopyUtil .move_folder_by_path (self .context , self ._build_full_url (self .server_relative_path .DecodedUrl ),
183+                                              self ._build_full_url (new_relative_path ),
184+                                              MoveCopyOptions (
185+                                                  retain_editor_and_modified_on_move = retain_editor_and_modified ))
186+ 
187+         self .ensure_property ("ServerRelativePath" , _move_folder )
188+         return  target_folder 
189+ 
151190    @property  
152191    def  storage_metrics (self ):
153192        return  self .properties .get ("StorageMetrics" ,
@@ -162,11 +201,9 @@ def list_item_all_fields(self):
162201    @property  
163202    def  files (self ):
164203        """Get a file collection""" 
165-         if  self .is_property_available ('Files' ):
166-             return  self .properties ["Files" ]
167-         else :
168-             from  office365 .sharepoint .files .file_collection  import  FileCollection 
169-             return  FileCollection (self .context , ResourcePath ("Files" , self .resource_path ))
204+         from  office365 .sharepoint .files .file_collection  import  FileCollection 
205+         return  self .properties .get ("Files" ,
206+                                    FileCollection (self .context , ResourcePath ("Files" , self .resource_path )))
170207
171208    @property  
172209    def  folders (self ):
@@ -242,10 +279,18 @@ def serverRelativeUrl(self):
242279        """ 
243280        return  self .properties .get ("ServerRelativeUrl" , None )
244281
282+     @property  
283+     def  server_relative_path (self ):
284+         """Gets the server-relative Path of the list folder. 
285+         :rtype: SPResPath or None 
286+         """ 
287+         return  self .properties .get ("ServerRelativePath" , SPResPath (None ))
288+ 
245289    def  get_property (self , name ):
246290        property_mapping  =  {
247291            "ListItemAllFields" : self .list_item_all_fields ,
248-             "ParentFolder" : self .parent_folder 
292+             "ParentFolder" : self .parent_folder ,
293+             "ServerRelativePath" : self .server_relative_path 
249294        }
250295        if  name  in  property_mapping :
251296            return  property_mapping [name ]
@@ -258,6 +303,9 @@ def set_property(self, name, value, persist_changes=True):
258303        if  name  ==  "ServerRelativeUrl" :
259304            self ._resource_path  =  ResourcePathServiceOperation ("getFolderByServerRelativeUrl" , [value ],
260305                                                               ResourcePath ("Web" ))
306+         elif  name  ==  "ServerRelativePath" :
307+             self ._resource_path  =  ResourcePathServiceOperation ("getFolderByServerRelativePath" , [value ],
308+                                                                ResourcePath ("Web" ))
261309        elif  name  ==  "UniqueId" :
262310            self ._resource_path  =  ResourcePathServiceOperation ("getFolderById" , [value ], ResourcePath ("Web" ))
263311        return  self 
0 commit comments