5
5
from office365 .runtime .queries .update_entity_query import UpdateEntityQuery
6
6
from office365 .runtime .resource_path import ResourcePath
7
7
from office365 .runtime .resource_path_service_operation import ResourcePathServiceOperation
8
+ from office365 .sharepoint .actions .create_file import CreateFileQuery
8
9
from office365 .sharepoint .base_entity import BaseEntity
9
10
from office365 .sharepoint .changes .change_collection import ChangeCollection
10
11
from office365 .sharepoint .changes .change_query import ChangeQuery
12
+ from office365 .sharepoint .contenttypes .content_type_id import ContentTypeId
11
13
from office365 .sharepoint .files .file_creation_information import FileCreationInformation
12
14
from office365 .sharepoint .listitems .listitem import ListItem
13
15
@@ -68,6 +70,7 @@ def _add_sub_folder():
68
70
new_folder .set_property ("ServerRelativeUrl" , new_folder_url )
69
71
qry = CreateEntityQuery (self .folders , new_folder , new_folder )
70
72
self .context .add_query (qry )
73
+
71
74
self .ensure_property ("ServerRelativeUrl" , _add_sub_folder )
72
75
return new_folder
73
76
@@ -90,18 +93,17 @@ def delete_object(self):
90
93
self .remove_from_parent_collection ()
91
94
return self
92
95
93
- def upload_file (self , name , content ):
96
+ def upload_file (self , file_name , content ):
94
97
"""Uploads a file into folder
95
98
96
- :type name : str
99
+ :type file_name : str
97
100
:type content: str
101
+ :rtype: office365.sharepoint.files.file.File
98
102
"""
99
- info = FileCreationInformation ()
100
- info .content = content
101
- info .url = name
102
- info .overwrite = True
103
- target_file = self .files .add (info )
104
- return target_file
103
+ info = FileCreationInformation (url = file_name , overwrite = True , content = content )
104
+ qry = CreateFileQuery (self .files , info )
105
+ self .context .add_query (qry )
106
+ return qry .return_type
105
107
106
108
def copy_to (self , new_relative_url , overwrite ):
107
109
"""Copies the folder with files to the destination URL.
@@ -132,16 +134,15 @@ def _move_folder_with_files():
132
134
for file in self .files :
133
135
new_file_url = "/" .join ([new_relative_url , file .properties ['Name' ]])
134
136
file .moveto (new_file_url , flags )
137
+
135
138
self .ensure_property ("Files" , _move_folder_with_files )
136
139
return self
137
140
138
141
@property
139
142
def list_item_all_fields (self ):
140
143
"""Specifies the list item fields (2) values for the list item corresponding to the folder."""
141
- if self .is_property_available ('ListItemAllFields' ):
142
- return self .properties ["ListItemAllFields" ]
143
- else :
144
- return ListItem (self .context , ResourcePath ("ListItemAllFields" , self .resource_path ))
144
+ return self .properties .get ("ListItemAllFields" ,
145
+ ListItem (self .context , ResourcePath ("ListItemAllFields" , self .resource_path )))
145
146
146
147
@property
147
148
def files (self ):
@@ -152,6 +153,28 @@ def files(self):
152
153
from office365 .sharepoint .files .file_collection import FileCollection
153
154
return FileCollection (self .context , ResourcePath ("Files" , self .resource_path ))
154
155
156
+ @property
157
+ def folders (self ):
158
+ """Specifies the collection of list folders contained within the list folder.
159
+ """
160
+ from office365 .sharepoint .folders .folder_collection import FolderCollection
161
+ return self .properties .get ("Folders" ,
162
+ FolderCollection (self .context , ResourcePath ("Folders" , self .resource_path )))
163
+
164
+ @property
165
+ def parent_folder (self ):
166
+ """Specifies the list folder.
167
+ """
168
+ return self .properties .get ("ParentFolder" ,
169
+ Folder (self .context , ResourcePath ("ParentFolder" , self .resource_path )))
170
+
171
+ @property
172
+ def name (self ):
173
+ """Specifies the list folder name.
174
+ :rtype: str or None
175
+ """
176
+ return self .properties .get ("Name" , None )
177
+
155
178
@property
156
179
def unique_id (self ):
157
180
"""Gets the unique ID of the folder.
@@ -181,6 +204,14 @@ def unique_content_type_order(self):
181
204
"""
182
205
return self .properties .get ("UniqueContentTypeOrder" , None )
183
206
207
+ @property
208
+ def content_type_order (self ):
209
+ """Specifies the content type order for the list folder.
210
+
211
+ :rtype: office365.sharepoint.contenttypes.content_type_id.ContentTypeId or None
212
+ """
213
+ return self .properties .get ("ContentTypeOrder" , ContentTypeId ())
214
+
184
215
@property
185
216
def time_last_modified (self ):
186
217
"""Gets the last time this folder or a direct child was modified in UTC.
@@ -196,22 +227,23 @@ def serverRelativeUrl(self):
196
227
"""
197
228
return self .properties .get ("ServerRelativeUrl" , None )
198
229
199
- @property
200
- def folders (self ):
201
- """Get a folder collection"""
202
- if self .is_property_available ('Folders' ):
203
- return self .properties ["Folders" ]
230
+ def get_property (self , name ):
231
+ property_mapping = {
232
+ "ListItemAllFields" : self .list_item_all_fields ,
233
+ "ParentFolder" : self .parent_folder
234
+ }
235
+ if name in property_mapping :
236
+ return property_mapping [name ]
204
237
else :
205
- from office365 .sharepoint .folders .folder_collection import FolderCollection
206
- return FolderCollection (self .context , ResourcePath ("Folders" , self .resource_path ))
238
+ return super (Folder , self ).get_property (name )
207
239
208
240
def set_property (self , name , value , persist_changes = True ):
209
241
super (Folder , self ).set_property (name , value , persist_changes )
210
242
# fallback: create a new resource path
211
- if self ._resource_path is None :
212
- if name == "ServerRelativeUrl" :
213
- self ._resource_path = ResourcePathServiceOperation ("getFolderByServerRelativeUrl" , [value ],
214
- ResourcePath ("Web" ))
215
- elif name == "UniqueId" :
216
- self ._resource_path = ResourcePathServiceOperation ("getFolderById" , [value ], ResourcePath ("Web" ))
243
+ # if self._resource_path is None:
244
+ if name == "ServerRelativeUrl" :
245
+ self ._resource_path = ResourcePathServiceOperation ("getFolderByServerRelativeUrl" , [value ],
246
+ ResourcePath ("Web" ))
247
+ elif name == "UniqueId" :
248
+ self ._resource_path = ResourcePathServiceOperation ("getFolderById" , [value ], ResourcePath ("Web" ))
217
249
return self
0 commit comments