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.
- {Office365_REST_Python_Client-2.5.5.dist-info → Office365_REST_Python_Client-2.5.7.dist-info}/METADATA +6 -6
- {Office365_REST_Python_Client-2.5.5.dist-info → Office365_REST_Python_Client-2.5.7.dist-info}/RECORD +269 -222
- office365/booking/virtualevents/__init__.py +0 -0
- office365/booking/virtualevents/root.py +5 -0
- office365/communications/calls/participant.py +4 -5
- office365/directory/administrative_unit.py +9 -2
- office365/directory/applications/application.py +3 -3
- office365/directory/applications/roles/assignment_collection.py +1 -1
- office365/directory/applications/roles/collection.py +6 -2
- office365/directory/applications/roles/role.py +1 -1
- office365/directory/audit/provisioning/object_summary.py +30 -1
- office365/directory/authentication/method_configuration.py +9 -0
- office365/directory/authentication/method_mode_detail.py +8 -0
- office365/directory/authentication/method_target.py +5 -0
- office365/directory/authentication/methods/fido.py +8 -0
- office365/directory/authentication/methods/password.py +23 -0
- office365/directory/authentication/strength_root.py +5 -0
- office365/directory/certificates/auth_configuration.py +1 -3
- office365/directory/custom_security_attribute_definition.py +7 -0
- office365/directory/device_local_credential_info.py +6 -0
- office365/directory/directory.py +40 -12
- office365/directory/groups/group.py +2 -6
- office365/directory/identities/conditional_access_root.py +10 -1
- office365/directory/identities/container.py +3 -9
- office365/directory/identities/providers/builtin_identity.py +3 -2
- office365/directory/identities/providers/saml_or_wsfed.py +4 -5
- office365/directory/identitygovernance/appconsent/request_collection.py +1 -1
- office365/directory/identitygovernance/governance.py +14 -3
- office365/directory/identitygovernance/privilegedaccess/__init__.py +0 -0
- office365/directory/identitygovernance/privilegedaccess/root.py +5 -0
- office365/directory/identitygovernance/termsofuse/agreement_acceptance.py +8 -0
- office365/directory/identitygovernance/userconsent/request_collection.py +1 -1
- office365/directory/insights/resource_reference.py +1 -1
- office365/directory/key_credential.py +3 -0
- office365/directory/licenses/assignment_state.py +26 -2
- office365/directory/licenses/details.py +4 -3
- office365/directory/licenses/subscribed_sku.py +8 -10
- office365/directory/object_collection.py +40 -25
- office365/directory/password_credential.py +3 -0
- office365/directory/permissions/default_user_role.py +5 -0
- office365/directory/permissions/grants/condition_set.py +4 -2
- office365/directory/permissions/grants/oauth2.py +7 -10
- office365/directory/policies/authorization.py +50 -3
- office365/directory/policies/device_registration.py +6 -0
- office365/directory/policies/permission_grant.py +2 -0
- office365/directory/policies/root.py +13 -0
- office365/directory/profile_photo.py +6 -6
- office365/directory/protection/riskyusers/risky_user.py +4 -4
- office365/directory/rolemanagement/resource_action.py +10 -0
- office365/directory/rolemanagement/role_permission.py +10 -0
- office365/directory/security/alerts/alert.py +5 -7
- office365/directory/security/attacksimulations/landing_page.py +5 -0
- office365/directory/security/attacksimulations/operation.py +5 -0
- office365/directory/security/attacksimulations/report.py +8 -1
- office365/directory/security/attacksimulations/root.py +33 -0
- office365/directory/security/attacksimulations/users/__init__.py +0 -0
- office365/directory/security/attacksimulations/users/details.py +5 -0
- office365/directory/security/hunting_query_results.py +5 -0
- office365/directory/security/incidents/incident.py +8 -13
- office365/directory/security/security.py +20 -3
- office365/directory/security/threatintelligence/article_indicator.py +7 -0
- office365/directory/serviceprincipals/service_principal.py +6 -12
- office365/directory/synchronization/schema.py +16 -0
- office365/directory/synchronization/synchronization.py +2 -0
- office365/directory/users/activities/history_item.py +3 -2
- office365/directory/users/user.py +60 -10
- office365/entity_collection.py +3 -2
- office365/graph_client.py +58 -30
- office365/intune/audit/event.py +1 -3
- office365/intune/audit/event_collection.py +1 -1
- office365/intune/devices/alternative_security_id.py +4 -0
- office365/intune/devices/collection.py +57 -0
- office365/intune/devices/device.py +38 -10
- office365/intune/devices/management/management.py +12 -0
- office365/intune/organizations/organization.py +1 -0
- office365/onedrive/analytics/item_activity_stat.py +9 -0
- office365/onedrive/analytics/item_analytics.py +1 -0
- office365/onedrive/contenttypes/content_type.py +4 -12
- office365/onedrive/driveitems/driveItem.py +76 -7
- office365/onedrive/files/hashes.py +5 -0
- office365/onedrive/lists/collection.py +2 -2
- office365/onedrive/lists/list.py +1 -1
- office365/onedrive/operations/long_running.py +6 -6
- office365/onedrive/operations/rich_long_running.py +4 -3
- office365/onedrive/permissions/collection.py +1 -14
- office365/onedrive/sharepoint_settings.py +6 -6
- office365/onedrive/sitepages/__init__.py +0 -0
- office365/onedrive/sitepages/base.py +29 -0
- office365/onedrive/sitepages/canvas_layout.py +43 -0
- office365/onedrive/sitepages/collection.py +32 -0
- office365/onedrive/sitepages/horizontal_section.py +23 -0
- office365/onedrive/sitepages/horizontal_section_column.py +27 -0
- office365/onedrive/sitepages/site_page.py +116 -0
- office365/onedrive/sitepages/title_area.py +13 -0
- office365/onedrive/sitepages/vertical_section.py +27 -0
- office365/onedrive/sitepages/web_part.py +5 -0
- office365/onedrive/sites/site.py +10 -0
- office365/onedrive/sites/sites_with_root.py +1 -3
- office365/onedrive/termstore/store.py +2 -4
- office365/onedrive/termstore/terms/collection.py +1 -2
- office365/onedrive/workbooks/charts/data_labels.py +13 -1
- office365/onedrive/workbooks/filter.py +9 -0
- office365/onedrive/workbooks/filter_criteria.py +5 -0
- office365/onedrive/workbooks/functions/functions.py +6 -3
- office365/onedrive/workbooks/functions/result.py +2 -0
- office365/onedrive/workbooks/operations/workbook.py +7 -10
- office365/onedrive/workbooks/tables/pivot_table.py +9 -9
- office365/onedrive/workbooks/tables/sort.py +5 -0
- office365/onedrive/workbooks/tables/table.py +57 -0
- office365/onedrive/workbooks/worksheets/collection.py +0 -6
- office365/onedrive/workbooks/worksheets/protection.py +22 -1
- office365/onedrive/workbooks/worksheets/protection_options.py +7 -0
- office365/outlook/calendar/calendar.py +1 -3
- office365/outlook/calendar/events/event.py +45 -0
- office365/outlook/calendar/permissions/permission.py +7 -7
- office365/outlook/calendar/place.py +5 -3
- office365/outlook/calendar/response_status.py +11 -0
- office365/outlook/calendar/rooms/room.py +14 -0
- office365/outlook/mail/attachments/collection.py +6 -1
- office365/outlook/mail/automatic_replies_mailtips.py +5 -0
- office365/outlook/mail/conversation.py +1 -3
- office365/outlook/mail/folders/folder.py +1 -3
- office365/outlook/mail/messages/message.py +1 -1
- office365/outlook/mail/tips.py +17 -0
- office365/planner/plans/plan.py +11 -1
- office365/reports/root.py +83 -4
- office365/runtime/auth/authentication_context.py +12 -2
- office365/runtime/auth/providers/acs_token_provider.py +10 -7
- office365/runtime/auth/sts_profile.py +0 -1
- office365/runtime/client_object.py +18 -14
- office365/runtime/client_object_collection.py +8 -23
- office365/runtime/client_request_exception.py +1 -3
- office365/runtime/client_result.py +11 -14
- office365/runtime/client_runtime_context.py +11 -21
- office365/runtime/odata/json_format.py +7 -9
- office365/runtime/odata/request.py +12 -2
- office365/runtime/odata/v3/batch_request.py +7 -15
- office365/runtime/odata/v4/batch_request.py +13 -21
- office365/runtime/queries/upload_session.py +5 -0
- office365/runtime/types/event_handler.py +1 -1
- office365/search/entity.py +3 -2
- office365/sharepoint/activities/facets/delete.py +1 -1
- office365/sharepoint/activities/tracked_item_service.py +2 -3
- office365/sharepoint/administration/web_application.py +8 -7
- office365/sharepoint/alerts/collection.py +2 -1
- office365/sharepoint/attachments/attachment.py +3 -9
- office365/sharepoint/audit/audit.py +3 -2
- office365/sharepoint/changes/alert.py +4 -3
- office365/sharepoint/changes/collection.py +7 -10
- office365/sharepoint/changes/content_type.py +4 -4
- office365/sharepoint/changes/field.py +4 -5
- office365/sharepoint/changes/item.py +34 -7
- office365/sharepoint/changes/list.py +4 -4
- office365/sharepoint/changes/user.py +5 -6
- office365/sharepoint/client_context.py +4 -2
- office365/sharepoint/clientsidecomponent/component_context_info.py +4 -3
- office365/sharepoint/contentcenter/machinelearning/enabled.py +4 -3
- office365/sharepoint/contentcenter/machinelearning/hub.py +6 -6
- office365/sharepoint/contentcenter/machinelearning/models/collection.py +1 -1
- office365/sharepoint/contenttypes/content_type.py +13 -1
- office365/sharepoint/contenttypes/fieldlinks/collection.py +5 -7
- office365/sharepoint/contenttypes/fieldlinks/field_link.py +14 -22
- office365/sharepoint/directory/helper.py +2 -0
- office365/sharepoint/entity.py +12 -5
- office365/sharepoint/entity_collection.py +1 -3
- office365/sharepoint/eventreceivers/definition.py +8 -12
- office365/sharepoint/features/collection.py +1 -2
- office365/sharepoint/features/definitions/definition.py +6 -3
- office365/sharepoint/fields/calculated.py +8 -14
- office365/sharepoint/fields/collection.py +46 -13
- office365/sharepoint/fields/computed.py +4 -5
- office365/sharepoint/fields/currency.py +7 -11
- office365/sharepoint/fields/date_time.py +4 -8
- office365/sharepoint/fields/field.py +6 -16
- office365/sharepoint/fields/lookup.py +11 -9
- office365/sharepoint/fields/multi_choice.py +8 -12
- office365/sharepoint/fields/multi_line_text.py +10 -14
- office365/sharepoint/fields/number.py +13 -26
- office365/sharepoint/fields/rating_scale.py +6 -10
- office365/sharepoint/fields/related_field.py +10 -17
- office365/sharepoint/fields/url.py +4 -5
- office365/sharepoint/fields/user.py +10 -9
- office365/sharepoint/files/collection.py +17 -15
- office365/sharepoint/files/file.py +30 -23
- office365/sharepoint/folders/collection.py +22 -5
- office365/sharepoint/folders/coloring.py +11 -9
- office365/sharepoint/folders/coloring_information.py +38 -0
- office365/sharepoint/folders/folder.py +23 -25
- office365/sharepoint/likes/liked_by_information.py +7 -10
- office365/sharepoint/likes/user_entity.py +6 -8
- office365/sharepoint/listitems/form_update_value.py +17 -1
- office365/sharepoint/listitems/listitem.py +2 -2
- office365/sharepoint/lists/bloom_filter.py +5 -7
- office365/sharepoint/lists/creatables_info.py +5 -6
- office365/sharepoint/lists/list.py +24 -9
- office365/sharepoint/lists/template.py +7 -4
- office365/sharepoint/lists/template_collection.py +2 -4
- office365/sharepoint/marketplace/app_metadata.py +14 -23
- office365/sharepoint/marketplace/sitecollection/appcatalog/allowed_item.py +6 -8
- office365/sharepoint/migrationcenter/deploy_status.py +5 -0
- office365/sharepoint/migrationcenter/service/performance/__init__.py +0 -0
- office365/sharepoint/migrationcenter/service/performance/dashboard_data.py +9 -0
- office365/sharepoint/migrationcenter/service/performance/data.py +7 -0
- office365/sharepoint/migrationcenter/service/performance/entity_data.py +5 -0
- office365/sharepoint/navigation/node.py +5 -8
- office365/sharepoint/permissions/irm/effective_settings.py +6 -8
- office365/sharepoint/permissions/irm/file_settings.py +8 -6
- office365/sharepoint/permissions/irm/settings.py +25 -43
- office365/sharepoint/portal/groups/site_manager.py +6 -7
- office365/sharepoint/principal/principal.py +2 -4
- office365/sharepoint/publishing/embed_data_v1.py +8 -15
- office365/sharepoint/publishing/pages/campaign_publication.py +4 -3
- office365/sharepoint/publishing/primary_city_time.py +8 -9
- office365/sharepoint/publishing/video/service_discoverer.py +4 -3
- office365/sharepoint/pushnotifications/subscriber.py +11 -15
- office365/sharepoint/recyclebin/item.py +107 -7
- office365/sharepoint/sharing/information.py +9 -0
- office365/sharepoint/sharing/link_info.py +6 -0
- office365/sharepoint/sharing/object_sharing_settings.py +24 -46
- office365/sharepoint/sharing/permission_collection.py +18 -0
- office365/sharepoint/sharing/permission_information.py +5 -5
- office365/sharepoint/sharing/result.py +1 -0
- office365/sharepoint/sitedesigns/run.py +4 -3
- office365/sharepoint/sites/script_safe_domain.py +5 -0
- office365/sharepoint/sites/site.py +17 -20
- office365/sharepoint/taxonomy/field.py +32 -21
- office365/sharepoint/taxonomy/field_value.py +1 -1
- office365/sharepoint/taxonomy/groups/group.py +12 -1
- office365/sharepoint/taxonomy/sets/set.py +6 -0
- office365/sharepoint/taxonomy/stores/store.py +4 -2
- office365/sharepoint/teams/channel.py +6 -6
- office365/sharepoint/tenant/administration/endpoints.py +4 -3
- office365/sharepoint/tenant/administration/hubsites/properties.py +4 -5
- office365/sharepoint/tenant/administration/powerapps/__init__.py +0 -0
- office365/sharepoint/tenant/administration/powerapps/environment_context.py +8 -0
- office365/sharepoint/tenant/administration/sites/properties.py +0 -1
- office365/sharepoint/tenant/administration/spo_operation.py +4 -4
- office365/sharepoint/tenant/administration/tenant.py +1 -0
- office365/sharepoint/tenant/insights/report.py +11 -0
- office365/sharepoint/tenant/insights/report_manager.py +5 -0
- office365/sharepoint/tenant/insights/report_metadata.py +5 -0
- office365/sharepoint/tenant/settings.py +4 -3
- office365/sharepoint/translation/sync_translator.py +3 -2
- office365/sharepoint/ui/applicationpages/peoplepicker/entity_information.py +4 -4
- office365/sharepoint/usercustomactions/action.py +12 -20
- office365/sharepoint/userprofiles/followed_content.py +6 -10
- office365/sharepoint/userprofiles/people_manager.py +0 -1
- office365/sharepoint/userprofiles/person_properties.py +14 -30
- office365/sharepoint/userprofiles/personal_cache.py +4 -3
- office365/sharepoint/userprofiles/properties_for_user.py +4 -5
- office365/sharepoint/userprofiles/sharedwithme/document.py +12 -21
- office365/sharepoint/utilities/move_copy_util.py +19 -19
- office365/sharepoint/utilities/upload_status.py +7 -10
- office365/sharepoint/views/field_collection.py +9 -14
- office365/sharepoint/views/view.py +43 -64
- office365/sharepoint/webhooks/subscription.py +11 -19
- office365/sharepoint/webparts/webpart.py +3 -1
- office365/sharepoint/webs/information_collection.py +1 -1
- office365/sharepoint/webs/modernize_homepage_result.py +4 -3
- office365/sharepoint/webs/regional_settings.py +79 -16
- office365/sharepoint/webs/template.py +3 -5
- office365/sharepoint/webs/web.py +24 -25
- office365/teams/apps/catalog.py +1 -0
- office365/teams/chats/chat.py +4 -0
- office365/teams/operations/async_operation.py +5 -7
- office365/teams/schedule/schedule.py +6 -2
- office365/runtime/paths/item.py +0 -8
- {Office365_REST_Python_Client-2.5.5.dist-info → Office365_REST_Python_Client-2.5.7.dist-info}/LICENSE +0 -0
- {Office365_REST_Python_Client-2.5.5.dist-info → Office365_REST_Python_Client-2.5.7.dist-info}/WHEEL +0 -0
- {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
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
|
84
|
-
# type: (File
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
|
|
101
|
-
|
|
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
|
-
|
|
106
|
+
return_type.continue_upload(
|
|
105
107
|
upload_id, uploaded_bytes, content
|
|
106
|
-
).after_execute(
|
|
108
|
+
).after_execute(_after_uploaded)
|
|
107
109
|
else:
|
|
108
|
-
|
|
110
|
+
return_type.finish_upload(
|
|
109
111
|
upload_id, uploaded_bytes, content
|
|
110
|
-
).after_execute(
|
|
112
|
+
).after_execute(_upload)
|
|
111
113
|
|
|
112
114
|
if file_size > chunk_size:
|
|
113
|
-
return self.add(file_name, None, True).after_execute(
|
|
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
|
-
|
|
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
|
-
|
|
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":
|
|
349
|
+
params = {"newurl": file_url, "flags": flag}
|
|
345
350
|
qry = ServiceOperationQuery(self, "moveto", params)
|
|
346
351
|
self.context.add_query(qry)
|
|
347
|
-
|
|
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
|
-
|
|
381
|
-
|
|
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
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
|
|
13
|
-
|
|
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
|
|
24
|
+
if return_type is None:
|
|
25
|
+
return_type = Folder(self.context)
|
|
23
26
|
|
|
24
27
|
payload = {
|
|
25
|
-
"
|
|
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
|
|
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"],
|
|
77
|
+
folder.ensure_properties(["Folders"], _get_folders, parent=folder)
|
|
78
78
|
|
|
79
|
-
self.ensure_properties(["Folders"],
|
|
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
|
|
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"],
|
|
97
|
+
["Files", "Folders"], _get_files, parent=folder
|
|
98
98
|
)
|
|
99
99
|
|
|
100
|
-
self.ensure_properties(["Files", "Folders"],
|
|
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
|
-
|
|
128
|
-
|
|
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
|
-
|
|
150
|
+
destination_path = "/".join(
|
|
155
151
|
[str(destination_folder.server_relative_path), self.name]
|
|
156
152
|
)
|
|
157
153
|
qry = ServiceOperationQuery(
|
|
158
|
-
self, "MoveToUsingPath", {"DecodedUrl":
|
|
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(
|
|
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
|