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,51 +1,38 @@
1
+ from typing import Optional
2
+
1
3
  from office365.sharepoint.fields.field import Field
2
4
 
3
5
 
4
6
  class FieldNumber(Field):
5
- """Specifies a field (2) that contains number values. To set properties, call the Update method
7
+ """Specifies a field that contains number values. To set properties, call the Update method
6
8
  (section 3.2.5.53.2.1.5)."""
7
9
 
8
10
  @property
9
11
  def display_format(self):
10
- """
11
- Gets the number of decimal places to be used when displaying the field.
12
-
13
- :rtype: int or None
14
- """
12
+ # type: () -> Optional[int]
13
+ """Gets the number of decimal places to be used when displaying the field."""
15
14
  return self.properties.get("DisplayFormat", None)
16
15
 
17
16
  @property
18
17
  def comma_separator(self):
19
- """
20
- Gets the separator used to format the value of the field.
21
-
22
- :rtype: str or None
23
- """
18
+ # type: () -> Optional[str]
19
+ """Gets the separator used to format the value of the field."""
24
20
  return self.properties.get("CommaSeparator", None)
25
21
 
26
22
  @comma_separator.setter
27
23
  def comma_separator(self, value):
28
- """
29
- Sets the separator used to format the value of the field.
30
-
31
- :type value: str
32
- """
24
+ # type: (str) -> None
25
+ """Sets the separator used to format the value of the field."""
33
26
  self.set_property("CommaSeparator", value)
34
27
 
35
28
  @property
36
29
  def show_as_percentage(self):
37
- """
38
- Gets a Boolean value that specifies whether to render the field as a percentage.
39
-
40
- :rtype: int or None
41
- """
30
+ # type: () -> Optional[bool]
31
+ """Gets a Boolean value that specifies whether to render the field as a percentage."""
42
32
  return self.properties.get("ShowAsPercentage", None)
43
33
 
44
34
  @show_as_percentage.setter
45
35
  def show_as_percentage(self, value):
46
- """
47
- Sets a Boolean value that specifies whether to render the field as a percentage.
48
-
49
- :type value: str
50
- """
36
+ # type: (bool) -> None
37
+ """Sets a Boolean value that specifies whether to render the field as a percentage."""
51
38
  self.set_property("ShowAsPercentage", value)
@@ -1,3 +1,5 @@
1
+ from typing import Optional
2
+
1
3
  from office365.sharepoint.fields.multi_choice import FieldMultiChoice
2
4
 
3
5
 
@@ -7,11 +9,8 @@ class FieldRatingScale(FieldMultiChoice):
7
9
 
8
10
  @property
9
11
  def grid_start_number(self):
10
- """
11
- Gets the start number for the rating scale.
12
-
13
- :rtype: int or None
14
- """
12
+ # type: () -> Optional[int]
13
+ """Gets the start number for the rating scale."""
15
14
  return self.properties.get("GridStartNumber", None)
16
15
 
17
16
  @grid_start_number.setter
@@ -25,9 +24,6 @@ class FieldRatingScale(FieldMultiChoice):
25
24
 
26
25
  @property
27
26
  def range_count(self):
28
- """
29
- Specifies the number of options in the rating scale.
30
-
31
- :rtype: int or None
32
- """
27
+ # type: () -> Optional[int]
28
+ """Specifies the number of options in the rating scale."""
33
29
  return self.properties.get("RangeCount", None)
@@ -1,3 +1,5 @@
1
+ from typing import Optional
2
+
1
3
  from office365.runtime.paths.resource_path import ResourcePath
2
4
  from office365.sharepoint.entity import Entity
3
5
 
@@ -7,35 +9,26 @@ class RelatedField(Entity):
7
9
 
8
10
  @property
9
11
  def field_id(self):
10
- """
11
- Gets the field id of the corresponding Lookup Field.
12
- :rtype: str or None
13
- """
12
+ # type: () -> Optional[str]
13
+ """Gets the field id of the corresponding Lookup Field."""
14
14
  return self.properties.get("FieldId", None)
15
15
 
16
16
  @property
17
17
  def list_id(self):
18
- """
19
- Gets the ID of the List containing the corresponding Lookup Field.
20
- :rtype: str or None
21
- """
18
+ # type: () -> Optional[str]
19
+ """Gets the ID of the List containing the corresponding Lookup Field."""
22
20
  return self.properties.get("ListId", None)
23
21
 
24
22
  @property
25
23
  def web_id(self):
26
- """
27
- Gets the ID of the Web containing the corresponding Lookup Field.
28
- :rtype: str or None
29
- """
24
+ # type: () -> Optional[str]
25
+ """Gets the ID of the Web containing the corresponding Lookup Field."""
30
26
  return self.properties.get("WebId", None)
31
27
 
32
28
  @property
33
29
  def relationship_delete_behavior(self):
34
- """
35
- Gets delete behavior of the corresponding Lookup Field.
36
-
37
- :rtype: int or None
38
- """
30
+ # type: () -> Optional[int]
31
+ """Gets delete behavior of the corresponding Lookup Field."""
39
32
  return self.properties.get("RelationshipDeleteBehavior", None)
40
33
 
41
34
  @property
@@ -1,3 +1,5 @@
1
+ from typing import Optional
2
+
1
3
  from office365.sharepoint.fields.field import Field
2
4
 
3
5
 
@@ -6,9 +8,6 @@ class FieldUrl(Field):
6
8
 
7
9
  @property
8
10
  def display_format(self):
9
- """
10
- Gets the number of decimal places to be used when displaying the field.
11
-
12
- :rtype: int or None
13
- """
11
+ # type: () -> Optional[int]
12
+ """Gets the number of decimal places to be used when displaying the field."""
14
13
  return self.properties.get("DisplayFormat", None)
@@ -1,3 +1,5 @@
1
+ from typing import Optional
2
+
1
3
  from office365.sharepoint.fields.lookup import FieldLookup
2
4
 
3
5
 
@@ -6,41 +8,40 @@ class FieldUser(FieldLookup):
6
8
 
7
9
  @property
8
10
  def presence(self):
9
- """Gets a value that specifies whether presence is enabled on the field.
10
-
11
- :rtype: bool or None
12
- """
11
+ # type: () -> Optional[bool]
12
+ """Gets a value that specifies whether presence is enabled on the field."""
13
13
  return self.properties.get("Presence", None)
14
14
 
15
15
  @presence.setter
16
16
  def presence(self, val):
17
+ # type: (bool) -> None
17
18
  """Sets a value that specifies whether presence is enabled on the field."""
18
19
  self.properties.get("Presence", val)
19
20
 
20
21
  @property
21
22
  def allow_display(self):
22
- """Gets a value that specifies whether to display the name of the user in a survey list.
23
-
24
- :rtype: bool or None
25
- """
23
+ # type: () -> Optional[bool]
24
+ """Gets a value that specifies whether to display the name of the user in a survey list."""
26
25
  return self.properties.get("AllowDisplay", None)
27
26
 
28
27
  @allow_display.setter
29
28
  def allow_display(self, val):
29
+ # type: (bool) -> None
30
30
  """Sets a value that specifies whether to display the name of the user in a survey list."""
31
31
  self.properties.get("AllowDisplay", val)
32
32
 
33
33
  @property
34
34
  def selection_group(self):
35
+ # type: () -> Optional[int]
35
36
  """
36
37
  Gets a value that specifies the identifier of the SharePoint group whose members can be selected
37
38
  as values of the field.
38
- :rtype: int or None
39
39
  """
40
40
  return self.properties.get("SelectionGroup", None)
41
41
 
42
42
  @selection_group.setter
43
43
  def selection_group(self, val):
44
+ # type: (int) -> None
44
45
  """Sets a value that specifies the identifier of the SharePoint group whose members can be selected as
45
46
  values of the field.
46
47
  """
@@ -45,7 +45,7 @@ class FileCollection(EntityCollection[File]):
45
45
  def upload_with_checksum(self, file_object, chunk_size=1024):
46
46
  # type: (IO, int) -> File
47
47
  """ """
48
- h = hashlib.sha1() # hashlib.md5()
48
+ h = hashlib.md5()
49
49
  file_name = os.path.basename(file_object.name)
50
50
  upload_id = str(uuid.uuid4())
51
51
 
@@ -53,9 +53,10 @@ class FileCollection(EntityCollection[File]):
53
53
  # type: (File) -> None
54
54
  content = file_object.read(chunk_size)
55
55
  h.update(content)
56
+
56
57
  return_type.upload_with_checksum(
57
58
  upload_id, h.hexdigest(), content
58
- ).after_execute(_upload_session)
59
+ ) # .after_execute(_upload_session)
59
60
 
60
61
  return self.add(file_name, None, True).after_execute(_upload_session)
61
62
 
@@ -80,37 +81,38 @@ class FileCollection(EntityCollection[File]):
80
81
  file_name = file_name if file_name else os.path.basename(file.name)
81
82
  upload_id = str(uuid.uuid4())
82
83
 
83
- def _upload_session(return_type, return_file):
84
- # type: (File|ClientResult, File) -> None
85
- if return_file is None:
86
- return_file = return_type
84
+ def _upload(return_type):
85
+ # type: (File) -> None
86
+
87
+ def _after_uploaded(result):
88
+ # type: (ClientResult) -> None
89
+ _upload(return_type)
87
90
 
88
91
  uploaded_bytes = file.tell()
89
92
  if callable(chunk_uploaded):
90
93
  chunk_uploaded(uploaded_bytes, **kwargs)
91
94
 
95
+ content = file.read(chunk_size)
92
96
  if uploaded_bytes == file_size:
93
97
  if auto_close and not file.closed:
94
98
  file.close()
95
99
  return
96
100
 
97
- content = file.read(chunk_size)
98
-
99
101
  if uploaded_bytes == 0:
100
- return_file.start_upload(upload_id, content).after_execute(
101
- _upload_session, return_file
102
+ return_type.start_upload(upload_id, content).after_execute(
103
+ _after_uploaded
102
104
  )
103
105
  elif uploaded_bytes + len(content) < file_size:
104
- return_file.continue_upload(
106
+ return_type.continue_upload(
105
107
  upload_id, uploaded_bytes, content
106
- ).after_execute(_upload_session, return_file)
108
+ ).after_execute(_after_uploaded)
107
109
  else:
108
- return_file.finish_upload(
110
+ return_type.finish_upload(
109
111
  upload_id, uploaded_bytes, content
110
- ).after_execute(_upload_session, return_file)
112
+ ).after_execute(_upload)
111
113
 
112
114
  if file_size > chunk_size:
113
- return self.add(file_name, None, True).after_execute(_upload_session, None)
115
+ return self.add(file_name, None, True).after_execute(_upload)
114
116
  else:
115
117
  return self.add(file_name, file.read(), True)
116
118
 
@@ -59,10 +59,7 @@ class File(AbstractFile):
59
59
  or a file in a folder."""
60
60
 
61
61
  def __repr__(self):
62
- if self.server_relative_path:
63
- return repr(self.server_relative_path)
64
- else:
65
- return self.serverRelativeUrl or self.unique_id or self.entity_type_name
62
+ return self.serverRelativeUrl or self.unique_id or self.entity_type_name
66
63
 
67
64
  def __str__(self):
68
65
  return self.name or self.entity_type_name
@@ -132,6 +129,19 @@ class File(AbstractFile):
132
129
  self.context.add_query(qry)
133
130
  return return_type
134
131
 
132
+ def get_pre_authorized_access_url(self, expiration_hours):
133
+ # type: (int) -> ClientResult[str]
134
+ """Returns a link for downloading the file without authentication.
135
+ :param int expiration_hours: The number of hours until the link expires. If the maximum expiration time
136
+ defined in the web application is less than the specified expiration time, the maximum expiration time
137
+ takes precedence.
138
+ """
139
+ return_type = ClientResult(self.context, str())
140
+ params = {"expirationHours": expiration_hours}
141
+ qry = FunctionQuery(self, "GetPreAuthorizedAccessUrl", params, return_type)
142
+ self.context.add_query(qry)
143
+ return return_type
144
+
135
145
  def get_absolute_url(self):
136
146
  # type: () -> ClientResult[str]
137
147
  """Gets absolute url of a File"""
@@ -332,19 +342,18 @@ class File(AbstractFile):
332
342
  :param int flag: Specifies the kind of move operation.
333
343
  """
334
344
 
335
- def _update_file(return_type, new_file_url):
336
- return_type.set_property("ServerRelativeUrl", new_file_url)
337
-
338
345
  def _moveto(destination_folder):
339
- """
340
- :type destination_folder: Folder
341
- """
342
- file_path = "/".join([str(destination_folder.serverRelativeUrl), self.name])
346
+ # type: (Folder) -> None
347
+ file_url = "/".join([str(destination_folder.serverRelativeUrl), self.name])
343
348
 
344
- params = {"newurl": file_path, "flags": flag}
349
+ params = {"newurl": file_url, "flags": flag}
345
350
  qry = ServiceOperationQuery(self, "moveto", params)
346
351
  self.context.add_query(qry)
347
- self.context.after_query_execute(_update_file, self, file_path)
352
+
353
+ def _update_file(return_type):
354
+ self.set_property("ServerRelativeUrl", file_url)
355
+
356
+ self.context.after_query_execute(_update_file)
348
357
 
349
358
  def _source_file_resolved():
350
359
  if isinstance(destination, Folder):
@@ -366,10 +375,6 @@ class File(AbstractFile):
366
375
  :param int flag: Specifies the kind of move operation.
367
376
  """
368
377
 
369
- def _update_file(return_type, new_file_url):
370
- # type: (File, str) -> None
371
- return_type.set_property("ServerRelativePath", new_file_url)
372
-
373
378
  def _move_to_using_path(destination_folder):
374
379
  # type: (Folder) -> None
375
380
  file_path = "/".join(
@@ -377,9 +382,12 @@ class File(AbstractFile):
377
382
  )
378
383
  params = {"DecodedUrl": file_path, "moveOperations": flag}
379
384
  qry = ServiceOperationQuery(self, "MoveToUsingPath", params)
380
- self.context.add_query(qry).after_query_execute(
381
- _update_file, self, file_path
382
- )
385
+
386
+ def _update_file(return_type):
387
+ # type: (File) -> None
388
+ self.set_property("ServerRelativePath", file_path)
389
+
390
+ self.context.add_query(qry).after_query_execute(_update_file)
383
391
 
384
392
  def _source_file_resolved():
385
393
  if isinstance(destination, Folder):
@@ -493,6 +501,7 @@ class File(AbstractFile):
493
501
  return return_type
494
502
 
495
503
  def upload_with_checksum(self, upload_id, checksum, stream):
504
+ # type: (str, str, bytes) -> File
496
505
  """
497
506
  :param str upload_id: The upload session ID.
498
507
  :param str checksum:
@@ -924,9 +933,7 @@ class File(AbstractFile):
924
933
 
925
934
  @property
926
935
  def parent_folder(self):
927
- """
928
- :rtype: office365.sharepoint.folders.folder.Folder
929
- """
936
+ # type: () -> Optional[Folder]
930
937
  if self.parent_collection is None:
931
938
  return None
932
939
  return self.parent_collection.parent
@@ -1,7 +1,10 @@
1
+ import os
2
+
1
3
  from office365.runtime.paths.service_operation import ServiceOperationPath
2
4
  from office365.runtime.paths.v3.entity import EntityPath
3
5
  from office365.runtime.queries.service_operation import ServiceOperationQuery
4
6
  from office365.sharepoint.entity_collection import EntityCollection
7
+ from office365.sharepoint.folders.coloring_information import FolderColoringInformation
5
8
  from office365.sharepoint.folders.folder import Folder
6
9
  from office365.sharepoint.types.resource_path import ResourcePath as SPResPath
7
10
 
@@ -42,14 +45,28 @@ class FolderCollection(EntityCollection[Folder]):
42
45
  folder = folder.add(name)
43
46
  return folder
44
47
 
45
- def add(self, name):
48
+ def add(self, name, color_hex=None):
46
49
  """Adds the folder that is located at the specified URL to the collection.
47
- :param str name: Specifies the Name of the folder.
50
+ :param str name: Specifies the Name or Path of the folder.
51
+ :param str color_hex: Specifies the color of the folder.
48
52
  """
49
53
  return_type = Folder(self.context, EntityPath(name, self.resource_path))
50
- self.add_child(return_type)
51
- qry = ServiceOperationQuery(self, "Add", [name], None, None, return_type)
52
- self.context.add_query(qry)
54
+ if color_hex:
55
+
56
+ def _add_coloring():
57
+ path = os.path.join(
58
+ self.parent.properties.get("ServerRelativeUrl"), name
59
+ )
60
+ coloring_info = FolderColoringInformation(color_hex=color_hex)
61
+ self.context.folder_coloring.create_folder(
62
+ path, coloring_info, return_type=return_type
63
+ )
64
+
65
+ self.parent.ensure_property("ServerRelativeUrl", _add_coloring)
66
+ else:
67
+ self.add_child(return_type)
68
+ qry = ServiceOperationQuery(self, "Add", [name], None, None, return_type)
69
+ self.context.add_query(qry)
53
70
  return return_type
54
71
 
55
72
  def get_by_url(self, url):
@@ -1,6 +1,10 @@
1
+ from typing_extensions import Self
2
+
1
3
  from office365.runtime.queries.service_operation import ServiceOperationQuery
2
4
  from office365.sharepoint.entity import Entity
5
+ from office365.sharepoint.folders.coloring_information import FolderColoringInformation
3
6
  from office365.sharepoint.folders.folder import Folder
7
+ from office365.sharepoint.types.resource_path import ResourcePath as SPResPath
4
8
 
5
9
 
6
10
  class FolderColoring(Entity):
@@ -9,22 +13,19 @@ class FolderColoring(Entity):
9
13
  def create_folder(
10
14
  self,
11
15
  decoded_url,
12
- ensure_unique_file_name=True,
13
- overwrite=True,
14
- coloring_information=None,
16
+ coloring_information=FolderColoringInformation(color_hex="1"),
17
+ return_type=None,
15
18
  ):
16
19
  """
17
20
  :param str decoded_url:
18
- :param bool ensure_unique_file_name:
19
- :param bool overwrite:
20
21
  :param FolderColoringInformation coloring_information:
22
+ :param Folder return_type: Return type
21
23
  """
22
- return_type = Folder(self.context)
24
+ if return_type is None:
25
+ return_type = Folder(self.context)
23
26
 
24
27
  payload = {
25
- "DecodedUrl": decoded_url,
26
- "EnsureUniqueFileName": ensure_unique_file_name,
27
- "Overwrite": overwrite,
28
+ "path": SPResPath(decoded_url),
28
29
  "coloringInformation": coloring_information,
29
30
  }
30
31
  qry = ServiceOperationQuery(
@@ -34,6 +35,7 @@ class FolderColoring(Entity):
34
35
  return return_type
35
36
 
36
37
  def stamp_color(self, decoded_url, coloring_information):
38
+ # type: (str, FolderColoringInformation) -> Self
37
39
  """
38
40
  :param str decoded_url:
39
41
  :param FolderColoringInformation coloring_information:
@@ -1,6 +1,40 @@
1
1
  from office365.runtime.client_value import ClientValue
2
2
 
3
3
 
4
+ class FolderColors(object):
5
+ Yellow = "#FFCE3C"
6
+
7
+ Grey = "#B0B7BA"
8
+
9
+ DarkRed = "#E73E29"
10
+
11
+ LightRed = "#FFBCB2"
12
+
13
+ DarkOrange = "#EE7110"
14
+
15
+ LightOrange = "#FFBF84"
16
+
17
+ DarkGreen = "#3F9F4A"
18
+
19
+ LightGreen = "#8ED290"
20
+
21
+ DarkTeal = "#27938E"
22
+
23
+ LightTeal = "#7AD1CD"
24
+
25
+ DarkBlue = "#1E84D0"
26
+
27
+ LightBlue = "#86C8F7"
28
+
29
+ DarkPurple = "#9A61C7"
30
+
31
+ LightPurple = "#D4AFF6"
32
+
33
+ DarkPink = "#CC53B4"
34
+
35
+ LightPink = "#F7AAE7"
36
+
37
+
4
38
  class FolderColoringInformation(ClientValue):
5
39
  """"""
6
40
 
@@ -13,3 +47,7 @@ class FolderColoringInformation(ClientValue):
13
47
  self.ColorHex = color_hex
14
48
  self.ColorTag = color_tag
15
49
  self.Emoji = emoji
50
+
51
+ @property
52
+ def entity_type_name(self):
53
+ return "SP.FolderColoringInformation"
@@ -30,7 +30,7 @@ class Folder(Entity):
30
30
  """Represents a folder in a SharePoint Web site."""
31
31
 
32
32
  def __str__(self):
33
- return self.name
33
+ return self.name or self.entity_type_name
34
34
 
35
35
  def __repr__(self):
36
36
  return self.serverRelativeUrl or self.unique_id or self.entity_type_name
@@ -69,14 +69,14 @@ class Folder(Entity):
69
69
 
70
70
  return_type = FolderCollection(self.context, self.folders.resource_path, self)
71
71
 
72
- def _loaded(parent):
72
+ def _get_folders(parent):
73
73
  # type: ("Folder") -> None
74
74
  [return_type.add_child(f) for f in parent.folders]
75
75
  if recursive:
76
76
  for folder in parent.folders:
77
- folder.ensure_properties(["Folders"], _loaded, parent=folder)
77
+ folder.ensure_properties(["Folders"], _get_folders, parent=folder)
78
78
 
79
- self.ensure_properties(["Folders"], _loaded, parent=self)
79
+ self.ensure_properties(["Folders"], _get_folders, parent=self)
80
80
  return return_type
81
81
 
82
82
  def get_files(self, recursive=False):
@@ -88,16 +88,16 @@ class Folder(Entity):
88
88
 
89
89
  return_type = FileCollection(self.context, self.files.resource_path, self)
90
90
 
91
- def _loaded(parent):
91
+ def _get_files(parent):
92
92
  # type: ("Folder") -> None
93
93
  [return_type.add_child(f) for f in parent.files]
94
94
  if recursive:
95
95
  for folder in parent.folders:
96
96
  folder.ensure_properties(
97
- ["Files", "Folders"], _loaded, parent=folder
97
+ ["Files", "Folders"], _get_files, parent=folder
98
98
  )
99
99
 
100
- self.ensure_properties(["Files", "Folders"], _loaded, parent=self)
100
+ self.ensure_properties(["Files", "Folders"], _get_files, parent=self)
101
101
  return return_type
102
102
 
103
103
  def get_sharing_information(self):
@@ -115,18 +115,17 @@ class Folder(Entity):
115
115
  where to move a folder.
116
116
  """
117
117
 
118
- def _update_folder(url):
119
- self.set_property("ServerRelativeUrl", url)
120
-
121
118
  def _move_to(destination_folder):
122
119
  # type: ("Folder") -> None
123
120
  destination_url = "/".join(
124
121
  [destination_folder.serverRelativeUrl, self.name]
125
122
  )
126
123
  qry = ServiceOperationQuery(self, "MoveTo", {"newUrl": destination_url})
127
- self.context.add_query(qry).after_query_execute(
128
- _update_folder, destination_url
129
- )
124
+
125
+ def _update_folder(return_type):
126
+ self.set_property("ServerRelativeUrl", destination_url)
127
+
128
+ self.context.add_query(qry).after_query_execute(_update_folder)
130
129
 
131
130
  def _source_folder_resolved():
132
131
  if isinstance(destination, Folder):
@@ -146,21 +145,20 @@ class Folder(Entity):
146
145
  where to move a folder.
147
146
  """
148
147
 
149
- def _update_folder(url):
150
- self.set_property("ServerRelativePath", url)
151
-
152
148
  def _move_to_using_path(destination_folder):
153
149
  # type: ("Folder") -> None
154
- destination_url = "/".join(
150
+ destination_path = "/".join(
155
151
  [str(destination_folder.server_relative_path), self.name]
156
152
  )
157
153
  qry = ServiceOperationQuery(
158
- self, "MoveToUsingPath", {"DecodedUrl": destination_url}
159
- )
160
- self.context.add_query(qry).after_query_execute(
161
- _update_folder, destination_url
154
+ self, "MoveToUsingPath", {"DecodedUrl": destination_path}
162
155
  )
163
156
 
157
+ def _update_folder(url):
158
+ self.set_property("ServerRelativePath", destination_path)
159
+
160
+ self.context.add_query(qry).after_query_execute(_update_folder)
161
+
164
162
  def _source_folder_resolved():
165
163
  if isinstance(destination, Folder):
166
164
  destination.ensure_property(
@@ -487,7 +485,9 @@ class Folder(Entity):
487
485
 
488
486
  return self.properties.get(
489
487
  "Folders",
490
- FolderCollection(self.context, ResourcePath("Folders", self.resource_path)),
488
+ FolderCollection(
489
+ self.context, ResourcePath("Folders", self.resource_path), self
490
+ ),
491
491
  )
492
492
 
493
493
  @property
@@ -554,9 +554,7 @@ class Folder(Entity):
554
554
  @property
555
555
  def time_created(self):
556
556
  # type: () -> Optional[datetime]
557
- """
558
- Gets when the folder was created in UTC.
559
- """
557
+ """Gets when the folder was created in UTC."""
560
558
  return self.properties.get("TimeCreated", datetime.min)
561
559
 
562
560
  @property