Office365-REST-Python-Client 2.5.5__py3-none-any.whl → 2.5.7__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 (270) hide show
  1. {Office365_REST_Python_Client-2.5.5.dist-info → Office365_REST_Python_Client-2.5.7.dist-info}/METADATA +6 -6
  2. {Office365_REST_Python_Client-2.5.5.dist-info → Office365_REST_Python_Client-2.5.7.dist-info}/RECORD +269 -222
  3. office365/booking/virtualevents/__init__.py +0 -0
  4. office365/booking/virtualevents/root.py +5 -0
  5. office365/communications/calls/participant.py +4 -5
  6. office365/directory/administrative_unit.py +9 -2
  7. office365/directory/applications/application.py +3 -3
  8. office365/directory/applications/roles/assignment_collection.py +1 -1
  9. office365/directory/applications/roles/collection.py +6 -2
  10. office365/directory/applications/roles/role.py +1 -1
  11. office365/directory/audit/provisioning/object_summary.py +30 -1
  12. office365/directory/authentication/method_configuration.py +9 -0
  13. office365/directory/authentication/method_mode_detail.py +8 -0
  14. office365/directory/authentication/method_target.py +5 -0
  15. office365/directory/authentication/methods/fido.py +8 -0
  16. office365/directory/authentication/methods/password.py +23 -0
  17. office365/directory/authentication/strength_root.py +5 -0
  18. office365/directory/certificates/auth_configuration.py +1 -3
  19. office365/directory/custom_security_attribute_definition.py +7 -0
  20. office365/directory/device_local_credential_info.py +6 -0
  21. office365/directory/directory.py +40 -12
  22. office365/directory/groups/group.py +2 -6
  23. office365/directory/identities/conditional_access_root.py +10 -1
  24. office365/directory/identities/container.py +3 -9
  25. office365/directory/identities/providers/builtin_identity.py +3 -2
  26. office365/directory/identities/providers/saml_or_wsfed.py +4 -5
  27. office365/directory/identitygovernance/appconsent/request_collection.py +1 -1
  28. office365/directory/identitygovernance/governance.py +14 -3
  29. office365/directory/identitygovernance/privilegedaccess/__init__.py +0 -0
  30. office365/directory/identitygovernance/privilegedaccess/root.py +5 -0
  31. office365/directory/identitygovernance/termsofuse/agreement_acceptance.py +8 -0
  32. office365/directory/identitygovernance/userconsent/request_collection.py +1 -1
  33. office365/directory/insights/resource_reference.py +1 -1
  34. office365/directory/key_credential.py +3 -0
  35. office365/directory/licenses/assignment_state.py +26 -2
  36. office365/directory/licenses/details.py +4 -3
  37. office365/directory/licenses/subscribed_sku.py +8 -10
  38. office365/directory/object_collection.py +40 -25
  39. office365/directory/password_credential.py +3 -0
  40. office365/directory/permissions/default_user_role.py +5 -0
  41. office365/directory/permissions/grants/condition_set.py +4 -2
  42. office365/directory/permissions/grants/oauth2.py +7 -10
  43. office365/directory/policies/authorization.py +50 -3
  44. office365/directory/policies/device_registration.py +6 -0
  45. office365/directory/policies/permission_grant.py +2 -0
  46. office365/directory/policies/root.py +13 -0
  47. office365/directory/profile_photo.py +6 -6
  48. office365/directory/protection/riskyusers/risky_user.py +4 -4
  49. office365/directory/rolemanagement/resource_action.py +10 -0
  50. office365/directory/rolemanagement/role_permission.py +10 -0
  51. office365/directory/security/alerts/alert.py +5 -7
  52. office365/directory/security/attacksimulations/landing_page.py +5 -0
  53. office365/directory/security/attacksimulations/operation.py +5 -0
  54. office365/directory/security/attacksimulations/report.py +8 -1
  55. office365/directory/security/attacksimulations/root.py +33 -0
  56. office365/directory/security/attacksimulations/users/__init__.py +0 -0
  57. office365/directory/security/attacksimulations/users/details.py +5 -0
  58. office365/directory/security/hunting_query_results.py +5 -0
  59. office365/directory/security/incidents/incident.py +8 -13
  60. office365/directory/security/security.py +20 -3
  61. office365/directory/security/threatintelligence/article_indicator.py +7 -0
  62. office365/directory/serviceprincipals/service_principal.py +6 -12
  63. office365/directory/synchronization/schema.py +16 -0
  64. office365/directory/synchronization/synchronization.py +2 -0
  65. office365/directory/users/activities/history_item.py +3 -2
  66. office365/directory/users/user.py +60 -10
  67. office365/entity_collection.py +3 -2
  68. office365/graph_client.py +58 -30
  69. office365/intune/audit/event.py +1 -3
  70. office365/intune/audit/event_collection.py +1 -1
  71. office365/intune/devices/alternative_security_id.py +4 -0
  72. office365/intune/devices/collection.py +57 -0
  73. office365/intune/devices/device.py +38 -10
  74. office365/intune/devices/management/management.py +12 -0
  75. office365/intune/organizations/organization.py +1 -0
  76. office365/onedrive/analytics/item_activity_stat.py +9 -0
  77. office365/onedrive/analytics/item_analytics.py +1 -0
  78. office365/onedrive/contenttypes/content_type.py +4 -12
  79. office365/onedrive/driveitems/driveItem.py +76 -7
  80. office365/onedrive/files/hashes.py +5 -0
  81. office365/onedrive/lists/collection.py +2 -2
  82. office365/onedrive/lists/list.py +1 -1
  83. office365/onedrive/operations/long_running.py +6 -6
  84. office365/onedrive/operations/rich_long_running.py +4 -3
  85. office365/onedrive/permissions/collection.py +1 -14
  86. office365/onedrive/sharepoint_settings.py +6 -6
  87. office365/onedrive/sitepages/__init__.py +0 -0
  88. office365/onedrive/sitepages/base.py +29 -0
  89. office365/onedrive/sitepages/canvas_layout.py +43 -0
  90. office365/onedrive/sitepages/collection.py +32 -0
  91. office365/onedrive/sitepages/horizontal_section.py +23 -0
  92. office365/onedrive/sitepages/horizontal_section_column.py +27 -0
  93. office365/onedrive/sitepages/site_page.py +116 -0
  94. office365/onedrive/sitepages/title_area.py +13 -0
  95. office365/onedrive/sitepages/vertical_section.py +27 -0
  96. office365/onedrive/sitepages/web_part.py +5 -0
  97. office365/onedrive/sites/site.py +10 -0
  98. office365/onedrive/sites/sites_with_root.py +1 -3
  99. office365/onedrive/termstore/store.py +2 -4
  100. office365/onedrive/termstore/terms/collection.py +1 -2
  101. office365/onedrive/workbooks/charts/data_labels.py +13 -1
  102. office365/onedrive/workbooks/filter.py +9 -0
  103. office365/onedrive/workbooks/filter_criteria.py +5 -0
  104. office365/onedrive/workbooks/functions/functions.py +6 -3
  105. office365/onedrive/workbooks/functions/result.py +2 -0
  106. office365/onedrive/workbooks/operations/workbook.py +7 -10
  107. office365/onedrive/workbooks/tables/pivot_table.py +9 -9
  108. office365/onedrive/workbooks/tables/sort.py +5 -0
  109. office365/onedrive/workbooks/tables/table.py +57 -0
  110. office365/onedrive/workbooks/worksheets/collection.py +0 -6
  111. office365/onedrive/workbooks/worksheets/protection.py +22 -1
  112. office365/onedrive/workbooks/worksheets/protection_options.py +7 -0
  113. office365/outlook/calendar/calendar.py +1 -3
  114. office365/outlook/calendar/events/event.py +45 -0
  115. office365/outlook/calendar/permissions/permission.py +7 -7
  116. office365/outlook/calendar/place.py +5 -3
  117. office365/outlook/calendar/response_status.py +11 -0
  118. office365/outlook/calendar/rooms/room.py +14 -0
  119. office365/outlook/mail/attachments/collection.py +6 -1
  120. office365/outlook/mail/automatic_replies_mailtips.py +5 -0
  121. office365/outlook/mail/conversation.py +1 -3
  122. office365/outlook/mail/folders/folder.py +1 -3
  123. office365/outlook/mail/messages/message.py +1 -1
  124. office365/outlook/mail/tips.py +17 -0
  125. office365/planner/plans/plan.py +11 -1
  126. office365/reports/root.py +83 -4
  127. office365/runtime/auth/authentication_context.py +12 -2
  128. office365/runtime/auth/providers/acs_token_provider.py +10 -7
  129. office365/runtime/auth/sts_profile.py +0 -1
  130. office365/runtime/client_object.py +18 -14
  131. office365/runtime/client_object_collection.py +8 -23
  132. office365/runtime/client_request_exception.py +1 -3
  133. office365/runtime/client_result.py +11 -14
  134. office365/runtime/client_runtime_context.py +11 -21
  135. office365/runtime/odata/json_format.py +7 -9
  136. office365/runtime/odata/request.py +12 -2
  137. office365/runtime/odata/v3/batch_request.py +7 -15
  138. office365/runtime/odata/v4/batch_request.py +13 -21
  139. office365/runtime/queries/upload_session.py +5 -0
  140. office365/runtime/types/event_handler.py +1 -1
  141. office365/search/entity.py +3 -2
  142. office365/sharepoint/activities/facets/delete.py +1 -1
  143. office365/sharepoint/activities/tracked_item_service.py +2 -3
  144. office365/sharepoint/administration/web_application.py +8 -7
  145. office365/sharepoint/alerts/collection.py +2 -1
  146. office365/sharepoint/attachments/attachment.py +3 -9
  147. office365/sharepoint/audit/audit.py +3 -2
  148. office365/sharepoint/changes/alert.py +4 -3
  149. office365/sharepoint/changes/collection.py +7 -10
  150. office365/sharepoint/changes/content_type.py +4 -4
  151. office365/sharepoint/changes/field.py +4 -5
  152. office365/sharepoint/changes/item.py +34 -7
  153. office365/sharepoint/changes/list.py +4 -4
  154. office365/sharepoint/changes/user.py +5 -6
  155. office365/sharepoint/client_context.py +4 -2
  156. office365/sharepoint/clientsidecomponent/component_context_info.py +4 -3
  157. office365/sharepoint/contentcenter/machinelearning/enabled.py +4 -3
  158. office365/sharepoint/contentcenter/machinelearning/hub.py +6 -6
  159. office365/sharepoint/contentcenter/machinelearning/models/collection.py +1 -1
  160. office365/sharepoint/contenttypes/content_type.py +13 -1
  161. office365/sharepoint/contenttypes/fieldlinks/collection.py +5 -7
  162. office365/sharepoint/contenttypes/fieldlinks/field_link.py +14 -22
  163. office365/sharepoint/directory/helper.py +2 -0
  164. office365/sharepoint/entity.py +12 -5
  165. office365/sharepoint/entity_collection.py +1 -3
  166. office365/sharepoint/eventreceivers/definition.py +8 -12
  167. office365/sharepoint/features/collection.py +1 -2
  168. office365/sharepoint/features/definitions/definition.py +6 -3
  169. office365/sharepoint/fields/calculated.py +8 -14
  170. office365/sharepoint/fields/collection.py +46 -13
  171. office365/sharepoint/fields/computed.py +4 -5
  172. office365/sharepoint/fields/currency.py +7 -11
  173. office365/sharepoint/fields/date_time.py +4 -8
  174. office365/sharepoint/fields/field.py +6 -16
  175. office365/sharepoint/fields/lookup.py +11 -9
  176. office365/sharepoint/fields/multi_choice.py +8 -12
  177. office365/sharepoint/fields/multi_line_text.py +10 -14
  178. office365/sharepoint/fields/number.py +13 -26
  179. office365/sharepoint/fields/rating_scale.py +6 -10
  180. office365/sharepoint/fields/related_field.py +10 -17
  181. office365/sharepoint/fields/url.py +4 -5
  182. office365/sharepoint/fields/user.py +10 -9
  183. office365/sharepoint/files/collection.py +17 -15
  184. office365/sharepoint/files/file.py +30 -23
  185. office365/sharepoint/folders/collection.py +22 -5
  186. office365/sharepoint/folders/coloring.py +11 -9
  187. office365/sharepoint/folders/coloring_information.py +38 -0
  188. office365/sharepoint/folders/folder.py +23 -25
  189. office365/sharepoint/likes/liked_by_information.py +7 -10
  190. office365/sharepoint/likes/user_entity.py +6 -8
  191. office365/sharepoint/listitems/form_update_value.py +17 -1
  192. office365/sharepoint/listitems/listitem.py +2 -2
  193. office365/sharepoint/lists/bloom_filter.py +5 -7
  194. office365/sharepoint/lists/creatables_info.py +5 -6
  195. office365/sharepoint/lists/list.py +24 -9
  196. office365/sharepoint/lists/template.py +7 -4
  197. office365/sharepoint/lists/template_collection.py +2 -4
  198. office365/sharepoint/marketplace/app_metadata.py +14 -23
  199. office365/sharepoint/marketplace/sitecollection/appcatalog/allowed_item.py +6 -8
  200. office365/sharepoint/migrationcenter/deploy_status.py +5 -0
  201. office365/sharepoint/migrationcenter/service/performance/__init__.py +0 -0
  202. office365/sharepoint/migrationcenter/service/performance/dashboard_data.py +9 -0
  203. office365/sharepoint/migrationcenter/service/performance/data.py +7 -0
  204. office365/sharepoint/migrationcenter/service/performance/entity_data.py +5 -0
  205. office365/sharepoint/navigation/node.py +5 -8
  206. office365/sharepoint/permissions/irm/effective_settings.py +6 -8
  207. office365/sharepoint/permissions/irm/file_settings.py +8 -6
  208. office365/sharepoint/permissions/irm/settings.py +25 -43
  209. office365/sharepoint/portal/groups/site_manager.py +6 -7
  210. office365/sharepoint/principal/principal.py +2 -4
  211. office365/sharepoint/publishing/embed_data_v1.py +8 -15
  212. office365/sharepoint/publishing/pages/campaign_publication.py +4 -3
  213. office365/sharepoint/publishing/primary_city_time.py +8 -9
  214. office365/sharepoint/publishing/video/service_discoverer.py +4 -3
  215. office365/sharepoint/pushnotifications/subscriber.py +11 -15
  216. office365/sharepoint/recyclebin/item.py +107 -7
  217. office365/sharepoint/sharing/information.py +9 -0
  218. office365/sharepoint/sharing/link_info.py +6 -0
  219. office365/sharepoint/sharing/object_sharing_settings.py +24 -46
  220. office365/sharepoint/sharing/permission_collection.py +18 -0
  221. office365/sharepoint/sharing/permission_information.py +5 -5
  222. office365/sharepoint/sharing/result.py +1 -0
  223. office365/sharepoint/sitedesigns/run.py +4 -3
  224. office365/sharepoint/sites/script_safe_domain.py +5 -0
  225. office365/sharepoint/sites/site.py +17 -20
  226. office365/sharepoint/taxonomy/field.py +32 -21
  227. office365/sharepoint/taxonomy/field_value.py +1 -1
  228. office365/sharepoint/taxonomy/groups/group.py +12 -1
  229. office365/sharepoint/taxonomy/sets/set.py +6 -0
  230. office365/sharepoint/taxonomy/stores/store.py +4 -2
  231. office365/sharepoint/teams/channel.py +6 -6
  232. office365/sharepoint/tenant/administration/endpoints.py +4 -3
  233. office365/sharepoint/tenant/administration/hubsites/properties.py +4 -5
  234. office365/sharepoint/tenant/administration/powerapps/__init__.py +0 -0
  235. office365/sharepoint/tenant/administration/powerapps/environment_context.py +8 -0
  236. office365/sharepoint/tenant/administration/sites/properties.py +0 -1
  237. office365/sharepoint/tenant/administration/spo_operation.py +4 -4
  238. office365/sharepoint/tenant/administration/tenant.py +1 -0
  239. office365/sharepoint/tenant/insights/report.py +11 -0
  240. office365/sharepoint/tenant/insights/report_manager.py +5 -0
  241. office365/sharepoint/tenant/insights/report_metadata.py +5 -0
  242. office365/sharepoint/tenant/settings.py +4 -3
  243. office365/sharepoint/translation/sync_translator.py +3 -2
  244. office365/sharepoint/ui/applicationpages/peoplepicker/entity_information.py +4 -4
  245. office365/sharepoint/usercustomactions/action.py +12 -20
  246. office365/sharepoint/userprofiles/followed_content.py +6 -10
  247. office365/sharepoint/userprofiles/people_manager.py +0 -1
  248. office365/sharepoint/userprofiles/person_properties.py +14 -30
  249. office365/sharepoint/userprofiles/personal_cache.py +4 -3
  250. office365/sharepoint/userprofiles/properties_for_user.py +4 -5
  251. office365/sharepoint/userprofiles/sharedwithme/document.py +12 -21
  252. office365/sharepoint/utilities/move_copy_util.py +19 -19
  253. office365/sharepoint/utilities/upload_status.py +7 -10
  254. office365/sharepoint/views/field_collection.py +9 -14
  255. office365/sharepoint/views/view.py +43 -64
  256. office365/sharepoint/webhooks/subscription.py +11 -19
  257. office365/sharepoint/webparts/webpart.py +3 -1
  258. office365/sharepoint/webs/information_collection.py +1 -1
  259. office365/sharepoint/webs/modernize_homepage_result.py +4 -3
  260. office365/sharepoint/webs/regional_settings.py +79 -16
  261. office365/sharepoint/webs/template.py +3 -5
  262. office365/sharepoint/webs/web.py +24 -25
  263. office365/teams/apps/catalog.py +1 -0
  264. office365/teams/chats/chat.py +4 -0
  265. office365/teams/operations/async_operation.py +5 -7
  266. office365/teams/schedule/schedule.py +6 -2
  267. office365/runtime/paths/item.py +0 -8
  268. {Office365_REST_Python_Client-2.5.5.dist-info → Office365_REST_Python_Client-2.5.7.dist-info}/LICENSE +0 -0
  269. {Office365_REST_Python_Client-2.5.5.dist-info → Office365_REST_Python_Client-2.5.7.dist-info}/WHEEL +0 -0
  270. {Office365_REST_Python_Client-2.5.5.dist-info → Office365_REST_Python_Client-2.5.7.dist-info}/top_level.txt +0 -0
@@ -1,7 +1,8 @@
1
+ from typing_extensions import Self
2
+
1
3
  from office365.delta_collection import DeltaCollection
2
4
  from office365.directory.object import DirectoryObject
3
5
  from office365.entity_collection import EntityCollection
4
- from office365.runtime.client_result import ClientResult
5
6
  from office365.runtime.http.http_method import HttpMethod
6
7
  from office365.runtime.http.request_options import RequestOptions
7
8
  from office365.runtime.queries.service_operation import ServiceOperationQuery
@@ -15,29 +16,32 @@ class DirectoryObjectCollection(DeltaCollection[DirectoryObject]):
15
16
  context, DirectoryObject, resource_path
16
17
  )
17
18
 
18
- def get_by_ids(self, ids):
19
+ def get_by_ids(self, ids, types=None):
19
20
  """
20
21
  Returns the directory objects specified in a list of IDs.
21
-
22
- :type ids: list[str]
22
+ :param list[str] ids: A collection of IDs for which to return objects. The IDs are GUIDs, represented as
23
+ strings. You can specify up to 1000 IDs.
24
+ :param list[str] types: A collection of resource types that specifies the set of resource collections to search.
25
+ If not specified, the default is directoryObject, which contains all of the resource types defined in
26
+ the directory. Any object that derives from directoryObject may be specified in the collection;
27
+ for example: user, group, and device objects.
23
28
  """
24
- return_type = ClientResult(self.context)
25
- params = {"ids": ids}
29
+ return_type = DirectoryObjectCollection(self.context)
30
+ params = {"ids": ids, "types": types}
26
31
  qry = ServiceOperationQuery(self, "getByIds", params, None, None, return_type)
27
32
  self.context.add_query(qry)
28
33
  return return_type
29
34
 
30
- def add(self, user_id):
31
- """
32
- Add a user to the group.
35
+ def add(self, directory_object):
36
+ # type: (DirectoryObject) -> Self
37
+ """Adds directory objects to the collection."""
33
38
 
34
- :type user_id: str
35
- """
36
- payload = {
37
- "@odata.id": "https://graph.microsoft.com/v1.0/users/{0}".format(user_id)
38
- }
39
- qry = ServiceOperationQuery(self, "$ref", None, payload)
40
- self.context.add_query(qry)
39
+ def _add():
40
+ payload = {"@odata.id": directory_object.resource_url}
41
+ qry = ServiceOperationQuery(self, "$ref", None, payload)
42
+ self.context.add_query(qry)
43
+
44
+ directory_object.ensure_property("id", _add)
41
45
  return self
42
46
 
43
47
  def get_available_extension_properties(self, is_synced_from_on_premises=None):
@@ -60,19 +64,30 @@ class DirectoryObjectCollection(DeltaCollection[DirectoryObject]):
60
64
  self.context.add_query(qry)
61
65
  return return_type
62
66
 
63
- def remove(self, user_id):
64
- """Remove a user from the group.
65
-
66
- :param str user_id: User identifier
67
+ def remove(self, directory_object):
68
+ # type: (DirectoryObject|str) -> Self
69
+ """Removes directory object from the collection.
70
+ :param str directory_object: Directory object or identifier
67
71
  """
68
72
 
69
- qry = ServiceOperationQuery(self, "{0}/$ref".format(user_id))
73
+ def _remove(id_):
74
+ qry = ServiceOperationQuery(self, "{0}/$ref".format(id_))
75
+
76
+ def _construct_request(request):
77
+ # type: (RequestOptions) -> None
78
+ request.method = HttpMethod.Delete
79
+
80
+ self.context.add_query(qry).before_query_execute(_construct_request)
81
+
82
+ if isinstance(directory_object, DirectoryObject):
83
+
84
+ def _loaded():
85
+ _remove(directory_object.id)
70
86
 
71
- def _construct_request(request):
72
- # type: (RequestOptions) -> None
73
- request.method = HttpMethod.Delete
87
+ directory_object.ensure_property("id", _loaded)
88
+ else:
89
+ _remove(directory_object)
74
90
 
75
- self.context.add_query(qry).before_query_execute(_construct_request)
76
91
  return self
77
92
 
78
93
  def validate_properties(
@@ -31,3 +31,6 @@ class PasswordCredential(ClientValue):
31
31
  self.keyId = key_id
32
32
  self.startDateTime = start_datetime
33
33
  self.endDateTime = end_datetime
34
+
35
+ def __str__(self):
36
+ return self.displayName or self.entity_type_name
@@ -0,0 +1,5 @@
1
+ from office365.runtime.client_value import ClientValue
2
+
3
+
4
+ class DefaultUserRolePermissions(ClientValue):
5
+ """Contains certain customizable permissions of default user role in Microsoft Entra ID."""
@@ -1,3 +1,5 @@
1
+ from typing import Optional
2
+
1
3
  from office365.entity import Entity
2
4
  from office365.runtime.types.collections import StringCollection
3
5
 
@@ -29,10 +31,10 @@ class PermissionGrantConditionSet(Entity):
29
31
 
30
32
  @property
31
33
  def client_applications_from_verified_publisher_only(self):
34
+ # type: () -> Optional[bool]
32
35
  """
33
36
  Set to true to only match on client applications with a verified publisher. Set to false to match on any client
34
37
  app, even if it does not have a verified publisher. Default is false.
35
- :rtype: bool
36
38
  """
37
39
  return self.properties.get("clientApplicationsFromVerifiedPublisherOnly", None)
38
40
 
@@ -50,9 +52,9 @@ class PermissionGrantConditionSet(Entity):
50
52
 
51
53
  @property
52
54
  def resource_application(self):
55
+ # type: () -> Optional[str]
53
56
  """
54
57
  The appId of the resource application (e.g. the API) for which a permission is being granted, or any to match
55
58
  with any resource application or API. Default is any.
56
- :rtype: str
57
59
  """
58
60
  return self.properties.get("resourceApplication", None)
@@ -1,3 +1,5 @@
1
+ from typing import Optional
2
+
1
3
  from office365.entity import Entity
2
4
 
3
5
 
@@ -13,56 +15,51 @@ class OAuth2PermissionGrant(Entity):
13
15
 
14
16
  @property
15
17
  def client_id(self):
18
+ # type: () -> Optional[str]
16
19
  """
17
20
  The id of the client service principal for the application which is authorized to act on behalf of a signed-in
18
21
  user when accessing an API. Required. Supports $filter (eq only).
19
-
20
- :rtype: str
21
22
  """
22
23
  return self.properties.get("clientId", None)
23
24
 
24
25
  @property
25
26
  def consent_type(self):
27
+ # type: () -> Optional[str]
26
28
  """
27
29
  Indicates if authorization is granted for the client application to impersonate all users or only a
28
30
  specific user. AllPrincipals indicates authorization to impersonate all users.
29
31
  Principal indicates authorization to impersonate a specific user. Consent on behalf of all users can be granted
30
32
  by an administrator. Non-admin users may be authorized to consent on behalf of themselves in some cases,
31
33
  for some delegated permissions. Required. Supports $filter (eq only).
32
-
33
- :rtype: str
34
34
  """
35
35
  return self.properties.get("consentType", None)
36
36
 
37
37
  @property
38
38
  def principal_id(self):
39
+ # type: () -> Optional[str]
39
40
  """
40
41
  The id of the user on behalf of whom the client is authorized to access the resource, when consentType is
41
42
  Principal. If consentType is AllPrincipals this value is null. Required when consentType is Principal.
42
43
  Supports $filter (eq only).
43
-
44
- :rtype: str
45
44
  """
46
45
  return self.properties.get("principalId", None)
47
46
 
48
47
  @property
49
48
  def resource_id(self):
49
+ # type: () -> Optional[str]
50
50
  """
51
51
  The id of the resource service principal to which access is authorized. This identifies the API which the
52
52
  client is authorized to attempt to call on behalf of a signed-in user. Supports $filter (eq only).
53
-
54
- :rtype: str
55
53
  """
56
54
  return self.properties.get("resourceId", None)
57
55
 
58
56
  @property
59
57
  def scope(self):
58
+ # type: () -> Optional[str]
60
59
  """
61
60
  A space-separated list of the claim values for delegated permissions which should be included in access tokens
62
61
  for the resource application (the API). For example, openid User.Read GroupMember.Read.All. Each claim value
63
62
  should match the value field of one of the delegated permissions defined by the API, listed in the
64
63
  oauth2PermissionScopes property of the resource service principal. Must not exceed 3850 characters in length.
65
-
66
- :rtype: str
67
64
  """
68
65
  return self.properties.get("scope", None)
@@ -1,3 +1,6 @@
1
+ from typing import Optional
2
+
3
+ from office365.directory.permissions.default_user_role import DefaultUserRolePermissions
1
4
  from office365.directory.policies.base import PolicyBase
2
5
 
3
6
 
@@ -8,8 +11,52 @@ class AuthorizationPolicy(PolicyBase):
8
11
 
9
12
  @property
10
13
  def allowed_to_sign_up_email_based_subscriptions(self):
14
+ # type: () -> Optional[bool]
15
+ """Indicates whether a user can join the tenant by email validation."""
16
+ return self.properties.get("allowedToSignUpEmailBasedSubscriptions", None)
17
+
18
+ @property
19
+ def allowed_to_use_sspr(self):
20
+ # type: () -> Optional[bool]
21
+ """Indicates whether users can use the Self-Service Password Reset feature on the tenant."""
22
+ return self.properties.get("allowedToUseSSPR", None)
23
+
24
+ @property
25
+ def allow_email_verified_users_to_join_organization(self):
26
+ # type: () -> Optional[bool]
27
+ """Indicates whether a user can join the tenant by email validation."""
28
+ return self.properties.get("allowEmailVerifiedUsersToJoinOrganization", None)
29
+
30
+ @property
31
+ def allow_invites_from(self):
32
+ # type: () -> Optional[str]
33
+ """Indicates who can invite external users to the organization.
34
+ Possible values are: none, adminsAndGuestInviters, adminsGuestInvitersAndAllMembers, everyone.
35
+ everyone is the default setting for all cloud environments except US Government.
11
36
  """
12
- Indicates whether a user can join the tenant by email validation.
13
- :rtype: bool
37
+ return self.properties.get("allowInvitesFrom", None)
38
+
39
+ @property
40
+ def allow_user_consent_for_risky_apps(self):
41
+ # type: () -> Optional[bool]
42
+ """Indicates whether user consent for risky apps is allowed.
43
+ We recommend keeping allowUserConsentForRiskyApps as false. Default value is false.
14
44
  """
15
- return self.properties.get("allowedToSignUpEmailBasedSubscriptions", None)
45
+ return self.properties.get("allowUserConsentForRiskyApps", None)
46
+
47
+ @property
48
+ def block_msol_powershell(self):
49
+ # type: () -> Optional[bool]
50
+ """To disable the use of MSOL PowerShell, set this property to true. This also disables user-based access to
51
+ the legacy service endpoint used by MSOL PowerShell. This doesn't affect Microsoft Entra Connect
52
+ or Microsoft Graph.
53
+ """
54
+ return self.properties.get("blockMsolPowerShell", None)
55
+
56
+ @property
57
+ def default_user_role_permissions(self):
58
+ # type: () -> Optional[DefaultUserRolePermissions]
59
+ """Specifies certain customizable permissions for default user role."""
60
+ return self.properties.get(
61
+ "defaultUserRolePermissions", DefaultUserRolePermissions()
62
+ )
@@ -0,0 +1,6 @@
1
+ from office365.entity import Entity
2
+
3
+
4
+ class DeviceRegistrationPolicy(Entity):
5
+ """Represents the policy scope that controls quota restrictions, additional authentication, and authorization
6
+ policies to register device identities to your organization."""
@@ -17,6 +17,7 @@ class PermissionGrantPolicy(PolicyBase):
17
17
 
18
18
  @property
19
19
  def excludes(self):
20
+ # type: () -> EntityCollection[PermissionGrantConditionSet]
20
21
  """
21
22
  Condition sets which are excluded in this permission grant policy.
22
23
  This navigation is automatically expanded on GET.
@@ -32,6 +33,7 @@ class PermissionGrantPolicy(PolicyBase):
32
33
 
33
34
  @property
34
35
  def includes(self):
36
+ # type: () -> EntityCollection[PermissionGrantConditionSet]
35
37
  """
36
38
  Condition sets which are included in this permission grant policy.
37
39
  This navigation is automatically expanded on GET.
@@ -9,6 +9,7 @@ from office365.directory.policies.authentication_strength import (
9
9
  from office365.directory.policies.authorization import AuthorizationPolicy
10
10
  from office365.directory.policies.conditional_access import ConditionalAccessPolicy
11
11
  from office365.directory.policies.cross_tenant_access import CrossTenantAccessPolicy
12
+ from office365.directory.policies.device_registration import DeviceRegistrationPolicy
12
13
  from office365.directory.policies.permission_grant import PermissionGrantPolicy
13
14
  from office365.directory.policies.tenant_app_management import TenantAppManagementPolicy
14
15
  from office365.entity import Entity
@@ -33,6 +34,17 @@ class PolicyRoot(Entity):
33
34
  ),
34
35
  )
35
36
 
37
+ @property
38
+ def device_registration_policy(self):
39
+ """ """
40
+ return self.properties.get(
41
+ "deviceRegistrationPolicy",
42
+ DeviceRegistrationPolicy(
43
+ self.context,
44
+ ResourcePath("deviceRegistrationPolicy", self.resource_path),
45
+ ),
46
+ )
47
+
36
48
  def authentication_strength_policies(self):
37
49
  # type: () -> EntityCollection[AuthenticationStrengthPolicy]
38
50
  """
@@ -147,6 +159,7 @@ class PolicyRoot(Entity):
147
159
  "conditional_access_policies": self.conditional_access_policies,
148
160
  "crossTenantAccessPolicy": self.cross_tenant_access_policy,
149
161
  "defaultAppManagementPolicy": self.default_app_management_policy,
162
+ "deviceRegistrationPolicy": self.device_registration_policy,
150
163
  "permissionGrantPolicies": self.permission_grant_policies,
151
164
  }
152
165
  default_value = property_mapping.get(name, None)
@@ -1,3 +1,5 @@
1
+ from typing import Optional
2
+
1
3
  from office365.entity import Entity
2
4
 
3
5
 
@@ -12,14 +14,12 @@ class ProfilePhoto(Entity):
12
14
 
13
15
  @property
14
16
  def height(self):
15
- """
16
- The height of the photo. Read-only.
17
- """
17
+ # type: () -> Optional[int]
18
+ """The height of the photo."""
18
19
  return self.properties.get("height", None)
19
20
 
20
21
  @property
21
22
  def width(self):
22
- """
23
- The width of the photo. Read-only.
24
- """
23
+ # type: () -> Optional[int]
24
+ """The width of the photo."""
25
25
  return self.properties.get("width", None)
@@ -1,3 +1,5 @@
1
+ from typing import Optional
2
+
1
3
  from office365.entity import Entity
2
4
  from office365.entity_collection import EntityCollection
3
5
  from office365.runtime.paths.resource_path import ResourcePath
@@ -27,8 +29,6 @@ class RiskyUser(Entity):
27
29
 
28
30
  @property
29
31
  def user_principal_name(self):
30
- """
31
- Risky user principal name.
32
- :rtype: str or None
33
- """
32
+ # type: () -> Optional[str]
33
+ """Risky user principal name."""
34
34
  return self.properties.get("userPrincipalName", None)
@@ -0,0 +1,10 @@
1
+ from office365.runtime.client_value import ClientValue
2
+ from office365.runtime.types.collections import StringCollection
3
+
4
+
5
+ class ResourceAction(ClientValue):
6
+ """ """
7
+
8
+ def __init__(self):
9
+ self.allowedResourceActions = StringCollection()
10
+ self.notAllowedResourceActions = StringCollection()
@@ -0,0 +1,10 @@
1
+ from office365.directory.rolemanagement.resource_action import ResourceAction
2
+ from office365.runtime.client_value import ClientValue
3
+ from office365.runtime.client_value_collection import ClientValueCollection
4
+
5
+
6
+ class RolePermission(ClientValue):
7
+ """ """
8
+
9
+ def __init__(self, resourceActions=None):
10
+ self.resourceActions = ClientValueCollection(ResourceAction, resourceActions)
@@ -1,3 +1,5 @@
1
+ from typing import Optional
2
+
1
3
  from office365.directory.security.alerts.evidence import AlertEvidence
2
4
  from office365.directory.security.alerts.history_state import AlertHistoryState
3
5
  from office365.entity import Entity
@@ -11,17 +13,13 @@ class Alert(Entity):
11
13
 
12
14
  @property
13
15
  def actor_display_name(self):
14
- """
15
- The adversary or activity group that is associated with this alert.
16
- :rtype: str
17
- """
16
+ # type: () -> Optional[str]
17
+ """The adversary or activity group that is associated with this alert."""
18
18
  return self.properties.get("actorDisplayName", None)
19
19
 
20
20
  @property
21
21
  def alert_policy_id(self):
22
- """
23
- :rtype: str
24
- """
22
+ # type: () -> Optional[str]
25
23
  return self.properties.get("alertPolicyId", None)
26
24
 
27
25
  @property
@@ -0,0 +1,5 @@
1
+ from office365.entity import Entity
2
+
3
+
4
+ class LandingPage(Entity):
5
+ """Represents an attack simulation landing page."""
@@ -0,0 +1,5 @@
1
+ from office365.onedrive.operations.long_running import LongRunningOperation
2
+
3
+
4
+ class AttackSimulationOperation(LongRunningOperation):
5
+ """Represents the status of a long-running attack simulation training operation."""
@@ -1,7 +1,11 @@
1
1
  from office365.directory.security.attacksimulations.report_overview import (
2
2
  SimulationReportOverview,
3
3
  )
4
+ from office365.directory.security.attacksimulations.users.details import (
5
+ UserSimulationDetails,
6
+ )
4
7
  from office365.runtime.client_value import ClientValue
8
+ from office365.runtime.client_value_collection import ClientValueCollection
5
9
 
6
10
 
7
11
  class SimulationReport(ClientValue):
@@ -10,8 +14,11 @@ class SimulationReport(ClientValue):
10
14
  participated in the campaign.
11
15
  """
12
16
 
13
- def __init__(self, overview=SimulationReportOverview()):
17
+ def __init__(self, overview=SimulationReportOverview(), simulationUsers=None):
14
18
  """
15
19
  :param SimulationReportOverview overview: Overview of an attack simulation and training campaign.
16
20
  """
17
21
  self.overview = overview
22
+ self.simulationUsers = ClientValueCollection(
23
+ UserSimulationDetails, simulationUsers
24
+ )
@@ -1,6 +1,10 @@
1
1
  from office365.directory.security.attacksimulations.automation import (
2
2
  SimulationAutomation,
3
3
  )
4
+ from office365.directory.security.attacksimulations.landing_page import LandingPage
5
+ from office365.directory.security.attacksimulations.operation import (
6
+ AttackSimulationOperation,
7
+ )
4
8
  from office365.directory.security.attacksimulations.simulation import Simulation
5
9
  from office365.entity import Entity
6
10
  from office365.entity_collection import EntityCollection
@@ -11,8 +15,35 @@ class AttackSimulationRoot(Entity):
11
15
  """Represents an abstract type that provides the ability to launch a realistic phishing attack that organizations
12
16
  can learn from."""
13
17
 
18
+ @property
19
+ def landing_pages(self):
20
+ # type: () -> EntityCollection[LandingPage]
21
+ """Represents an attack simulation training landing page."""
22
+ return self.properties.get(
23
+ "landingPages",
24
+ EntityCollection(
25
+ self.context,
26
+ LandingPage,
27
+ ResourcePath("landingPages", self.resource_path),
28
+ ),
29
+ )
30
+
31
+ @property
32
+ def operations(self):
33
+ # type: () -> EntityCollection[AttackSimulationOperation]
34
+ """Represents an attack simulation training operation."""
35
+ return self.properties.get(
36
+ "operations",
37
+ EntityCollection(
38
+ self.context,
39
+ AttackSimulationOperation,
40
+ ResourcePath("operations", self.resource_path),
41
+ ),
42
+ )
43
+
14
44
  @property
15
45
  def simulations(self):
46
+ # type: () -> EntityCollection[Simulation]
16
47
  """Represents an attack simulation training campaign in a tenant."""
17
48
  return self.properties.get(
18
49
  "simulations",
@@ -25,6 +56,7 @@ class AttackSimulationRoot(Entity):
25
56
 
26
57
  @property
27
58
  def simulation_automations(self):
59
+ # type: () -> EntityCollection[SimulationAutomation]
28
60
  """Represents simulation automation created to run on a tenant."""
29
61
  return self.properties.get(
30
62
  "simulationAutomations",
@@ -38,6 +70,7 @@ class AttackSimulationRoot(Entity):
38
70
  def get_property(self, name, default_value=None):
39
71
  if default_value is None:
40
72
  property_mapping = {
73
+ "landingPages": self.landing_pages,
41
74
  "simulationAutomations": self.simulation_automations,
42
75
  }
43
76
  default_value = property_mapping.get(name, None)
@@ -0,0 +1,5 @@
1
+ from office365.runtime.client_value import ClientValue
2
+
3
+
4
+ class UserSimulationDetails(ClientValue):
5
+ """Represents a user of a tenant and their online actions in an attack simulation and training campaign."""
@@ -0,0 +1,5 @@
1
+ from office365.runtime.client_value import ClientValue
2
+
3
+
4
+ class HuntingQueryResults(ClientValue):
5
+ """The results of running a query for advanced hunting."""
@@ -1,4 +1,5 @@
1
1
  from datetime import datetime
2
+ from typing import Optional
2
3
 
3
4
  from office365.directory.security.alerts.alert import Alert
4
5
  from office365.directory.security.alerts.comment import AlertComment
@@ -23,37 +24,31 @@ class Incident(Entity):
23
24
 
24
25
  @property
25
26
  def assigned_to(self):
26
- """
27
- Owner of the incident, or null if no owner is assigned. Free editable text.
28
- :rtype: str or None
29
- """
27
+ # type: () -> Optional[str]
28
+ """Owner of the incident, or null if no owner is assigned. Free editable text."""
30
29
  return self.properties.get("assignedTo", None)
31
30
 
32
31
  @property
33
32
  def classification(self):
34
- """
35
- The specification for the incident.
33
+ # type: () -> Optional[str]
34
+ """The specification for the incident.
36
35
  Possible values are: unknown, falsePositive, truePositive, informationalExpectedActivity, unknownFutureValue.
37
- :rtype: str or None
38
36
  """
39
37
  return self.properties.get("classification", None)
40
38
 
41
39
  @property
42
40
  def comments(self):
43
- """
44
- Array of comments created by the Security Operations (SecOps) team when the incident is managed.
45
- """
41
+ """Array of comments created by the Security Operations (SecOps) team when the incident is managed."""
46
42
  return self.properties.get("comments", ClientValueCollection(AlertComment))
47
43
 
48
44
  @property
49
45
  def created_datetime(self):
50
- """
51
- Time when the incident was first created.
52
- """
46
+ """Time when the incident was first created."""
53
47
  return self.properties("createdDateTime", datetime.min)
54
48
 
55
49
  @property
56
50
  def alerts(self):
51
+ # type: () -> EntityCollection[Alert]
57
52
  """The list of related alerts. Supports $expand."""
58
53
  return self.properties.get(
59
54
  "alerts",
@@ -1,6 +1,7 @@
1
1
  from office365.directory.security.alerts.alert import Alert
2
2
  from office365.directory.security.attacksimulations.root import AttackSimulationRoot
3
3
  from office365.directory.security.cases.root import CasesRoot
4
+ from office365.directory.security.hunting_query_results import HuntingQueryResults
4
5
  from office365.directory.security.incidents.incident import Incident
5
6
  from office365.directory.security.threatintelligence.threat_intelligence import (
6
7
  ThreatIntelligence,
@@ -8,13 +9,30 @@ from office365.directory.security.threatintelligence.threat_intelligence import
8
9
  from office365.directory.security.triggers.root import TriggersRoot
9
10
  from office365.entity import Entity
10
11
  from office365.entity_collection import EntityCollection
12
+ from office365.runtime.client_result import ClientResult
11
13
  from office365.runtime.paths.resource_path import ResourcePath
14
+ from office365.runtime.queries.service_operation import ServiceOperationQuery
12
15
 
13
16
 
14
17
  class Security(Entity):
15
18
  """The security resource is the entry point for the Security object model. It returns a singleton security resource.
16
19
  It doesn't contain any usable properties."""
17
20
 
21
+ def run_hunting_query(self, query):
22
+ """
23
+ Queries a specified set of event, activity, or entity data supported by Microsoft 365 Defender
24
+ to proactively look for specific threats in your environment.
25
+ :param str query: The hunting query in Kusto Query Language (KQL). For more information on KQL syntax,see KQL
26
+ quick reference: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/kql-quick-reference
27
+ """
28
+ return_type = ClientResult(self.context, HuntingQueryResults())
29
+ payload = {"Query": query}
30
+ qry = ServiceOperationQuery(
31
+ self, "runHuntingQuery", None, payload, None, return_type
32
+ )
33
+ self.context.add_query(qry)
34
+ return return_type
35
+
18
36
  @property
19
37
  def alerts(self):
20
38
  # type: () -> EntityCollection[Alert]
@@ -28,9 +46,7 @@ class Security(Entity):
28
46
  @property
29
47
  def alerts_v2(self):
30
48
  # type: () -> EntityCollection[Alert]
31
- """
32
- A collection of alerts in Microsoft 365 Defender.
33
- """
49
+ """A collection of alerts in Microsoft 365 Defender."""
34
50
  return self.properties.get(
35
51
  "alerts_v2",
36
52
  EntityCollection(
@@ -69,6 +85,7 @@ class Security(Entity):
69
85
 
70
86
  @property
71
87
  def triggers(self):
88
+ """"""
72
89
  return self.properties.get(
73
90
  "triggers",
74
91
  TriggersRoot(self.context, ResourcePath("triggers", self.resource_path)),
@@ -0,0 +1,7 @@
1
+ from office365.entity import Entity
2
+
3
+
4
+ class ArticleIndicator(Entity):
5
+ """
6
+ Represents a resource that communicates indicators of threat or compromise related to the contents of an article
7
+ """