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 changed (182) hide show
  1. {files_com-2.0.4/files_com.egg-info → files_com-2.0.5}/PKG-INFO +2 -2
  2. {files_com-2.0.4 → files_com-2.0.5/files_com.egg-info}/PKG-INFO +2 -2
  3. {files_com-2.0.4 → files_com-2.0.5}/files_com.egg-info/requires.txt +1 -1
  4. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/__init__.py +1 -1
  5. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/localfs.py +67 -6
  6. {files_com-2.0.4 → files_com-2.0.5}/pyproject.toml +2 -2
  7. {files_com-2.0.4 → files_com-2.0.5}/LICENSE +0 -0
  8. {files_com-2.0.4 → files_com-2.0.5}/MANIFEST.in +0 -0
  9. {files_com-2.0.4 → files_com-2.0.5}/README.md +0 -0
  10. {files_com-2.0.4 → files_com-2.0.5}/files_com.egg-info/SOURCES.txt +0 -0
  11. {files_com-2.0.4 → files_com-2.0.5}/files_com.egg-info/dependency_links.txt +0 -0
  12. {files_com-2.0.4 → files_com-2.0.5}/files_com.egg-info/top_level.txt +0 -0
  13. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/access.py +0 -0
  14. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/adaptive.py +0 -0
  15. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/api.py +0 -0
  16. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/api_client.py +0 -0
  17. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/attachment.py +0 -0
  18. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/checkpoint.py +0 -0
  19. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/client.py +0 -0
  20. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/context.py +0 -0
  21. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/download.py +0 -0
  22. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/download_status.py +0 -0
  23. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/error.py +0 -0
  24. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/jobs.py +0 -0
  25. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/lifetime.py +0 -0
  26. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/list_obj.py +0 -0
  27. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/migration.py +0 -0
  28. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/__init__.py +0 -0
  29. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/account_line_item.py +0 -0
  30. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/action.py +0 -0
  31. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/action_log.py +0 -0
  32. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/action_notification_export.py +0 -0
  33. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/action_notification_export_result.py +0 -0
  34. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/agent_node.py +0 -0
  35. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/agent_node_connection.py +0 -0
  36. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/agent_node_instance.py +0 -0
  37. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/agent_push_update.py +0 -0
  38. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/ai_assistant_personality.py +0 -0
  39. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/ai_task.py +0 -0
  40. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/api_key.py +0 -0
  41. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/api_request_log.py +0 -0
  42. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/app.py +0 -0
  43. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/as2_incoming_message.py +0 -0
  44. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/as2_outgoing_message.py +0 -0
  45. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/as2_partner.py +0 -0
  46. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/as2_station.py +0 -0
  47. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/auto.py +0 -0
  48. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/automation.py +0 -0
  49. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/automation_authoring_schema.py +0 -0
  50. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/automation_execution_node.py +0 -0
  51. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/automation_log.py +0 -0
  52. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/automation_run.py +0 -0
  53. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/bandwidth_snapshot.py +0 -0
  54. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/behavior.py +0 -0
  55. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/bundle.py +0 -0
  56. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/bundle_action.py +0 -0
  57. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/bundle_download.py +0 -0
  58. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/bundle_notification.py +0 -0
  59. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/bundle_path.py +0 -0
  60. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/bundle_recipient.py +0 -0
  61. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/bundle_registration.py +0 -0
  62. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/chat_message.py +0 -0
  63. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/chat_session.py +0 -0
  64. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/child_site_management_policy.py +0 -0
  65. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/clickwrap.py +0 -0
  66. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/custom_domain.py +0 -0
  67. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/desktop_configuration_profile.py +0 -0
  68. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/direct_connection_info.py +0 -0
  69. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/dns_record.py +0 -0
  70. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/email_incoming_message.py +0 -0
  71. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/email_log.py +0 -0
  72. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/errors.py +0 -0
  73. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/event_channel.py +0 -0
  74. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/event_delivery_attempt.py +0 -0
  75. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/event_record.py +0 -0
  76. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/event_subscription.py +0 -0
  77. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/event_target.py +0 -0
  78. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/exavault_api_request_log.py +0 -0
  79. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/expectation.py +0 -0
  80. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/expectation_evaluation.py +0 -0
  81. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/expectation_incident.py +0 -0
  82. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/external_event.py +0 -0
  83. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/file.py +0 -0
  84. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/file_action.py +0 -0
  85. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/file_comment.py +0 -0
  86. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/file_comment_reaction.py +0 -0
  87. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/file_migration.py +0 -0
  88. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/file_migration_log.py +0 -0
  89. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/file_upload_part.py +0 -0
  90. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/folder.py +0 -0
  91. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/form_field.py +0 -0
  92. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/form_field_set.py +0 -0
  93. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/ftp_action_log.py +0 -0
  94. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/gpg_key.py +0 -0
  95. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/group.py +0 -0
  96. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/group_user.py +0 -0
  97. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/history.py +0 -0
  98. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/history_export.py +0 -0
  99. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/history_export_result.py +0 -0
  100. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/holiday_calendar.py +0 -0
  101. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/holiday_region.py +0 -0
  102. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/image.py +0 -0
  103. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/inbound_s3_log.py +0 -0
  104. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/inbox_recipient.py +0 -0
  105. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/inbox_registration.py +0 -0
  106. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/inbox_upload.py +0 -0
  107. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/integration_centric_profile.py +0 -0
  108. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/invoice.py +0 -0
  109. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/invoice_line_item.py +0 -0
  110. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/ip_address.py +0 -0
  111. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/key_lifecycle_rule.py +0 -0
  112. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/lock.py +0 -0
  113. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/metadata_category.py +0 -0
  114. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/notification.py +0 -0
  115. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/outbound_connection_log.py +0 -0
  116. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/partner.py +0 -0
  117. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/partner_channel.py +0 -0
  118. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/partner_channel_template.py +0 -0
  119. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/partner_connection.py +0 -0
  120. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/partner_site.py +0 -0
  121. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/partner_site_request.py +0 -0
  122. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/payment.py +0 -0
  123. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/payment_line_item.py +0 -0
  124. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/pending_work_event.py +0 -0
  125. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/permission.py +0 -0
  126. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/preview.py +0 -0
  127. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/public_hosting_request_log.py +0 -0
  128. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/public_ip_address.py +0 -0
  129. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/public_key.py +0 -0
  130. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/remote_bandwidth_snapshot.py +0 -0
  131. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/remote_mount_backend.py +0 -0
  132. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/remote_server.py +0 -0
  133. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/remote_server_configuration_file.py +0 -0
  134. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/remote_server_credential.py +0 -0
  135. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/request.py +0 -0
  136. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/restore.py +0 -0
  137. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/schedule.py +0 -0
  138. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/scheduled_export.py +0 -0
  139. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/scim_log.py +0 -0
  140. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/secret.py +0 -0
  141. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/session.py +0 -0
  142. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/settings_change.py +0 -0
  143. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/sftp_action_log.py +0 -0
  144. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/sftp_host_key.py +0 -0
  145. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/share_group.py +0 -0
  146. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/share_group_member.py +0 -0
  147. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/siem_http_destination.py +0 -0
  148. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/siem_http_destination_event.py +0 -0
  149. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/site.py +0 -0
  150. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/site_subdomain_redirect.py +0 -0
  151. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/snapshot.py +0 -0
  152. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/sso_event.py +0 -0
  153. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/sso_strategy.py +0 -0
  154. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/status.py +0 -0
  155. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/style.py +0 -0
  156. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/sync.py +0 -0
  157. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/sync_log.py +0 -0
  158. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/sync_run.py +0 -0
  159. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/sync_run_live_transfer.py +0 -0
  160. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/usage_by_top_level_dir.py +0 -0
  161. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/usage_daily_snapshot.py +0 -0
  162. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/usage_snapshot.py +0 -0
  163. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/user.py +0 -0
  164. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/user_additional_email_recipient.py +0 -0
  165. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/user_cipher_use.py +0 -0
  166. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/user_lifecycle_rule.py +0 -0
  167. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/user_request.py +0 -0
  168. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/user_security_event.py +0 -0
  169. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/user_sftp_client_use.py +0 -0
  170. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/web_dav_action_log.py +0 -0
  171. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/webhook_test.py +0 -0
  172. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/workspace.py +0 -0
  173. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/models/zip_list_entry.py +0 -0
  174. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/path_comparison.json +0 -0
  175. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/path_util.py +0 -0
  176. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/py.typed +0 -0
  177. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/region.py +0 -0
  178. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/transport.py +0 -0
  179. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/upload.py +0 -0
  180. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/util.py +0 -0
  181. {files_com-2.0.4 → files_com-2.0.5}/files_sdk/writing.py +0 -0
  182. {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.4
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.7.22
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.4
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.7.22
21
+ Requires-Dist: certifi>=2026.10.19
22
22
  Requires-Dist: charset-normalizer<4,>=3.5.1
23
23
  Dynamic: license-file
24
24
 
@@ -2,5 +2,5 @@ requests<3,>=2.34.2
2
2
  requests-toolbelt<2,>=1.0.0
3
3
  urllib3<3,>=2.8.0
4
4
  idna<4,>=3.15
5
- certifi>=2026.7.22
5
+ certifi>=2026.10.19
6
6
  charset-normalizer<4,>=3.5.1
@@ -479,7 +479,7 @@ source_ip = None
479
479
  workspace_id = None
480
480
  base_url = "https://app.files.com"
481
481
  base_path = "api/rest/v1"
482
- version = "2.0.4"
482
+ version = "2.0.5"
483
483
 
484
484
  __version__ = version
485
485
 
@@ -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.fd is None or target.fd is None:
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.rename_into(self.file_name, self.parent, target_name)
456
- self.close()
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. Whoever opened it meanwhile keeps what they opened, however the
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.4"
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.7.22",
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