Office365-REST-Python-Client 2.4.3__py3-none-any.whl → 2.4.4__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 (255) hide show
  1. {Office365_REST_Python_Client-2.4.3.dist-info → Office365_REST_Python_Client-2.4.4.dist-info}/METADATA +8 -7
  2. {Office365_REST_Python_Client-2.4.3.dist-info → Office365_REST_Python_Client-2.4.4.dist-info}/RECORD +254 -162
  3. office365/base_item.py +26 -4
  4. office365/communications/calls/invitation_participant_info.py +17 -1
  5. office365/communications/calls/options.py +9 -0
  6. office365/communications/onlinemeetings/provider_type.py +3 -0
  7. office365/communications/presences/presence.py +14 -0
  8. office365/communications/presences/status_message.py +12 -0
  9. office365/directory/audit/signins/activity.py +31 -0
  10. office365/directory/audit/signins/location.py +17 -0
  11. office365/directory/audit/signins/signin.py +25 -0
  12. office365/directory/authentication/authentication.py +9 -0
  13. office365/directory/authentication/methods/details.py +18 -0
  14. office365/directory/authentication/methods/email.py +16 -0
  15. office365/directory/authentication/methods/root.py +10 -0
  16. office365/directory/certificates/authority.py +6 -1
  17. office365/directory/extensions/extended_property.py +8 -1
  18. office365/directory/extensions/extension_property.py +0 -3
  19. office365/directory/extensions/open_type.py +8 -0
  20. office365/directory/groups/group.py +2 -1
  21. office365/directory/identities/governance.py +2 -0
  22. office365/directory/insights/shared.py +15 -1
  23. office365/directory/insights/usage_details.py +16 -0
  24. office365/directory/insights/used.py +7 -0
  25. office365/directory/licenses/assigned_plan.py +14 -2
  26. office365/directory/licenses/service_plan_info.py +4 -0
  27. office365/directory/licenses/subscribed_sku.py +26 -0
  28. office365/directory/licenses/units_detail.py +11 -0
  29. office365/directory/permissions/email_identity.py +5 -0
  30. office365/directory/permissions/grants/condition_set.py +26 -0
  31. office365/directory/permissions/grants/resource_specific.py +21 -0
  32. office365/directory/policies/authentication_flows.py +9 -0
  33. office365/directory/policies/authentication_strength.py +10 -0
  34. office365/directory/policies/authorization.py +8 -0
  35. office365/directory/policies/cross_tenant_access.py +5 -0
  36. office365/directory/policies/root.py +35 -2
  37. office365/directory/rolemanagement/template.py +8 -0
  38. office365/directory/rolemanagement/unified_role_assignment.py +37 -0
  39. office365/directory/security/alerts/alert.py +21 -0
  40. office365/directory/security/alerts/history_state.py +5 -0
  41. office365/directory/security/attacksimulations/automation.py +21 -0
  42. office365/directory/security/attacksimulations/automation_run.py +5 -0
  43. office365/directory/security/attacksimulations/repeat_offender.py +6 -0
  44. office365/directory/security/attacksimulations/root.py +26 -0
  45. office365/directory/security/attacksimulations/simulation.py +17 -0
  46. office365/directory/security/cases/ediscovery.py +6 -0
  47. office365/directory/security/cases/root.py +22 -0
  48. office365/directory/security/incidents/incident.py +67 -0
  49. office365/directory/security/security.py +10 -1
  50. office365/directory/serviceprincipals/service_principal.py +88 -3
  51. office365/directory/synchronization/job.py +16 -0
  52. office365/directory/synchronization/progress.py +5 -0
  53. office365/directory/synchronization/status.py +13 -0
  54. office365/directory/synchronization/synchronization.py +24 -0
  55. office365/directory/tenant_information.py +12 -0
  56. office365/directory/users/password_profile.py +15 -3
  57. office365/directory/users/user.py +136 -8
  58. office365/graph_client.py +28 -1
  59. office365/intune/audit/actor.py +5 -0
  60. office365/intune/audit/event.py +21 -25
  61. office365/intune/audit/event_collection.py +26 -0
  62. office365/intune/audit/property.py +5 -0
  63. office365/intune/audit/resource.py +11 -0
  64. office365/intune/brand.py +6 -0
  65. office365/intune/devices/compliance/__init__.py +0 -0
  66. office365/intune/devices/compliance/policy.py +6 -0
  67. office365/intune/devices/compliance/policy_state.py +5 -0
  68. office365/intune/devices/enrollment/__init__.py +0 -0
  69. office365/intune/devices/enrollment/configuration.py +25 -0
  70. office365/intune/devices/enrollment/configuration_assignment.py +5 -0
  71. office365/intune/devices/enrollment/limit_configuration.py +5 -0
  72. office365/intune/devices/managed.py +28 -3
  73. office365/intune/devices/management/__init__.py +0 -0
  74. office365/intune/devices/management/management.py +69 -0
  75. office365/intune/devices/management/reports/__init__.py +0 -0
  76. office365/intune/devices/management/reports/reports.py +5 -0
  77. office365/intune/devices/management/settings.py +18 -0
  78. office365/intune/organizations/branding.py +15 -0
  79. office365/intune/organizations/organization.py +14 -0
  80. office365/intune/printing/base.py +11 -0
  81. office365/intune/printing/capabilities.py +5 -0
  82. office365/intune/printing/connectors/__init__.py +0 -0
  83. office365/intune/printing/connectors/connector.py +6 -0
  84. office365/intune/printing/operations/__init__.py +0 -0
  85. office365/intune/printing/print.py +24 -0
  86. office365/intune/printing/printer.py +6 -0
  87. office365/intune/printing/services/__init__.py +0 -0
  88. office365/intune/printing/services/endpoint.py +5 -0
  89. office365/intune/printing/services/service.py +17 -0
  90. office365/intune/printing/share.py +5 -0
  91. office365/intune/printing/shares/__init__.py +0 -0
  92. office365/intune/printing/taskdefinitions/__init__.py +0 -0
  93. office365/intune/provisioned_plan.py +5 -1
  94. office365/intune/servicecommunications/issues/issue.py +15 -0
  95. office365/intune/vpp_token.py +10 -0
  96. office365/onedrive/columns/content_approval_status.py +5 -0
  97. office365/onedrive/columns/datetime.py +15 -0
  98. office365/onedrive/columns/definition.py +49 -3
  99. office365/onedrive/columns/definition_collection.py +17 -6
  100. office365/onedrive/columns/types.py +13 -0
  101. office365/onedrive/driveitems/audio.py +12 -1
  102. office365/onedrive/driveitems/driveItem.py +66 -15
  103. office365/onedrive/driveitems/image.py +8 -1
  104. office365/onedrive/driveitems/remote_item.py +19 -4
  105. office365/onedrive/drives/recipient.py +4 -0
  106. office365/onedrive/files/system_info.py +8 -6
  107. office365/onedrive/lists/collection.py +11 -5
  108. office365/onedrive/lists/list.py +13 -5
  109. office365/onedrive/operations/pending.py +13 -0
  110. office365/onedrive/operations/pending_content_update.py +5 -0
  111. office365/onedrive/permissions/collection.py +1 -1
  112. office365/onedrive/sensitivitylabels/__init__.py +0 -0
  113. office365/onedrive/sensitivitylabels/assignment.py +17 -0
  114. office365/onedrive/sensitivitylabels/assignment_method.py +4 -0
  115. office365/onedrive/sensitivitylabels/extract_result.py +13 -0
  116. office365/onedrive/sharepoint_settings.py +25 -0
  117. office365/outlook/calendar/calendar.py +116 -5
  118. office365/outlook/calendar/dateTimeTimeZone.py +3 -0
  119. office365/outlook/calendar/email_address.py +7 -0
  120. office365/outlook/calendar/events/event.py +0 -4
  121. office365/outlook/calendar/events/reminder.py +22 -3
  122. office365/outlook/calendar/group.py +0 -2
  123. office365/outlook/calendar/location_constraint.py +16 -1
  124. office365/outlook/calendar/permissions/__init__.py +0 -0
  125. office365/outlook/calendar/permissions/collection.py +24 -0
  126. office365/outlook/calendar/{permission.py → permissions/permission.py} +35 -2
  127. office365/outlook/calendar/role_type.py +17 -0
  128. office365/outlook/calendar/sharing_message.py +2 -2
  129. office365/outlook/calendar/time_zone_base.py +3 -0
  130. office365/outlook/calendar/working_hours.py +17 -1
  131. office365/outlook/contacts/collection.py +39 -0
  132. office365/outlook/contacts/contact.py +21 -11
  133. office365/outlook/geo_coordinates.py +20 -0
  134. office365/outlook/item.py +5 -2
  135. office365/outlook/locale_info.py +3 -0
  136. office365/outlook/mail/folders/folder.py +51 -2
  137. office365/outlook/mail/folders/search.py +11 -0
  138. office365/outlook/mail/importance.py +1 -0
  139. office365/outlook/mail/item_body.py +3 -0
  140. office365/outlook/mail/location.py +27 -2
  141. office365/outlook/mail/location_constraint_item.py +5 -0
  142. office365/outlook/mail/messages/collection.py +7 -0
  143. office365/outlook/mail/messages/followup_flag.py +21 -0
  144. office365/outlook/mail/messages/internet_header.py +16 -0
  145. office365/outlook/mail/messages/message.py +183 -4
  146. office365/outlook/mail/messages/rules/actions.py +33 -0
  147. office365/outlook/mail/patterned_recurrence.py +14 -1
  148. office365/outlook/mail/physical_address.py +5 -1
  149. office365/outlook/mail/recipient.py +3 -0
  150. office365/outlook/mail/recurrence_pattern.py +18 -1
  151. office365/outlook/mail/recurrence_range.py +16 -2
  152. office365/reports/root.py +19 -1
  153. office365/reports/security/__init__.py +0 -0
  154. office365/reports/security/root.py +21 -0
  155. office365/reports/userregistration/__init__.py +0 -0
  156. office365/reports/userregistration/method_count.py +17 -0
  157. office365/reports/userregistration/method_summary.py +21 -0
  158. office365/sharepoint/activities/logger.py +25 -0
  159. office365/sharepoint/addtoonedrive/mount_point.py +25 -0
  160. office365/sharepoint/addtoonedrive/mounted_folder_info.py +5 -0
  161. office365/sharepoint/alerts/alert.py +31 -0
  162. office365/sharepoint/changes/item.py +14 -0
  163. office365/sharepoint/client_context.py +6 -0
  164. office365/sharepoint/clientsidecomponent/component_context_info.py +7 -0
  165. office365/sharepoint/clientsidecomponent/identifier.py +3 -0
  166. office365/sharepoint/compliance/tag_info.py +17 -0
  167. office365/sharepoint/contenttypes/content_type.py +42 -0
  168. office365/sharepoint/contenttypes/fieldlinks/collection.py +5 -6
  169. office365/sharepoint/features/known_list.py +2 -0
  170. office365/sharepoint/fields/collection.py +60 -41
  171. office365/sharepoint/fields/creation_information.py +5 -4
  172. office365/sharepoint/fields/field.py +73 -15
  173. office365/sharepoint/fields/user.py +3 -3
  174. office365/sharepoint/files/file.py +9 -4
  175. office365/sharepoint/folders/coloring.py +39 -0
  176. office365/sharepoint/folders/coloring_information.py +15 -0
  177. office365/sharepoint/folders/folder.py +21 -10
  178. office365/sharepoint/forms/customization.py +8 -0
  179. office365/sharepoint/listitems/listitem.py +10 -3
  180. office365/sharepoint/lists/bloom_filter.py +0 -1
  181. office365/sharepoint/lists/creation_information.py +18 -4
  182. office365/sharepoint/lists/list.py +199 -24
  183. office365/sharepoint/lists/render_data_parameters.py +21 -1
  184. office365/sharepoint/navigation/configured_metadata_items.py +25 -1
  185. office365/sharepoint/navigation/metadata_settings.py +6 -4
  186. office365/sharepoint/permissions/irm/file_settings.py +43 -0
  187. office365/sharepoint/portal/userprofiles/documents_shared_with_group.py +3 -0
  188. office365/sharepoint/publishing/base_custom_property.py +8 -0
  189. office365/sharepoint/publishing/navigation/structural_navigation_cache_wrapper.py +8 -0
  190. office365/sharepoint/publishing/pagecopywithassets/__init__.py +0 -0
  191. office365/sharepoint/publishing/pagecopywithassets/response.py +8 -0
  192. office365/sharepoint/publishing/pages/campaign_publication.py +7 -0
  193. office365/sharepoint/publishing/pages/page.py +4 -1
  194. office365/sharepoint/publishing/pages/reposts/metadata.py +8 -0
  195. office365/sharepoint/publishing/personmagazine/person_magazine.py +4 -1
  196. office365/sharepoint/search/administration/tenant_crawl_versions_info_provider.py +8 -1
  197. office365/sharepoint/search/query/auto_completion_match.py +3 -0
  198. office365/sharepoint/search/query/property_value.py +18 -0
  199. office365/sharepoint/search/request.py +16 -2
  200. office365/sharepoint/sharing/abilities.py +22 -0
  201. office365/sharepoint/sharing/direct_abilities.py +27 -0
  202. office365/sharepoint/sharing/link_abilities.py +9 -1
  203. office365/sharepoint/sharing/links/data.py +26 -1
  204. office365/sharepoint/sharing/links/info.py +1 -1
  205. office365/sharepoint/sharing/links/partial_success_response.py +5 -0
  206. office365/sharepoint/sharing/links/share_settings.py +24 -1
  207. office365/sharepoint/sharing/object_sharing_information.py +65 -2
  208. office365/sharepoint/sharing/object_sharing_information_user.py +9 -0
  209. office365/sharepoint/sharing/object_sharing_settings.py +17 -4
  210. office365/sharepoint/sharing/principal.py +10 -0
  211. office365/sharepoint/sharing/securable_object_extensions.py +1 -17
  212. office365/sharepoint/sharing/site_sharing_report_helper.py +2 -1
  213. office365/sharepoint/sharing/user_sharing_result.py +18 -8
  214. office365/sharepoint/sitehealth/result.py +10 -0
  215. office365/sharepoint/sites/language.py +11 -1
  216. office365/sharepoint/sites/language_collection.py +1 -0
  217. office365/sharepoint/sites/site.py +34 -6
  218. office365/sharepoint/tenant/administration/audit/search_request_status.py +8 -0
  219. office365/sharepoint/tenant/administration/hubsites/permission.py +10 -0
  220. office365/sharepoint/tenant/administration/tenant.py +1 -0
  221. office365/sharepoint/tenant/apps/information.py +3 -1
  222. office365/sharepoint/tenant/management/office365_tenant.py +0 -1
  223. office365/sharepoint/types/resource_path.py +3 -1
  224. office365/sharepoint/userprofiles/people_manager.py +0 -2
  225. office365/sharepoint/userprofiles/sharedwithme/document.py +16 -0
  226. office365/sharepoint/userprofiles/sharedwithme/document_user.py +12 -0
  227. office365/sharepoint/userprofiles/sharedwithme/item_collection.py +41 -0
  228. office365/sharepoint/userprofiles/sharedwithme/items.py +18 -1
  229. office365/sharepoint/webs/web.py +2 -3
  230. office365/subscriptions/collection.py +12 -6
  231. office365/subscriptions/subscription.py +119 -1
  232. office365/teams/channels/iIdentity.py +5 -0
  233. office365/teams/chats/collection.py +1 -2
  234. office365/teams/chats/messages/info.py +9 -0
  235. office365/teams/chats/messages/message.py +17 -2
  236. office365/teams/members/aad_user_conversation.py +2 -2
  237. office365/teams/members/conversation_collection.py +3 -3
  238. office365/teams/schedule/change_tracked_entity.py +11 -2
  239. office365/teams/tabs/configuration.py +12 -1
  240. office365/teams/tabs/tab.py +0 -1
  241. office365/teams/team.py +23 -1
  242. office365/teams/teamwork/__init__.py +0 -0
  243. office365/teams/teamwork/activity_topic.py +5 -0
  244. office365/teams/teamwork/tags/__init__.py +0 -0
  245. office365/teams/teamwork/tags/member.py +5 -0
  246. office365/{directory/security/cases_root.py → teams/viva/employee_experience_user.py} +1 -1
  247. office365/intune/devices/management.py +0 -35
  248. {Office365_REST_Python_Client-2.4.3.dist-info → Office365_REST_Python_Client-2.4.4.dist-info}/LICENSE +0 -0
  249. {Office365_REST_Python_Client-2.4.3.dist-info → Office365_REST_Python_Client-2.4.4.dist-info}/WHEEL +0 -0
  250. {Office365_REST_Python_Client-2.4.3.dist-info → Office365_REST_Python_Client-2.4.4.dist-info}/top_level.txt +0 -0
  251. /office365/{teams/messages → directory/security/cases}/__init__.py +0 -0
  252. /office365/{teams/tags → directory/synchronization}/__init__.py +0 -0
  253. /office365/teams/{tags → teamwork/tags}/identity.py +0 -0
  254. /office365/teams/{tags → teamwork/tags}/tag.py +0 -0
  255. /office365/teams/{user_teamwork.py → teamwork/user.py} +0 -0
@@ -0,0 +1,13 @@
1
+ from office365.directory.synchronization.progress import SynchronizationProgress
2
+ from office365.runtime.client_value import ClientValue
3
+ from office365.runtime.client_value_collection import ClientValueCollection
4
+
5
+
6
+ class SynchronizationStatus(ClientValue):
7
+ """Represents the current status of the synchronizationJob."""
8
+
9
+ def __init__(self, progress=None):
10
+ """
11
+ :param list[SynchronizationProgress] progress: Details of the progress of a job toward completion.
12
+ """
13
+ self.progress = ClientValueCollection(SynchronizationProgress, progress)
@@ -0,0 +1,24 @@
1
+ from office365.directory.synchronization.job import SynchronizationJob
2
+ from office365.entity import Entity
3
+ from office365.entity_collection import EntityCollection
4
+ from office365.runtime.paths.resource_path import ResourcePath
5
+
6
+
7
+ class Synchronization(Entity):
8
+ """
9
+ Represents the capability for Azure Active Directory (Azure AD) identity synchronization through
10
+ the Microsoft Graph API. Identity synchronization (also called provisioning) allows you to automate
11
+ the provisioning (creation, maintenance) and de-provisioning (removal) of user identities and roles from
12
+ Azure AD to supported cloud applications. For more information, see How Application Provisioning works
13
+ in Azure Active Directory
14
+ """
15
+
16
+ @property
17
+ def jobs(self):
18
+ """
19
+ Performs synchronization by periodically running in the background, polling for changes in one directory,
20
+ and pushing them to another directory.
21
+ """
22
+ return self.properties.get('jobs',
23
+ EntityCollection(self.context, SynchronizationJob,
24
+ ResourcePath("jobs", self.resource_path)))
@@ -3,3 +3,15 @@ from office365.runtime.client_value import ClientValue
3
3
 
4
4
  class TenantInformation(ClientValue):
5
5
  """Information about your Azure AD tenant that is publicly displayed to users in other Azure AD tenants."""
6
+
7
+ def __str__(self, default_domain_name=None, display_name=None, federation_brand_name=None, tenant_id=None):
8
+ """
9
+ :param str default_domain_name: Primary domain name of an Azure AD tenant.
10
+ :param str display_name: Display name of an Azure AD tenant.
11
+ :param str federation_brand_name: Name shown to users that sign in to an Azure AD tenant.
12
+ :param str tenant_id: Unique identifier of an Azure AD tenant.
13
+ """
14
+ self.defaultDomainName = default_domain_name
15
+ self.displayName = display_name
16
+ self.federationBrandName = federation_brand_name
17
+ self.tenantId = tenant_id
@@ -4,11 +4,23 @@ from office365.runtime.client_value import ClientValue
4
4
  class PasswordProfile(ClientValue):
5
5
  """Contains the password profile associated with a user. The passwordProfile property of the user entity is a
6
6
  passwordProfile object. """
7
- def __init__(self, password=None, force_change_password_next_sign_in=None):
7
+
8
+ def __init__(self, password=None, force_change_password_next_sign_in=None,
9
+ force_change_password_next_sign_in_with_mfa=None):
8
10
  """
9
- :param str password:
10
- :param bool force_change_password_next_sign_in:
11
+ :param str password: The password for the user. This property is required when a user is created.
12
+ It can be updated, but the user will be required to change the password on the next login.
13
+ The password must satisfy minimum requirements as specified by the user's passwordPolicies property.
14
+ By default, a strong password is required.
15
+ :param bool force_change_password_next_sign_in: true if the user must change her password on the next login;
16
+ otherwise false.
17
+ :param bool force_change_password_next_sign_in_with_mfa: f true, at next sign-in, the user must perform a
18
+ multi-factor authentication (MFA) before being forced to change their password. The behavior is identical
19
+ to forceChangePasswordNextSignIn except that the user is required to first perform a multi-factor
20
+ authentication before password change. After a password change, this property will be automatically
21
+ reset to false. If not set, default is false.
11
22
  """
12
23
  super(PasswordProfile, self).__init__()
13
24
  self.password = password
14
25
  self.forceChangePasswordNextSignIn = force_change_password_next_sign_in
26
+ self.forceChangePasswordNextSignInWithMfa = force_change_password_next_sign_in_with_mfa
@@ -4,6 +4,7 @@ from office365.communications.onlinemeetings.collection import OnlineMeetingColl
4
4
  from office365.communications.presences.presence import Presence
5
5
  from office365.delta_collection import DeltaCollection
6
6
  from office365.directory.applications.roles.assignment_collection import AppRoleAssignmentCollection
7
+ from office365.directory.audit.signins.activity import SignInActivity
7
8
  from office365.directory.authentication.authentication import Authentication
8
9
  from office365.directory.extensions.extension import Extension
9
10
  from office365.directory.identities.object_identity import ObjectIdentity
@@ -17,6 +18,7 @@ from office365.directory.object_collection import DirectoryObjectCollection
17
18
  from office365.directory.permissions.grants.oauth2 import OAuth2PermissionGrant
18
19
  from office365.directory.profile_photo import ProfilePhoto
19
20
  from office365.directory.users.activities.collection import UserActivityCollection
21
+ from office365.directory.users.password_profile import PasswordProfile
20
22
  from office365.directory.users.settings import UserSettings
21
23
  from office365.entity_collection import EntityCollection
22
24
  from office365.intune.devices.data import DeviceAndAppManagementData
@@ -31,7 +33,7 @@ from office365.outlook.calendar.events.event import Event
31
33
  from office365.outlook.calendar.events.reminder import Reminder
32
34
  from office365.outlook.calendar.group import CalendarGroup
33
35
  from office365.outlook.calendar.meetingtimes.suggestions_result import MeetingTimeSuggestionsResult
34
- from office365.outlook.contacts.contact import Contact
36
+ from office365.outlook.contacts.collection import ContactCollection
35
37
  from office365.outlook.contacts.folder import ContactFolder
36
38
  from office365.outlook.convert_id_result import ConvertIdResult
37
39
  from office365.outlook.mail.folders.collection import MailFolderCollection
@@ -46,18 +48,34 @@ from office365.runtime.client_value_collection import ClientValueCollection
46
48
  from office365.runtime.http.http_method import HttpMethod
47
49
  from office365.runtime.paths.entity import EntityPath
48
50
  from office365.runtime.paths.resource_path import ResourcePath
51
+ from office365.runtime.queries.create_entity import CreateEntityQuery
49
52
  from office365.runtime.queries.function import FunctionQuery
50
53
  from office365.runtime.queries.service_operation import ServiceOperationQuery
51
54
  from office365.runtime.types.collections import StringCollection
52
55
  from office365.teams.chats.collection import ChatCollection
53
56
  from office365.teams.collection import TeamCollection
54
- from office365.teams.user_teamwork import UserTeamwork
57
+ from office365.teams.teamwork.user import UserTeamwork
55
58
  from office365.todo.todo import Todo
59
+ from office365.teams.viva.employee_experience_user import EmployeeExperienceUser
56
60
 
57
61
 
58
62
  class User(DirectoryObject):
59
63
  """Represents an Azure AD user account. Inherits from directoryObject."""
60
64
 
65
+ def add_extension(self, name):
66
+ """
67
+ Creates an open extension (openTypeExtension object) and add custom properties in a new or existing instance
68
+ of a User resource.
69
+ :param str name:
70
+ """
71
+ from office365.directory.extensions.open_type import OpenTypeExtension
72
+ return_type = OpenTypeExtension(self.context)
73
+ return_type.set_property("extensionName", name)
74
+ self.extensions.add_child(return_type)
75
+ qry = CreateEntityQuery(self.extensions, return_type, return_type)
76
+ self.context.add_query(qry)
77
+ return return_type
78
+
61
79
  def assign_license(self, add_licenses, remove_licenses):
62
80
  """
63
81
  Add or remove licenses on the user.
@@ -352,11 +370,31 @@ class User(DirectoryObject):
352
370
  self.context.add_query(qry)
353
371
  return return_type
354
372
 
373
+ @property
374
+ def device_enrollment_limit(self):
375
+ """
376
+ :rtype: str
377
+ """
378
+ return self.properties.get('deviceEnrollmentLimit', None)
379
+
380
+ @property
381
+ def sign_in_activity(self):
382
+ """Get the last signed-in date and request ID of the sign-in for a given user. Read-only."""
383
+ return self.properties.get('signInActivity', SignInActivity())
384
+
355
385
  @property
356
386
  def account_enabled(self):
357
387
  """True if the account is enabled; otherwise, false. This property is required when a user is created."""
358
388
  return self.properties.get('accountEnabled', None)
359
389
 
390
+ @property
391
+ def age_group(self):
392
+ """
393
+ Gets the age group of the user.
394
+ :rtype: str or None
395
+ """
396
+ return self.properties.get('ageGroup', None)
397
+
360
398
  @property
361
399
  def app_role_assignments(self):
362
400
  """Get the apps and app roles which this user has been assigned."""
@@ -445,6 +483,11 @@ class User(DirectoryObject):
445
483
  """
446
484
  return self.properties.get('otherMails', StringCollection())
447
485
 
486
+ @property
487
+ def interests(self):
488
+ """A list for the user to describe their interests."""
489
+ return self.properties.get("interests", StringCollection())
490
+
448
491
  @property
449
492
  def identities(self):
450
493
  """Represents the identities that can be used to sign in to this user account.
@@ -551,8 +594,7 @@ class User(DirectoryObject):
551
594
  """Get a contact collection from the default Contacts folder of the signed-in user (.../me/contacts),
552
595
  or from the specified contact folder."""
553
596
  return self.properties.get('contacts',
554
- DeltaCollection(self.context, Contact,
555
- ResourcePath("contacts", self.resource_path)))
597
+ ContactCollection(self.context, ResourcePath("contacts", self.resource_path)))
556
598
 
557
599
  @property
558
600
  def contact_folders(self):
@@ -600,10 +642,29 @@ class User(DirectoryObject):
600
642
  DeltaCollection(self.context, OAuth2PermissionGrant,
601
643
  ResourcePath("oauth2PermissionGrants", self.resource_path)))
602
644
 
645
+ @property
646
+ def on_premises_distinguished_name(self):
647
+ """
648
+ Contains the on-premises Active Directory distinguished name or DN. The property is only populated for
649
+ customers who are synchronizing their on-premises directory to Azure Active Directory via Azure AD Connect
650
+ :rtype: str
651
+ """
652
+ return self.properties.get('onPremisesDistinguishedName', None)
653
+
654
+ @property
655
+ def on_premises_domain_name(self):
656
+ """
657
+ Contains the on-premises domainFQDN, also called dnsDomainName synchronized from the on-premises directory.
658
+ The property is only populated for customers who are synchronizing their on-premises directory to
659
+ Azure Active Directory via Azure AD Connect.
660
+ :rtype: str
661
+ """
662
+ return self.properties.get('onPremisesDomainName', None)
663
+
603
664
  @property
604
665
  def owned_devices(self):
605
- """Devices that are owned by the user. Read-only. Nullable. Supports $expand and $filter
606
- (/$count eq 0, /$count ne 0, /$count eq 1, /$count ne 1). """
666
+ """Devices that are owned by the user. Read-only. Nullable.
667
+ Supports $expand and $filter (/$count eq 0, /$count ne 0, /$count eq 1, /$count ne 1). """
607
668
  return self.properties.get('ownedDevices',
608
669
  DirectoryObjectCollection(self.context,
609
670
  ResourcePath("ownedDevices", self.resource_path)))
@@ -615,6 +676,18 @@ class User(DirectoryObject):
615
676
  DirectoryObjectCollection(self.context,
616
677
  ResourcePath("ownedObjects", self.resource_path)))
617
678
 
679
+ @property
680
+ def proxy_addresses(self):
681
+ """
682
+ For example: ["SMTP: bob@contoso.com", "smtp: bob@sales.contoso.com"]. Changes to the mail property will
683
+ also update this collection to include the value as an SMTP address. For more information, see mail and
684
+ proxyAddresses properties. The proxy address prefixed with SMTP (capitalized) is the primary proxy address
685
+ while those prefixed with smtp are the secondary proxy addresses. For Azure AD B2C accounts, this
686
+ property has a limit of ten unique addresses. Read-only in Microsoft Graph; you can update this property
687
+ only through the Microsoft 365 admin center. Not nullable.
688
+ """
689
+ return self.properties.get('proxyAddresses', StringCollection())
690
+
618
691
  @property
619
692
  def transitive_member_of(self):
620
693
  """Get groups, directory roles that the user is a member of. This API request is transitive, and will also
@@ -679,6 +752,26 @@ class User(DirectoryObject):
679
752
  OnlineMeetingCollection(self.context,
680
753
  ResourcePath("onlineMeetings", self.resource_path)))
681
754
 
755
+ @property
756
+ def password_policies(self):
757
+ """
758
+ Specifies password policies for the user. This value is an enumeration with one possible value being
759
+ DisableStrongPassword, which allows weaker passwords than the default policy to be specified.
760
+ DisablePasswordExpiration can also be specified. The two may be specified together; for example:
761
+ DisablePasswordExpiration, DisableStrongPassword.
762
+ :rtype: str
763
+ """
764
+ return self.properties.get('passwordPolicies', None)
765
+
766
+ @property
767
+ def password_profile(self):
768
+ """
769
+ Specifies the password profile for the user. The profile contains the user's password.
770
+ This property is required when a user is created. The password in the profile must satisfy minimum
771
+ requirements as specified by the passwordPolicies property. By default, a strong password is required.
772
+ """
773
+ return self.properties.get('passwordProfile', PasswordProfile())
774
+
682
775
  @property
683
776
  def presence(self):
684
777
  """Get a user's presence information."""
@@ -687,11 +780,27 @@ class User(DirectoryObject):
687
780
 
688
781
  @property
689
782
  def registered_devices(self):
690
- """Get the devices that are retistered for the user from the registeredDevices navigation property."""
783
+ """Get the devices that are registered for the user from the registeredDevices navigation property."""
691
784
  return self.properties.get('registeredDevices',
692
785
  DirectoryObjectCollection(self.context,
693
786
  ResourcePath("registeredDevices", self.resource_path)))
694
787
 
788
+ @property
789
+ def street_address(self):
790
+ """
791
+ The street address of the user's place of business. Maximum length is 1024 characters.
792
+ :rtype: str
793
+ """
794
+ return self.properties.get('streetAddress', None)
795
+
796
+ @property
797
+ def security_identifier(self):
798
+ """
799
+ Security identifier (SID) of the user, used in Windows scenarios.
800
+ :rtype: str
801
+ """
802
+ return self.properties.get('securityIdentifier', None)
803
+
695
804
  @property
696
805
  def teamwork(self):
697
806
  """A container for the range of Microsoft Teams functionalities that are available per user in the tenant."""
@@ -704,6 +813,22 @@ class User(DirectoryObject):
704
813
  return self.properties.get('todo',
705
814
  Todo(self.context, ResourcePath("todo", self.resource_path)))
706
815
 
816
+ @property
817
+ def employee_experience(self):
818
+ """Represents the To Do services available to a user."""
819
+ return self.properties.get('employeeExperience',
820
+ EmployeeExperienceUser(self.context,
821
+ ResourcePath("employeeExperience", self.resource_path)))
822
+
823
+ @property
824
+ def usage_location(self):
825
+ """
826
+ A two letter country code (ISO standard 3166). Required for users that will be assigned licenses due to
827
+ legal requirement to check for availability of services in countries. Examples include: US, JP, and GB.
828
+ :rtype: str
829
+ """
830
+ return self.properties.get('usageLocation', None)
831
+
707
832
  def get_property(self, name, default_value=None):
708
833
  if default_value is None:
709
834
  property_mapping = {
@@ -711,6 +836,7 @@ class User(DirectoryObject):
711
836
  "businessPhones": self.business_phones,
712
837
  "calendarGroups": self.calendar_groups,
713
838
  "contactFolders": self.contact_folders,
839
+ "employeeExperience": self.employee_experience,
714
840
  "followedSites": self.followed_sites,
715
841
  "licenseDetails": self.license_details,
716
842
  "managedDevices": self.managed_devices,
@@ -725,7 +851,9 @@ class User(DirectoryObject):
725
851
  "oauth2PermissionGrants": self.oauth2_permission_grants,
726
852
  "ownedDevices": self.owned_devices,
727
853
  "ownedObjects": self.owned_objects,
728
- "registeredDevices": self.registered_devices
854
+ "passwordProfile": self.password_profile,
855
+ "registeredDevices": self.registered_devices,
856
+ "signInActivity": self.sign_in_activity
729
857
  }
730
858
  default_value = property_mapping.get(name, None)
731
859
  return super(User, self).get_property(name, default_value)
office365/graph_client.py CHANGED
@@ -31,7 +31,7 @@ from office365.education.root import EducationRoot
31
31
  from office365.entity_collection import EntityCollection
32
32
  from office365.search.external.external import External
33
33
  from office365.intune.devices.app_management import DeviceAppManagement
34
- from office365.intune.devices.management import DeviceManagement
34
+ from office365.intune.devices.management.management import DeviceManagement
35
35
  from office365.intune.organizations.contact import OrgContact
36
36
  from office365.intune.organizations.organization import Organization
37
37
  from office365.onedrive.admin import Admin
@@ -214,8 +214,15 @@ class GraphClient(ClientRuntimeContext):
214
214
  """Represents a directory roles in the directory"""
215
215
  return DeltaCollection(self, DirectoryRole, ResourcePath("directoryRoles"))
216
216
 
217
+ @property
218
+ def directory_role_templates(self):
219
+ """Represents a directory role templates in the directory"""
220
+ from office365.directory.rolemanagement.template import DirectoryRoleTemplate
221
+ return EntityCollection(self, DirectoryRoleTemplate, ResourcePath("directoryRoleTemplates"))
222
+
217
223
  @property
218
224
  def identity_providers(self):
225
+ """"""
219
226
  return EntityCollection(self, IdentityProvider, ResourcePath("identityProviders"))
220
227
 
221
228
  @property
@@ -252,6 +259,12 @@ class GraphClient(ClientRuntimeContext):
252
259
  """A collection of lifecycle policies for a Microsoft 365 groups."""
253
260
  return EntityCollection(self, GroupLifecyclePolicy, ResourcePath("groupLifecyclePolicies"))
254
261
 
262
+ @property
263
+ def group_settings(self):
264
+ """Represents a directory roles in the directory"""
265
+ from office365.directory.groups.setting import GroupSetting
266
+ return GroupSetting(self, ResourcePath("groupSettings"))
267
+
255
268
  @property
256
269
  def communications(self):
257
270
  """
@@ -281,6 +294,12 @@ class GraphClient(ClientRuntimeContext):
281
294
  """
282
295
  return SubscriptionCollection(self, ResourcePath("subscriptions"))
283
296
 
297
+ @property
298
+ def connections(self):
299
+ """Get a list of the externalConnection objects and their properties."""
300
+ from office365.search.external.connection import ExternalConnection
301
+ return EntityCollection(self, ExternalConnection, ResourcePath("connections"))
302
+
284
303
  @property
285
304
  def tenant_relationships(self):
286
305
  """Represent the various type of tenant relationships."""
@@ -336,6 +355,14 @@ class GraphClient(ClientRuntimeContext):
336
355
  """
337
356
  return EntityCollection(self, ResourceSpecificPermissionGrant, ResourcePath("permissionGrants"))
338
357
 
358
+ @property
359
+ def print(self):
360
+ """
361
+ Used to manage printers and print jobs within Universal Print.
362
+ """
363
+ from office365.intune.printing.print import Print
364
+ return Print(self, ResourcePath("print"))
365
+
339
366
  @property
340
367
  def search(self):
341
368
  """
@@ -0,0 +1,5 @@
1
+ from office365.runtime.client_value import ClientValue
2
+
3
+
4
+ class AuditActor(ClientValue):
5
+ """A class containing the properties for Audit Actor."""
@@ -1,31 +1,27 @@
1
1
  from office365.entity import Entity
2
- from office365.entity_collection import EntityCollection
3
- from office365.runtime.client_result import ClientResult
4
- from office365.runtime.queries.function import FunctionQuery
5
- from office365.runtime.types.collections import StringCollection
2
+ from office365.intune.audit.actor import AuditActor
3
+ from office365.intune.audit.resource import AuditResource
4
+ from office365.runtime.client_value_collection import ClientValueCollection
6
5
 
7
6
 
8
7
  class AuditEvent(Entity):
9
8
  """A class containing the properties for Audit Event."""
10
9
 
11
-
12
- class AuditEventCollection(EntityCollection):
13
-
14
- def __init__(self, context, resource_path=None):
15
- super(AuditEventCollection, self).__init__(context, AuditEvent, resource_path)
16
-
17
- def get_audit_categories(self):
18
- """Not yet documented"""
19
- return_type = ClientResult(self.context, StringCollection())
20
- qry = FunctionQuery(self, "getAuditCategories", None, return_type)
21
- self.context.add_query(qry)
22
- return return_type
23
-
24
- def get_audit_activity_types(self, category):
25
- """Not yet documented"""
26
- return_type = ClientResult(self.context, StringCollection())
27
- params = {"category": category}
28
- qry = FunctionQuery(self, "getAuditActivityTypes", params, return_type)
29
- self.context.add_query(qry)
30
- return return_type
31
-
10
+ @property
11
+ def activity(self):
12
+ """Friendly name of the activity.
13
+ :rtype: str
14
+ """
15
+ return self.properties.get("activity", None)
16
+
17
+ @property
18
+ def actor(self):
19
+ """
20
+ AAD user and application that are associated with the audit event.
21
+ """
22
+ return self.properties.get("actor", AuditActor())
23
+
24
+ @property
25
+ def resources(self):
26
+ """Resources being modified"""
27
+ return self.properties.get("resources", ClientValueCollection(AuditResource))
@@ -0,0 +1,26 @@
1
+ from office365.entity_collection import EntityCollection
2
+ from office365.intune.audit.event import AuditEvent
3
+ from office365.runtime.client_result import ClientResult
4
+ from office365.runtime.queries.function import FunctionQuery
5
+ from office365.runtime.types.collections import StringCollection
6
+
7
+
8
+ class AuditEventCollection(EntityCollection):
9
+
10
+ def __init__(self, context, resource_path=None):
11
+ super(AuditEventCollection, self).__init__(context, AuditEvent, resource_path)
12
+
13
+ def get_audit_categories(self):
14
+ """Not yet documented"""
15
+ return_type = ClientResult(self.context, StringCollection())
16
+ qry = FunctionQuery(self, "getAuditCategories", None, return_type)
17
+ self.context.add_query(qry)
18
+ return return_type
19
+
20
+ def get_audit_activity_types(self, category):
21
+ """Not yet documented"""
22
+ return_type = ClientResult(self.context, StringCollection())
23
+ params = {"category": category}
24
+ qry = FunctionQuery(self, "getAuditActivityTypes", params, return_type)
25
+ self.context.add_query(qry)
26
+ return return_type
@@ -0,0 +1,5 @@
1
+ from office365.runtime.client_value import ClientValue
2
+
3
+
4
+ class AuditProperty(ClientValue):
5
+ """A class containing the properties for Audit Property."""
@@ -0,0 +1,11 @@
1
+ from office365.runtime.client_value import ClientValue
2
+
3
+
4
+ class AuditResource(ClientValue):
5
+ """A class containing the properties for Audit Resource."""
6
+
7
+ def __init__(self, audit_resource_type=None):
8
+ """
9
+ :param str audit_resource_type: Audit resource's type.
10
+ """
11
+ self.auditResourceType = audit_resource_type
@@ -0,0 +1,6 @@
1
+ from office365.runtime.client_value import ClientValue
2
+
3
+
4
+ class IntuneBrand(ClientValue):
5
+ """intuneBrand contains data which is used in customizing the appearance of the Company Portal applications as
6
+ well as the end user web portal."""
File without changes
@@ -0,0 +1,6 @@
1
+ from office365.entity import Entity
2
+
3
+
4
+ class DeviceCompliancePolicy(Entity):
5
+ """This is the base class for Compliance policy. Compliance policies are platform specific and individual
6
+ per-platform compliance policies inherit from here"""
@@ -0,0 +1,5 @@
1
+ from office365.entity import Entity
2
+
3
+
4
+ class DeviceCompliancePolicyState(Entity):
5
+ """Device Compliance Policy State for a given device"""
File without changes
@@ -0,0 +1,25 @@
1
+ import datetime
2
+
3
+ from office365.entity import Entity
4
+
5
+
6
+ class DeviceEnrollmentConfiguration(Entity):
7
+ """The Base Class of Device Enrollment Configuration"""
8
+
9
+ @property
10
+ def created_datetime(self):
11
+ """
12
+ Created date time in UTC of the device enrollment configuration
13
+ """
14
+ return self.properties.get("createdDateTime", datetime.datetime.min)
15
+
16
+ @property
17
+ def display_name(self):
18
+ """
19
+ The display name of the device enrollment configuration
20
+ :rtype: str
21
+ """
22
+ return self.properties.get("displayName", None)
23
+
24
+ def get_property(self, name, default_value=None):
25
+ return super(DeviceEnrollmentConfiguration, self).get_property(name, default_value)
@@ -0,0 +1,5 @@
1
+ from office365.entity import Entity
2
+
3
+
4
+ class EnrollmentConfigurationAssignment(Entity):
5
+ """Enrollment Configuration Assignment"""
@@ -0,0 +1,5 @@
1
+ from office365.intune.devices.enrollment.configuration import DeviceEnrollmentConfiguration
2
+
3
+
4
+ class DeviceEnrollmentLimitConfiguration(DeviceEnrollmentConfiguration):
5
+ """Device Enrollment Configuration that restricts the number of devices a user can enroll"""
@@ -1,5 +1,7 @@
1
1
  from office365.entity import Entity
2
+ from office365.entity_collection import EntityCollection
2
3
  from office365.intune.devices.category import DeviceCategory
4
+ from office365.intune.devices.compliance.policy_state import DeviceCompliancePolicyState
3
5
  from office365.runtime.paths.resource_path import ResourcePath
4
6
  from office365.runtime.queries.service_operation import ServiceOperationQuery
5
7
 
@@ -13,11 +15,23 @@ class ManagedDevice(Entity):
13
15
  self.context.add_query(qry)
14
16
  return self
15
17
 
18
+ @property
19
+ def activation_lock_bypass_code(self):
20
+ """
21
+ The code that allows the Activation Lock on managed device to be bypassed. Default,
22
+ is Null (Non-Default property) for this property when returned as part of managedDevice entity in LIST call.
23
+ To retrieve actual values GET call needs to be made, with device id and included in select parameter.
24
+ Supports: $select. $Search is not supported. Read-only. This property is read-only.
25
+ :rtype: str
26
+ """
27
+ return self.properties.get("activationLockBypassCode", None)
28
+
16
29
  @property
17
30
  def device_category(self):
18
31
  """ Device category"""
19
- return self.properties.get('deviceCategory', DeviceCategory(self.context,
20
- ResourcePath("deviceCategory", self.resource_path)))
32
+ return self.properties.get('deviceCategory',
33
+ DeviceCategory(self.context,
34
+ ResourcePath("deviceCategory", self.resource_path)))
21
35
 
22
36
  @property
23
37
  def manufacturer(self):
@@ -35,6 +49,16 @@ class ManagedDevice(Entity):
35
49
  """
36
50
  return self.properties.get("operatingSystem", None)
37
51
 
52
+ @property
53
+ def device_compliance_policy_states(self):
54
+ """
55
+ Device compliance policy states for this device
56
+ """
57
+ return self.properties.get('deviceCompliancePolicyStates',
58
+ EntityCollection(self.context, DeviceCompliancePolicyState,
59
+ ResourcePath("deviceCompliancePolicyStates",
60
+ self.resource_path)))
61
+
38
62
  @property
39
63
  def users(self):
40
64
  """The primary users associated with the managed device."""
@@ -44,7 +68,8 @@ class ManagedDevice(Entity):
44
68
  def get_property(self, name, default_value=None):
45
69
  if default_value is None:
46
70
  property_mapping = {
47
- "deviceCategory": self.device_category
71
+ "deviceCategory": self.device_category,
72
+ "deviceCompliancePolicyStates": self.device_compliance_policy_states
48
73
  }
49
74
  default_value = property_mapping.get(name, None)
50
75
  return super(ManagedDevice, self).get_property(name, default_value)
File without changes