files-com 1.6.485__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 (321) hide show
  1. {files_com-1.6.485/files_com.egg-info → files_com-1.6.486}/PKG-INFO +1 -1
  2. files_com-1.6.486/_VERSION +1 -0
  3. {files_com-1.6.485 → files_com-1.6.486/files_com.egg-info}/PKG-INFO +1 -1
  4. {files_com-1.6.485 → files_com-1.6.486}/files_com.egg-info/SOURCES.txt +1 -0
  5. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/__init__.py +1 -1
  6. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/api_client.py +37 -22
  7. {files_com-1.6.485 → files_com-1.6.486}/pyproject.toml +1 -1
  8. files_com-1.6.486/tests/test_transfer_privacy.py +97 -0
  9. files_com-1.6.485/_VERSION +0 -1
  10. {files_com-1.6.485 → files_com-1.6.486}/LICENSE +0 -0
  11. {files_com-1.6.485 → files_com-1.6.486}/README.md +0 -0
  12. {files_com-1.6.485 → files_com-1.6.486}/files_com.egg-info/dependency_links.txt +0 -0
  13. {files_com-1.6.485 → files_com-1.6.486}/files_com.egg-info/requires.txt +0 -0
  14. {files_com-1.6.485 → files_com-1.6.486}/files_com.egg-info/top_level.txt +0 -0
  15. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/api.py +0 -0
  16. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/error.py +0 -0
  17. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/list_obj.py +0 -0
  18. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/__init__.py +0 -0
  19. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/account_line_item.py +0 -0
  20. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/action.py +0 -0
  21. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/action_log.py +0 -0
  22. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/action_notification_export.py +0 -0
  23. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/action_notification_export_result.py +0 -0
  24. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/agent_node.py +0 -0
  25. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/agent_node_connection.py +0 -0
  26. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/agent_node_instance.py +0 -0
  27. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/agent_push_update.py +0 -0
  28. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/ai_assistant_personality.py +0 -0
  29. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/ai_task.py +0 -0
  30. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/api_key.py +0 -0
  31. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/api_request_log.py +0 -0
  32. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/app.py +0 -0
  33. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/as2_incoming_message.py +0 -0
  34. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/as2_outgoing_message.py +0 -0
  35. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/as2_partner.py +0 -0
  36. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/as2_station.py +0 -0
  37. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/auto.py +0 -0
  38. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/automation.py +0 -0
  39. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/automation_authoring_schema.py +0 -0
  40. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/automation_execution_node.py +0 -0
  41. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/automation_log.py +0 -0
  42. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/automation_run.py +0 -0
  43. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/bandwidth_snapshot.py +0 -0
  44. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/behavior.py +0 -0
  45. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/bundle.py +0 -0
  46. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/bundle_action.py +0 -0
  47. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/bundle_download.py +0 -0
  48. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/bundle_notification.py +0 -0
  49. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/bundle_path.py +0 -0
  50. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/bundle_recipient.py +0 -0
  51. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/bundle_registration.py +0 -0
  52. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/chat_message.py +0 -0
  53. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/chat_session.py +0 -0
  54. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/child_site_management_policy.py +0 -0
  55. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/clickwrap.py +0 -0
  56. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/custom_domain.py +0 -0
  57. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/desktop_configuration_profile.py +0 -0
  58. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/direct_connection_info.py +0 -0
  59. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/dns_record.py +0 -0
  60. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/email_incoming_message.py +0 -0
  61. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/email_log.py +0 -0
  62. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/errors.py +0 -0
  63. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/event_channel.py +0 -0
  64. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/event_delivery_attempt.py +0 -0
  65. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/event_record.py +0 -0
  66. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/event_subscription.py +0 -0
  67. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/event_target.py +0 -0
  68. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/exavault_api_request_log.py +0 -0
  69. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/expectation.py +0 -0
  70. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/expectation_evaluation.py +0 -0
  71. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/expectation_incident.py +0 -0
  72. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/external_event.py +0 -0
  73. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/file.py +0 -0
  74. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/file_action.py +0 -0
  75. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/file_comment.py +0 -0
  76. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/file_comment_reaction.py +0 -0
  77. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/file_migration.py +0 -0
  78. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/file_migration_log.py +0 -0
  79. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/file_upload_part.py +0 -0
  80. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/folder.py +0 -0
  81. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/form_field.py +0 -0
  82. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/form_field_set.py +0 -0
  83. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/ftp_action_log.py +0 -0
  84. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/gpg_key.py +0 -0
  85. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/group.py +0 -0
  86. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/group_user.py +0 -0
  87. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/history.py +0 -0
  88. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/history_export.py +0 -0
  89. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/history_export_result.py +0 -0
  90. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/holiday_calendar.py +0 -0
  91. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/holiday_region.py +0 -0
  92. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/image.py +0 -0
  93. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/inbound_s3_log.py +0 -0
  94. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/inbox_recipient.py +0 -0
  95. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/inbox_registration.py +0 -0
  96. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/inbox_upload.py +0 -0
  97. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/integration_centric_profile.py +0 -0
  98. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/invoice.py +0 -0
  99. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/invoice_line_item.py +0 -0
  100. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/ip_address.py +0 -0
  101. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/key_lifecycle_rule.py +0 -0
  102. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/lock.py +0 -0
  103. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/metadata_category.py +0 -0
  104. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/notification.py +0 -0
  105. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/outbound_connection_log.py +0 -0
  106. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/partner.py +0 -0
  107. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/partner_channel.py +0 -0
  108. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/partner_channel_template.py +0 -0
  109. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/partner_connection.py +0 -0
  110. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/partner_site.py +0 -0
  111. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/partner_site_request.py +0 -0
  112. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/payment.py +0 -0
  113. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/payment_line_item.py +0 -0
  114. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/pending_work_event.py +0 -0
  115. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/permission.py +0 -0
  116. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/preview.py +0 -0
  117. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/public_hosting_request_log.py +0 -0
  118. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/public_ip_address.py +0 -0
  119. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/public_key.py +0 -0
  120. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/remote_bandwidth_snapshot.py +0 -0
  121. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/remote_mount_backend.py +0 -0
  122. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/remote_server.py +0 -0
  123. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/remote_server_configuration_file.py +0 -0
  124. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/remote_server_credential.py +0 -0
  125. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/request.py +0 -0
  126. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/restore.py +0 -0
  127. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/schedule.py +0 -0
  128. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/scheduled_export.py +0 -0
  129. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/scim_log.py +0 -0
  130. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/secret.py +0 -0
  131. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/session.py +0 -0
  132. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/settings_change.py +0 -0
  133. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/sftp_action_log.py +0 -0
  134. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/sftp_host_key.py +0 -0
  135. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/share_group.py +0 -0
  136. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/share_group_member.py +0 -0
  137. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/siem_http_destination.py +0 -0
  138. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/siem_http_destination_event.py +0 -0
  139. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/site.py +0 -0
  140. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/site_subdomain_redirect.py +0 -0
  141. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/snapshot.py +0 -0
  142. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/sso_event.py +0 -0
  143. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/sso_strategy.py +0 -0
  144. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/status.py +0 -0
  145. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/style.py +0 -0
  146. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/sync.py +0 -0
  147. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/sync_log.py +0 -0
  148. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/sync_run.py +0 -0
  149. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/sync_run_live_transfer.py +0 -0
  150. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/usage_by_top_level_dir.py +0 -0
  151. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/usage_daily_snapshot.py +0 -0
  152. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/usage_snapshot.py +0 -0
  153. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/user.py +0 -0
  154. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/user_additional_email_recipient.py +0 -0
  155. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/user_cipher_use.py +0 -0
  156. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/user_lifecycle_rule.py +0 -0
  157. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/user_request.py +0 -0
  158. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/user_security_event.py +0 -0
  159. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/user_sftp_client_use.py +0 -0
  160. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/web_dav_action_log.py +0 -0
  161. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/webhook_test.py +0 -0
  162. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/workspace.py +0 -0
  163. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/models/zip_list_entry.py +0 -0
  164. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/path_comparison.json +0 -0
  165. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/path_util.py +0 -0
  166. {files_com-1.6.485 → files_com-1.6.486}/files_sdk/util.py +0 -0
  167. {files_com-1.6.485 → files_com-1.6.486}/setup.cfg +0 -0
  168. {files_com-1.6.485 → files_com-1.6.486}/tests/test_account_line_item.py +0 -0
  169. {files_com-1.6.485 → files_com-1.6.486}/tests/test_action.py +0 -0
  170. {files_com-1.6.485 → files_com-1.6.486}/tests/test_action_log.py +0 -0
  171. {files_com-1.6.485 → files_com-1.6.486}/tests/test_action_notification_export.py +0 -0
  172. {files_com-1.6.485 → files_com-1.6.486}/tests/test_action_notification_export_result.py +0 -0
  173. {files_com-1.6.485 → files_com-1.6.486}/tests/test_agent_node.py +0 -0
  174. {files_com-1.6.485 → files_com-1.6.486}/tests/test_agent_node_connection.py +0 -0
  175. {files_com-1.6.485 → files_com-1.6.486}/tests/test_agent_node_instance.py +0 -0
  176. {files_com-1.6.485 → files_com-1.6.486}/tests/test_agent_push_update.py +0 -0
  177. {files_com-1.6.485 → files_com-1.6.486}/tests/test_ai_assistant_personality.py +0 -0
  178. {files_com-1.6.485 → files_com-1.6.486}/tests/test_ai_task.py +0 -0
  179. {files_com-1.6.485 → files_com-1.6.486}/tests/test_api_errors.py +0 -0
  180. {files_com-1.6.485 → files_com-1.6.486}/tests/test_api_key.py +0 -0
  181. {files_com-1.6.485 → files_com-1.6.486}/tests/test_api_request_log.py +0 -0
  182. {files_com-1.6.485 → files_com-1.6.486}/tests/test_app.py +0 -0
  183. {files_com-1.6.485 → files_com-1.6.486}/tests/test_as2_incoming_message.py +0 -0
  184. {files_com-1.6.485 → files_com-1.6.486}/tests/test_as2_outgoing_message.py +0 -0
  185. {files_com-1.6.485 → files_com-1.6.486}/tests/test_as2_partner.py +0 -0
  186. {files_com-1.6.485 → files_com-1.6.486}/tests/test_as2_station.py +0 -0
  187. {files_com-1.6.485 → files_com-1.6.486}/tests/test_auto.py +0 -0
  188. {files_com-1.6.485 → files_com-1.6.486}/tests/test_automation.py +0 -0
  189. {files_com-1.6.485 → files_com-1.6.486}/tests/test_automation_authoring_schema.py +0 -0
  190. {files_com-1.6.485 → files_com-1.6.486}/tests/test_automation_execution_node.py +0 -0
  191. {files_com-1.6.485 → files_com-1.6.486}/tests/test_automation_log.py +0 -0
  192. {files_com-1.6.485 → files_com-1.6.486}/tests/test_automation_run.py +0 -0
  193. {files_com-1.6.485 → files_com-1.6.486}/tests/test_bandwidth_snapshot.py +0 -0
  194. {files_com-1.6.485 → files_com-1.6.486}/tests/test_behavior.py +0 -0
  195. {files_com-1.6.485 → files_com-1.6.486}/tests/test_bundle.py +0 -0
  196. {files_com-1.6.485 → files_com-1.6.486}/tests/test_bundle_action.py +0 -0
  197. {files_com-1.6.485 → files_com-1.6.486}/tests/test_bundle_download.py +0 -0
  198. {files_com-1.6.485 → files_com-1.6.486}/tests/test_bundle_notification.py +0 -0
  199. {files_com-1.6.485 → files_com-1.6.486}/tests/test_bundle_path.py +0 -0
  200. {files_com-1.6.485 → files_com-1.6.486}/tests/test_bundle_recipient.py +0 -0
  201. {files_com-1.6.485 → files_com-1.6.486}/tests/test_bundle_registration.py +0 -0
  202. {files_com-1.6.485 → files_com-1.6.486}/tests/test_chat_message.py +0 -0
  203. {files_com-1.6.485 → files_com-1.6.486}/tests/test_chat_session.py +0 -0
  204. {files_com-1.6.485 → files_com-1.6.486}/tests/test_child_site_management_policy.py +0 -0
  205. {files_com-1.6.485 → files_com-1.6.486}/tests/test_clickwrap.py +0 -0
  206. {files_com-1.6.485 → files_com-1.6.486}/tests/test_connection_adapter.py +0 -0
  207. {files_com-1.6.485 → files_com-1.6.486}/tests/test_custom_domain.py +0 -0
  208. {files_com-1.6.485 → files_com-1.6.486}/tests/test_decimal_contract.py +0 -0
  209. {files_com-1.6.485 → files_com-1.6.486}/tests/test_desktop_configuration_profile.py +0 -0
  210. {files_com-1.6.485 → files_com-1.6.486}/tests/test_direct_connection_info.py +0 -0
  211. {files_com-1.6.485 → files_com-1.6.486}/tests/test_dns_record.py +0 -0
  212. {files_com-1.6.485 → files_com-1.6.486}/tests/test_email_incoming_message.py +0 -0
  213. {files_com-1.6.485 → files_com-1.6.486}/tests/test_email_log.py +0 -0
  214. {files_com-1.6.485 → files_com-1.6.486}/tests/test_errors.py +0 -0
  215. {files_com-1.6.485 → files_com-1.6.486}/tests/test_event_channel.py +0 -0
  216. {files_com-1.6.485 → files_com-1.6.486}/tests/test_event_delivery_attempt.py +0 -0
  217. {files_com-1.6.485 → files_com-1.6.486}/tests/test_event_record.py +0 -0
  218. {files_com-1.6.485 → files_com-1.6.486}/tests/test_event_subscription.py +0 -0
  219. {files_com-1.6.485 → files_com-1.6.486}/tests/test_event_target.py +0 -0
  220. {files_com-1.6.485 → files_com-1.6.486}/tests/test_exavault_api_request_log.py +0 -0
  221. {files_com-1.6.485 → files_com-1.6.486}/tests/test_expectation.py +0 -0
  222. {files_com-1.6.485 → files_com-1.6.486}/tests/test_expectation_evaluation.py +0 -0
  223. {files_com-1.6.485 → files_com-1.6.486}/tests/test_expectation_incident.py +0 -0
  224. {files_com-1.6.485 → files_com-1.6.486}/tests/test_external_event.py +0 -0
  225. {files_com-1.6.485 → files_com-1.6.486}/tests/test_file.py +0 -0
  226. {files_com-1.6.485 → files_com-1.6.486}/tests/test_file_action.py +0 -0
  227. {files_com-1.6.485 → files_com-1.6.486}/tests/test_file_comment.py +0 -0
  228. {files_com-1.6.485 → files_com-1.6.486}/tests/test_file_comment_reaction.py +0 -0
  229. {files_com-1.6.485 → files_com-1.6.486}/tests/test_file_migration.py +0 -0
  230. {files_com-1.6.485 → files_com-1.6.486}/tests/test_file_migration_log.py +0 -0
  231. {files_com-1.6.485 → files_com-1.6.486}/tests/test_file_underscore_destinations.py +0 -0
  232. {files_com-1.6.485 → files_com-1.6.486}/tests/test_file_upload_part.py +0 -0
  233. {files_com-1.6.485 → files_com-1.6.486}/tests/test_folder.py +0 -0
  234. {files_com-1.6.485 → files_com-1.6.486}/tests/test_form_field.py +0 -0
  235. {files_com-1.6.485 → files_com-1.6.486}/tests/test_form_field_set.py +0 -0
  236. {files_com-1.6.485 → files_com-1.6.486}/tests/test_ftp_action_log.py +0 -0
  237. {files_com-1.6.485 → files_com-1.6.486}/tests/test_gpg_key.py +0 -0
  238. {files_com-1.6.485 → files_com-1.6.486}/tests/test_group.py +0 -0
  239. {files_com-1.6.485 → files_com-1.6.486}/tests/test_group_user.py +0 -0
  240. {files_com-1.6.485 → files_com-1.6.486}/tests/test_history.py +0 -0
  241. {files_com-1.6.485 → files_com-1.6.486}/tests/test_history_export.py +0 -0
  242. {files_com-1.6.485 → files_com-1.6.486}/tests/test_history_export_result.py +0 -0
  243. {files_com-1.6.485 → files_com-1.6.486}/tests/test_holiday_calendar.py +0 -0
  244. {files_com-1.6.485 → files_com-1.6.486}/tests/test_holiday_region.py +0 -0
  245. {files_com-1.6.485 → files_com-1.6.486}/tests/test_image.py +0 -0
  246. {files_com-1.6.485 → files_com-1.6.486}/tests/test_inbound_s3_log.py +0 -0
  247. {files_com-1.6.485 → files_com-1.6.486}/tests/test_inbox_recipient.py +0 -0
  248. {files_com-1.6.485 → files_com-1.6.486}/tests/test_inbox_registration.py +0 -0
  249. {files_com-1.6.485 → files_com-1.6.486}/tests/test_inbox_upload.py +0 -0
  250. {files_com-1.6.485 → files_com-1.6.486}/tests/test_integration_centric_profile.py +0 -0
  251. {files_com-1.6.485 → files_com-1.6.486}/tests/test_invoice.py +0 -0
  252. {files_com-1.6.485 → files_com-1.6.486}/tests/test_invoice_line_item.py +0 -0
  253. {files_com-1.6.485 → files_com-1.6.486}/tests/test_ip_address.py +0 -0
  254. {files_com-1.6.485 → files_com-1.6.486}/tests/test_key_lifecycle_rule.py +0 -0
  255. {files_com-1.6.485 → files_com-1.6.486}/tests/test_lock.py +0 -0
  256. {files_com-1.6.485 → files_com-1.6.486}/tests/test_metadata_category.py +0 -0
  257. {files_com-1.6.485 → files_com-1.6.486}/tests/test_notification.py +0 -0
  258. {files_com-1.6.485 → files_com-1.6.486}/tests/test_outbound_connection_log.py +0 -0
  259. {files_com-1.6.485 → files_com-1.6.486}/tests/test_partner.py +0 -0
  260. {files_com-1.6.485 → files_com-1.6.486}/tests/test_partner_channel.py +0 -0
  261. {files_com-1.6.485 → files_com-1.6.486}/tests/test_partner_channel_template.py +0 -0
  262. {files_com-1.6.485 → files_com-1.6.486}/tests/test_partner_connection.py +0 -0
  263. {files_com-1.6.485 → files_com-1.6.486}/tests/test_partner_site.py +0 -0
  264. {files_com-1.6.485 → files_com-1.6.486}/tests/test_partner_site_request.py +0 -0
  265. {files_com-1.6.485 → files_com-1.6.486}/tests/test_path_parameter_encoding.py +0 -0
  266. {files_com-1.6.485 → files_com-1.6.486}/tests/test_path_util.py +0 -0
  267. {files_com-1.6.485 → files_com-1.6.486}/tests/test_payment.py +0 -0
  268. {files_com-1.6.485 → files_com-1.6.486}/tests/test_payment_line_item.py +0 -0
  269. {files_com-1.6.485 → files_com-1.6.486}/tests/test_pending_work_event.py +0 -0
  270. {files_com-1.6.485 → files_com-1.6.486}/tests/test_permission.py +0 -0
  271. {files_com-1.6.485 → files_com-1.6.486}/tests/test_preview.py +0 -0
  272. {files_com-1.6.485 → files_com-1.6.486}/tests/test_public_hosting_request_log.py +0 -0
  273. {files_com-1.6.485 → files_com-1.6.486}/tests/test_public_ip_address.py +0 -0
  274. {files_com-1.6.485 → files_com-1.6.486}/tests/test_public_key.py +0 -0
  275. {files_com-1.6.485 → files_com-1.6.486}/tests/test_redirect_auth.py +0 -0
  276. {files_com-1.6.485 → files_com-1.6.486}/tests/test_remote_bandwidth_snapshot.py +0 -0
  277. {files_com-1.6.485 → files_com-1.6.486}/tests/test_remote_mount_backend.py +0 -0
  278. {files_com-1.6.485 → files_com-1.6.486}/tests/test_remote_server.py +0 -0
  279. {files_com-1.6.485 → files_com-1.6.486}/tests/test_remote_server_configuration_file.py +0 -0
  280. {files_com-1.6.485 → files_com-1.6.486}/tests/test_remote_server_credential.py +0 -0
  281. {files_com-1.6.485 → files_com-1.6.486}/tests/test_request.py +0 -0
  282. {files_com-1.6.485 → files_com-1.6.486}/tests/test_restore.py +0 -0
  283. {files_com-1.6.485 → files_com-1.6.486}/tests/test_schedule.py +0 -0
  284. {files_com-1.6.485 → files_com-1.6.486}/tests/test_scheduled_export.py +0 -0
  285. {files_com-1.6.485 → files_com-1.6.486}/tests/test_scim_log.py +0 -0
  286. {files_com-1.6.485 → files_com-1.6.486}/tests/test_secret.py +0 -0
  287. {files_com-1.6.485 → files_com-1.6.486}/tests/test_session.py +0 -0
  288. {files_com-1.6.485 → files_com-1.6.486}/tests/test_settings_change.py +0 -0
  289. {files_com-1.6.485 → files_com-1.6.486}/tests/test_sftp_action_log.py +0 -0
  290. {files_com-1.6.485 → files_com-1.6.486}/tests/test_sftp_host_key.py +0 -0
  291. {files_com-1.6.485 → files_com-1.6.486}/tests/test_share_group.py +0 -0
  292. {files_com-1.6.485 → files_com-1.6.486}/tests/test_share_group_member.py +0 -0
  293. {files_com-1.6.485 → files_com-1.6.486}/tests/test_siem_http_destination.py +0 -0
  294. {files_com-1.6.485 → files_com-1.6.486}/tests/test_siem_http_destination_event.py +0 -0
  295. {files_com-1.6.485 → files_com-1.6.486}/tests/test_site.py +0 -0
  296. {files_com-1.6.485 → files_com-1.6.486}/tests/test_site_subdomain_redirect.py +0 -0
  297. {files_com-1.6.485 → files_com-1.6.486}/tests/test_snapshot.py +0 -0
  298. {files_com-1.6.485 → files_com-1.6.486}/tests/test_sso_event.py +0 -0
  299. {files_com-1.6.485 → files_com-1.6.486}/tests/test_sso_strategy.py +0 -0
  300. {files_com-1.6.485 → files_com-1.6.486}/tests/test_status.py +0 -0
  301. {files_com-1.6.485 → files_com-1.6.486}/tests/test_stream_download.py +0 -0
  302. {files_com-1.6.485 → files_com-1.6.486}/tests/test_style.py +0 -0
  303. {files_com-1.6.485 → files_com-1.6.486}/tests/test_sync.py +0 -0
  304. {files_com-1.6.485 → files_com-1.6.486}/tests/test_sync_log.py +0 -0
  305. {files_com-1.6.485 → files_com-1.6.486}/tests/test_sync_run.py +0 -0
  306. {files_com-1.6.485 → files_com-1.6.486}/tests/test_sync_run_live_transfer.py +0 -0
  307. {files_com-1.6.485 → files_com-1.6.486}/tests/test_usage_by_top_level_dir.py +0 -0
  308. {files_com-1.6.485 → files_com-1.6.486}/tests/test_usage_daily_snapshot.py +0 -0
  309. {files_com-1.6.485 → files_com-1.6.486}/tests/test_usage_snapshot.py +0 -0
  310. {files_com-1.6.485 → files_com-1.6.486}/tests/test_user.py +0 -0
  311. {files_com-1.6.485 → files_com-1.6.486}/tests/test_user_additional_email_recipient.py +0 -0
  312. {files_com-1.6.485 → files_com-1.6.486}/tests/test_user_cipher_use.py +0 -0
  313. {files_com-1.6.485 → files_com-1.6.486}/tests/test_user_lifecycle_rule.py +0 -0
  314. {files_com-1.6.485 → files_com-1.6.486}/tests/test_user_request.py +0 -0
  315. {files_com-1.6.485 → files_com-1.6.486}/tests/test_user_security_event.py +0 -0
  316. {files_com-1.6.485 → files_com-1.6.486}/tests/test_user_sftp_client_use.py +0 -0
  317. {files_com-1.6.485 → files_com-1.6.486}/tests/test_web_dav_action_log.py +0 -0
  318. {files_com-1.6.485 → files_com-1.6.486}/tests/test_webhook_test.py +0 -0
  319. {files_com-1.6.485 → files_com-1.6.486}/tests/test_workspace.py +0 -0
  320. {files_com-1.6.485 → files_com-1.6.486}/tests/test_workspace_id.py +0 -0
  321. {files_com-1.6.485 → 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.485
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
@@ -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.485
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
@@ -301,6 +301,7 @@ tests/test_sync.py
301
301
  tests/test_sync_log.py
302
302
  tests/test_sync_run.py
303
303
  tests/test_sync_run_live_transfer.py
304
+ tests/test_transfer_privacy.py
304
305
  tests/test_usage_by_top_level_dir.py
305
306
  tests/test_usage_daily_snapshot.py
306
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.485"
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)
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "files_com"
7
- version = "1.6.485"
7
+ version = "1.6.486"
8
8
  description = "Python bindings for the Files.com API"
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -0,0 +1,97 @@
1
+ import io
2
+ import json
3
+ import logging
4
+ import socket
5
+ import threading
6
+ import unittest
7
+ from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
8
+ from unittest.mock import patch
9
+
10
+ import files_sdk
11
+ from files_sdk.api_client import ApiClient
12
+ from files_sdk.error import APIConnectionError, APIError, NotFoundError
13
+
14
+
15
+ class TransferHandler(BaseHTTPRequestHandler):
16
+ def do_PUT(self):
17
+ self.rfile.read(int(self.headers.get("Content-Length", 0)))
18
+ self.do_GET()
19
+
20
+ def do_GET(self):
21
+ self.server.requests += 1
22
+ if self.path.startswith("/disconnect"):
23
+ self.connection.shutdown(socket.SHUT_RDWR)
24
+ self.connection.close()
25
+ return
26
+ body = self.path.encode()
27
+ status = 403 if self.path.startswith("/denied") else 200
28
+ if self.path.startswith("/typed"):
29
+ status = 404
30
+ body = json.dumps({"type": "not-found", "error": self.path}).encode()
31
+ self.send_response(status)
32
+ self.send_header("Content-Length", str(len(body)))
33
+ self.end_headers()
34
+ self.wfile.write(body)
35
+
36
+ def log_message(self, *args):
37
+ pass
38
+
39
+
40
+ class TestTransferPrivacy(unittest.TestCase):
41
+ def setUp(self):
42
+ self.server = ThreadingHTTPServer(("127.0.0.1", 0), TransferHandler)
43
+ self.server.requests = 0
44
+ self.thread = threading.Thread(target=self.server.serve_forever)
45
+ self.thread.start()
46
+ self.addCleanup(self.thread.join)
47
+ self.addCleanup(self.server.server_close)
48
+ self.addCleanup(self.server.shutdown)
49
+ for name, value in {
50
+ "max_network_retries": 2,
51
+ "initial_network_retry_delay": 0,
52
+ "max_network_retry_delay": 0,
53
+ "console_log_level": "",
54
+ }.items():
55
+ patcher = patch.object(files_sdk, name, value)
56
+ patcher.start()
57
+ self.addCleanup(patcher.stop)
58
+
59
+ def url(self, path):
60
+ return "http://127.0.0.1:{}/{}?X-Amz-Credential=private-credential&X-Amz-Signature=private-signature".format(
61
+ self.server.server_port, path
62
+ )
63
+
64
+ def assert_safe(self, text):
65
+ for secret in ("127.0.0.1", "X-Amz", "private-credential", "private-signature"):
66
+ self.assertNotIn(secret, text)
67
+
68
+ def test_transfer_failures_keep_urls_out_of_logs_and_error_text(self):
69
+ for download in (False, True):
70
+ for path, error_type in (("disconnect", APIConnectionError), ("denied", APIError)):
71
+ with self.subTest(download=download, path=path):
72
+ with self.assertLogs("files_sdk", level=logging.DEBUG) as logs:
73
+ with self.assertRaises(error_type) as caught:
74
+ if download:
75
+ ApiClient().stream_download(self.url(path), io.BytesIO())
76
+ else:
77
+ ApiClient().send_remote_request("PUT", self.url(path), body=b"part")
78
+ self.assert_safe(str(caught.exception))
79
+ self.assert_safe("\n".join(record.getMessage() for record in logs.records if record.levelno > logging.DEBUG))
80
+ self.assertIn("private-signature", "\n".join(logs.output))
81
+ if path == "denied":
82
+ self.assertEqual(caught.exception.http_status, 403)
83
+ self.assertEqual(self.server.requests, 6)
84
+
85
+ def test_successful_upload_does_not_log_the_transfer_url_at_info(self):
86
+ with self.assertLogs("files_sdk", level=logging.INFO) as logs:
87
+ response = ApiClient().send_remote_request("PUT", self.url("upload"), body=b"part")
88
+ self.assertEqual(response.status_code, 200)
89
+ self.assert_safe("\n".join(logs.output))
90
+
91
+ def test_transfer_api_errors_keep_their_type_without_echoing_the_url(self):
92
+ with self.assertLogs("files_sdk", level=logging.INFO) as logs:
93
+ with self.assertRaises(NotFoundError) as caught:
94
+ ApiClient().send_remote_request("PUT", self.url("typed"), body=b"part")
95
+ self.assertEqual(caught.exception.http_status, 404)
96
+ self.assert_safe(str(caught.exception))
97
+ self.assert_safe("\n".join(logs.output))
@@ -1 +0,0 @@
1
- 1.6.485
File without changes
File without changes