15
15
from office365 .sharepoint .storagemetrics .storage_metrics import StorageMetrics
16
16
from office365 .sharepoint .utilities .move_copy_options import MoveCopyOptions
17
17
from office365 .sharepoint .utilities .move_copy_util import MoveCopyUtil
18
+ from office365 .sharepoint .types .resource_path import ResourcePath as SPResPath
18
19
19
20
20
21
class Folder (BaseEntity ):
@@ -128,9 +129,29 @@ def _copy_folder():
128
129
opts = MoveCopyOptions (keep_both = keep_both , reset_author_and_created_on_copy = reset_author_and_created )
129
130
MoveCopyUtil .copy_folder (self .context , self ._build_full_url (self .serverRelativeUrl ),
130
131
self ._build_full_url (new_relative_url ), opts )
132
+
131
133
self .ensure_property ("ServerRelativeUrl" , _copy_folder )
132
134
return target_folder
133
135
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
+
134
155
def move_to (self , new_relative_url , retain_editor_and_modified = False ):
135
156
"""Moves the folder with files to the destination URL.
136
157
@@ -148,6 +169,24 @@ def _move_folder():
148
169
self .ensure_property ("ServerRelativeUrl" , _move_folder )
149
170
return target_folder
150
171
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
+
151
190
@property
152
191
def storage_metrics (self ):
153
192
return self .properties .get ("StorageMetrics" ,
@@ -162,11 +201,9 @@ def list_item_all_fields(self):
162
201
@property
163
202
def files (self ):
164
203
"""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 )))
170
207
171
208
@property
172
209
def folders (self ):
@@ -242,10 +279,18 @@ def serverRelativeUrl(self):
242
279
"""
243
280
return self .properties .get ("ServerRelativeUrl" , None )
244
281
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
+
245
289
def get_property (self , name ):
246
290
property_mapping = {
247
291
"ListItemAllFields" : self .list_item_all_fields ,
248
- "ParentFolder" : self .parent_folder
292
+ "ParentFolder" : self .parent_folder ,
293
+ "ServerRelativePath" : self .server_relative_path
249
294
}
250
295
if name in property_mapping :
251
296
return property_mapping [name ]
@@ -258,6 +303,9 @@ def set_property(self, name, value, persist_changes=True):
258
303
if name == "ServerRelativeUrl" :
259
304
self ._resource_path = ResourcePathServiceOperation ("getFolderByServerRelativeUrl" , [value ],
260
305
ResourcePath ("Web" ))
306
+ elif name == "ServerRelativePath" :
307
+ self ._resource_path = ResourcePathServiceOperation ("getFolderByServerRelativePath" , [value ],
308
+ ResourcePath ("Web" ))
261
309
elif name == "UniqueId" :
262
310
self ._resource_path = ResourcePathServiceOperation ("getFolderById" , [value ], ResourcePath ("Web" ))
263
311
return self
0 commit comments