Office365-REST-Python-Client 2.5.10__py3-none-any.whl → 2.5.12__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. {Office365_REST_Python_Client-2.5.10.dist-info → Office365_REST_Python_Client-2.5.12.dist-info}/METADATA +14 -10
  2. {Office365_REST_Python_Client-2.5.10.dist-info → Office365_REST_Python_Client-2.5.12.dist-info}/RECORD +85 -69
  3. {Office365_REST_Python_Client-2.5.10.dist-info → Office365_REST_Python_Client-2.5.12.dist-info}/WHEEL +1 -1
  4. office365/directory/authentication/conditions/__init__.py +0 -0
  5. office365/directory/authentication/conditions/application.py +5 -0
  6. office365/directory/authentication/conditions/applications.py +5 -0
  7. office365/directory/authentication/conditions/conditions.py +11 -0
  8. office365/directory/identitygovernance/appconsent/request.py +32 -0
  9. office365/directory/identitygovernance/appconsent/request_scope.py +5 -0
  10. office365/directory/identitygovernance/privilegedaccess/group.py +5 -0
  11. office365/directory/identitygovernance/privilegedaccess/root.py +14 -0
  12. office365/directory/identitygovernance/privilegedaccess/schedule_instance.py +6 -0
  13. office365/directory/policies/admin_consent_request.py +10 -0
  14. office365/directory/policies/root.py +15 -0
  15. office365/directory/synchronization/status.py +14 -1
  16. office365/directory/synchronization/task_execution.py +5 -0
  17. office365/directory/users/user.py +4 -2
  18. office365/graph_client.py +11 -25
  19. office365/graph_request.py +24 -1
  20. office365/onedrive/driveitems/driveItem.py +41 -38
  21. office365/onedrive/idle_session_signout.py +15 -0
  22. office365/onedrive/listitems/list_item.py +1 -0
  23. office365/onedrive/lists/collection.py +6 -0
  24. office365/onedrive/sharepoint_ids.py +18 -1
  25. office365/onedrive/sharepoint_settings.py +13 -0
  26. office365/onedrive/shares/drive_item.py +1 -2
  27. office365/onedrive/sitepages/title_area.py +15 -5
  28. office365/onedrive/storage/__init__.py +0 -0
  29. office365/onedrive/storage/storage.py +5 -0
  30. office365/onedrive/workbooks/filter.py +7 -0
  31. office365/onedrive/workbooks/filter_criteria.py +9 -2
  32. office365/onedrive/workbooks/tables/rows/collection.py +20 -0
  33. office365/onedrive/workbooks/tables/rows/row.py +2 -1
  34. office365/onedrive/workbooks/workbook.py +7 -5
  35. office365/onenote/internal/multipart_page_query.py +2 -3
  36. office365/outlook/calendar/sharing/__init__.py +0 -0
  37. office365/outlook/calendar/sharing/message_action.py +5 -0
  38. office365/outlook/calendar/sharing_message.py +19 -0
  39. office365/outlook/calendar/timezones/custom.py +9 -0
  40. office365/outlook/category.py +7 -0
  41. office365/outlook/mail/automatic_replies_setting.py +7 -0
  42. office365/outlook/mail/item_body.py +10 -1
  43. office365/outlook/mail/messages/collection.py +3 -0
  44. office365/outlook/mail/messages/message.py +3 -4
  45. office365/outlook/mail/messages/rules/predicates.py +5 -0
  46. office365/outlook/mail/messages/rules/rule.py +4 -3
  47. office365/runtime/auth/providers/saml_token_provider.py +4 -4
  48. office365/runtime/http/request_options.py +7 -3
  49. office365/runtime/odata/query_options.py +3 -0
  50. office365/runtime/queries/batch.py +4 -0
  51. office365/runtime/queries/create_entity.py +6 -8
  52. office365/runtime/queries/update_entity.py +3 -5
  53. office365/sharepoint/appprincipal/identity_provider.py +7 -1
  54. office365/sharepoint/attachments/attachment.py +14 -2
  55. office365/sharepoint/attachments/collection.py +27 -4
  56. office365/sharepoint/changes/app_consent_principal.py +5 -0
  57. office365/sharepoint/changes/file.py +4 -0
  58. office365/sharepoint/client_context.py +4 -3
  59. office365/sharepoint/directory/group.py +9 -9
  60. office365/sharepoint/directory/helper.py +6 -4
  61. office365/sharepoint/documentmanagement/document_set.py +7 -8
  62. office365/sharepoint/entity.py +4 -3
  63. office365/sharepoint/fields/builtin_field_id.py +19 -0
  64. office365/sharepoint/fields/choice.py +2 -2
  65. office365/sharepoint/fields/collection.py +1 -3
  66. office365/sharepoint/fields/field.py +5 -2
  67. office365/sharepoint/files/file.py +1 -1
  68. office365/sharepoint/internal/queries/upload_file.py +12 -8
  69. office365/sharepoint/navigation/node.py +4 -2
  70. office365/sharepoint/packaging/app_details.py +34 -0
  71. office365/sharepoint/policy/dlp_policy_tip.py +9 -1
  72. office365/sharepoint/portal/sites/manager.py +1 -1
  73. office365/sharepoint/principal/principal.py +10 -1
  74. office365/sharepoint/principal/users/collection.py +1 -3
  75. office365/sharepoint/publishing/pages/collection.py +1 -1
  76. office365/sharepoint/publishing/sites/communication/site.py +4 -3
  77. office365/sharepoint/request.py +33 -1
  78. office365/sharepoint/sharing/information.py +5 -0
  79. office365/sharepoint/sharing/permission_collection.py +13 -9
  80. office365/sharepoint/sharing/recipient_limits.py +9 -0
  81. office365/sharepoint/sharing/site_sharing_report_helper.py +2 -3
  82. office365/sharepoint/tenant/administration/recent_admin_action_report.py +2 -2
  83. office365/sharepoint/tenant/administration/tenant.py +50 -4
  84. {Office365_REST_Python_Client-2.5.10.dist-info → Office365_REST_Python_Client-2.5.12.dist-info}/LICENSE +0 -0
  85. {Office365_REST_Python_Client-2.5.10.dist-info → Office365_REST_Python_Client-2.5.12.dist-info}/top_level.txt +0 -0
@@ -1,7 +1,13 @@
1
+ from typing import Optional
2
+
3
+ from office365.directory.identitygovernance.appconsent.request_scope import (
4
+ AppConsentRequestScope,
5
+ )
1
6
  from office365.directory.identitygovernance.userconsent.request_collection import (
2
7
  UserConsentRequestCollection,
3
8
  )
4
9
  from office365.entity import Entity
10
+ from office365.runtime.client_value_collection import ClientValueCollection
5
11
  from office365.runtime.paths.resource_path import ResourcePath
6
12
 
7
13
 
@@ -15,6 +21,32 @@ class AppConsentRequest(Entity):
15
21
  the admin consent workflow is enabled.
16
22
  """
17
23
 
24
+ def __str__(self):
25
+ return self.app_display_name or self.entity_type_name
26
+
27
+ def __repr__(self):
28
+ return self.app_id or self.entity_type_name
29
+
30
+ @property
31
+ def app_display_name(self):
32
+ # type: () -> Optional[str]
33
+ """Display name of the application object on which this extension property is defined. Read-only"""
34
+ return self.properties.get("appDisplayName", None)
35
+
36
+ @property
37
+ def app_id(self):
38
+ # type: () -> Optional[str]
39
+ """The identifier of the application"""
40
+ return self.properties.get("appId", None)
41
+
42
+ @property
43
+ def pending_scopes(self):
44
+ # type: () -> ClientValueCollection[AppConsentRequestScope]
45
+ """A list of pending scopes waiting for approval. Required."""
46
+ return self.properties.get(
47
+ "pendingScopes", ClientValueCollection(AppConsentRequestScope)
48
+ )
49
+
18
50
  @property
19
51
  def user_consent_requests(self):
20
52
  """A list of pending user consent requests."""
@@ -0,0 +1,5 @@
1
+ from office365.runtime.client_value import ClientValue
2
+
3
+
4
+ class AppConsentRequestScope(ClientValue):
5
+ """The appConsentRequestScope details the dynamic permission scopes for which access is being requested."""
@@ -0,0 +1,5 @@
1
+ from office365.entity import Entity
2
+
3
+
4
+ class PrivilegedAccessGroup(Entity):
5
+ """The entry point for all resources related to Privileged Identity Management (PIM) for groups."""
@@ -1,5 +1,19 @@
1
+ from office365.directory.identitygovernance.privilegedaccess.group import (
2
+ PrivilegedAccessGroup,
3
+ )
1
4
  from office365.entity import Entity
5
+ from office365.runtime.paths.resource_path import ResourcePath
2
6
 
3
7
 
4
8
  class PrivilegedAccessRoot(Entity):
5
9
  """Represents the entry point for resources related to Privileged Identity Management (PIM)."""
10
+
11
+ @property
12
+ def group(self):
13
+ """A list of pending user consent requests."""
14
+ return self.properties.get(
15
+ "group",
16
+ PrivilegedAccessGroup(
17
+ self.context, ResourcePath("group", self.resource_path)
18
+ ),
19
+ )
@@ -0,0 +1,6 @@
1
+ from office365.entity import Entity
2
+
3
+
4
+ class PrivilegedAccessScheduleInstance(Entity):
5
+ """An abstract type that exposes properties relating to the instances of membership and ownership assignments
6
+ and eligibilities to groups that are governed by PIM"""
@@ -0,0 +1,10 @@
1
+ from office365.entity import Entity
2
+
3
+
4
+ class AdminConsentRequestPolicy(Entity):
5
+ """
6
+ Represents the policy for enabling or disabling the Microsoft Entra admin consent workflow.
7
+ The admin consent workflow allows users to request access for apps that they wish to use and that require admin
8
+ authorization before users can use the apps to access organizational data.
9
+ There is a single adminConsentRequestPolicy per tenant.
10
+ """
@@ -1,3 +1,4 @@
1
+ from office365.directory.policies.admin_consent_request import AdminConsentRequestPolicy
1
2
  from office365.directory.policies.app_management import AppManagementPolicy
2
3
  from office365.directory.policies.authentication_flows import AuthenticationFlowsPolicy
3
4
  from office365.directory.policies.authentication_methods import (
@@ -20,6 +21,19 @@ from office365.runtime.paths.resource_path import ResourcePath
20
21
  class PolicyRoot(Entity):
21
22
  """Resource type exposing navigation properties for the policies singleton."""
22
23
 
24
+ @property
25
+ def admin_consent_request_policy(self):
26
+ """
27
+ The policy by which consent requests are created and managed for the entire tenant.
28
+ """
29
+ return self.properties.get(
30
+ "adminConsentRequestPolicy",
31
+ AdminConsentRequestPolicy(
32
+ self.context,
33
+ ResourcePath("adminConsentRequestPolicy", self.resource_path),
34
+ ),
35
+ )
36
+
23
37
  @property
24
38
  def authentication_methods_policy(self):
25
39
  """
@@ -151,6 +165,7 @@ class PolicyRoot(Entity):
151
165
  def get_property(self, name, default_value=None):
152
166
  if default_value is None:
153
167
  property_mapping = {
168
+ "adminConsentRequestPolicy": self.admin_consent_request_policy,
154
169
  "authenticationStrengthPolicies": self.authentication_strength_policies,
155
170
  "authenticationFlowsPolicy": self.authentication_flows_policy,
156
171
  "appManagementPolicies": self.app_management_policies,
@@ -1,5 +1,8 @@
1
1
  from office365.directory.synchronization.progress import SynchronizationProgress
2
2
  from office365.directory.synchronization.quarantine import SynchronizationQuarantine
3
+ from office365.directory.synchronization.task_execution import (
4
+ SynchronizationTaskExecution,
5
+ )
3
6
  from office365.runtime.client_value import ClientValue
4
7
  from office365.runtime.client_value_collection import ClientValueCollection
5
8
 
@@ -7,10 +10,20 @@ from office365.runtime.client_value_collection import ClientValueCollection
7
10
  class SynchronizationStatus(ClientValue):
8
11
  """Represents the current status of the synchronizationJob."""
9
12
 
10
- def __init__(self, progress=None, quarantine=SynchronizationQuarantine()):
13
+ def __init__(
14
+ self,
15
+ progress=None,
16
+ quarantine=SynchronizationQuarantine(),
17
+ last_execution=SynchronizationTaskExecution(),
18
+ last_successful_execution=SynchronizationTaskExecution(),
19
+ last_successful_execution_with_exports=SynchronizationTaskExecution(),
20
+ ):
11
21
  """
12
22
  :param list[SynchronizationProgress] progress: Details of the progress of a job toward completion.
13
23
  :param SynchronizationQuarantine quarantine:
14
24
  """
15
25
  self.progress = ClientValueCollection(SynchronizationProgress, progress)
16
26
  self.quarantine = quarantine
27
+ self.lastExecution = last_execution
28
+ self.lastSuccessfulExecution = last_successful_execution
29
+ self.lastSuccessfulExecutionWithExports = last_successful_execution_with_exports
@@ -0,0 +1,5 @@
1
+ from office365.runtime.client_value import ClientValue
2
+
3
+
4
+ class SynchronizationTaskExecution(ClientValue):
5
+ """Summarizes the results of the synchronization job run."""
@@ -1,6 +1,6 @@
1
1
  import json
2
2
  from datetime import datetime
3
- from typing import Optional
3
+ from typing import List, Optional
4
4
 
5
5
  from office365.communications.onlinemeetings.collection import OnlineMeetingCollection
6
6
  from office365.communications.presences.presence import Presence
@@ -46,6 +46,7 @@ from office365.outlook.contacts.collection import ContactCollection
46
46
  from office365.outlook.contacts.folder import ContactFolder
47
47
  from office365.outlook.convert_id_result import ConvertIdResult
48
48
  from office365.outlook.mail.folders.collection import MailFolderCollection
49
+ from office365.outlook.mail.item_body import ItemBody
49
50
  from office365.outlook.mail.mailbox_settings import MailboxSettings
50
51
  from office365.outlook.mail.messages.collection import MessageCollection
51
52
  from office365.outlook.mail.messages.message import Message
@@ -201,6 +202,7 @@ class User(DirectoryObject):
201
202
  bcc_recipients=None,
202
203
  save_to_sent_items=False,
203
204
  ):
205
+ # type: (str, str|ItemBody, List[str], List[str], List[str], bool) -> Message
204
206
  """Send a new message on the fly
205
207
 
206
208
  :param str subject: The subject of the message.
@@ -347,7 +349,7 @@ class User(DirectoryObject):
347
349
  start_dt.isoformat(), end_dt.isoformat()
348
350
  )
349
351
 
350
- self.context.add_query(qry).before_execute(_construct_request)
352
+ self.context.add_query(qry).before_query_execute(_construct_request)
351
353
  return return_type
352
354
 
353
355
  def get_reminder_view(self, start_dt, end_dt):
office365/graph_client.py CHANGED
@@ -41,6 +41,7 @@ from office365.directory.users.collection import UserCollection
41
41
  from office365.directory.users.user import User
42
42
  from office365.education.root import EducationRoot
43
43
  from office365.entity_collection import EntityCollection
44
+ from office365.graph_request import GraphRequest
44
45
  from office365.intune.devices.app_management import DeviceAppManagement
45
46
  from office365.intune.devices.collection import DeviceCollection
46
47
  from office365.intune.devices.management.management import DeviceManagement
@@ -58,7 +59,6 @@ from office365.runtime.auth.token_response import TokenResponse
58
59
  from office365.runtime.client_runtime_context import ClientRuntimeContext
59
60
  from office365.runtime.http.http_method import HttpMethod
60
61
  from office365.runtime.http.request_options import RequestOptions
61
- from office365.runtime.odata.request import ODataRequest
62
62
  from office365.runtime.odata.v4.batch_request import ODataV4BatchRequest
63
63
  from office365.runtime.odata.v4.json_format import V4JsonFormat
64
64
  from office365.runtime.paths.resource_path import ResourcePath
@@ -73,31 +73,14 @@ from office365.teams.collection import TeamCollection
73
73
  from office365.teams.template import TeamsTemplate
74
74
  from office365.teams.viva.employee_experience import EmployeeExperience
75
75
 
76
- environments_endpoints = {
77
- "GCCH": {
78
- "graph_url": "https://graph.microsoft.com",
79
- "entra_url": "https://login.microsoftonline.com",
80
- },
81
- "GCC High": {
82
- "graph_url": "https://graph.microsoft.us",
83
- "entra_url": "https://login.microsoftonline.us",
84
- },
85
- "DoD": {
86
- "graph_url": "https://dod-graph.microsoft.us",
87
- "entra_url": "https://login.chinacloudapi.cn",
88
- },
89
- }
90
-
91
76
 
92
77
  class GraphClient(ClientRuntimeContext):
93
78
  """Graph Service client"""
94
79
 
95
- def __init__(self, acquire_token_callback, version="v1.0", environment="GCCH"):
96
- # type: (Callable[[], dict], str, str) -> None
80
+ def __init__(self, acquire_token_callback):
81
+ # type: (Callable[[], dict]) -> None
97
82
  super(GraphClient, self).__init__()
98
83
  self._pending_request = None
99
- self._version = version
100
- self._environment_endpoints = environments_endpoints.get(environment, None)
101
84
  self._acquire_token_callback = acquire_token_callback
102
85
 
103
86
  @staticmethod
@@ -127,7 +110,7 @@ class GraphClient(ClientRuntimeContext):
127
110
  "thumbprint": thumbprint,
128
111
  "private_key": private_key,
129
112
  },
130
- token_cache=token_cache # Default cache is in memory only.
113
+ token_cache=token_cache, # Default cache is in memory only.
131
114
  # You can learn how to use SerializableTokenCache from
132
115
  # https://msal-python.readthedocs.io/en/latest/#msal.SerializableTokenCache
133
116
  )
@@ -246,29 +229,32 @@ class GraphClient(ClientRuntimeContext):
246
229
 
247
230
  return GraphClient(_acquire_token)
248
231
 
249
- def execute_batch(self, items_per_batch=100):
232
+ def execute_batch(self, items_per_batch=100, success_callback=None):
250
233
  """Constructs and submit a batch request
251
234
 
252
235
  :param int items_per_batch: Maximum to be selected for bulk operation
236
+ :param (List[ClientObject|ClientResult])-> None success_callback: A success callback
253
237
  """
254
238
  batch_request = ODataV4BatchRequest(V4JsonFormat())
255
239
  batch_request.beforeExecute += self._authenticate_request
256
240
  while self.has_pending_request:
257
241
  qry = self._get_next_query(items_per_batch)
258
242
  batch_request.execute_query(qry)
243
+ if callable(success_callback):
244
+ success_callback(qry.return_type)
259
245
  return self
260
246
 
261
247
  def pending_request(self):
262
- # type: () -> ODataRequest
248
+ # type: () -> GraphRequest
263
249
  if self._pending_request is None:
264
- self._pending_request = ODataRequest(V4JsonFormat())
250
+ self._pending_request = GraphRequest()
265
251
  self._pending_request.beforeExecute += self._authenticate_request
266
252
  self._pending_request.beforeExecute += self._build_specific_query
267
253
  return self._pending_request
268
254
 
269
255
  def service_root_url(self):
270
256
  # type: () -> str
271
- return "https://graph.microsoft.com/{0}".format(self._version)
257
+ return self.pending_request().service_root_url
272
258
 
273
259
  def _build_specific_query(self, request):
274
260
  # type: (RequestOptions) -> None
@@ -1,7 +1,30 @@
1
1
  from office365.runtime.odata.request import ODataRequest
2
2
  from office365.runtime.odata.v4.json_format import V4JsonFormat
3
3
 
4
+ environments_endpoints = {
5
+ "GCCH": {
6
+ "graph_url": "https://graph.microsoft.com",
7
+ "entra_url": "https://login.microsoftonline.com",
8
+ },
9
+ "GCC High": {
10
+ "graph_url": "https://graph.microsoft.us",
11
+ "entra_url": "https://login.microsoftonline.us",
12
+ },
13
+ "DoD": {
14
+ "graph_url": "https://dod-graph.microsoft.us",
15
+ "entra_url": "https://login.chinacloudapi.cn",
16
+ },
17
+ }
18
+
4
19
 
5
20
  class GraphRequest(ODataRequest):
6
- def __init__(self):
21
+ def __init__(self, version="v1.0", environment="GCCH"):
22
+ # type: (str, str) -> None
7
23
  super(GraphRequest, self).__init__(V4JsonFormat())
24
+ self._version = version
25
+ self._environment_endpoints = environments_endpoints.get(environment, None)
26
+
27
+ @property
28
+ def service_root_url(self):
29
+ # type: () -> str
30
+ return "https://graph.microsoft.com/{0}".format(self._version)
@@ -469,6 +469,7 @@ class DriveItem(BaseItem):
469
469
  return self.get_content(format_name)
470
470
 
471
471
  def copy(self, name=None, parent=None, conflict_behavior=ConflictBehavior.Fail):
472
+ # type: (str, ItemReference|"DriveItem", str) -> ClientResult[str]
472
473
  """Asynchronously creates a copy of an driveItem (including any children), under a new parent item or with a
473
474
  new name.
474
475
 
@@ -480,32 +481,30 @@ class DriveItem(BaseItem):
480
481
 
481
482
  Returns location for details about how to monitor the progress of the copy, upon accepting the request.
482
483
  """
483
- return_type = ClientResult(self.context) # type: ClientResult[str]
484
+ return_type = ClientResult(self.context, str())
484
485
 
485
- def _create_request(request):
486
- # type: (RequestOptions) -> None
487
- request.url += "?@microsoft.graph.conflictBehavior={0}".format(
488
- conflict_behavior
489
- )
486
+ def _copy(parent_reference):
487
+ # type: (ItemReference) -> None
488
+
489
+ def _create_request(request):
490
+ # type: (RequestOptions) -> None
491
+ request.url += "?@microsoft.graph.conflictBehavior={0}".format(
492
+ conflict_behavior
493
+ )
494
+
495
+ def _process_response(resp):
496
+ # type: (requests.Response) -> None
497
+ resp.raise_for_status()
498
+ location = resp.headers.get("Location", None)
499
+ if location is None:
500
+ return
501
+ return_type.set_property("__value", location)
490
502
 
491
- def _process_response(resp):
492
- # type: (requests.Response) -> None
493
- resp.raise_for_status()
494
- location = resp.headers.get("Location", None)
495
- if location is None:
496
- return
497
- return_type.set_property("__value", location)
498
-
499
- def _create_and_add_query(parent_reference):
500
- """
501
- :param office365.onedrive.listitems.item_reference.ItemReference or None parent_reference: Reference to the
502
- parent item the copy will be created in.
503
- """
504
503
  payload = {"name": name, "parentReference": parent_reference}
505
- self.context.before_execute(_create_request)
506
- self.context.after_execute(_process_response)
507
504
  qry = ServiceOperationQuery(self, "copy", None, payload, None, return_type)
508
- self.context.add_query(qry)
505
+ self.context.add_query(qry).before_query_execute(
506
+ _create_request
507
+ ).after_execute(_process_response)
509
508
 
510
509
  if isinstance(parent, DriveItem):
511
510
 
@@ -513,14 +512,15 @@ class DriveItem(BaseItem):
513
512
  parent_reference = ItemReference(
514
513
  drive_id=parent.parent_reference.driveId, _id=parent.id
515
514
  )
516
- _create_and_add_query(parent_reference)
515
+ _copy(parent_reference)
517
516
 
518
517
  parent.ensure_property("parentReference", _drive_item_loaded)
519
518
  else:
520
- _create_and_add_query(parent)
519
+ _copy(parent)
521
520
  return return_type
522
521
 
523
- def move(self, name=None, parent=None):
522
+ def move(self, name=None, parent=None, conflict_behavior=ConflictBehavior.Fail):
523
+ # type: (str, ItemReference|"DriveItem", str) -> "DriveItem"
524
524
  """To move a DriveItem to a new parent item, your app requests to update the parentReference of the DriveItem
525
525
  to move.
526
526
 
@@ -528,29 +528,34 @@ class DriveItem(BaseItem):
528
528
  original.
529
529
  :param ItemReference or DriveItem or None parent: Reference to the
530
530
  parent item the move will be created in.
531
+ :param str conflict_behavior: query parameter to customize the behavior when a conflict occurs.
531
532
  """
532
533
 
533
- return_type = ClientResult(self.context, str())
534
+ return_type = DriveItem(self.context)
535
+ self.children.add_child(return_type)
534
536
 
535
- def _create_and_add_query(parent_reference):
537
+ def _move(parent_reference):
538
+ # type: (ItemReference) -> None
536
539
  payload = {"name": name, "parentReference": parent_reference}
537
540
 
538
541
  def _construct_request(request):
539
542
  # type: (RequestOptions) -> None
540
543
  request.method = HttpMethod.Patch
544
+ request.url += "?@microsoft.graph.conflictBehavior={0}".format(
545
+ conflict_behavior
546
+ )
541
547
 
542
- self.context.before_execute(_construct_request)
543
- qry = ServiceOperationQuery(self, "move", None, payload, None, return_type)
544
- self.context.add_query(qry)
548
+ qry = ServiceOperationQuery(self, "", None, payload, None, return_type)
549
+ self.context.add_query(qry).before_execute(_construct_request)
545
550
 
546
551
  if isinstance(parent, DriveItem):
547
552
 
548
553
  def _drive_item_loaded():
549
- _create_and_add_query(ItemReference(_id=parent.id))
554
+ _move(ItemReference(_id=parent.id))
550
555
 
551
556
  parent.ensure_property("parentReference", _drive_item_loaded)
552
557
  else:
553
- _create_and_add_query(parent)
558
+ _move(parent)
554
559
  return return_type
555
560
 
556
561
  def rename(self, new_name):
@@ -618,9 +623,9 @@ class DriveItem(BaseItem):
618
623
  DriveRecipient, [DriveRecipient.from_email(r) for r in recipients]
619
624
  ),
620
625
  "message": message,
621
- "expirationDateTime": expiration_datetime.isoformat() + "Z"
622
- if expiration_datetime
623
- else None,
626
+ "expirationDateTime": (
627
+ expiration_datetime.isoformat() + "Z" if expiration_datetime else None
628
+ ),
624
629
  "password": password,
625
630
  "retainInheritedPermissions": retain_inherited_permissions,
626
631
  }
@@ -662,7 +667,7 @@ class DriveItem(BaseItem):
662
667
  return self
663
668
 
664
669
  def restore(self, parent_reference=None, name=None):
665
- # type: (ItemReference or None, str or None) -> DriveItem
670
+ # type: (Optional[ItemReference], str) -> "DriveItem"
666
671
  """
667
672
  Restore a driveItem that has been deleted and is currently in the recycle bin.
668
673
  NOTE: This functionality is currently only available for OneDrive Personal.
@@ -910,8 +915,6 @@ class DriveItem(BaseItem):
910
915
 
911
916
  def set_property(self, name, value, persist_changes=True):
912
917
  super(DriveItem, self).set_property(name, value, persist_changes)
913
- if name == "parentReference":
914
- pass
915
918
  return self
916
919
 
917
920
  def get_property(self, name, default_value=None):
@@ -0,0 +1,15 @@
1
+ from office365.runtime.client_value import ClientValue
2
+
3
+
4
+ class IdleSessionSignOut(ClientValue):
5
+ """Represents the idle session sign-out policy settings for SharePoint."""
6
+
7
+ def __init__(
8
+ self,
9
+ is_enabled=None,
10
+ sign_out_after_in_seconds=None,
11
+ warn_after_in_seconds=None,
12
+ ):
13
+ self.isEnabled = is_enabled
14
+ self.signOutAfterInSeconds = sign_out_after_in_seconds
15
+ self.warnAfterInSeconds = warn_after_in_seconds
@@ -38,6 +38,7 @@ class ListItem(BaseItem):
38
38
 
39
39
  @property
40
40
  def versions(self):
41
+ # type: () -> EntityCollection[ListItemVersion]
41
42
  """The list of previous versions of the list item."""
42
43
  return self.properties.get(
43
44
  "versions",
@@ -26,3 +26,9 @@ class ListCollection(EntityCollection[List]):
26
26
  qry = CreateEntityQuery(self, payload, return_type)
27
27
  self.context.add_query(qry)
28
28
  return return_type
29
+
30
+ def get_by_name(self, name):
31
+ return List(self.context, EntityPath(name, self.resource_path))
32
+
33
+ def get_by_id(self, list_id):
34
+ return List(self.context, EntityPath(list_id, self.resource_path))
@@ -5,13 +5,30 @@ class SharePointIds(ClientValue):
5
5
  """The SharePointIds resource groups the various identifiers for an item stored in a SharePoint site or OneDrive
6
6
  for Business into a single structure."""
7
7
 
8
- def __init__(self, list_id=None, list_item_id=None, list_item_unique_id=None):
8
+ def __init__(
9
+ self,
10
+ list_id=None,
11
+ list_item_id=None,
12
+ list_item_unique_id=None,
13
+ siteId=None,
14
+ siteUrl=None,
15
+ tenantId=None,
16
+ webId=None,
17
+ ):
9
18
  """
10
19
  :param str list_id: The unique identifier (guid) for the item's list in SharePoint.
11
20
  :param str list_item_id: An integer identifier for the item within the containing list.
12
21
  :param str list_item_unique_id: The unique identifier (guid) for the item within OneDrive for Business
13
22
  or a SharePoint site.
23
+ :param str siteId: The unique identifier (guid) for the item's site collection (SPSite).
24
+ :param str siteUrl: The SharePoint URL for the site that contains the item.
25
+ :param str tenantId: The unique identifier (guid) for the tenancy.
26
+ :param str webId: The unique identifier (guid) for the item's site (SPWeb).
14
27
  """
15
28
  self.listId = list_id
16
29
  self.listItemId = list_item_id
17
30
  self.listItemUniqueId = list_item_unique_id
31
+ self.siteId = siteId
32
+ self.siteUrl = siteUrl
33
+ self.tenantId = tenantId
34
+ self.webId = webId
@@ -1,6 +1,7 @@
1
1
  from typing import Optional
2
2
 
3
3
  from office365.entity import Entity
4
+ from office365.onedrive.idle_session_signout import IdleSessionSignOut
4
5
  from office365.runtime.types.collections import StringCollection
5
6
 
6
7
 
@@ -26,6 +27,18 @@ class SharepointSettings(Entity):
26
27
  "excludedFileExtensionsForSyncApp", StringCollection()
27
28
  )
28
29
 
30
+ @property
31
+ def idle_session_sign_out(self):
32
+ # type: () -> IdleSessionSignOut
33
+ """Specifies the idle session sign-out policies for the tenant."""
34
+ return self.properties.get("idleSessionSignOut", IdleSessionSignOut())
35
+
36
+ @property
37
+ def is_commenting_on_site_pages_enabled(self):
38
+ # type: () -> Optional[bool]
39
+ """Indicates whether comments are allowed on modern site pages in SharePoint."""
40
+ return self.properties.get("isCommentingOnSitePagesEnabled", None)
41
+
29
42
  @property
30
43
  def site_creation_default_managed_path(self):
31
44
  # type: () -> Optional[str]
@@ -8,7 +8,6 @@ from office365.onedrive.lists.list import List
8
8
  from office365.onedrive.permissions.permission import Permission
9
9
  from office365.onedrive.sites.site import Site
10
10
  from office365.runtime.paths.resource_path import ResourcePath
11
- from office365.runtime.paths.v4.entity import EntityPath
12
11
 
13
12
 
14
13
  class SharedDriveItem(BaseItem):
@@ -48,7 +47,7 @@ class SharedDriveItem(BaseItem):
48
47
  """Used to access the underlying driveItem"""
49
48
  return self.properties.get(
50
49
  "driveItem",
51
- DriveItem(self.context, EntityPath("driveItem", self.resource_path)),
50
+ DriveItem(self.context, ResourcePath("driveItem", self.resource_path)),
52
51
  )
53
52
 
54
53
  @property
@@ -4,10 +4,20 @@ from office365.runtime.client_value import ClientValue
4
4
  class TitleArea(ClientValue):
5
5
  """Represents the title area of a given SharePoint page."""
6
6
 
7
- def __init__(self, alternativeText=None, enableGradientEffect=None):
7
+ def __init__(
8
+ self,
9
+ alternative_text=None,
10
+ enable_gradient_effect=None,
11
+ image_web_url=None,
12
+ show_author=None,
13
+ ):
8
14
  """
9
- :param str alternativeText: Alternative text on the title area.
10
- :param bool enableGradientEffect: Indicates whether the title area has a gradient effect enabled.
15
+ :param str alternative_text: Alternative text on the title area.
16
+ :param bool enable_gradient_effect: Indicates whether the title area has a gradient effect enabled.
17
+ :param str image_web_url:
18
+ :param bool show_author:
11
19
  """
12
- self.alternativeText = alternativeText
13
- self.enableGradientEffect = enableGradientEffect
20
+ self.alternativeText = alternative_text
21
+ self.enableGradientEffect = enable_gradient_effect
22
+ self.imageWebUrl = image_web_url
23
+ self.showAuthor = show_author
File without changes
@@ -0,0 +1,5 @@
1
+ from office365.entity import Entity
2
+
3
+
4
+ class Storage(Entity):
5
+ """Facilitates the structures of fileStorageContainers."""
@@ -2,11 +2,18 @@ from typing import Optional
2
2
 
3
3
  from office365.entity import Entity
4
4
  from office365.onedrive.workbooks.filter_criteria import WorkbookFilterCriteria
5
+ from office365.runtime.queries.service_operation import ServiceOperationQuery
5
6
 
6
7
 
7
8
  class WorkbookFilter(Entity):
8
9
  """Manages the filtering of a table's column."""
9
10
 
11
+ def clear(self):
12
+ """Clear the filter on the given column."""
13
+ qry = ServiceOperationQuery(self, "clear")
14
+ self.context.add_query(qry)
15
+ return self
16
+
10
17
  @property
11
18
  def criteria(self):
12
19
  # type: () -> Optional[WorkbookFilterCriteria]