Files.com 1.6.484__tar.gz → 1.6.486__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 (323) hide show
  1. {files_com-1.6.484/files_com.egg-info → files_com-1.6.486}/PKG-INFO +18 -23
  2. {files_com-1.6.484 → files_com-1.6.486}/README.md +17 -22
  3. files_com-1.6.486/_VERSION +1 -0
  4. {files_com-1.6.484 → files_com-1.6.486/files_com.egg-info}/PKG-INFO +18 -23
  5. {files_com-1.6.484 → files_com-1.6.486}/files_com.egg-info/SOURCES.txt +2 -0
  6. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/__init__.py +1 -1
  7. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/api_client.py +37 -22
  8. files_com-1.6.486/files_sdk/path_comparison.json +20621 -0
  9. files_com-1.6.486/files_sdk/path_util.py +33 -0
  10. {files_com-1.6.484 → files_com-1.6.486}/pyproject.toml +4 -4
  11. files_com-1.6.486/tests/test_path_util.py +53 -0
  12. files_com-1.6.486/tests/test_transfer_privacy.py +97 -0
  13. files_com-1.6.484/_VERSION +0 -1
  14. files_com-1.6.484/files_sdk/path_util.py +0 -42
  15. files_com-1.6.484/tests/test_path_util.py +0 -27
  16. {files_com-1.6.484 → files_com-1.6.486}/LICENSE +0 -0
  17. {files_com-1.6.484 → files_com-1.6.486}/files_com.egg-info/dependency_links.txt +0 -0
  18. {files_com-1.6.484 → files_com-1.6.486}/files_com.egg-info/requires.txt +0 -0
  19. {files_com-1.6.484 → files_com-1.6.486}/files_com.egg-info/top_level.txt +0 -0
  20. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/api.py +0 -0
  21. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/error.py +0 -0
  22. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/list_obj.py +0 -0
  23. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/__init__.py +0 -0
  24. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/account_line_item.py +0 -0
  25. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/action.py +0 -0
  26. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/action_log.py +0 -0
  27. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/action_notification_export.py +0 -0
  28. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/action_notification_export_result.py +0 -0
  29. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/agent_node.py +0 -0
  30. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/agent_node_connection.py +0 -0
  31. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/agent_node_instance.py +0 -0
  32. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/agent_push_update.py +0 -0
  33. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/ai_assistant_personality.py +0 -0
  34. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/ai_task.py +0 -0
  35. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/api_key.py +0 -0
  36. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/api_request_log.py +0 -0
  37. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/app.py +0 -0
  38. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/as2_incoming_message.py +0 -0
  39. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/as2_outgoing_message.py +0 -0
  40. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/as2_partner.py +0 -0
  41. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/as2_station.py +0 -0
  42. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/auto.py +0 -0
  43. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/automation.py +0 -0
  44. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/automation_authoring_schema.py +0 -0
  45. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/automation_execution_node.py +0 -0
  46. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/automation_log.py +0 -0
  47. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/automation_run.py +0 -0
  48. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/bandwidth_snapshot.py +0 -0
  49. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/behavior.py +0 -0
  50. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/bundle.py +0 -0
  51. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/bundle_action.py +0 -0
  52. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/bundle_download.py +0 -0
  53. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/bundle_notification.py +0 -0
  54. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/bundle_path.py +0 -0
  55. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/bundle_recipient.py +0 -0
  56. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/bundle_registration.py +0 -0
  57. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/chat_message.py +0 -0
  58. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/chat_session.py +0 -0
  59. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/child_site_management_policy.py +0 -0
  60. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/clickwrap.py +0 -0
  61. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/custom_domain.py +0 -0
  62. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/desktop_configuration_profile.py +0 -0
  63. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/direct_connection_info.py +0 -0
  64. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/dns_record.py +0 -0
  65. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/email_incoming_message.py +0 -0
  66. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/email_log.py +0 -0
  67. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/errors.py +0 -0
  68. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/event_channel.py +0 -0
  69. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/event_delivery_attempt.py +0 -0
  70. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/event_record.py +0 -0
  71. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/event_subscription.py +0 -0
  72. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/event_target.py +0 -0
  73. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/exavault_api_request_log.py +0 -0
  74. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/expectation.py +0 -0
  75. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/expectation_evaluation.py +0 -0
  76. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/expectation_incident.py +0 -0
  77. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/external_event.py +0 -0
  78. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/file.py +0 -0
  79. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/file_action.py +0 -0
  80. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/file_comment.py +0 -0
  81. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/file_comment_reaction.py +0 -0
  82. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/file_migration.py +0 -0
  83. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/file_migration_log.py +0 -0
  84. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/file_upload_part.py +0 -0
  85. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/folder.py +0 -0
  86. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/form_field.py +0 -0
  87. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/form_field_set.py +0 -0
  88. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/ftp_action_log.py +0 -0
  89. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/gpg_key.py +0 -0
  90. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/group.py +0 -0
  91. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/group_user.py +0 -0
  92. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/history.py +0 -0
  93. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/history_export.py +0 -0
  94. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/history_export_result.py +0 -0
  95. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/holiday_calendar.py +0 -0
  96. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/holiday_region.py +0 -0
  97. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/image.py +0 -0
  98. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/inbound_s3_log.py +0 -0
  99. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/inbox_recipient.py +0 -0
  100. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/inbox_registration.py +0 -0
  101. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/inbox_upload.py +0 -0
  102. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/integration_centric_profile.py +0 -0
  103. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/invoice.py +0 -0
  104. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/invoice_line_item.py +0 -0
  105. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/ip_address.py +0 -0
  106. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/key_lifecycle_rule.py +0 -0
  107. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/lock.py +0 -0
  108. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/metadata_category.py +0 -0
  109. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/notification.py +0 -0
  110. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/outbound_connection_log.py +0 -0
  111. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/partner.py +0 -0
  112. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/partner_channel.py +0 -0
  113. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/partner_channel_template.py +0 -0
  114. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/partner_connection.py +0 -0
  115. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/partner_site.py +0 -0
  116. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/partner_site_request.py +0 -0
  117. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/payment.py +0 -0
  118. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/payment_line_item.py +0 -0
  119. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/pending_work_event.py +0 -0
  120. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/permission.py +0 -0
  121. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/preview.py +0 -0
  122. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/public_hosting_request_log.py +0 -0
  123. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/public_ip_address.py +0 -0
  124. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/public_key.py +0 -0
  125. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/remote_bandwidth_snapshot.py +0 -0
  126. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/remote_mount_backend.py +0 -0
  127. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/remote_server.py +0 -0
  128. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/remote_server_configuration_file.py +0 -0
  129. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/remote_server_credential.py +0 -0
  130. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/request.py +0 -0
  131. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/restore.py +0 -0
  132. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/schedule.py +0 -0
  133. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/scheduled_export.py +0 -0
  134. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/scim_log.py +0 -0
  135. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/secret.py +0 -0
  136. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/session.py +0 -0
  137. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/settings_change.py +0 -0
  138. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/sftp_action_log.py +0 -0
  139. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/sftp_host_key.py +0 -0
  140. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/share_group.py +0 -0
  141. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/share_group_member.py +0 -0
  142. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/siem_http_destination.py +0 -0
  143. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/siem_http_destination_event.py +0 -0
  144. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/site.py +0 -0
  145. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/site_subdomain_redirect.py +0 -0
  146. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/snapshot.py +0 -0
  147. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/sso_event.py +0 -0
  148. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/sso_strategy.py +0 -0
  149. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/status.py +0 -0
  150. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/style.py +0 -0
  151. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/sync.py +0 -0
  152. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/sync_log.py +0 -0
  153. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/sync_run.py +0 -0
  154. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/sync_run_live_transfer.py +0 -0
  155. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/usage_by_top_level_dir.py +0 -0
  156. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/usage_daily_snapshot.py +0 -0
  157. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/usage_snapshot.py +0 -0
  158. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/user.py +0 -0
  159. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/user_additional_email_recipient.py +0 -0
  160. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/user_cipher_use.py +0 -0
  161. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/user_lifecycle_rule.py +0 -0
  162. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/user_request.py +0 -0
  163. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/user_security_event.py +0 -0
  164. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/user_sftp_client_use.py +0 -0
  165. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/web_dav_action_log.py +0 -0
  166. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/webhook_test.py +0 -0
  167. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/workspace.py +0 -0
  168. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/zip_list_entry.py +0 -0
  169. {files_com-1.6.484 → files_com-1.6.486}/files_sdk/util.py +0 -0
  170. {files_com-1.6.484 → files_com-1.6.486}/setup.cfg +0 -0
  171. {files_com-1.6.484 → files_com-1.6.486}/tests/test_account_line_item.py +0 -0
  172. {files_com-1.6.484 → files_com-1.6.486}/tests/test_action.py +0 -0
  173. {files_com-1.6.484 → files_com-1.6.486}/tests/test_action_log.py +0 -0
  174. {files_com-1.6.484 → files_com-1.6.486}/tests/test_action_notification_export.py +0 -0
  175. {files_com-1.6.484 → files_com-1.6.486}/tests/test_action_notification_export_result.py +0 -0
  176. {files_com-1.6.484 → files_com-1.6.486}/tests/test_agent_node.py +0 -0
  177. {files_com-1.6.484 → files_com-1.6.486}/tests/test_agent_node_connection.py +0 -0
  178. {files_com-1.6.484 → files_com-1.6.486}/tests/test_agent_node_instance.py +0 -0
  179. {files_com-1.6.484 → files_com-1.6.486}/tests/test_agent_push_update.py +0 -0
  180. {files_com-1.6.484 → files_com-1.6.486}/tests/test_ai_assistant_personality.py +0 -0
  181. {files_com-1.6.484 → files_com-1.6.486}/tests/test_ai_task.py +0 -0
  182. {files_com-1.6.484 → files_com-1.6.486}/tests/test_api_errors.py +0 -0
  183. {files_com-1.6.484 → files_com-1.6.486}/tests/test_api_key.py +0 -0
  184. {files_com-1.6.484 → files_com-1.6.486}/tests/test_api_request_log.py +0 -0
  185. {files_com-1.6.484 → files_com-1.6.486}/tests/test_app.py +0 -0
  186. {files_com-1.6.484 → files_com-1.6.486}/tests/test_as2_incoming_message.py +0 -0
  187. {files_com-1.6.484 → files_com-1.6.486}/tests/test_as2_outgoing_message.py +0 -0
  188. {files_com-1.6.484 → files_com-1.6.486}/tests/test_as2_partner.py +0 -0
  189. {files_com-1.6.484 → files_com-1.6.486}/tests/test_as2_station.py +0 -0
  190. {files_com-1.6.484 → files_com-1.6.486}/tests/test_auto.py +0 -0
  191. {files_com-1.6.484 → files_com-1.6.486}/tests/test_automation.py +0 -0
  192. {files_com-1.6.484 → files_com-1.6.486}/tests/test_automation_authoring_schema.py +0 -0
  193. {files_com-1.6.484 → files_com-1.6.486}/tests/test_automation_execution_node.py +0 -0
  194. {files_com-1.6.484 → files_com-1.6.486}/tests/test_automation_log.py +0 -0
  195. {files_com-1.6.484 → files_com-1.6.486}/tests/test_automation_run.py +0 -0
  196. {files_com-1.6.484 → files_com-1.6.486}/tests/test_bandwidth_snapshot.py +0 -0
  197. {files_com-1.6.484 → files_com-1.6.486}/tests/test_behavior.py +0 -0
  198. {files_com-1.6.484 → files_com-1.6.486}/tests/test_bundle.py +0 -0
  199. {files_com-1.6.484 → files_com-1.6.486}/tests/test_bundle_action.py +0 -0
  200. {files_com-1.6.484 → files_com-1.6.486}/tests/test_bundle_download.py +0 -0
  201. {files_com-1.6.484 → files_com-1.6.486}/tests/test_bundle_notification.py +0 -0
  202. {files_com-1.6.484 → files_com-1.6.486}/tests/test_bundle_path.py +0 -0
  203. {files_com-1.6.484 → files_com-1.6.486}/tests/test_bundle_recipient.py +0 -0
  204. {files_com-1.6.484 → files_com-1.6.486}/tests/test_bundle_registration.py +0 -0
  205. {files_com-1.6.484 → files_com-1.6.486}/tests/test_chat_message.py +0 -0
  206. {files_com-1.6.484 → files_com-1.6.486}/tests/test_chat_session.py +0 -0
  207. {files_com-1.6.484 → files_com-1.6.486}/tests/test_child_site_management_policy.py +0 -0
  208. {files_com-1.6.484 → files_com-1.6.486}/tests/test_clickwrap.py +0 -0
  209. {files_com-1.6.484 → files_com-1.6.486}/tests/test_connection_adapter.py +0 -0
  210. {files_com-1.6.484 → files_com-1.6.486}/tests/test_custom_domain.py +0 -0
  211. {files_com-1.6.484 → files_com-1.6.486}/tests/test_decimal_contract.py +0 -0
  212. {files_com-1.6.484 → files_com-1.6.486}/tests/test_desktop_configuration_profile.py +0 -0
  213. {files_com-1.6.484 → files_com-1.6.486}/tests/test_direct_connection_info.py +0 -0
  214. {files_com-1.6.484 → files_com-1.6.486}/tests/test_dns_record.py +0 -0
  215. {files_com-1.6.484 → files_com-1.6.486}/tests/test_email_incoming_message.py +0 -0
  216. {files_com-1.6.484 → files_com-1.6.486}/tests/test_email_log.py +0 -0
  217. {files_com-1.6.484 → files_com-1.6.486}/tests/test_errors.py +0 -0
  218. {files_com-1.6.484 → files_com-1.6.486}/tests/test_event_channel.py +0 -0
  219. {files_com-1.6.484 → files_com-1.6.486}/tests/test_event_delivery_attempt.py +0 -0
  220. {files_com-1.6.484 → files_com-1.6.486}/tests/test_event_record.py +0 -0
  221. {files_com-1.6.484 → files_com-1.6.486}/tests/test_event_subscription.py +0 -0
  222. {files_com-1.6.484 → files_com-1.6.486}/tests/test_event_target.py +0 -0
  223. {files_com-1.6.484 → files_com-1.6.486}/tests/test_exavault_api_request_log.py +0 -0
  224. {files_com-1.6.484 → files_com-1.6.486}/tests/test_expectation.py +0 -0
  225. {files_com-1.6.484 → files_com-1.6.486}/tests/test_expectation_evaluation.py +0 -0
  226. {files_com-1.6.484 → files_com-1.6.486}/tests/test_expectation_incident.py +0 -0
  227. {files_com-1.6.484 → files_com-1.6.486}/tests/test_external_event.py +0 -0
  228. {files_com-1.6.484 → files_com-1.6.486}/tests/test_file.py +0 -0
  229. {files_com-1.6.484 → files_com-1.6.486}/tests/test_file_action.py +0 -0
  230. {files_com-1.6.484 → files_com-1.6.486}/tests/test_file_comment.py +0 -0
  231. {files_com-1.6.484 → files_com-1.6.486}/tests/test_file_comment_reaction.py +0 -0
  232. {files_com-1.6.484 → files_com-1.6.486}/tests/test_file_migration.py +0 -0
  233. {files_com-1.6.484 → files_com-1.6.486}/tests/test_file_migration_log.py +0 -0
  234. {files_com-1.6.484 → files_com-1.6.486}/tests/test_file_underscore_destinations.py +0 -0
  235. {files_com-1.6.484 → files_com-1.6.486}/tests/test_file_upload_part.py +0 -0
  236. {files_com-1.6.484 → files_com-1.6.486}/tests/test_folder.py +0 -0
  237. {files_com-1.6.484 → files_com-1.6.486}/tests/test_form_field.py +0 -0
  238. {files_com-1.6.484 → files_com-1.6.486}/tests/test_form_field_set.py +0 -0
  239. {files_com-1.6.484 → files_com-1.6.486}/tests/test_ftp_action_log.py +0 -0
  240. {files_com-1.6.484 → files_com-1.6.486}/tests/test_gpg_key.py +0 -0
  241. {files_com-1.6.484 → files_com-1.6.486}/tests/test_group.py +0 -0
  242. {files_com-1.6.484 → files_com-1.6.486}/tests/test_group_user.py +0 -0
  243. {files_com-1.6.484 → files_com-1.6.486}/tests/test_history.py +0 -0
  244. {files_com-1.6.484 → files_com-1.6.486}/tests/test_history_export.py +0 -0
  245. {files_com-1.6.484 → files_com-1.6.486}/tests/test_history_export_result.py +0 -0
  246. {files_com-1.6.484 → files_com-1.6.486}/tests/test_holiday_calendar.py +0 -0
  247. {files_com-1.6.484 → files_com-1.6.486}/tests/test_holiday_region.py +0 -0
  248. {files_com-1.6.484 → files_com-1.6.486}/tests/test_image.py +0 -0
  249. {files_com-1.6.484 → files_com-1.6.486}/tests/test_inbound_s3_log.py +0 -0
  250. {files_com-1.6.484 → files_com-1.6.486}/tests/test_inbox_recipient.py +0 -0
  251. {files_com-1.6.484 → files_com-1.6.486}/tests/test_inbox_registration.py +0 -0
  252. {files_com-1.6.484 → files_com-1.6.486}/tests/test_inbox_upload.py +0 -0
  253. {files_com-1.6.484 → files_com-1.6.486}/tests/test_integration_centric_profile.py +0 -0
  254. {files_com-1.6.484 → files_com-1.6.486}/tests/test_invoice.py +0 -0
  255. {files_com-1.6.484 → files_com-1.6.486}/tests/test_invoice_line_item.py +0 -0
  256. {files_com-1.6.484 → files_com-1.6.486}/tests/test_ip_address.py +0 -0
  257. {files_com-1.6.484 → files_com-1.6.486}/tests/test_key_lifecycle_rule.py +0 -0
  258. {files_com-1.6.484 → files_com-1.6.486}/tests/test_lock.py +0 -0
  259. {files_com-1.6.484 → files_com-1.6.486}/tests/test_metadata_category.py +0 -0
  260. {files_com-1.6.484 → files_com-1.6.486}/tests/test_notification.py +0 -0
  261. {files_com-1.6.484 → files_com-1.6.486}/tests/test_outbound_connection_log.py +0 -0
  262. {files_com-1.6.484 → files_com-1.6.486}/tests/test_partner.py +0 -0
  263. {files_com-1.6.484 → files_com-1.6.486}/tests/test_partner_channel.py +0 -0
  264. {files_com-1.6.484 → files_com-1.6.486}/tests/test_partner_channel_template.py +0 -0
  265. {files_com-1.6.484 → files_com-1.6.486}/tests/test_partner_connection.py +0 -0
  266. {files_com-1.6.484 → files_com-1.6.486}/tests/test_partner_site.py +0 -0
  267. {files_com-1.6.484 → files_com-1.6.486}/tests/test_partner_site_request.py +0 -0
  268. {files_com-1.6.484 → files_com-1.6.486}/tests/test_path_parameter_encoding.py +0 -0
  269. {files_com-1.6.484 → files_com-1.6.486}/tests/test_payment.py +0 -0
  270. {files_com-1.6.484 → files_com-1.6.486}/tests/test_payment_line_item.py +0 -0
  271. {files_com-1.6.484 → files_com-1.6.486}/tests/test_pending_work_event.py +0 -0
  272. {files_com-1.6.484 → files_com-1.6.486}/tests/test_permission.py +0 -0
  273. {files_com-1.6.484 → files_com-1.6.486}/tests/test_preview.py +0 -0
  274. {files_com-1.6.484 → files_com-1.6.486}/tests/test_public_hosting_request_log.py +0 -0
  275. {files_com-1.6.484 → files_com-1.6.486}/tests/test_public_ip_address.py +0 -0
  276. {files_com-1.6.484 → files_com-1.6.486}/tests/test_public_key.py +0 -0
  277. {files_com-1.6.484 → files_com-1.6.486}/tests/test_redirect_auth.py +0 -0
  278. {files_com-1.6.484 → files_com-1.6.486}/tests/test_remote_bandwidth_snapshot.py +0 -0
  279. {files_com-1.6.484 → files_com-1.6.486}/tests/test_remote_mount_backend.py +0 -0
  280. {files_com-1.6.484 → files_com-1.6.486}/tests/test_remote_server.py +0 -0
  281. {files_com-1.6.484 → files_com-1.6.486}/tests/test_remote_server_configuration_file.py +0 -0
  282. {files_com-1.6.484 → files_com-1.6.486}/tests/test_remote_server_credential.py +0 -0
  283. {files_com-1.6.484 → files_com-1.6.486}/tests/test_request.py +0 -0
  284. {files_com-1.6.484 → files_com-1.6.486}/tests/test_restore.py +0 -0
  285. {files_com-1.6.484 → files_com-1.6.486}/tests/test_schedule.py +0 -0
  286. {files_com-1.6.484 → files_com-1.6.486}/tests/test_scheduled_export.py +0 -0
  287. {files_com-1.6.484 → files_com-1.6.486}/tests/test_scim_log.py +0 -0
  288. {files_com-1.6.484 → files_com-1.6.486}/tests/test_secret.py +0 -0
  289. {files_com-1.6.484 → files_com-1.6.486}/tests/test_session.py +0 -0
  290. {files_com-1.6.484 → files_com-1.6.486}/tests/test_settings_change.py +0 -0
  291. {files_com-1.6.484 → files_com-1.6.486}/tests/test_sftp_action_log.py +0 -0
  292. {files_com-1.6.484 → files_com-1.6.486}/tests/test_sftp_host_key.py +0 -0
  293. {files_com-1.6.484 → files_com-1.6.486}/tests/test_share_group.py +0 -0
  294. {files_com-1.6.484 → files_com-1.6.486}/tests/test_share_group_member.py +0 -0
  295. {files_com-1.6.484 → files_com-1.6.486}/tests/test_siem_http_destination.py +0 -0
  296. {files_com-1.6.484 → files_com-1.6.486}/tests/test_siem_http_destination_event.py +0 -0
  297. {files_com-1.6.484 → files_com-1.6.486}/tests/test_site.py +0 -0
  298. {files_com-1.6.484 → files_com-1.6.486}/tests/test_site_subdomain_redirect.py +0 -0
  299. {files_com-1.6.484 → files_com-1.6.486}/tests/test_snapshot.py +0 -0
  300. {files_com-1.6.484 → files_com-1.6.486}/tests/test_sso_event.py +0 -0
  301. {files_com-1.6.484 → files_com-1.6.486}/tests/test_sso_strategy.py +0 -0
  302. {files_com-1.6.484 → files_com-1.6.486}/tests/test_status.py +0 -0
  303. {files_com-1.6.484 → files_com-1.6.486}/tests/test_stream_download.py +0 -0
  304. {files_com-1.6.484 → files_com-1.6.486}/tests/test_style.py +0 -0
  305. {files_com-1.6.484 → files_com-1.6.486}/tests/test_sync.py +0 -0
  306. {files_com-1.6.484 → files_com-1.6.486}/tests/test_sync_log.py +0 -0
  307. {files_com-1.6.484 → files_com-1.6.486}/tests/test_sync_run.py +0 -0
  308. {files_com-1.6.484 → files_com-1.6.486}/tests/test_sync_run_live_transfer.py +0 -0
  309. {files_com-1.6.484 → files_com-1.6.486}/tests/test_usage_by_top_level_dir.py +0 -0
  310. {files_com-1.6.484 → files_com-1.6.486}/tests/test_usage_daily_snapshot.py +0 -0
  311. {files_com-1.6.484 → files_com-1.6.486}/tests/test_usage_snapshot.py +0 -0
  312. {files_com-1.6.484 → files_com-1.6.486}/tests/test_user.py +0 -0
  313. {files_com-1.6.484 → files_com-1.6.486}/tests/test_user_additional_email_recipient.py +0 -0
  314. {files_com-1.6.484 → files_com-1.6.486}/tests/test_user_cipher_use.py +0 -0
  315. {files_com-1.6.484 → files_com-1.6.486}/tests/test_user_lifecycle_rule.py +0 -0
  316. {files_com-1.6.484 → files_com-1.6.486}/tests/test_user_request.py +0 -0
  317. {files_com-1.6.484 → files_com-1.6.486}/tests/test_user_security_event.py +0 -0
  318. {files_com-1.6.484 → files_com-1.6.486}/tests/test_user_sftp_client_use.py +0 -0
  319. {files_com-1.6.484 → files_com-1.6.486}/tests/test_web_dav_action_log.py +0 -0
  320. {files_com-1.6.484 → files_com-1.6.486}/tests/test_webhook_test.py +0 -0
  321. {files_com-1.6.484 → files_com-1.6.486}/tests/test_workspace.py +0 -0
  322. {files_com-1.6.484 → files_com-1.6.486}/tests/test_workspace_id.py +0 -0
  323. {files_com-1.6.484 → files_com-1.6.486}/tests/test_zip_list_entry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: files_com
3
- Version: 1.6.484
3
+ Version: 1.6.486
4
4
  Summary: Python bindings for the Files.com API
5
5
  License: MIT
6
6
  Requires-Python: >=3.5
@@ -384,16 +384,16 @@ except files_sdk.error.Error as err:
384
384
 
385
385
  ## Paths
386
386
 
387
- Working with paths in Files.com involves several important considerations. Understanding how path comparisons are applied helps developers ensure consistency and accuracy across all interactions with the platform.
387
+ Files.com preserves the spelling of file and folder paths while comparing them using shared case and Unicode rules. Use the SDK comparison helpers when matching paths locally.
388
388
  <div></div>
389
389
 
390
390
  ### Capitalization
391
391
 
392
- Files.com compares paths in a **case-insensitive** manner. This means path segments are treated as equivalent regardless of letter casing.
392
+ Files.com uses case-insensitive path matching based on its fixed Unicode comparison map.
393
393
 
394
- For example, all of the following resolve to the same internal path:
394
+ For example, the following paths have the same comparison key:
395
395
 
396
- | Path Variant | Interpreted As |
396
+ | Path Variant | Comparison Key |
397
397
  |---------------------------------------|------------------------------|
398
398
  | `Documents/Reports/Q1.pdf` | `documents/reports/q1.pdf` |
399
399
  | `documents/reports/q1.PDF` | `documents/reports/q1.pdf` |
@@ -420,32 +420,27 @@ if files_sdk.path_util.is_same("Fïłèńämê.Txt", "filename.txt"):
420
420
 
421
421
  ### Slashes
422
422
 
423
- All path parameters in Files.com (API, SDKs, CLI, automations, integrations) must **omit leading and trailing slashes**. Paths are always treated as **absolute and slash-delimited**, so only internal `/` separators are used and never at the start or end of the string.
423
+ Use `/` between folder and file names, without leading or trailing slashes. SDK normalization helpers convert backslashes to `/`, remove duplicate separators, and discard exact `.` and `..` components. Discarding `..` leaves the preceding folder name intact.
424
424
 
425
- #### Path Slash Examples
426
- | Path | Valid? | Notes |
427
- |-----------------------------------|--------|-------------------------------|
428
- | `folder/subfolder/file.txt` | ✅ | Correct, internal separators only |
429
- | `/folder/subfolder/file.txt` | ❌ | Leading slash not allowed |
430
- | `folder/subfolder/file.txt/` | ❌ | Trailing slash not allowed |
431
- | `//folder//file.txt` | ❌ | Duplicate separators not allowed |
425
+ | Input | Normalized path |
426
+ |-------|-----------------|
427
+ | `folder/subfolder/file.txt` | `folder/subfolder/file.txt` |
428
+ | `/folder/subfolder/file.txt` | `folder/subfolder/file.txt` |
429
+ | `folder/subfolder/file.txt/` | `folder/subfolder/file.txt` |
430
+ | `//folder//file.txt` | `folder/file.txt` |
431
+ | `folder/../file.txt` | `folder/file.txt` |
432
432
 
433
433
  <div></div>
434
434
 
435
- ### Unicode Normalization
435
+ ### Unicode and Path Comparison
436
436
 
437
- Files.com normalizes all paths using [Unicode NFC (Normalization Form C)](https://www.unicode.org/reports/tr15/#Norm_Forms) before comparison. This ensures consistency across different representations of the same characters.
437
+ Files.com compares paths using a fixed mapping shared by the server and SDKs. It treats case and many accent differences as equivalent: `Résumé.txt` and `resume.txt` identify the same file, as do `q` followed by a combining acute accent and `q`. The mapping also handles other equivalences, such as Hiragana and Katakana. Lowercasing or applying a standard Unicode normalization form alone does not reproduce these rules.
438
438
 
439
- For example, the following two paths are treated as equivalent after NFC normalization:
439
+ SDK comparison helpers normalize path separators and dot segments, then apply the bundled [versioned comparison map](https://github.com/Files-com/files-sdk-javascript/blob/master/shared/path_comparison.json). The [shared examples](https://github.com/Files-com/files-sdk-javascript/blob/master/shared/comparison_examples.json) give exact comparison results for integrations that implement their own matching. The map uses hexadecimal Unicode scalar values as keys: a missing entry preserves the character, an empty replacement removes it, and other replacements may contain several characters. Apply each replacement once without normalizing or lowercasing the result again.
440
440
 
441
- | Input | Normalized Form |
442
- |----------------------------------------|------------------------|
443
- | `uploads/\u0065\u0301.txt` | `uploads/é.txt` |
444
- | `docs/Café/Report.txt` | `docs/Café/Report.txt` |
441
+ Use comparison results only for matching. Send the original path spelling in API requests and preserve it for display and local filenames; comparison results can have a different spelling or length.
445
442
 
446
- - All input must be UTF‑8 encoded.
447
- - Precomposed and decomposed characters are unified.
448
- - This affects search, deduplication, and comparisons across SDKs.
443
+ Trailing whitespace is significant for comparison. `report.txt` and `report.txt ` are different file paths, and SDK helpers preserve spaces, tabs, and newlines. Folder names cannot end in whitespace. See [Unicode Normalization](https://www.files.com/docs/files-and-folders/file-system-semantics/unicode-normalization) for the complete path rules.
449
444
 
450
445
  <div></div>
451
446
 
@@ -372,16 +372,16 @@ except files_sdk.error.Error as err:
372
372
 
373
373
  ## Paths
374
374
 
375
- Working with paths in Files.com involves several important considerations. Understanding how path comparisons are applied helps developers ensure consistency and accuracy across all interactions with the platform.
375
+ Files.com preserves the spelling of file and folder paths while comparing them using shared case and Unicode rules. Use the SDK comparison helpers when matching paths locally.
376
376
  <div></div>
377
377
 
378
378
  ### Capitalization
379
379
 
380
- Files.com compares paths in a **case-insensitive** manner. This means path segments are treated as equivalent regardless of letter casing.
380
+ Files.com uses case-insensitive path matching based on its fixed Unicode comparison map.
381
381
 
382
- For example, all of the following resolve to the same internal path:
382
+ For example, the following paths have the same comparison key:
383
383
 
384
- | Path Variant | Interpreted As |
384
+ | Path Variant | Comparison Key |
385
385
  |---------------------------------------|------------------------------|
386
386
  | `Documents/Reports/Q1.pdf` | `documents/reports/q1.pdf` |
387
387
  | `documents/reports/q1.PDF` | `documents/reports/q1.pdf` |
@@ -408,32 +408,27 @@ if files_sdk.path_util.is_same("Fïłèńämê.Txt", "filename.txt"):
408
408
 
409
409
  ### Slashes
410
410
 
411
- All path parameters in Files.com (API, SDKs, CLI, automations, integrations) must **omit leading and trailing slashes**. Paths are always treated as **absolute and slash-delimited**, so only internal `/` separators are used and never at the start or end of the string.
411
+ Use `/` between folder and file names, without leading or trailing slashes. SDK normalization helpers convert backslashes to `/`, remove duplicate separators, and discard exact `.` and `..` components. Discarding `..` leaves the preceding folder name intact.
412
412
 
413
- #### Path Slash Examples
414
- | Path | Valid? | Notes |
415
- |-----------------------------------|--------|-------------------------------|
416
- | `folder/subfolder/file.txt` | ✅ | Correct, internal separators only |
417
- | `/folder/subfolder/file.txt` | ❌ | Leading slash not allowed |
418
- | `folder/subfolder/file.txt/` | ❌ | Trailing slash not allowed |
419
- | `//folder//file.txt` | ❌ | Duplicate separators not allowed |
413
+ | Input | Normalized path |
414
+ |-------|-----------------|
415
+ | `folder/subfolder/file.txt` | `folder/subfolder/file.txt` |
416
+ | `/folder/subfolder/file.txt` | `folder/subfolder/file.txt` |
417
+ | `folder/subfolder/file.txt/` | `folder/subfolder/file.txt` |
418
+ | `//folder//file.txt` | `folder/file.txt` |
419
+ | `folder/../file.txt` | `folder/file.txt` |
420
420
 
421
421
  <div></div>
422
422
 
423
- ### Unicode Normalization
423
+ ### Unicode and Path Comparison
424
424
 
425
- Files.com normalizes all paths using [Unicode NFC (Normalization Form C)](https://www.unicode.org/reports/tr15/#Norm_Forms) before comparison. This ensures consistency across different representations of the same characters.
425
+ Files.com compares paths using a fixed mapping shared by the server and SDKs. It treats case and many accent differences as equivalent: `Résumé.txt` and `resume.txt` identify the same file, as do `q` followed by a combining acute accent and `q`. The mapping also handles other equivalences, such as Hiragana and Katakana. Lowercasing or applying a standard Unicode normalization form alone does not reproduce these rules.
426
426
 
427
- For example, the following two paths are treated as equivalent after NFC normalization:
427
+ SDK comparison helpers normalize path separators and dot segments, then apply the bundled [versioned comparison map](https://github.com/Files-com/files-sdk-javascript/blob/master/shared/path_comparison.json). The [shared examples](https://github.com/Files-com/files-sdk-javascript/blob/master/shared/comparison_examples.json) give exact comparison results for integrations that implement their own matching. The map uses hexadecimal Unicode scalar values as keys: a missing entry preserves the character, an empty replacement removes it, and other replacements may contain several characters. Apply each replacement once without normalizing or lowercasing the result again.
428
428
 
429
- | Input | Normalized Form |
430
- |----------------------------------------|------------------------|
431
- | `uploads/\u0065\u0301.txt` | `uploads/é.txt` |
432
- | `docs/Café/Report.txt` | `docs/Café/Report.txt` |
429
+ Use comparison results only for matching. Send the original path spelling in API requests and preserve it for display and local filenames; comparison results can have a different spelling or length.
433
430
 
434
- - All input must be UTF‑8 encoded.
435
- - Precomposed and decomposed characters are unified.
436
- - This affects search, deduplication, and comparisons across SDKs.
431
+ Trailing whitespace is significant for comparison. `report.txt` and `report.txt ` are different file paths, and SDK helpers preserve spaces, tabs, and newlines. Folder names cannot end in whitespace. See [Unicode Normalization](https://www.files.com/docs/files-and-folders/file-system-semantics/unicode-normalization) for the complete path rules.
437
432
 
438
433
  <div></div>
439
434
 
@@ -0,0 +1 @@
1
+ 1.6.486
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: files_com
3
- Version: 1.6.484
3
+ Version: 1.6.486
4
4
  Summary: Python bindings for the Files.com API
5
5
  License: MIT
6
6
  Requires-Python: >=3.5
@@ -384,16 +384,16 @@ except files_sdk.error.Error as err:
384
384
 
385
385
  ## Paths
386
386
 
387
- Working with paths in Files.com involves several important considerations. Understanding how path comparisons are applied helps developers ensure consistency and accuracy across all interactions with the platform.
387
+ Files.com preserves the spelling of file and folder paths while comparing them using shared case and Unicode rules. Use the SDK comparison helpers when matching paths locally.
388
388
  <div></div>
389
389
 
390
390
  ### Capitalization
391
391
 
392
- Files.com compares paths in a **case-insensitive** manner. This means path segments are treated as equivalent regardless of letter casing.
392
+ Files.com uses case-insensitive path matching based on its fixed Unicode comparison map.
393
393
 
394
- For example, all of the following resolve to the same internal path:
394
+ For example, the following paths have the same comparison key:
395
395
 
396
- | Path Variant | Interpreted As |
396
+ | Path Variant | Comparison Key |
397
397
  |---------------------------------------|------------------------------|
398
398
  | `Documents/Reports/Q1.pdf` | `documents/reports/q1.pdf` |
399
399
  | `documents/reports/q1.PDF` | `documents/reports/q1.pdf` |
@@ -420,32 +420,27 @@ if files_sdk.path_util.is_same("Fïłèńämê.Txt", "filename.txt"):
420
420
 
421
421
  ### Slashes
422
422
 
423
- All path parameters in Files.com (API, SDKs, CLI, automations, integrations) must **omit leading and trailing slashes**. Paths are always treated as **absolute and slash-delimited**, so only internal `/` separators are used and never at the start or end of the string.
423
+ Use `/` between folder and file names, without leading or trailing slashes. SDK normalization helpers convert backslashes to `/`, remove duplicate separators, and discard exact `.` and `..` components. Discarding `..` leaves the preceding folder name intact.
424
424
 
425
- #### Path Slash Examples
426
- | Path | Valid? | Notes |
427
- |-----------------------------------|--------|-------------------------------|
428
- | `folder/subfolder/file.txt` | ✅ | Correct, internal separators only |
429
- | `/folder/subfolder/file.txt` | ❌ | Leading slash not allowed |
430
- | `folder/subfolder/file.txt/` | ❌ | Trailing slash not allowed |
431
- | `//folder//file.txt` | ❌ | Duplicate separators not allowed |
425
+ | Input | Normalized path |
426
+ |-------|-----------------|
427
+ | `folder/subfolder/file.txt` | `folder/subfolder/file.txt` |
428
+ | `/folder/subfolder/file.txt` | `folder/subfolder/file.txt` |
429
+ | `folder/subfolder/file.txt/` | `folder/subfolder/file.txt` |
430
+ | `//folder//file.txt` | `folder/file.txt` |
431
+ | `folder/../file.txt` | `folder/file.txt` |
432
432
 
433
433
  <div></div>
434
434
 
435
- ### Unicode Normalization
435
+ ### Unicode and Path Comparison
436
436
 
437
- Files.com normalizes all paths using [Unicode NFC (Normalization Form C)](https://www.unicode.org/reports/tr15/#Norm_Forms) before comparison. This ensures consistency across different representations of the same characters.
437
+ Files.com compares paths using a fixed mapping shared by the server and SDKs. It treats case and many accent differences as equivalent: `Résumé.txt` and `resume.txt` identify the same file, as do `q` followed by a combining acute accent and `q`. The mapping also handles other equivalences, such as Hiragana and Katakana. Lowercasing or applying a standard Unicode normalization form alone does not reproduce these rules.
438
438
 
439
- For example, the following two paths are treated as equivalent after NFC normalization:
439
+ SDK comparison helpers normalize path separators and dot segments, then apply the bundled [versioned comparison map](https://github.com/Files-com/files-sdk-javascript/blob/master/shared/path_comparison.json). The [shared examples](https://github.com/Files-com/files-sdk-javascript/blob/master/shared/comparison_examples.json) give exact comparison results for integrations that implement their own matching. The map uses hexadecimal Unicode scalar values as keys: a missing entry preserves the character, an empty replacement removes it, and other replacements may contain several characters. Apply each replacement once without normalizing or lowercasing the result again.
440
440
 
441
- | Input | Normalized Form |
442
- |----------------------------------------|------------------------|
443
- | `uploads/\u0065\u0301.txt` | `uploads/é.txt` |
444
- | `docs/Café/Report.txt` | `docs/Café/Report.txt` |
441
+ Use comparison results only for matching. Send the original path spelling in API requests and preserve it for display and local filenames; comparison results can have a different spelling or length.
445
442
 
446
- - All input must be UTF‑8 encoded.
447
- - Precomposed and decomposed characters are unified.
448
- - This affects search, deduplication, and comparisons across SDKs.
443
+ Trailing whitespace is significant for comparison. `report.txt` and `report.txt ` are different file paths, and SDK helpers preserve spaces, tabs, and newlines. Folder names cannot end in whitespace. See [Unicode Normalization](https://www.files.com/docs/files-and-folders/file-system-semantics/unicode-normalization) for the complete path rules.
449
444
 
450
445
  <div></div>
451
446
 
@@ -11,6 +11,7 @@ files_sdk/api.py
11
11
  files_sdk/api_client.py
12
12
  files_sdk/error.py
13
13
  files_sdk/list_obj.py
14
+ files_sdk/path_comparison.json
14
15
  files_sdk/path_util.py
15
16
  files_sdk/util.py
16
17
  files_sdk/../README.md
@@ -300,6 +301,7 @@ tests/test_sync.py
300
301
  tests/test_sync_log.py
301
302
  tests/test_sync_run.py
302
303
  tests/test_sync_run_live_transfer.py
304
+ tests/test_transfer_privacy.py
303
305
  tests/test_usage_by_top_level_dir.py
304
306
  tests/test_usage_daily_snapshot.py
305
307
  tests/test_usage_snapshot.py
@@ -320,7 +320,7 @@ source_ip = None
320
320
  workspace_id = None
321
321
  base_url = "https://app.files.com"
322
322
  base_path = "api/rest/v1"
323
- version = "1.6.484"
323
+ version = "1.6.486"
324
324
 
325
325
  __version__ = version
326
326
 
@@ -65,7 +65,7 @@ class ApiClient:
65
65
  headers = {}
66
66
  req = requests.Request(method, url=url, headers=headers, data=body)
67
67
 
68
- response = self.execute_request_with_auto_retry(req)
68
+ response = self.execute_request_with_auto_retry(req, is_transfer=True)
69
69
  return response
70
70
 
71
71
  def send_request(
@@ -166,6 +166,7 @@ class ApiClient:
166
166
  return response
167
167
 
168
168
  def stream_download(self, uri, io, is_string_io=False):
169
+ util.log_debug("Download request", url=uri)
169
170
  # NOTE the stream=True parameter below
170
171
  try:
171
172
  with requests.get(
@@ -187,9 +188,14 @@ class ApiClient:
187
188
  requests.exceptions.ChunkedEncodingError,
188
189
  ) as e:
189
190
  raise self.handle_network_error(e, e.request, 0) from None
191
+ except requests.exceptions.HTTPError as e:
192
+ util.log_debug("Transfer error details", error_message=e)
193
+ raise APIError(
194
+ "Transfer request failed", http_status=e.response.status_code
195
+ ) from None
190
196
 
191
197
  def execute_request_with_auto_retry(
192
- self, request, skip_body_logging=False
198
+ self, request, skip_body_logging=False, is_transfer=False
193
199
  ):
194
200
  for try_num in range(0, files_sdk.max_network_retries):
195
201
  response = None
@@ -227,7 +233,9 @@ class ApiClient:
227
233
 
228
234
  if try_num + 1 == files_sdk.max_network_retries:
229
235
  if response is not None:
230
- self.handle_error_response(response)
236
+ self.handle_error_response(
237
+ response, is_transfer=is_transfer
238
+ )
231
239
  else:
232
240
  raise self.handle_network_error(
233
241
  e, request, try_num
@@ -296,7 +304,7 @@ class ApiClient:
296
304
  msg += " Additional Information: {}".format(extra_info)
297
305
  return APIError(msg)
298
306
 
299
- def handle_error_response(self, response):
307
+ def handle_error_response(self, response, is_transfer=False):
300
308
  error_data = None
301
309
 
302
310
  try:
@@ -317,18 +325,27 @@ class ApiClient:
317
325
  if not error_data:
318
326
  raise Error("Unknown error")
319
327
  except Error:
328
+ if is_transfer:
329
+ raise APIError(
330
+ "Transfer request failed", http_status=response.status_code
331
+ ) from None
320
332
  raise self.general_api_error(response, "Unknown error")
321
333
 
322
- error = self.specific_api_error(response, error_data)
334
+ error = self.specific_api_error(
335
+ response, error_data, is_transfer=is_transfer
336
+ )
323
337
 
324
338
  error.response = response
325
- raise error
339
+ raise error from None
326
340
 
327
- def specific_api_error(self, response, error_data):
341
+ def specific_api_error(self, response, error_data, is_transfer=False):
328
342
  import files_sdk.error
329
343
 
344
+ message = (
345
+ "Transfer request failed" if is_transfer else error_data["message"]
346
+ )
330
347
  util.log_error(
331
- "API error", status=response.status_code, error_message=error_data
348
+ "API error", status=response.status_code, error_message=message
332
349
  )
333
350
 
334
351
  opts = {
@@ -344,32 +361,31 @@ class ApiClient:
344
361
  "".join(list(map(str.capitalize, error_type.split("-")))) + "Error"
345
362
  )
346
363
  try:
347
- return getattr(files_sdk.error, error_class_name)(
348
- error_data["message"], **opts
349
- )
364
+ return getattr(files_sdk.error, error_class_name)(message, **opts)
350
365
  except AttributeError:
351
- return APIError(error_data["message"], **opts)
366
+ return APIError(message, **opts)
352
367
 
353
368
  def handle_network_error(self, error, request, num_retries):
354
- util.log_error("Network error", error_message=error)
369
+ util.log_error("Network error", error_type=type(error).__name__)
370
+ util.log_debug("Network error details", error_message=error)
355
371
  msg = "Could not connect to Files.com at URL {}. Please check your internet connection and try again. If this problem persists, you should check Files.com's service status at https://status.files.com, or contact your primary account representative.".format(
356
372
  files_sdk.base_url
357
373
  )
358
374
  if num_retries > 0:
359
375
  msg += " Request was retried {} times.".format(num_retries)
360
- msg += "\n\n(Network error: {})".format(error)
376
+ msg += "\n\n(Network error: {})".format(type(error).__name__)
361
377
 
362
378
  return APIConnectionError(msg)
363
379
 
364
380
  def log_request(self, request, num_retries):
365
381
  util.log_info(
366
- "Request",
367
- method=request.method,
368
- num_retries=num_retries,
369
- url=request.url,
382
+ "Request", method=request.method, num_retries=num_retries
370
383
  )
371
384
  util.log_debug(
372
- "Request details", body=request.data, query_params=request.params
385
+ "Request details",
386
+ url=request.url,
387
+ body=request.data,
388
+ query_params=request.params,
373
389
  )
374
390
 
375
391
  def log_response(self, request, request_start, status, body):
@@ -377,7 +393,6 @@ class ApiClient:
377
393
  "Response",
378
394
  elapsed=(time.time() - request_start),
379
395
  method=request.method,
380
- url=request.url,
381
396
  status=status,
382
397
  )
383
398
  util.log_debug("Response details", body=body)
@@ -386,7 +401,7 @@ class ApiClient:
386
401
  util.log_error(
387
402
  "Error",
388
403
  elapsed=(time.time() - request_start),
389
- error_message=error,
404
+ error_type=type(error).__name__,
390
405
  method=request.method,
391
- url=request.url,
392
406
  )
407
+ util.log_debug("Error details", error_message=error, url=request.url)