|
| 1 | +import os |
| 2 | + |
1 | 3 | from office365.runtime.client_result import ClientResult
|
2 | 4 | from office365.runtime.client_value_collection import ClientValueCollection
|
3 | 5 | from office365.runtime.queries.client_query import ClientQuery
|
@@ -189,11 +191,33 @@ def get_folder_by_server_relative_url(self, url):
|
189 | 191 | """Returns the folder object located at the specified server-relative URL.
|
190 | 192 | :type url: str
|
191 | 193 | """
|
| 194 | + if url.startswith("/"): |
| 195 | + url = url[1:] |
| 196 | + |
192 | 197 | return Folder(
|
193 | 198 | self.context,
|
194 | 199 | ResourcePathServiceOperation("getFolderByServerRelativeUrl", [url], self.resource_path)
|
195 | 200 | )
|
196 | 201 |
|
| 202 | + def ensure_folder_path(self, path): |
| 203 | + """ |
| 204 | + Function to create folder tree |
| 205 | + :type path: string |
| 206 | + :param path: relative server URL (path) to a folder |
| 207 | + """ |
| 208 | + |
| 209 | + url_component = os.path.normpath(path).split(os.path.sep) |
| 210 | + url_component = [part for part in url_component if part] # ensure no empty elements |
| 211 | + if not url_component: |
| 212 | + raise NotADirectoryError("Wrong relative URL provided") |
| 213 | + |
| 214 | + folder = self.get_folder_by_server_relative_url(url_component[0]) |
| 215 | + for url_part in url_component[1:]: |
| 216 | + folder = folder.add(url_part) |
| 217 | + |
| 218 | + self.context.execute_query() # need to execute now, otherwise folders are created in "after_execute_query" |
| 219 | + return folder |
| 220 | + |
197 | 221 | def ensure_user(self, login_name):
|
198 | 222 | """Checks whether the specified logon name belongs to a valid user of the website, and if the logon name does
|
199 | 223 | not already exist, adds it to the website.
|
|
0 commit comments