Office365-REST-Python-Client 2.5.14__py3-none-any.whl → 2.6.0__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 (214) hide show
  1. {Office365_REST_Python_Client-2.5.14.dist-info → Office365_REST_Python_Client-2.6.0.dist-info}/METADATA +2 -2
  2. {Office365_REST_Python_Client-2.5.14.dist-info → Office365_REST_Python_Client-2.6.0.dist-info}/RECORD +210 -112
  3. office365/admin/__init__.py +0 -0
  4. office365/admin/admin.py +69 -0
  5. office365/admin/microsoft365_apps.py +5 -0
  6. office365/admin/people_settings.py +5 -0
  7. office365/admin/report_settings.py +5 -0
  8. office365/{onedrive → admin}/sharepoint.py +1 -1
  9. office365/azure_env.py +60 -0
  10. office365/directory/applications/app_ids.py +6 -0
  11. office365/directory/authentication/authentication.py +16 -0
  12. office365/directory/authentication/method_target.py +2 -1
  13. office365/directory/authentication/methods/microsoft_authenticator.py +6 -0
  14. office365/directory/authentication/methods/root.py +11 -0
  15. office365/directory/authentication/methods/sms.py +9 -0
  16. office365/directory/certificates/self_signed.py +31 -2
  17. office365/directory/identities/conditional_access_root.py +14 -0
  18. office365/directory/identitygovernance/privilegedaccess/approval.py +8 -0
  19. office365/directory/identitygovernance/privilegedaccess/group.py +30 -0
  20. office365/directory/identitygovernance/privilegedaccess/group_assignment_schedule_instance.py +7 -0
  21. office365/directory/identitygovernance/privilegedaccess/unified_role_assignment_schedule_request.py +7 -0
  22. office365/directory/identitygovernance/userconsent/request_collection.py +10 -0
  23. office365/directory/identitygovernance/workflow/__init__.py +0 -0
  24. office365/directory/identitygovernance/workflow/base.py +5 -0
  25. office365/directory/policies/cross_tenant_access.py +13 -0
  26. office365/directory/policies/feature_rollout.py +16 -0
  27. office365/directory/policies/root.py +39 -23
  28. office365/directory/policies/template.py +5 -0
  29. office365/directory/protection/threatassessment/email_file_request.py +20 -0
  30. office365/directory/protection/threatassessment/request.py +25 -0
  31. office365/directory/rolemanagement/application.py +15 -0
  32. office365/directory/rolemanagement/resource_action.py +8 -4
  33. office365/directory/rolemanagement/role_permission.py +3 -3
  34. office365/directory/security/alerts/collection.py +49 -0
  35. office365/directory/security/scorecontrol/__init__.py +0 -0
  36. office365/directory/security/scorecontrol/profile.py +6 -0
  37. office365/directory/security/security.py +17 -4
  38. office365/directory/serviceprincipals/service_principal.py +36 -28
  39. office365/directory/tenantinformation/__init__.py +0 -0
  40. office365/directory/tenantinformation/multi_organization.py +11 -0
  41. office365/directory/tenantinformation/relationship.py +61 -0
  42. office365/directory/users/insights_settings.py +5 -0
  43. office365/graph_client.py +52 -132
  44. office365/graph_request.py +78 -19
  45. office365/intune/servicecommunications/health/health.py +1 -1
  46. office365/intune/servicecommunications/issues/issue.py +2 -2
  47. office365/onedrive/columns/definition.py +1 -1
  48. office365/onedrive/contenttypes/content_type.py +1 -1
  49. office365/onedrive/driveitems/driveItem.py +13 -1
  50. office365/onedrive/drives/drive.py +1 -1
  51. office365/onedrive/filestorage/__init__.py +0 -0
  52. office365/onedrive/filestorage/container.py +7 -0
  53. office365/onedrive/filestorage/file_storage.py +20 -0
  54. office365/onedrive/listitems/field_value_set.py +1 -1
  55. office365/onedrive/listitems/list_item.py +1 -1
  56. office365/onedrive/lists/list.py +1 -1
  57. office365/onedrive/recyclebin/__init__.py +0 -0
  58. office365/onedrive/recyclebin/item.py +6 -0
  59. office365/onedrive/recyclebin/recyclebin.py +29 -0
  60. office365/onedrive/recyclebin/settings.py +13 -0
  61. office365/onedrive/shares/drive_item.py +1 -1
  62. office365/onedrive/sitepages/base.py +1 -1
  63. office365/onedrive/sitepages/canvas_layout.py +2 -2
  64. office365/onedrive/sitepages/sections/__init__.py +0 -0
  65. office365/onedrive/sitepages/{horizontal_section.py → sections/horizontal.py} +1 -1
  66. office365/onedrive/sitepages/webparts/data.py +5 -0
  67. office365/onedrive/sitepages/webparts/position.py +5 -0
  68. office365/onedrive/sitepages/webparts/standard.py +9 -0
  69. office365/onedrive/sitepages/webparts/web_part.py +12 -0
  70. office365/onedrive/sites/site.py +1 -1
  71. office365/onedrive/storage/storage.py +10 -0
  72. office365/onedrive/workbooks/charts/axes.py +41 -1
  73. office365/onedrive/workbooks/charts/axis.py +5 -0
  74. office365/onedrive/workbooks/charts/chart.py +64 -5
  75. office365/onedrive/workbooks/charts/fill.py +5 -0
  76. office365/onedrive/workbooks/charts/font.py +5 -0
  77. office365/onedrive/workbooks/charts/legend/__init__.py +0 -0
  78. office365/onedrive/workbooks/charts/legend/format.py +5 -0
  79. office365/onedrive/workbooks/charts/legend/legend.py +26 -0
  80. office365/onedrive/workbooks/charts/point.py +5 -0
  81. office365/onedrive/workbooks/charts/series/__init__.py +0 -0
  82. office365/onedrive/workbooks/charts/series/format.py +5 -0
  83. office365/onedrive/workbooks/charts/series/series.py +31 -0
  84. office365/onedrive/workbooks/charts/title.py +5 -0
  85. office365/onedrive/workbooks/filter.py +10 -0
  86. office365/onedrive/workbooks/filter_criteria.py +3 -3
  87. office365/onedrive/workbooks/ranges/fill.py +11 -1
  88. office365/onedrive/workbooks/ranges/range.py +26 -0
  89. office365/onedrive/workbooks/ranges/view.py +14 -0
  90. office365/onedrive/workbooks/sort_field.py +8 -3
  91. office365/onedrive/workbooks/tables/sort.py +20 -0
  92. office365/onedrive/workbooks/worksheets/worksheet.py +11 -0
  93. office365/partners/billing/azure_usage.py +17 -0
  94. office365/partners/billing/billed_usage.py +21 -0
  95. office365/partners/billing/billing.py +17 -0
  96. office365/partners/billing/operation.py +5 -0
  97. office365/partners/partners.py +17 -0
  98. office365/reports/root.py +9 -0
  99. office365/reports/userregistration/feature_summary.py +5 -0
  100. office365/runtime/auth/auth_cookies.py +48 -0
  101. office365/runtime/auth/authentication_context.py +36 -19
  102. office365/runtime/auth/entra/__init__.py +0 -0
  103. office365/runtime/auth/entra/authentication_context.py +165 -0
  104. office365/runtime/auth/providers/acs_token_provider.py +12 -27
  105. office365/runtime/auth/providers/saml_token_provider.py +41 -54
  106. office365/runtime/auth/sts_profile.py +8 -8
  107. office365/runtime/auth/token_response.py +4 -0
  108. office365/sharepoint/administration/custom_fonts_resource.py +5 -0
  109. office365/sharepoint/administration/sitemove/__init__.py +0 -0
  110. office365/sharepoint/administration/sitemove/service.py +68 -0
  111. office365/sharepoint/administration/sitemove/service_info.py +11 -0
  112. office365/sharepoint/changes/item.py +15 -0
  113. office365/sharepoint/client_context.py +61 -37
  114. office365/sharepoint/directory/group.py +2 -0
  115. office365/sharepoint/directory/helper.py +2 -0
  116. office365/sharepoint/directory/provider/provider.py +6 -0
  117. office365/sharepoint/directory/user.py +20 -0
  118. office365/sharepoint/files/publish/__init__.py +0 -0
  119. office365/sharepoint/files/publish/status.py +9 -0
  120. office365/sharepoint/flows/connector_result.py +17 -0
  121. office365/sharepoint/flows/permissions.py +11 -7
  122. office365/sharepoint/fontpackages/__init__.py +0 -0
  123. office365/sharepoint/fontpackages/collection.py +26 -0
  124. office365/sharepoint/fontpackages/creation_parameters.py +5 -0
  125. office365/sharepoint/fontpackages/font_package.py +5 -0
  126. office365/sharepoint/fontpackages/oob_settings.py +5 -0
  127. office365/sharepoint/forms/customization.py +26 -0
  128. office365/sharepoint/ir/__init__.py +0 -0
  129. office365/sharepoint/ir/migration.py +5 -0
  130. office365/sharepoint/lists/list.py +30 -0
  131. office365/sharepoint/marketplace/app_metadata.py +12 -1
  132. office365/sharepoint/marketplace/app_metadata_collection.py +8 -0
  133. office365/sharepoint/marketplace/corporatecuratedgallery/addins/instance_info.py +22 -0
  134. office365/sharepoint/marketplace/corporatecuratedgallery/addins/permission_failed_info.py +5 -0
  135. office365/sharepoint/marketplace/corporatecuratedgallery/addins/permission_info.py +12 -0
  136. office365/sharepoint/marketplace/corporatecuratedgallery/addins/permission_response.py +15 -0
  137. office365/sharepoint/marketplace/corporatecuratedgallery/addins/principals_response.py +5 -0
  138. office365/sharepoint/marketplace/corporatecuratedgallery/app_request_information.py +9 -0
  139. office365/sharepoint/marketplace/corporatecuratedgallery/app_response_information.py +9 -0
  140. office365/sharepoint/marketplace/corporatecuratedgallery/available_addins_response.py +4 -0
  141. office365/sharepoint/marketplace/corporatecuratedgallery/card_design.py +9 -0
  142. office365/sharepoint/marketplace/corporatecuratedgallery/card_designs.py +9 -0
  143. office365/sharepoint/marketplace/corporatecuratedgallery/teams_package_download.py +14 -0
  144. office365/sharepoint/marketplace/tenant/appcatalog/accessor.py +62 -3
  145. office365/sharepoint/multigeo/services.py +14 -0
  146. office365/sharepoint/multigeo/storage_quota.py +9 -0
  147. office365/sharepoint/policy/license_utilities.py +27 -0
  148. office365/sharepoint/principal/principal.py +6 -0
  149. office365/sharepoint/request.py +95 -10
  150. office365/sharepoint/search/administration/document_crawl_log.py +16 -2
  151. office365/sharepoint/search/administration/tenant_crawl_versions_info_provider.py +1 -1
  152. office365/sharepoint/search/reports/abandoned_queries.py +11 -1
  153. office365/sharepoint/search/reports/abandonedqueries/item.py +7 -1
  154. office365/sharepoint/sharing/domain_restriction_settings.py +5 -0
  155. office365/sharepoint/sharing/information.py +12 -0
  156. office365/sharepoint/sitehealth/result.py +4 -4
  157. office365/sharepoint/sitehealth/summary.py +5 -5
  158. office365/sharepoint/sites/copy_job_progress.py +5 -0
  159. office365/sharepoint/sites/copy_migration_iInfo.py +5 -0
  160. office365/sharepoint/sites/home/__init__.py +0 -0
  161. office365/sharepoint/sites/{sph_site.py → home/site.py} +1 -1
  162. office365/sharepoint/sites/site.py +26 -1
  163. office365/sharepoint/tenant/administration/app_service_principal_public.py +17 -0
  164. office365/sharepoint/tenant/administration/audit/data.py +12 -0
  165. office365/sharepoint/tenant/administration/audit/unified_record.py +18 -0
  166. office365/sharepoint/tenant/administration/coms/__init__.py +0 -0
  167. office365/sharepoint/tenant/administration/coms/messages_fields_data.py +5 -0
  168. office365/sharepoint/tenant/administration/coms/messages_service_proxy.py +16 -0
  169. office365/sharepoint/tenant/administration/copilot/__init__.py +0 -0
  170. office365/sharepoint/tenant/administration/copilot/adaptive_card_config.py +11 -0
  171. office365/sharepoint/tenant/administration/datagovernance/__init__.py +0 -0
  172. office365/sharepoint/tenant/administration/datagovernance/client_base.py +9 -0
  173. office365/sharepoint/tenant/administration/datagovernance/insight_client.py +82 -0
  174. office365/sharepoint/tenant/administration/datagovernance/insight_metadata.py +5 -0
  175. office365/sharepoint/tenant/administration/default_time_zone_id.py +11 -0
  176. office365/sharepoint/tenant/administration/endpoints.py +53 -2
  177. office365/sharepoint/tenant/administration/insights/onedrive_site_sharing.py +4 -0
  178. office365/sharepoint/tenant/administration/internal/appservice/permission_request.py +4 -0
  179. office365/sharepoint/tenant/administration/malware/__init__.py +0 -0
  180. office365/sharepoint/tenant/administration/malware/file.py +18 -0
  181. office365/sharepoint/tenant/administration/modified_property.py +5 -0
  182. office365/sharepoint/tenant/administration/policies/content_security_configuration.py +9 -0
  183. office365/sharepoint/tenant/administration/recent_action.py +9 -0
  184. office365/sharepoint/tenant/administration/reports/__init__.py +0 -0
  185. office365/sharepoint/tenant/administration/settings_service.py +38 -5
  186. office365/sharepoint/tenant/administration/sites/properties.py +78 -0
  187. office365/sharepoint/tenant/administration/sites/properties_collection.py +19 -0
  188. office365/sharepoint/tenant/administration/tenant.py +134 -7
  189. office365/sharepoint/tenant/administration/types.py +76 -1
  190. office365/sharepoint/tenant/insights/report_manager.py +29 -0
  191. office365/sharepoint/tenant/management/office365_tenant.py +7 -4
  192. office365/sharepoint/translation/job_status.py +22 -0
  193. office365/sharepoint/userprofiles/user_profile.py +6 -0
  194. office365/sharepoint/webparts/tile_data.py +21 -0
  195. office365/sharepoint/webs/dataleakage_prevention_status_info.py +5 -0
  196. office365/sharepoint/webs/web.py +80 -1
  197. office365/teams/chats/event_message_detail.py +8 -0
  198. office365/teams/deleted.py +24 -0
  199. office365/teams/work.py +35 -0
  200. office365/directory/tenant_relationship.py +0 -23
  201. office365/onedrive/admin.py +0 -32
  202. office365/onedrive/workbooks/charts/legend.py +0 -7
  203. office365/onedrive/workbooks/charts/series.py +0 -5
  204. {Office365_REST_Python_Client-2.5.14.dist-info → Office365_REST_Python_Client-2.6.0.dist-info}/LICENSE +0 -0
  205. {Office365_REST_Python_Client-2.5.14.dist-info → Office365_REST_Python_Client-2.6.0.dist-info}/WHEEL +0 -0
  206. {Office365_REST_Python_Client-2.5.14.dist-info → Office365_REST_Python_Client-2.6.0.dist-info}/top_level.txt +0 -0
  207. /office365/{onedrive → admin}/sharepoint_settings.py +0 -0
  208. /office365/directory/{tenant_information.py → tenantinformation/information.py} +0 -0
  209. /office365/{base_item.py → onedrive/base_item.py} +0 -0
  210. /office365/onedrive/sitepages/{horizontal_section_column.py → sections/horizontal_column.py} +0 -0
  211. /office365/onedrive/sitepages/{vertical_section.py → sections/vertical.py} +0 -0
  212. /office365/sharepoint/sites/{home_sites_details.py → home/details.py} +0 -0
  213. /office365/sharepoint/sites/{home_site_reference.py → home/reference.py} +0 -0
  214. /office365/sharepoint/tenant/administration/{app_billing_properties.py → policies/app_billing_properties.py} +0 -0
@@ -0,0 +1,5 @@
1
+ from office365.entity import Entity
2
+
3
+
4
+ class WorkbookChartSeriesFormat(Entity):
5
+ """Encapsulates the format properties for the chart series"""
@@ -0,0 +1,31 @@
1
+ from office365.entity import Entity
2
+ from office365.entity_collection import EntityCollection
3
+ from office365.onedrive.workbooks.charts.point import WorkbookChartPoint
4
+ from office365.onedrive.workbooks.charts.series.format import WorkbookChartSeriesFormat
5
+ from office365.runtime.paths.resource_path import ResourcePath
6
+
7
+
8
+ class WorkbookChartSeries(Entity):
9
+ """Represents a series in a chart."""
10
+
11
+ @property
12
+ def format(self):
13
+ """The formatting of a chart series, which includes fill and line formatting."""
14
+ return self.properties.get(
15
+ "format",
16
+ WorkbookChartSeriesFormat(
17
+ self.context, ResourcePath("format", self.resource_path)
18
+ ),
19
+ )
20
+
21
+ @property
22
+ def points(self):
23
+ """A collection of all points in the series."""
24
+ return self.properties.get(
25
+ "points",
26
+ EntityCollection(
27
+ self.context,
28
+ WorkbookChartPoint,
29
+ ResourcePath("points", self.resource_path),
30
+ ),
31
+ )
@@ -0,0 +1,5 @@
1
+ from office365.entity import Entity
2
+
3
+
4
+ class WorkbookChartTitle(Entity):
5
+ """Represents a chart title object of a chart."""
@@ -8,6 +8,16 @@ from office365.runtime.queries.service_operation import ServiceOperationQuery
8
8
  class WorkbookFilter(Entity):
9
9
  """Manages the filtering of a table's column."""
10
10
 
11
+ def apply_bottom_items_filter(self, count=None):
12
+ """Perform a sort operation.
13
+
14
+ :param str count: The number of items to apply the filter to.
15
+ """
16
+ payload = {"count": count}
17
+ qry = ServiceOperationQuery(self, "applyBottomItemsFilter", None, payload)
18
+ self.context.add_query(qry)
19
+ return self
20
+
11
21
  def clear(self):
12
22
  """Clear the filter on the given column."""
13
23
  qry = ServiceOperationQuery(self, "clear")
@@ -4,14 +4,14 @@ from office365.runtime.client_value import ClientValue
4
4
  class WorkbookFilterCriteria(ClientValue):
5
5
  """Represents the filtering criteria applied to a column."""
6
6
 
7
- def __init__(self, color=None, dynamicCriteria=None, operator=None, values=None):
7
+ def __init__(self, color=None, dynamic_criteria=None, operator=None, values=None):
8
8
  """
9
9
  :param str color: The color applied to the cell.
10
- :param str dynamicCriteria: A dynamic formula specified in a custom filter.
10
+ :param str dynamic_criteria: A dynamic formula specified in a custom filter.
11
11
  :param str operator: An operator in a cell; for example, =, >, <, <=, or <>.
12
12
  :param list values: The values that appear in the cell.
13
13
  """
14
14
  self.color = color
15
- self.dynamicCriteria = dynamicCriteria
15
+ self.dynamicCriteria = dynamic_criteria
16
16
  self.operator = operator
17
17
  self.values = values
@@ -1,5 +1,15 @@
1
+ from typing import Optional
2
+
1
3
  from office365.entity import Entity
2
4
 
3
5
 
4
6
  class WorkbookRangeFill(Entity):
5
- """Represents the background of a range object."""
7
+ """HTML color code representing the color of the border line. Can either be of the form #RRGGBB,
8
+ for example "FFA500", or be a named HTML color, for example "orange"."""
9
+
10
+ @property
11
+ def color(self):
12
+ # type: () -> Optional[str]
13
+ """Gets or sets the width of all columns within the range. If the column widths aren't uniform,
14
+ null will be returned."""
15
+ return self.properties.get("color", None)
@@ -12,6 +12,12 @@ from office365.runtime.queries.service_operation import ServiceOperationQuery
12
12
  class WorkbookRange(Entity):
13
13
  """Range represents a set of one or more contiguous cells such as a cell, a row, a column, block of cells, etc."""
14
14
 
15
+ def __repr__(self):
16
+ return self.address or self.entity_type_name
17
+
18
+ def __str__(self):
19
+ return self.address or self.entity_type_name
20
+
15
21
  def cell(self, row, column):
16
22
  """
17
23
  Gets the range object containing the single cell based on row and column numbers. The cell can be outside
@@ -48,6 +54,15 @@ class WorkbookRange(Entity):
48
54
  self.context.add_query(qry)
49
55
  return return_type
50
56
 
57
+ def last_row(self):
58
+ """
59
+ Get the last row within the range. For example, the last row of B2:D5 is B5:D5.
60
+ """
61
+ return_type = WorkbookRange(self.context)
62
+ qry = FunctionQuery(self, "lastRow", return_type=return_type)
63
+ self.context.add_query(qry)
64
+ return return_type
65
+
51
66
  def visible_view(self):
52
67
  """Get the range visible from a filtered range."""
53
68
  return_type = WorkbookRangeView(self.context)
@@ -55,6 +70,17 @@ class WorkbookRange(Entity):
55
70
  self.context.add_query(qry)
56
71
  return return_type
57
72
 
73
+ def used_range(self, values_only=False):
74
+ """Return the used range of the given range object.
75
+
76
+ :param bool values_only: Optional. Considers only cells with values as used cells.
77
+ """
78
+ return_type = WorkbookRange(self.context)
79
+ params = {"valuesOnly": values_only}
80
+ qry = FunctionQuery(self, "usedRange", params, return_type)
81
+ self.context.add_query(qry)
82
+ return return_type
83
+
58
84
  @property
59
85
  def address(self):
60
86
  # type: () -> Optional[str]
@@ -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
@@ -6,6 +8,18 @@ from office365.runtime.paths.resource_path import ResourcePath
6
8
  class WorkbookRangeView(Entity):
7
9
  """Represents a set of visible cells of the parent range."""
8
10
 
11
+ @property
12
+ def cell_addresses(self):
13
+ # type: () -> Optional[dict]
14
+ """The cell addresses."""
15
+ return self.properties.get("cellAddresses", None)
16
+
17
+ @property
18
+ def column_count(self):
19
+ # type: () -> Optional[int]
20
+ """The number of visible columns."""
21
+ return self.properties.get("columnCount", None)
22
+
9
23
  @property
10
24
  def rows(self):
11
25
  # type: () -> EntityCollection[WorkbookRangeView]
@@ -6,13 +6,18 @@ class WorkbookSortField(ClientValue):
6
6
  """Represents a condition in a sorting operation."""
7
7
 
8
8
  def __init__(
9
- self, ascending=None, color=None, dataOption=None, icon=WorkbookIcon(), key=None
9
+ self,
10
+ ascending=None,
11
+ color=None,
12
+ data_option=None,
13
+ icon=WorkbookIcon(),
14
+ key=None,
10
15
  ):
11
16
  """
12
17
  :param bool ascending: Represents whether the sorting is done in an ascending fashion.
13
18
  :param str color: Represents the color that is the target of the condition if the sorting is on font
14
19
  or cell color.
15
- :param str dataOption: Represents additional sorting options for this field.
20
+ :param str data_option: Represents additional sorting options for this field.
16
21
  Possible values are: Normal, TextAsNumber.
17
22
  :param WorkbookIcon icon: Represents the icon that is the target of the condition if the sorting
18
23
  is on the cell's icon.
@@ -21,6 +26,6 @@ class WorkbookSortField(ClientValue):
21
26
  """
22
27
  self.ascending = ascending
23
28
  self.color = color
24
- self.dataOption = dataOption
29
+ self.dataOption = data_option
25
30
  self.icon = icon
26
31
  self.key = key
@@ -1,5 +1,25 @@
1
1
  from office365.entity import Entity
2
+ from office365.onedrive.workbooks.sort_field import WorkbookSortField
3
+ from office365.runtime.client_value_collection import ClientValueCollection
4
+ from office365.runtime.queries.service_operation import ServiceOperationQuery
2
5
 
3
6
 
4
7
  class WorkbookTableSort(Entity):
5
8
  """Manages sorting operations on Table objects."""
9
+
10
+ def apply(self, fields, match_case=None, method=None):
11
+ """Perform a sort operation.
12
+
13
+ :param list[WorkbookSortField] fields: The list of conditions to sort on.
14
+ :param bool match_case: Indicates whether to match the case of the items being sorted.
15
+ :param str method: The ordering method used for Chinese characters.
16
+ The possible values are: PinYin, StrokeCount.
17
+ """
18
+ payload = {
19
+ "fields": ClientValueCollection(WorkbookSortField, fields),
20
+ "matchCase": match_case,
21
+ "method": method,
22
+ }
23
+ qry = ServiceOperationQuery(self, "apply", None, payload)
24
+ self.context.add_query(qry)
25
+ return self
@@ -53,6 +53,17 @@ class WorkbookWorksheet(Entity):
53
53
  self.context.add_query(qry)
54
54
  return return_type
55
55
 
56
+ def used_range(self, values_only=False):
57
+ """Return the used range of the given range object.
58
+
59
+ :param bool values_only: Optional. Considers only cells with values as used cells.
60
+ """
61
+ return_type = WorkbookRange(self.context)
62
+ params = {"valuesOnly": values_only}
63
+ qry = FunctionQuery(self, "usedRange", params, return_type)
64
+ self.context.add_query(qry)
65
+ return return_type
66
+
56
67
  @property
57
68
  def charts(self):
58
69
  # type: () -> EntityCollection[WorkbookChart]
@@ -0,0 +1,17 @@
1
+ from office365.entity import Entity
2
+ from office365.partners.billing.billed_usage import BilledUsage
3
+ from office365.runtime.paths.resource_path import ResourcePath
4
+
5
+
6
+ class AzureUsage(Entity):
7
+ """Represents details for billed and unbilled Azure usage data."""
8
+
9
+ @property
10
+ def billed(self):
11
+ """
12
+ Represents details for billed Azure usage data.
13
+ """
14
+ return self.properties.get(
15
+ "billed",
16
+ BilledUsage(self.context, ResourcePath("billed", self.resource_path)),
17
+ )
@@ -0,0 +1,21 @@
1
+ from office365.entity import Entity
2
+ from office365.partners.billing.operation import Operation
3
+ from office365.runtime.queries.service_operation import ServiceOperationQuery
4
+
5
+
6
+ class BilledUsage(Entity):
7
+ """Represents details for billed Azure usage data."""
8
+
9
+ def export(self, invoice_id, attribute_set=None):
10
+ # type: (str, str) -> Operation
11
+ """Export the billed Azure usage data.
12
+
13
+ :param invoice_id: The invoice ID for which the partner requested to export data. Required.
14
+ :param attribute_set: Attributes that should be exported. Possible values are: full, basic, unknownFutureValue.
15
+ The default value is full. Choose full for a complete response or basic for a subset of attributes.
16
+ """
17
+ payload = {"invoiceId": invoice_id, "attributeSet": attribute_set}
18
+ return_type = Operation(self.context)
19
+ qry = ServiceOperationQuery(self, "export", None, payload, None, return_type)
20
+ self.context.add_query(qry)
21
+ return return_type
@@ -0,0 +1,17 @@
1
+ from office365.entity import Entity
2
+ from office365.partners.billing.azure_usage import AzureUsage
3
+ from office365.runtime.paths.resource_path import ResourcePath
4
+
5
+
6
+ class Billing(Entity):
7
+ """Represents billing details for billed and unbilled data."""
8
+
9
+ @property
10
+ def usage(self):
11
+ """
12
+ Represents details for billed and unbilled Azure usage data.
13
+ """
14
+ return self.properties.get(
15
+ "usage",
16
+ AzureUsage(self.context, ResourcePath("usage", self.resource_path)),
17
+ )
@@ -0,0 +1,5 @@
1
+ from office365.entity import Entity
2
+
3
+
4
+ class Operation(Entity):
5
+ """"""
@@ -0,0 +1,17 @@
1
+ from office365.entity import Entity
2
+ from office365.partners.billing.billing import Billing
3
+ from office365.runtime.paths.resource_path import ResourcePath
4
+
5
+
6
+ class Partners(Entity):
7
+ """Represents billing details for a Microsoft direct partner."""
8
+
9
+ @property
10
+ def billing(self):
11
+ """
12
+ Represents billing details for billed and unbilled data.
13
+ """
14
+ return self.properties.get(
15
+ "billing",
16
+ Billing(self.context, ResourcePath("billing", self.resource_path)),
17
+ )
office365/reports/root.py CHANGED
@@ -1,5 +1,6 @@
1
1
  from office365.directory.authentication.methods.root import AuthenticationMethodsRoot
2
2
  from office365.entity import Entity
3
+ from office365.partners.partners import Partners
3
4
  from office365.reports.internal.queries.create_report_query import create_report_query
4
5
  from office365.reports.report import Report
5
6
  from office365.reports.security.root import SecurityReportsRoot
@@ -292,6 +293,14 @@ class ReportRoot(Entity):
292
293
  ),
293
294
  )
294
295
 
296
+ @property
297
+ def partners(self):
298
+ """Represents billing details for a Microsoft direct partner."""
299
+ return self.properties.get(
300
+ "partners",
301
+ Partners(self.context, ResourcePath("partners", self.resource_path)),
302
+ )
303
+
295
304
  @property
296
305
  def security(self):
297
306
  """Container for navigation properties for Azure AD authentication methods resources."""
@@ -0,0 +1,5 @@
1
+ from office365.runtime.client_value import ClientValue
2
+
3
+
4
+ class UserRegistrationFeatureSummary(ClientValue):
5
+ """"""
@@ -0,0 +1,48 @@
1
+ import json
2
+ from typing import Dict, Optional
3
+
4
+
5
+ class AuthCookies:
6
+ def __init__(self, cookies):
7
+ # type: (Dict) -> None
8
+ self._cookies = cookies
9
+
10
+ @property
11
+ def is_valid(self) -> bool:
12
+ """Validates authorization cookies."""
13
+ return bool(self._cookies) and (
14
+ self.fed_auth is not None or self.spo_idcrl is not None
15
+ )
16
+
17
+ @property
18
+ def cookie_header(self):
19
+ """Converts stored cookies into an HTTP Cookie header string."""
20
+ return "; ".join(f"{key}={val}" for key, val in self._cookies.items())
21
+
22
+ @property
23
+ def fed_auth(self):
24
+ # type: () -> Optional[str]
25
+ """Returns the Primary authentication token."""
26
+ return self._cookies.get("FedAuth", None)
27
+
28
+ @property
29
+ def spo_idcrl(self):
30
+ # type: () -> Optional[str]
31
+ """Returns the secondary authentication token. (SharePoint Online Identity CRL)"""
32
+ return self._cookies.get("SPOIDCRL", None)
33
+
34
+ @property
35
+ def rt_fa(self):
36
+ # type: () -> Optional[str]
37
+ """Returns the refresh token for Federated Authentication."""
38
+ return self._cookies.get("rtFa", None)
39
+
40
+ def to_json(self):
41
+ """Serializes cookies to JSON format."""
42
+ return json.dumps(self._cookies, indent=2)
43
+
44
+ @classmethod
45
+ def from_json(cls, json_data):
46
+ """Deserializes cookies from JSON format."""
47
+ cookies_dict = json.loads(json_data)
48
+ return cls(cookies_dict)
@@ -2,8 +2,9 @@ import json
2
2
  import sys
3
3
  from typing import Any, Callable
4
4
 
5
- from typing_extensions import Required, TypedDict
5
+ from typing_extensions import Required, Self, TypedDict
6
6
 
7
+ from office365.azure_env import AzureEnvironment
7
8
  from office365.runtime.auth.client_credential import ClientCredential
8
9
  from office365.runtime.auth.providers.acs_token_provider import ACSTokenProvider
9
10
  from office365.runtime.auth.providers.saml_token_provider import SamlTokenProvider
@@ -31,13 +32,20 @@ def _get_authorization_header(token):
31
32
  class AuthenticationContext(object):
32
33
  """Authentication context for SharePoint Online/OneDrive For Business"""
33
34
 
34
- def __init__(self, url):
35
+ def __init__(self, url, environment=None, allow_ntlm=False, browser_mode=False):
35
36
  """
36
37
  :param str url: SharePoint absolute web or site Url
38
+ :param str environment: The Office 365 Cloud Environment endpoint used for authentication
39
+ defaults to 'Azure Global'.
40
+ :param bool allow_ntlm: Flag indicates whether NTLM scheme is enabled. Disabled by default
41
+ :param bool browser_mode: Allow browser authentication
37
42
  """
38
43
  self.url = url.rstrip("/")
39
44
  self._authenticate = None
40
45
  self._cached_token = None
46
+ self._environment = environment
47
+ self._allow_ntlm = allow_ntlm
48
+ self._browser_mode = browser_mode
41
49
 
42
50
  def with_client_certificate(
43
51
  self,
@@ -71,7 +79,9 @@ class AuthenticationContext(object):
71
79
  private_key = f.read()
72
80
 
73
81
  def _acquire_token():
74
- authority_url = "https://login.microsoftonline.com/{0}".format(tenant)
82
+ authority_url = "{0}/{1}".format(
83
+ AzureEnvironment.get_login_authority(self._environment), tenant
84
+ )
75
85
  credentials = {
76
86
  "thumbprint": thumbprint,
77
87
  "private_key": private_key,
@@ -110,7 +120,9 @@ class AuthenticationContext(object):
110
120
 
111
121
  app = msal.PublicClientApplication(
112
122
  client_id,
113
- authority="https://login.microsoftonline.com/{0}".format(tenant),
123
+ authority="{0}/{1}".format(
124
+ AzureEnvironment.get_login_authority(self._environment), tenant
125
+ ),
114
126
  client_credential=None,
115
127
  )
116
128
  result = app.acquire_token_interactive(scopes=scopes)
@@ -136,7 +148,9 @@ class AuthenticationContext(object):
136
148
 
137
149
  app = msal.PublicClientApplication(
138
150
  client_id,
139
- authority="https://login.microsoftonline.com/{0}".format(tenant),
151
+ authority="{0}/{1}".format(
152
+ AzureEnvironment.get_login_authority(self._environment), tenant
153
+ ),
140
154
  client_credential=None,
141
155
  )
142
156
 
@@ -171,54 +185,56 @@ class AuthenticationContext(object):
171
185
  )
172
186
 
173
187
  self._authenticate = _authenticate
188
+ return self
174
189
 
175
- def with_credentials(self, credentials, **kwargs):
190
+ def with_credentials(self, credentials):
191
+ # type: (UserCredential | ClientCredential) -> "AuthenticationContext"
176
192
  """
177
193
  Initializes a client to acquire a token via user or client credentials
178
-
179
- :param UserCredential or ClientCredential credentials:
180
194
  """
181
195
  if isinstance(credentials, ClientCredential):
182
- environment = kwargs.get("environment")
183
196
  provider = ACSTokenProvider(
184
- self.url, credentials.clientId, credentials.clientSecret, environment
197
+ self.url,
198
+ credentials.clientId,
199
+ credentials.clientSecret,
200
+ self._environment,
185
201
  )
186
202
  elif isinstance(credentials, UserCredential):
187
- allow_ntlm = kwargs.get("allow_ntlm", False)
188
- if allow_ntlm:
203
+ if self._allow_ntlm:
189
204
  from office365.runtime.auth.providers.ntlm_provider import NtlmProvider
190
205
 
191
206
  provider = NtlmProvider(credentials.userName, credentials.password)
192
207
  else:
193
- browser_mode = kwargs.get("browser_mode", False)
194
- environment = kwargs.get("environment")
195
208
  provider = SamlTokenProvider(
196
209
  self.url,
197
210
  credentials.userName,
198
211
  credentials.password,
199
- browser_mode,
200
- environment,
212
+ self._browser_mode,
213
+ self._environment,
201
214
  )
202
215
  else:
203
216
  raise ValueError("Unknown credential type")
204
217
 
205
218
  def _authenticate(request):
219
+ # type: (RequestOptions) -> None
206
220
  provider.authenticate_request(request)
207
221
 
208
222
  self._authenticate = _authenticate
223
+ return self
209
224
 
210
- def acquire_token_for_user(self, username, password, browser_mode=False):
225
+ def acquire_token_for_user(self, username, password):
226
+ # type: (str, str) -> Self
211
227
  """
212
228
  Initializes a client to acquire a token via user credentials
213
229
  Status: deprecated!
214
230
 
215
231
  :param str password: The user password
216
232
  :param str username: Typically a UPN in the form of an email address
217
- :param bool browser_mode:
218
233
  """
219
- provider = SamlTokenProvider(self.url, username, password, browser_mode)
234
+ provider = SamlTokenProvider(self.url, username, password, self._browser_mode)
220
235
 
221
236
  def _authenticate(request):
237
+ # type: (RequestOptions) -> None
222
238
  provider.authenticate_request(request)
223
239
 
224
240
  self._authenticate = _authenticate
@@ -236,6 +252,7 @@ class AuthenticationContext(object):
236
252
  provider = ACSTokenProvider(self.url, client_id, client_secret)
237
253
 
238
254
  def _authenticate(request):
255
+ # type: (RequestOptions) -> None
239
256
  provider.authenticate_request(request)
240
257
 
241
258
  self._authenticate = _authenticate
File without changes