Files.com 2.0.4__tar.gz → 2.0.5__tar.gz
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_com-2.0.4/files_com.egg-info → files_com-2.0.5}/PKG-INFO +2 -2
- {files_com-2.0.4 → files_com-2.0.5/files_com.egg-info}/PKG-INFO +2 -2
- {files_com-2.0.4 → files_com-2.0.5}/files_com.egg-info/requires.txt +1 -1
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/__init__.py +1 -1
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/localfs.py +67 -6
- {files_com-2.0.4 → files_com-2.0.5}/pyproject.toml +2 -2
- {files_com-2.0.4 → files_com-2.0.5}/LICENSE +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/MANIFEST.in +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/README.md +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_com.egg-info/SOURCES.txt +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_com.egg-info/dependency_links.txt +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_com.egg-info/top_level.txt +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/access.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/adaptive.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/api.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/api_client.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/attachment.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/checkpoint.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/client.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/context.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/download.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/download_status.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/error.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/jobs.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/lifetime.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/list_obj.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/migration.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/__init__.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/account_line_item.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/action.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/action_log.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/action_notification_export.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/action_notification_export_result.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/agent_node.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/agent_node_connection.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/agent_node_instance.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/agent_push_update.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/ai_assistant_personality.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/ai_task.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/api_key.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/api_request_log.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/app.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/as2_incoming_message.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/as2_outgoing_message.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/as2_partner.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/as2_station.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/auto.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/automation.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/automation_authoring_schema.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/automation_execution_node.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/automation_log.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/automation_run.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/bandwidth_snapshot.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/behavior.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/bundle.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/bundle_action.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/bundle_download.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/bundle_notification.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/bundle_path.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/bundle_recipient.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/bundle_registration.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/chat_message.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/chat_session.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/child_site_management_policy.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/clickwrap.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/custom_domain.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/desktop_configuration_profile.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/direct_connection_info.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/dns_record.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/email_incoming_message.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/email_log.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/errors.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/event_channel.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/event_delivery_attempt.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/event_record.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/event_subscription.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/event_target.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/exavault_api_request_log.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/expectation.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/expectation_evaluation.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/expectation_incident.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/external_event.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/file.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/file_action.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/file_comment.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/file_comment_reaction.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/file_migration.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/file_migration_log.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/file_upload_part.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/folder.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/form_field.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/form_field_set.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/ftp_action_log.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/gpg_key.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/group.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/group_user.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/history.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/history_export.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/history_export_result.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/holiday_calendar.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/holiday_region.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/image.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/inbound_s3_log.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/inbox_recipient.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/inbox_registration.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/inbox_upload.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/integration_centric_profile.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/invoice.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/invoice_line_item.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/ip_address.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/key_lifecycle_rule.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/lock.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/metadata_category.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/notification.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/outbound_connection_log.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/partner.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/partner_channel.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/partner_channel_template.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/partner_connection.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/partner_site.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/partner_site_request.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/payment.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/payment_line_item.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/pending_work_event.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/permission.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/preview.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/public_hosting_request_log.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/public_ip_address.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/public_key.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/remote_bandwidth_snapshot.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/remote_mount_backend.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/remote_server.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/remote_server_configuration_file.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/remote_server_credential.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/request.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/restore.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/schedule.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/scheduled_export.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/scim_log.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/secret.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/session.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/settings_change.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/sftp_action_log.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/sftp_host_key.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/share_group.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/share_group_member.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/siem_http_destination.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/siem_http_destination_event.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/site.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/site_subdomain_redirect.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/snapshot.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/sso_event.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/sso_strategy.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/status.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/style.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/sync.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/sync_log.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/sync_run.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/sync_run_live_transfer.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/usage_by_top_level_dir.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/usage_daily_snapshot.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/usage_snapshot.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/user.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/user_additional_email_recipient.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/user_cipher_use.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/user_lifecycle_rule.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/user_request.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/user_security_event.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/user_sftp_client_use.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/web_dav_action_log.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/webhook_test.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/workspace.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/zip_list_entry.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/path_comparison.json +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/path_util.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/py.typed +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/region.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/transport.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/upload.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/util.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/files_sdk/writing.py +0 -0
- {files_com-2.0.4 → files_com-2.0.5}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: files_com
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.5
|
|
4
4
|
Summary: Python bindings for the Files.com API
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
Project-URL: Documentation, https://developers.files.com/python/
|
|
@@ -18,7 +18,7 @@ Requires-Dist: requests<3,>=2.34.2
|
|
|
18
18
|
Requires-Dist: requests-toolbelt<2,>=1.0.0
|
|
19
19
|
Requires-Dist: urllib3<3,>=2.8.0
|
|
20
20
|
Requires-Dist: idna<4,>=3.15
|
|
21
|
-
Requires-Dist: certifi>=2026.
|
|
21
|
+
Requires-Dist: certifi>=2026.10.19
|
|
22
22
|
Requires-Dist: charset-normalizer<4,>=3.5.1
|
|
23
23
|
Dynamic: license-file
|
|
24
24
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: files_com
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.5
|
|
4
4
|
Summary: Python bindings for the Files.com API
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
Project-URL: Documentation, https://developers.files.com/python/
|
|
@@ -18,7 +18,7 @@ Requires-Dist: requests<3,>=2.34.2
|
|
|
18
18
|
Requires-Dist: requests-toolbelt<2,>=1.0.0
|
|
19
19
|
Requires-Dist: urllib3<3,>=2.8.0
|
|
20
20
|
Requires-Dist: idna<4,>=3.15
|
|
21
|
-
Requires-Dist: certifi>=2026.
|
|
21
|
+
Requires-Dist: certifi>=2026.10.19
|
|
22
22
|
Requires-Dist: charset-normalizer<4,>=3.5.1
|
|
23
23
|
Dynamic: license-file
|
|
24
24
|
|
|
@@ -178,10 +178,15 @@ class Directory:
|
|
|
178
178
|
path, dir_fd = self._at(name)
|
|
179
179
|
os.rmdir(path, dir_fd=dir_fd)
|
|
180
180
|
|
|
181
|
+
def renames_by_path(self, target):
|
|
182
|
+
"""Whether rename_into goes by path names, where directories are not
|
|
183
|
+
held open (Windows)."""
|
|
184
|
+
return self.fd is None or target.fd is None
|
|
185
|
+
|
|
181
186
|
def rename_into(self, name, target, target_name):
|
|
182
187
|
"""Rename name here to target_name in the directory target,
|
|
183
188
|
replacing what is there."""
|
|
184
|
-
if self.
|
|
189
|
+
if self.renames_by_path(target):
|
|
185
190
|
os.replace(self.join(name), target.join(target_name))
|
|
186
191
|
return
|
|
187
192
|
os.rename(name, target_name, src_dir_fd=self.fd, dst_dir_fd=target.fd)
|
|
@@ -452,10 +457,54 @@ class Stage:
|
|
|
452
457
|
os.chmod(self.private.join(self.file_name), mode)
|
|
453
458
|
if not self._is_ours():
|
|
454
459
|
raise ReplacedStage(self.private.join(self.file_name))
|
|
455
|
-
self.private.
|
|
456
|
-
|
|
460
|
+
if self.private.renames_by_path(self.parent):
|
|
461
|
+
# Windows does not rename a file this process holds open: os.open
|
|
462
|
+
# does not share deletion. The file is closed first, and opened
|
|
463
|
+
# again if it is not renamed, so that a checkpoint can still sync
|
|
464
|
+
# and keep it.
|
|
465
|
+
self.close()
|
|
466
|
+
try:
|
|
467
|
+
self.private.rename_into(
|
|
468
|
+
self.file_name, self.parent, target_name
|
|
469
|
+
)
|
|
470
|
+
except BaseException as error:
|
|
471
|
+
self._reopen(error)
|
|
472
|
+
raise
|
|
473
|
+
else:
|
|
474
|
+
self.private.rename_into(self.file_name, self.parent, target_name)
|
|
475
|
+
self.close()
|
|
457
476
|
self._remove_private()
|
|
458
477
|
|
|
478
|
+
def _reopen(self, error):
|
|
479
|
+
"""Open the file again after it was closed to be renamed and was not
|
|
480
|
+
(error is why), if it is still the SDK's own; otherwise it stays
|
|
481
|
+
closed, with a note on error saying why. Nothing here is raised in
|
|
482
|
+
place of error."""
|
|
483
|
+
path = self.private.join(self.file_name)
|
|
484
|
+
try:
|
|
485
|
+
fd = self.private.open_file(self.file_name, os.O_RDWR)
|
|
486
|
+
except OSError as problem:
|
|
487
|
+
error.add_note(
|
|
488
|
+
"The temporary file {} could not be opened again: {}".format(
|
|
489
|
+
path, problem
|
|
490
|
+
)
|
|
491
|
+
)
|
|
492
|
+
return
|
|
493
|
+
try:
|
|
494
|
+
mine = identity_of(os.fstat(fd)) == self.file_identity
|
|
495
|
+
except OSError:
|
|
496
|
+
mine = False
|
|
497
|
+
if mine:
|
|
498
|
+
self.fd = fd
|
|
499
|
+
return
|
|
500
|
+
try:
|
|
501
|
+
os.close(fd)
|
|
502
|
+
except OSError:
|
|
503
|
+
pass
|
|
504
|
+
error.add_note(
|
|
505
|
+
"The temporary file {} is no longer the SDK's own".format(path)
|
|
506
|
+
)
|
|
507
|
+
|
|
459
508
|
def close(self):
|
|
460
509
|
fd, self.fd = self.fd, -1
|
|
461
510
|
if fd >= 0:
|
|
@@ -502,12 +551,24 @@ def _exposed(private, directory, fd, found):
|
|
|
502
551
|
its status) or its private directory (directory is its status) has
|
|
503
552
|
since become usable by others: by the directory's or the file's
|
|
504
553
|
permissions, the file's owner, or on macOS an access control list on
|
|
505
|
-
either.
|
|
554
|
+
either. Windows permissions show only whether an item is read-only, so
|
|
555
|
+
there it is by owners and access control lists (see files_sdk.access):
|
|
556
|
+
the file's must let no one but this user, the system or administrators
|
|
557
|
+
use it, and the private directory and every folder above it must let no
|
|
558
|
+
one else delete, replace or re-permission them or what is in them, nor
|
|
559
|
+
be a link or junction; what cannot be read counts as usable by others.
|
|
560
|
+
Whoever opened it meanwhile keeps what they opened, however the
|
|
506
561
|
permissions are changed back, so such a file is never resumed."""
|
|
562
|
+
if sys.platform == "win32":
|
|
563
|
+
try:
|
|
564
|
+
return (
|
|
565
|
+
access.namespace_problem(private.path) is not None
|
|
566
|
+
or access.new_file_problem(fd, "temporary file") is not None
|
|
567
|
+
)
|
|
568
|
+
except OSError:
|
|
569
|
+
return True
|
|
507
570
|
if stat.S_IMODE(directory.st_mode) & 0o077:
|
|
508
571
|
return True
|
|
509
|
-
if sys.platform == "win32":
|
|
510
|
-
return False
|
|
511
572
|
if stat.S_IMODE(found.st_mode) & 0o077 or found.st_uid != os.geteuid():
|
|
512
573
|
return True
|
|
513
574
|
return private.fd is not None and (
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "files_com"
|
|
7
|
-
version = "2.0.
|
|
7
|
+
version = "2.0.5"
|
|
8
8
|
description = "Python bindings for the Files.com API"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -19,7 +19,7 @@ dependencies = [
|
|
|
19
19
|
"requests-toolbelt>=1.0.0,<2",
|
|
20
20
|
"urllib3>=2.8.0,<3",
|
|
21
21
|
"idna>=3.15,<4",
|
|
22
|
-
"certifi>=2026.
|
|
22
|
+
"certifi>=2026.10.19",
|
|
23
23
|
"charset-normalizer>=3.5.1,<4",
|
|
24
24
|
]
|
|
25
25
|
classifiers = [
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|