Files.com 1.6.504__tar.gz → 1.6.506__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.504/files_com.egg-info → files_com-1.6.506}/PKG-INFO +76 -4
  2. {files_com-1.6.504 → files_com-1.6.506}/README.md +75 -3
  3. files_com-1.6.506/_VERSION +1 -0
  4. {files_com-1.6.504 → files_com-1.6.506/files_com.egg-info}/PKG-INFO +76 -4
  5. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/__init__.py +1 -1
  6. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/user_lifecycle_rule.py +12 -12
  7. {files_com-1.6.504 → files_com-1.6.506}/pyproject.toml +1 -1
  8. files_com-1.6.504/_VERSION +0 -1
  9. {files_com-1.6.504 → files_com-1.6.506}/LICENSE +0 -0
  10. {files_com-1.6.504 → files_com-1.6.506}/files_com.egg-info/SOURCES.txt +0 -0
  11. {files_com-1.6.504 → files_com-1.6.506}/files_com.egg-info/dependency_links.txt +0 -0
  12. {files_com-1.6.504 → files_com-1.6.506}/files_com.egg-info/requires.txt +0 -0
  13. {files_com-1.6.504 → files_com-1.6.506}/files_com.egg-info/top_level.txt +0 -0
  14. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/api.py +0 -0
  15. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/api_client.py +0 -0
  16. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/error.py +0 -0
  17. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/list_obj.py +0 -0
  18. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/__init__.py +0 -0
  19. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/account_line_item.py +0 -0
  20. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/action.py +0 -0
  21. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/action_log.py +0 -0
  22. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/action_notification_export.py +0 -0
  23. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/action_notification_export_result.py +0 -0
  24. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/agent_node.py +0 -0
  25. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/agent_node_connection.py +0 -0
  26. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/agent_node_instance.py +0 -0
  27. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/agent_push_update.py +0 -0
  28. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/ai_assistant_personality.py +0 -0
  29. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/ai_task.py +0 -0
  30. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/api_key.py +0 -0
  31. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/api_request_log.py +0 -0
  32. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/app.py +0 -0
  33. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/as2_incoming_message.py +0 -0
  34. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/as2_outgoing_message.py +0 -0
  35. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/as2_partner.py +0 -0
  36. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/as2_station.py +0 -0
  37. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/auto.py +0 -0
  38. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/automation.py +0 -0
  39. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/automation_authoring_schema.py +0 -0
  40. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/automation_execution_node.py +0 -0
  41. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/automation_log.py +0 -0
  42. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/automation_run.py +0 -0
  43. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/bandwidth_snapshot.py +0 -0
  44. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/behavior.py +0 -0
  45. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/bundle.py +0 -0
  46. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/bundle_action.py +0 -0
  47. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/bundle_download.py +0 -0
  48. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/bundle_notification.py +0 -0
  49. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/bundle_path.py +0 -0
  50. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/bundle_recipient.py +0 -0
  51. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/bundle_registration.py +0 -0
  52. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/chat_message.py +0 -0
  53. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/chat_session.py +0 -0
  54. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/child_site_management_policy.py +0 -0
  55. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/clickwrap.py +0 -0
  56. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/custom_domain.py +0 -0
  57. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/desktop_configuration_profile.py +0 -0
  58. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/direct_connection_info.py +0 -0
  59. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/dns_record.py +0 -0
  60. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/email_incoming_message.py +0 -0
  61. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/email_log.py +0 -0
  62. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/errors.py +0 -0
  63. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/event_channel.py +0 -0
  64. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/event_delivery_attempt.py +0 -0
  65. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/event_record.py +0 -0
  66. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/event_subscription.py +0 -0
  67. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/event_target.py +0 -0
  68. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/exavault_api_request_log.py +0 -0
  69. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/expectation.py +0 -0
  70. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/expectation_evaluation.py +0 -0
  71. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/expectation_incident.py +0 -0
  72. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/external_event.py +0 -0
  73. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/file.py +0 -0
  74. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/file_action.py +0 -0
  75. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/file_comment.py +0 -0
  76. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/file_comment_reaction.py +0 -0
  77. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/file_migration.py +0 -0
  78. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/file_migration_log.py +0 -0
  79. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/file_upload_part.py +0 -0
  80. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/folder.py +0 -0
  81. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/form_field.py +0 -0
  82. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/form_field_set.py +0 -0
  83. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/ftp_action_log.py +0 -0
  84. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/gpg_key.py +0 -0
  85. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/group.py +0 -0
  86. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/group_user.py +0 -0
  87. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/history.py +0 -0
  88. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/history_export.py +0 -0
  89. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/history_export_result.py +0 -0
  90. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/holiday_calendar.py +0 -0
  91. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/holiday_region.py +0 -0
  92. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/image.py +0 -0
  93. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/inbound_s3_log.py +0 -0
  94. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/inbox_recipient.py +0 -0
  95. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/inbox_registration.py +0 -0
  96. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/inbox_upload.py +0 -0
  97. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/integration_centric_profile.py +0 -0
  98. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/invoice.py +0 -0
  99. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/invoice_line_item.py +0 -0
  100. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/ip_address.py +0 -0
  101. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/key_lifecycle_rule.py +0 -0
  102. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/lock.py +0 -0
  103. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/metadata_category.py +0 -0
  104. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/notification.py +0 -0
  105. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/outbound_connection_log.py +0 -0
  106. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/partner.py +0 -0
  107. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/partner_channel.py +0 -0
  108. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/partner_channel_template.py +0 -0
  109. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/partner_connection.py +0 -0
  110. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/partner_site.py +0 -0
  111. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/partner_site_request.py +0 -0
  112. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/payment.py +0 -0
  113. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/payment_line_item.py +0 -0
  114. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/pending_work_event.py +0 -0
  115. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/permission.py +0 -0
  116. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/preview.py +0 -0
  117. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/public_hosting_request_log.py +0 -0
  118. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/public_ip_address.py +0 -0
  119. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/public_key.py +0 -0
  120. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/remote_bandwidth_snapshot.py +0 -0
  121. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/remote_mount_backend.py +0 -0
  122. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/remote_server.py +0 -0
  123. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/remote_server_configuration_file.py +0 -0
  124. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/remote_server_credential.py +0 -0
  125. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/request.py +0 -0
  126. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/restore.py +0 -0
  127. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/schedule.py +0 -0
  128. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/scheduled_export.py +0 -0
  129. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/scim_log.py +0 -0
  130. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/secret.py +0 -0
  131. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/session.py +0 -0
  132. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/settings_change.py +0 -0
  133. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/sftp_action_log.py +0 -0
  134. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/sftp_host_key.py +0 -0
  135. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/share_group.py +0 -0
  136. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/share_group_member.py +0 -0
  137. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/siem_http_destination.py +0 -0
  138. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/siem_http_destination_event.py +0 -0
  139. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/site.py +0 -0
  140. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/site_subdomain_redirect.py +0 -0
  141. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/snapshot.py +0 -0
  142. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/sso_event.py +0 -0
  143. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/sso_strategy.py +0 -0
  144. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/status.py +0 -0
  145. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/style.py +0 -0
  146. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/sync.py +0 -0
  147. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/sync_log.py +0 -0
  148. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/sync_run.py +0 -0
  149. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/sync_run_live_transfer.py +0 -0
  150. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/usage_by_top_level_dir.py +0 -0
  151. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/usage_daily_snapshot.py +0 -0
  152. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/usage_snapshot.py +0 -0
  153. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/user.py +0 -0
  154. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/user_additional_email_recipient.py +0 -0
  155. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/user_cipher_use.py +0 -0
  156. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/user_request.py +0 -0
  157. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/user_security_event.py +0 -0
  158. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/user_sftp_client_use.py +0 -0
  159. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/web_dav_action_log.py +0 -0
  160. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/webhook_test.py +0 -0
  161. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/workspace.py +0 -0
  162. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/models/zip_list_entry.py +0 -0
  163. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/path_comparison.json +0 -0
  164. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/path_util.py +0 -0
  165. {files_com-1.6.504 → files_com-1.6.506}/files_sdk/util.py +0 -0
  166. {files_com-1.6.504 → files_com-1.6.506}/setup.cfg +0 -0
  167. {files_com-1.6.504 → files_com-1.6.506}/tests/test_account_line_item.py +0 -0
  168. {files_com-1.6.504 → files_com-1.6.506}/tests/test_action.py +0 -0
  169. {files_com-1.6.504 → files_com-1.6.506}/tests/test_action_log.py +0 -0
  170. {files_com-1.6.504 → files_com-1.6.506}/tests/test_action_notification_export.py +0 -0
  171. {files_com-1.6.504 → files_com-1.6.506}/tests/test_action_notification_export_result.py +0 -0
  172. {files_com-1.6.504 → files_com-1.6.506}/tests/test_agent_node.py +0 -0
  173. {files_com-1.6.504 → files_com-1.6.506}/tests/test_agent_node_connection.py +0 -0
  174. {files_com-1.6.504 → files_com-1.6.506}/tests/test_agent_node_instance.py +0 -0
  175. {files_com-1.6.504 → files_com-1.6.506}/tests/test_agent_push_update.py +0 -0
  176. {files_com-1.6.504 → files_com-1.6.506}/tests/test_ai_assistant_personality.py +0 -0
  177. {files_com-1.6.504 → files_com-1.6.506}/tests/test_ai_task.py +0 -0
  178. {files_com-1.6.504 → files_com-1.6.506}/tests/test_api_errors.py +0 -0
  179. {files_com-1.6.504 → files_com-1.6.506}/tests/test_api_key.py +0 -0
  180. {files_com-1.6.504 → files_com-1.6.506}/tests/test_api_request_log.py +0 -0
  181. {files_com-1.6.504 → files_com-1.6.506}/tests/test_app.py +0 -0
  182. {files_com-1.6.504 → files_com-1.6.506}/tests/test_as2_incoming_message.py +0 -0
  183. {files_com-1.6.504 → files_com-1.6.506}/tests/test_as2_outgoing_message.py +0 -0
  184. {files_com-1.6.504 → files_com-1.6.506}/tests/test_as2_partner.py +0 -0
  185. {files_com-1.6.504 → files_com-1.6.506}/tests/test_as2_station.py +0 -0
  186. {files_com-1.6.504 → files_com-1.6.506}/tests/test_auto.py +0 -0
  187. {files_com-1.6.504 → files_com-1.6.506}/tests/test_automation.py +0 -0
  188. {files_com-1.6.504 → files_com-1.6.506}/tests/test_automation_authoring_schema.py +0 -0
  189. {files_com-1.6.504 → files_com-1.6.506}/tests/test_automation_execution_node.py +0 -0
  190. {files_com-1.6.504 → files_com-1.6.506}/tests/test_automation_log.py +0 -0
  191. {files_com-1.6.504 → files_com-1.6.506}/tests/test_automation_run.py +0 -0
  192. {files_com-1.6.504 → files_com-1.6.506}/tests/test_bandwidth_snapshot.py +0 -0
  193. {files_com-1.6.504 → files_com-1.6.506}/tests/test_behavior.py +0 -0
  194. {files_com-1.6.504 → files_com-1.6.506}/tests/test_bundle.py +0 -0
  195. {files_com-1.6.504 → files_com-1.6.506}/tests/test_bundle_action.py +0 -0
  196. {files_com-1.6.504 → files_com-1.6.506}/tests/test_bundle_download.py +0 -0
  197. {files_com-1.6.504 → files_com-1.6.506}/tests/test_bundle_notification.py +0 -0
  198. {files_com-1.6.504 → files_com-1.6.506}/tests/test_bundle_path.py +0 -0
  199. {files_com-1.6.504 → files_com-1.6.506}/tests/test_bundle_recipient.py +0 -0
  200. {files_com-1.6.504 → files_com-1.6.506}/tests/test_bundle_registration.py +0 -0
  201. {files_com-1.6.504 → files_com-1.6.506}/tests/test_chat_message.py +0 -0
  202. {files_com-1.6.504 → files_com-1.6.506}/tests/test_chat_session.py +0 -0
  203. {files_com-1.6.504 → files_com-1.6.506}/tests/test_child_site_management_policy.py +0 -0
  204. {files_com-1.6.504 → files_com-1.6.506}/tests/test_clickwrap.py +0 -0
  205. {files_com-1.6.504 → files_com-1.6.506}/tests/test_connection_adapter.py +0 -0
  206. {files_com-1.6.504 → files_com-1.6.506}/tests/test_custom_domain.py +0 -0
  207. {files_com-1.6.504 → files_com-1.6.506}/tests/test_decimal_contract.py +0 -0
  208. {files_com-1.6.504 → files_com-1.6.506}/tests/test_desktop_configuration_profile.py +0 -0
  209. {files_com-1.6.504 → files_com-1.6.506}/tests/test_direct_connection_info.py +0 -0
  210. {files_com-1.6.504 → files_com-1.6.506}/tests/test_dns_record.py +0 -0
  211. {files_com-1.6.504 → files_com-1.6.506}/tests/test_email_incoming_message.py +0 -0
  212. {files_com-1.6.504 → files_com-1.6.506}/tests/test_email_log.py +0 -0
  213. {files_com-1.6.504 → files_com-1.6.506}/tests/test_errors.py +0 -0
  214. {files_com-1.6.504 → files_com-1.6.506}/tests/test_event_channel.py +0 -0
  215. {files_com-1.6.504 → files_com-1.6.506}/tests/test_event_delivery_attempt.py +0 -0
  216. {files_com-1.6.504 → files_com-1.6.506}/tests/test_event_record.py +0 -0
  217. {files_com-1.6.504 → files_com-1.6.506}/tests/test_event_subscription.py +0 -0
  218. {files_com-1.6.504 → files_com-1.6.506}/tests/test_event_target.py +0 -0
  219. {files_com-1.6.504 → files_com-1.6.506}/tests/test_exavault_api_request_log.py +0 -0
  220. {files_com-1.6.504 → files_com-1.6.506}/tests/test_expectation.py +0 -0
  221. {files_com-1.6.504 → files_com-1.6.506}/tests/test_expectation_evaluation.py +0 -0
  222. {files_com-1.6.504 → files_com-1.6.506}/tests/test_expectation_incident.py +0 -0
  223. {files_com-1.6.504 → files_com-1.6.506}/tests/test_external_event.py +0 -0
  224. {files_com-1.6.504 → files_com-1.6.506}/tests/test_file.py +0 -0
  225. {files_com-1.6.504 → files_com-1.6.506}/tests/test_file_action.py +0 -0
  226. {files_com-1.6.504 → files_com-1.6.506}/tests/test_file_comment.py +0 -0
  227. {files_com-1.6.504 → files_com-1.6.506}/tests/test_file_comment_reaction.py +0 -0
  228. {files_com-1.6.504 → files_com-1.6.506}/tests/test_file_download_default_path.py +0 -0
  229. {files_com-1.6.504 → files_com-1.6.506}/tests/test_file_migration.py +0 -0
  230. {files_com-1.6.504 → files_com-1.6.506}/tests/test_file_migration_log.py +0 -0
  231. {files_com-1.6.504 → files_com-1.6.506}/tests/test_file_underscore_destinations.py +0 -0
  232. {files_com-1.6.504 → files_com-1.6.506}/tests/test_file_upload.py +0 -0
  233. {files_com-1.6.504 → files_com-1.6.506}/tests/test_file_upload_part.py +0 -0
  234. {files_com-1.6.504 → files_com-1.6.506}/tests/test_folder.py +0 -0
  235. {files_com-1.6.504 → files_com-1.6.506}/tests/test_form_field.py +0 -0
  236. {files_com-1.6.504 → files_com-1.6.506}/tests/test_form_field_set.py +0 -0
  237. {files_com-1.6.504 → files_com-1.6.506}/tests/test_ftp_action_log.py +0 -0
  238. {files_com-1.6.504 → files_com-1.6.506}/tests/test_gpg_key.py +0 -0
  239. {files_com-1.6.504 → files_com-1.6.506}/tests/test_group.py +0 -0
  240. {files_com-1.6.504 → files_com-1.6.506}/tests/test_group_user.py +0 -0
  241. {files_com-1.6.504 → files_com-1.6.506}/tests/test_history.py +0 -0
  242. {files_com-1.6.504 → files_com-1.6.506}/tests/test_history_export.py +0 -0
  243. {files_com-1.6.504 → files_com-1.6.506}/tests/test_history_export_result.py +0 -0
  244. {files_com-1.6.504 → files_com-1.6.506}/tests/test_holiday_calendar.py +0 -0
  245. {files_com-1.6.504 → files_com-1.6.506}/tests/test_holiday_region.py +0 -0
  246. {files_com-1.6.504 → files_com-1.6.506}/tests/test_image.py +0 -0
  247. {files_com-1.6.504 → files_com-1.6.506}/tests/test_inbound_s3_log.py +0 -0
  248. {files_com-1.6.504 → files_com-1.6.506}/tests/test_inbox_recipient.py +0 -0
  249. {files_com-1.6.504 → files_com-1.6.506}/tests/test_inbox_registration.py +0 -0
  250. {files_com-1.6.504 → files_com-1.6.506}/tests/test_inbox_upload.py +0 -0
  251. {files_com-1.6.504 → files_com-1.6.506}/tests/test_integration_centric_profile.py +0 -0
  252. {files_com-1.6.504 → files_com-1.6.506}/tests/test_invoice.py +0 -0
  253. {files_com-1.6.504 → files_com-1.6.506}/tests/test_invoice_line_item.py +0 -0
  254. {files_com-1.6.504 → files_com-1.6.506}/tests/test_ip_address.py +0 -0
  255. {files_com-1.6.504 → files_com-1.6.506}/tests/test_key_lifecycle_rule.py +0 -0
  256. {files_com-1.6.504 → files_com-1.6.506}/tests/test_lock.py +0 -0
  257. {files_com-1.6.504 → files_com-1.6.506}/tests/test_metadata_category.py +0 -0
  258. {files_com-1.6.504 → files_com-1.6.506}/tests/test_notification.py +0 -0
  259. {files_com-1.6.504 → files_com-1.6.506}/tests/test_outbound_connection_log.py +0 -0
  260. {files_com-1.6.504 → files_com-1.6.506}/tests/test_partner.py +0 -0
  261. {files_com-1.6.504 → files_com-1.6.506}/tests/test_partner_channel.py +0 -0
  262. {files_com-1.6.504 → files_com-1.6.506}/tests/test_partner_channel_template.py +0 -0
  263. {files_com-1.6.504 → files_com-1.6.506}/tests/test_partner_connection.py +0 -0
  264. {files_com-1.6.504 → files_com-1.6.506}/tests/test_partner_site.py +0 -0
  265. {files_com-1.6.504 → files_com-1.6.506}/tests/test_partner_site_request.py +0 -0
  266. {files_com-1.6.504 → files_com-1.6.506}/tests/test_path_parameter_encoding.py +0 -0
  267. {files_com-1.6.504 → files_com-1.6.506}/tests/test_path_util.py +0 -0
  268. {files_com-1.6.504 → files_com-1.6.506}/tests/test_payment.py +0 -0
  269. {files_com-1.6.504 → files_com-1.6.506}/tests/test_payment_line_item.py +0 -0
  270. {files_com-1.6.504 → files_com-1.6.506}/tests/test_pending_work_event.py +0 -0
  271. {files_com-1.6.504 → files_com-1.6.506}/tests/test_permission.py +0 -0
  272. {files_com-1.6.504 → files_com-1.6.506}/tests/test_preview.py +0 -0
  273. {files_com-1.6.504 → files_com-1.6.506}/tests/test_public_hosting_request_log.py +0 -0
  274. {files_com-1.6.504 → files_com-1.6.506}/tests/test_public_ip_address.py +0 -0
  275. {files_com-1.6.504 → files_com-1.6.506}/tests/test_public_key.py +0 -0
  276. {files_com-1.6.504 → files_com-1.6.506}/tests/test_redirect_auth.py +0 -0
  277. {files_com-1.6.504 → files_com-1.6.506}/tests/test_remote_bandwidth_snapshot.py +0 -0
  278. {files_com-1.6.504 → files_com-1.6.506}/tests/test_remote_mount_backend.py +0 -0
  279. {files_com-1.6.504 → files_com-1.6.506}/tests/test_remote_server.py +0 -0
  280. {files_com-1.6.504 → files_com-1.6.506}/tests/test_remote_server_configuration_file.py +0 -0
  281. {files_com-1.6.504 → files_com-1.6.506}/tests/test_remote_server_credential.py +0 -0
  282. {files_com-1.6.504 → files_com-1.6.506}/tests/test_request.py +0 -0
  283. {files_com-1.6.504 → files_com-1.6.506}/tests/test_restore.py +0 -0
  284. {files_com-1.6.504 → files_com-1.6.506}/tests/test_schedule.py +0 -0
  285. {files_com-1.6.504 → files_com-1.6.506}/tests/test_scheduled_export.py +0 -0
  286. {files_com-1.6.504 → files_com-1.6.506}/tests/test_scim_log.py +0 -0
  287. {files_com-1.6.504 → files_com-1.6.506}/tests/test_secret.py +0 -0
  288. {files_com-1.6.504 → files_com-1.6.506}/tests/test_session.py +0 -0
  289. {files_com-1.6.504 → files_com-1.6.506}/tests/test_settings_change.py +0 -0
  290. {files_com-1.6.504 → files_com-1.6.506}/tests/test_sftp_action_log.py +0 -0
  291. {files_com-1.6.504 → files_com-1.6.506}/tests/test_sftp_host_key.py +0 -0
  292. {files_com-1.6.504 → files_com-1.6.506}/tests/test_share_group.py +0 -0
  293. {files_com-1.6.504 → files_com-1.6.506}/tests/test_share_group_member.py +0 -0
  294. {files_com-1.6.504 → files_com-1.6.506}/tests/test_siem_http_destination.py +0 -0
  295. {files_com-1.6.504 → files_com-1.6.506}/tests/test_siem_http_destination_event.py +0 -0
  296. {files_com-1.6.504 → files_com-1.6.506}/tests/test_site.py +0 -0
  297. {files_com-1.6.504 → files_com-1.6.506}/tests/test_site_subdomain_redirect.py +0 -0
  298. {files_com-1.6.504 → files_com-1.6.506}/tests/test_snapshot.py +0 -0
  299. {files_com-1.6.504 → files_com-1.6.506}/tests/test_sso_event.py +0 -0
  300. {files_com-1.6.504 → files_com-1.6.506}/tests/test_sso_strategy.py +0 -0
  301. {files_com-1.6.504 → files_com-1.6.506}/tests/test_status.py +0 -0
  302. {files_com-1.6.504 → files_com-1.6.506}/tests/test_stream_download.py +0 -0
  303. {files_com-1.6.504 → files_com-1.6.506}/tests/test_style.py +0 -0
  304. {files_com-1.6.504 → files_com-1.6.506}/tests/test_sync.py +0 -0
  305. {files_com-1.6.504 → files_com-1.6.506}/tests/test_sync_log.py +0 -0
  306. {files_com-1.6.504 → files_com-1.6.506}/tests/test_sync_run.py +0 -0
  307. {files_com-1.6.504 → files_com-1.6.506}/tests/test_sync_run_live_transfer.py +0 -0
  308. {files_com-1.6.504 → files_com-1.6.506}/tests/test_transfer_privacy.py +0 -0
  309. {files_com-1.6.504 → files_com-1.6.506}/tests/test_usage_by_top_level_dir.py +0 -0
  310. {files_com-1.6.504 → files_com-1.6.506}/tests/test_usage_daily_snapshot.py +0 -0
  311. {files_com-1.6.504 → files_com-1.6.506}/tests/test_usage_snapshot.py +0 -0
  312. {files_com-1.6.504 → files_com-1.6.506}/tests/test_user.py +0 -0
  313. {files_com-1.6.504 → files_com-1.6.506}/tests/test_user_additional_email_recipient.py +0 -0
  314. {files_com-1.6.504 → files_com-1.6.506}/tests/test_user_cipher_use.py +0 -0
  315. {files_com-1.6.504 → files_com-1.6.506}/tests/test_user_lifecycle_rule.py +0 -0
  316. {files_com-1.6.504 → files_com-1.6.506}/tests/test_user_request.py +0 -0
  317. {files_com-1.6.504 → files_com-1.6.506}/tests/test_user_security_event.py +0 -0
  318. {files_com-1.6.504 → files_com-1.6.506}/tests/test_user_sftp_client_use.py +0 -0
  319. {files_com-1.6.504 → files_com-1.6.506}/tests/test_web_dav_action_log.py +0 -0
  320. {files_com-1.6.504 → files_com-1.6.506}/tests/test_webhook_test.py +0 -0
  321. {files_com-1.6.504 → files_com-1.6.506}/tests/test_workspace.py +0 -0
  322. {files_com-1.6.504 → files_com-1.6.506}/tests/test_workspace_id.py +0 -0
  323. {files_com-1.6.504 → files_com-1.6.506}/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.504
3
+ Version: 1.6.506
4
4
  Summary: Python bindings for the Files.com API
5
5
  License: MIT
6
6
  Requires-Python: >=3.5
@@ -446,13 +446,40 @@ Trailing whitespace is significant for comparison. `report.txt` and `report.txt
446
446
 
447
447
  ## Workspaces
448
448
 
449
- A Workspace is a lightweight way to organize related resources inside a single Files.com Site.
449
+ A Workspace groups files, users, groups, Partners, integrations, and workflows within a Files.com Site. An integration can provision a Workspace for a department or project and delegate its operation to a team without making that team Site Administrators. Every Site has a Default Workspace, with ID `0`; additional Workspaces have their own IDs and root folders.
450
450
 
451
- Customers commonly group resources by project, department, client, or region. Workspaces provide a built-in structure for that grouping, so the UI can operate within a clear "workspace context" and admins can delegate management for a subset of resources without requiring full site-level isolation.
451
+ Account membership, request context, and permission grants serve different purposes. Creating an account in a Workspace determines where it belongs. Selecting a Workspace determines which resources a request operates on. A permission grant determines what the caller can do there. Selecting a Workspace never grants access to it.
452
452
 
453
- Every Site has an implicit Default workspace (ID `0`). Resources that are not explicitly assigned to a named workspace are considered part of the Default workspace.
453
+ ### Accounts and Administrative Access
454
+
455
+ A user's or group's `workspace_id` identifies the Workspace the account belongs to. Accounts belonging to a Custom Workspace stay within it. Default Workspace users and groups can receive permissions in one or more Custom Workspaces while keeping their existing accounts in Workspace `0`.
456
+
457
+ | Account | Workspace Administrator assignment | Scope |
458
+ | --- | --- | --- |
459
+ | User belonging to a Custom Workspace | Set the user's `workspace_admin` to `true`. | That user's own Custom Workspace. |
460
+ | Default Workspace user | Create an `admin` Permission for the user on a Custom Workspace's root folder. | Each Custom Workspace with a root grant. |
461
+ | Default Workspace group | Create an `admin` Permission for the group on a Custom Workspace's root folder. | Every member inherits administration of each Workspace with a root grant. |
462
+
463
+ `workspace_admin` is not a summary of a user's effective administrative access. A Default Workspace user can administer a Custom Workspace through a direct or group root grant while their `workspace_admin` remains `false`. Groups have no `workspace_admin` field. See [Users](/python/resources/user-accounts/users) and [Groups](/python/resources/user-accounts/groups) for account fields.
464
+
465
+ An `admin` grant on the **Custom Workspace root** provides full Workspace Administrator authority over its files, users, groups, Partners, workflows, and integrations. An `admin` grant on a subfolder provides Folder Admin authority over that folder and its descendants; it does not provide Workspace administration. Other permission levels provide their corresponding folder access without Workspace administration. [Permissions](/python/resources/user-accounts/permissions) defines the levels.
466
+
467
+ Site Administrators manage cross-Workspace assignments to Default Workspace accounts. Workspace Administrators manage accounts and permissions within their own scope. Site Administrators retain access to every Workspace; adding a Workspace grant does not narrow Site Administrator authority. The [product documentation](https://www.files.com/docs/workspaces/workspace-administrators) explains the role's operational scope and site-wide controls.
468
+
469
+ ### Request Context and API Keys
470
+
471
+ The REST header `X-Files-Workspace-Id` selects a Workspace for a request. SDK request options and CLI configuration send that same selection. Workspace-scoped resources are listed, created, and changed within the selected context, and ordinary paths are relative to its root.
472
+
473
+ A resource's `workspace_id` request field describes the resource's Workspace membership. It is separate from the SDK's Workspace request option or REST header. Creating a Workspace-scoped resource in a Custom Workspace defaults its `workspace_id` to the selected Workspace; a mismatching membership value is rejected with `not-authorized/insufficient-permission-for-params`.
474
+
475
+ Selecting another Workspace with an API key requires a **Full Access key created in the Default Workspace**. A user key follows that user's current access, including group permissions. A site-wide Full Access key created in the Default Workspace has Site Administrator authority in every Workspace. A Files Only key stays in its creation Workspace, even if its user has cross-Workspace access. Any key created in a Custom Workspace stays within that Workspace. Selecting another context with these confined keys is rejected with `bad-request/invalid-workspace-id-header`.
476
+
477
+ An account belonging to a Custom Workspace is scoped there when it authenticates normally. For a Default Workspace user, explicitly select the intended Workspace for an integration rather than relying on an interactive login preference. [API Keys](/python/resources/developers/api-keys) and [Authentication](/python/overview/authentication) cover credentials.
454
478
 
455
479
  The Files.com Python SDK supports workspace scoping by using the `files_sdk.set_workspace_id` configuration method. Scope a single request by passing `workspace_id` in the request options.
480
+
481
+ The adjacent scoping example uses a credential authorized for the selected Workspace. A group member uses their own Full Access user key from the Default Workspace; the Site Administrator credential used to assign the grant is not needed for their day-to-day work.
482
+
456
483
  ```python title="Example Request"
457
484
  import files_sdk
458
485
 
@@ -461,6 +488,51 @@ files_sdk.set_workspace_id(123)
461
488
  files_sdk.folder.list_for("", {}, {"workspace_id": 456})
462
489
  ```
463
490
 
491
+ ### Delegating a Workspace to an Existing Group
492
+
493
+ An operations team already represented by a Default Workspace group can administer a Custom Workspace through one root Permission. The group and its members stay in the Default Workspace, so the same team can receive different access in other Workspaces.
494
+
495
+ First retrieve the target [Workspace](/python/resources/settings/workspaces) and [Group](/python/resources/user-accounts/groups) IDs as a Site Administrator in Workspace `0`. The examples use Workspace `123`, group `456`, and member user `789`; replace them with your own IDs. Confirm that the group belongs to Workspace `0` and that the intended user is a member.
496
+
497
+ Create the Permission using a Default Workspace Full Access site-wide key or a Full Access user key belonging to a Site Administrator. Keep the request context at `0` and use the qualified root path `_/Workspaces/123`. Set `group_id` to the group's ID, `permission` to `admin`, and `recursive` to `true`. Save the returned Permission `id` for later removal. For an individual Default Workspace user, use `user_id` instead of `group_id`.
498
+
499
+ For a Default Workspace group, a Site Administrator can also select Workspace `123` and use an empty `path` to grant access to its root. The qualified path in Workspace `0` works for both Default Workspace users and groups and keeps the account scope and target Workspace explicit. Appending a subfolder to the path would grant Folder Admin access instead of Workspace Administrator authority.
500
+
501
+ After the grant, run the request-context example above with the member's own credential and Workspace `123` selected. That member can work with the Workspace's files and perform Workspace Administrator operations, such as managing its users, Partners, and integrations. A Site Administrator's successful request does not establish that the member has the intended access.
502
+
503
+ ```python title="Grant group administration"
504
+ import files_sdk
505
+
506
+ files_sdk.set_workspace_id(0)
507
+ grant = files_sdk.permission.create({
508
+ "path": "_/Workspaces/123",
509
+ "group_id": 456,
510
+ "permission": "admin",
511
+ "recursive": True,
512
+ }, {"workspace_id": 0})
513
+ print(grant.id)
514
+ ```
515
+
516
+ ### Permission Inspection and Removal
517
+
518
+ List the member's Permissions with `user_id` and `include_groups=true` to include grants inherited through group membership. Listing only direct user grants can miss the Permission that provides Workspace administration. In Workspace `0`, the Custom Workspace root appears as `_/Workspaces/123`; in Workspace `123`, paths are relative to that root. Inspect the root path and `permission=admin`, rather than treating the user's `workspace_admin` field as their effective role.
519
+
520
+ Permission lists show grants, rather than a single effective-role boolean. Membership in several groups combines their access. A Permission using `group_ids` instead of `group_id` requires membership in all the specified groups; it is not a shorthand for assigning the same grant to several independent groups.
521
+
522
+ Removing a member ends access received through that group. Deleting the root Permission ends the group's Workspace Administrator grant for every member. These changes leave independent direct and other group grants in place, so review all applicable grants when withdrawing access. Default Workspace user API keys follow those permission changes without being recreated.
523
+
524
+ Group membership maintained through SCIM follows the same rule. A Group Admin allowed to add members can give those users the group's existing Workspace Administrator access. Choose who manages the group with that authority in mind.
525
+
526
+ Delete the Permission by its returned `id` as the Site Administrator in Workspace `0`. The removal examples use Permission ID `9001`; replace it with the ID returned by your create request. Permissions are created and deleted, rather than updated in place. If narrower folder access is still needed, assign it explicitly; deleting a broad grant does not restore narrower grants it previously replaced.
527
+
528
+ ```python title="Inspect member grants and remove the group grant"
529
+ for item in files_sdk.permission.list(
530
+ {"user_id": "789", "include_groups": True}, {"workspace_id": 0}
531
+ ):
532
+ print(item.path, item.permission, item.group_id)
533
+ files_sdk.permission.delete(9001, {}, {"workspace_id": 0})
534
+ ```
535
+
464
536
  ## Foreign Language Support
465
537
 
466
538
  The Files.com Python SDK supports localized responses by using the `files_sdk.set_language` configuration method.
@@ -434,13 +434,40 @@ Trailing whitespace is significant for comparison. `report.txt` and `report.txt
434
434
 
435
435
  ## Workspaces
436
436
 
437
- A Workspace is a lightweight way to organize related resources inside a single Files.com Site.
437
+ A Workspace groups files, users, groups, Partners, integrations, and workflows within a Files.com Site. An integration can provision a Workspace for a department or project and delegate its operation to a team without making that team Site Administrators. Every Site has a Default Workspace, with ID `0`; additional Workspaces have their own IDs and root folders.
438
438
 
439
- Customers commonly group resources by project, department, client, or region. Workspaces provide a built-in structure for that grouping, so the UI can operate within a clear "workspace context" and admins can delegate management for a subset of resources without requiring full site-level isolation.
439
+ Account membership, request context, and permission grants serve different purposes. Creating an account in a Workspace determines where it belongs. Selecting a Workspace determines which resources a request operates on. A permission grant determines what the caller can do there. Selecting a Workspace never grants access to it.
440
440
 
441
- Every Site has an implicit Default workspace (ID `0`). Resources that are not explicitly assigned to a named workspace are considered part of the Default workspace.
441
+ ### Accounts and Administrative Access
442
+
443
+ A user's or group's `workspace_id` identifies the Workspace the account belongs to. Accounts belonging to a Custom Workspace stay within it. Default Workspace users and groups can receive permissions in one or more Custom Workspaces while keeping their existing accounts in Workspace `0`.
444
+
445
+ | Account | Workspace Administrator assignment | Scope |
446
+ | --- | --- | --- |
447
+ | User belonging to a Custom Workspace | Set the user's `workspace_admin` to `true`. | That user's own Custom Workspace. |
448
+ | Default Workspace user | Create an `admin` Permission for the user on a Custom Workspace's root folder. | Each Custom Workspace with a root grant. |
449
+ | Default Workspace group | Create an `admin` Permission for the group on a Custom Workspace's root folder. | Every member inherits administration of each Workspace with a root grant. |
450
+
451
+ `workspace_admin` is not a summary of a user's effective administrative access. A Default Workspace user can administer a Custom Workspace through a direct or group root grant while their `workspace_admin` remains `false`. Groups have no `workspace_admin` field. See [Users](/python/resources/user-accounts/users) and [Groups](/python/resources/user-accounts/groups) for account fields.
452
+
453
+ An `admin` grant on the **Custom Workspace root** provides full Workspace Administrator authority over its files, users, groups, Partners, workflows, and integrations. An `admin` grant on a subfolder provides Folder Admin authority over that folder and its descendants; it does not provide Workspace administration. Other permission levels provide their corresponding folder access without Workspace administration. [Permissions](/python/resources/user-accounts/permissions) defines the levels.
454
+
455
+ Site Administrators manage cross-Workspace assignments to Default Workspace accounts. Workspace Administrators manage accounts and permissions within their own scope. Site Administrators retain access to every Workspace; adding a Workspace grant does not narrow Site Administrator authority. The [product documentation](https://www.files.com/docs/workspaces/workspace-administrators) explains the role's operational scope and site-wide controls.
456
+
457
+ ### Request Context and API Keys
458
+
459
+ The REST header `X-Files-Workspace-Id` selects a Workspace for a request. SDK request options and CLI configuration send that same selection. Workspace-scoped resources are listed, created, and changed within the selected context, and ordinary paths are relative to its root.
460
+
461
+ A resource's `workspace_id` request field describes the resource's Workspace membership. It is separate from the SDK's Workspace request option or REST header. Creating a Workspace-scoped resource in a Custom Workspace defaults its `workspace_id` to the selected Workspace; a mismatching membership value is rejected with `not-authorized/insufficient-permission-for-params`.
462
+
463
+ Selecting another Workspace with an API key requires a **Full Access key created in the Default Workspace**. A user key follows that user's current access, including group permissions. A site-wide Full Access key created in the Default Workspace has Site Administrator authority in every Workspace. A Files Only key stays in its creation Workspace, even if its user has cross-Workspace access. Any key created in a Custom Workspace stays within that Workspace. Selecting another context with these confined keys is rejected with `bad-request/invalid-workspace-id-header`.
464
+
465
+ An account belonging to a Custom Workspace is scoped there when it authenticates normally. For a Default Workspace user, explicitly select the intended Workspace for an integration rather than relying on an interactive login preference. [API Keys](/python/resources/developers/api-keys) and [Authentication](/python/overview/authentication) cover credentials.
442
466
 
443
467
  The Files.com Python SDK supports workspace scoping by using the `files_sdk.set_workspace_id` configuration method. Scope a single request by passing `workspace_id` in the request options.
468
+
469
+ The adjacent scoping example uses a credential authorized for the selected Workspace. A group member uses their own Full Access user key from the Default Workspace; the Site Administrator credential used to assign the grant is not needed for their day-to-day work.
470
+
444
471
  ```python title="Example Request"
445
472
  import files_sdk
446
473
 
@@ -449,6 +476,51 @@ files_sdk.set_workspace_id(123)
449
476
  files_sdk.folder.list_for("", {}, {"workspace_id": 456})
450
477
  ```
451
478
 
479
+ ### Delegating a Workspace to an Existing Group
480
+
481
+ An operations team already represented by a Default Workspace group can administer a Custom Workspace through one root Permission. The group and its members stay in the Default Workspace, so the same team can receive different access in other Workspaces.
482
+
483
+ First retrieve the target [Workspace](/python/resources/settings/workspaces) and [Group](/python/resources/user-accounts/groups) IDs as a Site Administrator in Workspace `0`. The examples use Workspace `123`, group `456`, and member user `789`; replace them with your own IDs. Confirm that the group belongs to Workspace `0` and that the intended user is a member.
484
+
485
+ Create the Permission using a Default Workspace Full Access site-wide key or a Full Access user key belonging to a Site Administrator. Keep the request context at `0` and use the qualified root path `_/Workspaces/123`. Set `group_id` to the group's ID, `permission` to `admin`, and `recursive` to `true`. Save the returned Permission `id` for later removal. For an individual Default Workspace user, use `user_id` instead of `group_id`.
486
+
487
+ For a Default Workspace group, a Site Administrator can also select Workspace `123` and use an empty `path` to grant access to its root. The qualified path in Workspace `0` works for both Default Workspace users and groups and keeps the account scope and target Workspace explicit. Appending a subfolder to the path would grant Folder Admin access instead of Workspace Administrator authority.
488
+
489
+ After the grant, run the request-context example above with the member's own credential and Workspace `123` selected. That member can work with the Workspace's files and perform Workspace Administrator operations, such as managing its users, Partners, and integrations. A Site Administrator's successful request does not establish that the member has the intended access.
490
+
491
+ ```python title="Grant group administration"
492
+ import files_sdk
493
+
494
+ files_sdk.set_workspace_id(0)
495
+ grant = files_sdk.permission.create({
496
+ "path": "_/Workspaces/123",
497
+ "group_id": 456,
498
+ "permission": "admin",
499
+ "recursive": True,
500
+ }, {"workspace_id": 0})
501
+ print(grant.id)
502
+ ```
503
+
504
+ ### Permission Inspection and Removal
505
+
506
+ List the member's Permissions with `user_id` and `include_groups=true` to include grants inherited through group membership. Listing only direct user grants can miss the Permission that provides Workspace administration. In Workspace `0`, the Custom Workspace root appears as `_/Workspaces/123`; in Workspace `123`, paths are relative to that root. Inspect the root path and `permission=admin`, rather than treating the user's `workspace_admin` field as their effective role.
507
+
508
+ Permission lists show grants, rather than a single effective-role boolean. Membership in several groups combines their access. A Permission using `group_ids` instead of `group_id` requires membership in all the specified groups; it is not a shorthand for assigning the same grant to several independent groups.
509
+
510
+ Removing a member ends access received through that group. Deleting the root Permission ends the group's Workspace Administrator grant for every member. These changes leave independent direct and other group grants in place, so review all applicable grants when withdrawing access. Default Workspace user API keys follow those permission changes without being recreated.
511
+
512
+ Group membership maintained through SCIM follows the same rule. A Group Admin allowed to add members can give those users the group's existing Workspace Administrator access. Choose who manages the group with that authority in mind.
513
+
514
+ Delete the Permission by its returned `id` as the Site Administrator in Workspace `0`. The removal examples use Permission ID `9001`; replace it with the ID returned by your create request. Permissions are created and deleted, rather than updated in place. If narrower folder access is still needed, assign it explicitly; deleting a broad grant does not restore narrower grants it previously replaced.
515
+
516
+ ```python title="Inspect member grants and remove the group grant"
517
+ for item in files_sdk.permission.list(
518
+ {"user_id": "789", "include_groups": True}, {"workspace_id": 0}
519
+ ):
520
+ print(item.path, item.permission, item.group_id)
521
+ files_sdk.permission.delete(9001, {}, {"workspace_id": 0})
522
+ ```
523
+
452
524
  ## Foreign Language Support
453
525
 
454
526
  The Files.com Python SDK supports localized responses by using the `files_sdk.set_language` configuration method.
@@ -0,0 +1 @@
1
+ 1.6.506
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: files_com
3
- Version: 1.6.504
3
+ Version: 1.6.506
4
4
  Summary: Python bindings for the Files.com API
5
5
  License: MIT
6
6
  Requires-Python: >=3.5
@@ -446,13 +446,40 @@ Trailing whitespace is significant for comparison. `report.txt` and `report.txt
446
446
 
447
447
  ## Workspaces
448
448
 
449
- A Workspace is a lightweight way to organize related resources inside a single Files.com Site.
449
+ A Workspace groups files, users, groups, Partners, integrations, and workflows within a Files.com Site. An integration can provision a Workspace for a department or project and delegate its operation to a team without making that team Site Administrators. Every Site has a Default Workspace, with ID `0`; additional Workspaces have their own IDs and root folders.
450
450
 
451
- Customers commonly group resources by project, department, client, or region. Workspaces provide a built-in structure for that grouping, so the UI can operate within a clear "workspace context" and admins can delegate management for a subset of resources without requiring full site-level isolation.
451
+ Account membership, request context, and permission grants serve different purposes. Creating an account in a Workspace determines where it belongs. Selecting a Workspace determines which resources a request operates on. A permission grant determines what the caller can do there. Selecting a Workspace never grants access to it.
452
452
 
453
- Every Site has an implicit Default workspace (ID `0`). Resources that are not explicitly assigned to a named workspace are considered part of the Default workspace.
453
+ ### Accounts and Administrative Access
454
+
455
+ A user's or group's `workspace_id` identifies the Workspace the account belongs to. Accounts belonging to a Custom Workspace stay within it. Default Workspace users and groups can receive permissions in one or more Custom Workspaces while keeping their existing accounts in Workspace `0`.
456
+
457
+ | Account | Workspace Administrator assignment | Scope |
458
+ | --- | --- | --- |
459
+ | User belonging to a Custom Workspace | Set the user's `workspace_admin` to `true`. | That user's own Custom Workspace. |
460
+ | Default Workspace user | Create an `admin` Permission for the user on a Custom Workspace's root folder. | Each Custom Workspace with a root grant. |
461
+ | Default Workspace group | Create an `admin` Permission for the group on a Custom Workspace's root folder. | Every member inherits administration of each Workspace with a root grant. |
462
+
463
+ `workspace_admin` is not a summary of a user's effective administrative access. A Default Workspace user can administer a Custom Workspace through a direct or group root grant while their `workspace_admin` remains `false`. Groups have no `workspace_admin` field. See [Users](/python/resources/user-accounts/users) and [Groups](/python/resources/user-accounts/groups) for account fields.
464
+
465
+ An `admin` grant on the **Custom Workspace root** provides full Workspace Administrator authority over its files, users, groups, Partners, workflows, and integrations. An `admin` grant on a subfolder provides Folder Admin authority over that folder and its descendants; it does not provide Workspace administration. Other permission levels provide their corresponding folder access without Workspace administration. [Permissions](/python/resources/user-accounts/permissions) defines the levels.
466
+
467
+ Site Administrators manage cross-Workspace assignments to Default Workspace accounts. Workspace Administrators manage accounts and permissions within their own scope. Site Administrators retain access to every Workspace; adding a Workspace grant does not narrow Site Administrator authority. The [product documentation](https://www.files.com/docs/workspaces/workspace-administrators) explains the role's operational scope and site-wide controls.
468
+
469
+ ### Request Context and API Keys
470
+
471
+ The REST header `X-Files-Workspace-Id` selects a Workspace for a request. SDK request options and CLI configuration send that same selection. Workspace-scoped resources are listed, created, and changed within the selected context, and ordinary paths are relative to its root.
472
+
473
+ A resource's `workspace_id` request field describes the resource's Workspace membership. It is separate from the SDK's Workspace request option or REST header. Creating a Workspace-scoped resource in a Custom Workspace defaults its `workspace_id` to the selected Workspace; a mismatching membership value is rejected with `not-authorized/insufficient-permission-for-params`.
474
+
475
+ Selecting another Workspace with an API key requires a **Full Access key created in the Default Workspace**. A user key follows that user's current access, including group permissions. A site-wide Full Access key created in the Default Workspace has Site Administrator authority in every Workspace. A Files Only key stays in its creation Workspace, even if its user has cross-Workspace access. Any key created in a Custom Workspace stays within that Workspace. Selecting another context with these confined keys is rejected with `bad-request/invalid-workspace-id-header`.
476
+
477
+ An account belonging to a Custom Workspace is scoped there when it authenticates normally. For a Default Workspace user, explicitly select the intended Workspace for an integration rather than relying on an interactive login preference. [API Keys](/python/resources/developers/api-keys) and [Authentication](/python/overview/authentication) cover credentials.
454
478
 
455
479
  The Files.com Python SDK supports workspace scoping by using the `files_sdk.set_workspace_id` configuration method. Scope a single request by passing `workspace_id` in the request options.
480
+
481
+ The adjacent scoping example uses a credential authorized for the selected Workspace. A group member uses their own Full Access user key from the Default Workspace; the Site Administrator credential used to assign the grant is not needed for their day-to-day work.
482
+
456
483
  ```python title="Example Request"
457
484
  import files_sdk
458
485
 
@@ -461,6 +488,51 @@ files_sdk.set_workspace_id(123)
461
488
  files_sdk.folder.list_for("", {}, {"workspace_id": 456})
462
489
  ```
463
490
 
491
+ ### Delegating a Workspace to an Existing Group
492
+
493
+ An operations team already represented by a Default Workspace group can administer a Custom Workspace through one root Permission. The group and its members stay in the Default Workspace, so the same team can receive different access in other Workspaces.
494
+
495
+ First retrieve the target [Workspace](/python/resources/settings/workspaces) and [Group](/python/resources/user-accounts/groups) IDs as a Site Administrator in Workspace `0`. The examples use Workspace `123`, group `456`, and member user `789`; replace them with your own IDs. Confirm that the group belongs to Workspace `0` and that the intended user is a member.
496
+
497
+ Create the Permission using a Default Workspace Full Access site-wide key or a Full Access user key belonging to a Site Administrator. Keep the request context at `0` and use the qualified root path `_/Workspaces/123`. Set `group_id` to the group's ID, `permission` to `admin`, and `recursive` to `true`. Save the returned Permission `id` for later removal. For an individual Default Workspace user, use `user_id` instead of `group_id`.
498
+
499
+ For a Default Workspace group, a Site Administrator can also select Workspace `123` and use an empty `path` to grant access to its root. The qualified path in Workspace `0` works for both Default Workspace users and groups and keeps the account scope and target Workspace explicit. Appending a subfolder to the path would grant Folder Admin access instead of Workspace Administrator authority.
500
+
501
+ After the grant, run the request-context example above with the member's own credential and Workspace `123` selected. That member can work with the Workspace's files and perform Workspace Administrator operations, such as managing its users, Partners, and integrations. A Site Administrator's successful request does not establish that the member has the intended access.
502
+
503
+ ```python title="Grant group administration"
504
+ import files_sdk
505
+
506
+ files_sdk.set_workspace_id(0)
507
+ grant = files_sdk.permission.create({
508
+ "path": "_/Workspaces/123",
509
+ "group_id": 456,
510
+ "permission": "admin",
511
+ "recursive": True,
512
+ }, {"workspace_id": 0})
513
+ print(grant.id)
514
+ ```
515
+
516
+ ### Permission Inspection and Removal
517
+
518
+ List the member's Permissions with `user_id` and `include_groups=true` to include grants inherited through group membership. Listing only direct user grants can miss the Permission that provides Workspace administration. In Workspace `0`, the Custom Workspace root appears as `_/Workspaces/123`; in Workspace `123`, paths are relative to that root. Inspect the root path and `permission=admin`, rather than treating the user's `workspace_admin` field as their effective role.
519
+
520
+ Permission lists show grants, rather than a single effective-role boolean. Membership in several groups combines their access. A Permission using `group_ids` instead of `group_id` requires membership in all the specified groups; it is not a shorthand for assigning the same grant to several independent groups.
521
+
522
+ Removing a member ends access received through that group. Deleting the root Permission ends the group's Workspace Administrator grant for every member. These changes leave independent direct and other group grants in place, so review all applicable grants when withdrawing access. Default Workspace user API keys follow those permission changes without being recreated.
523
+
524
+ Group membership maintained through SCIM follows the same rule. A Group Admin allowed to add members can give those users the group's existing Workspace Administrator access. Choose who manages the group with that authority in mind.
525
+
526
+ Delete the Permission by its returned `id` as the Site Administrator in Workspace `0`. The removal examples use Permission ID `9001`; replace it with the ID returned by your create request. Permissions are created and deleted, rather than updated in place. If narrower folder access is still needed, assign it explicitly; deleting a broad grant does not restore narrower grants it previously replaced.
527
+
528
+ ```python title="Inspect member grants and remove the group grant"
529
+ for item in files_sdk.permission.list(
530
+ {"user_id": "789", "include_groups": True}, {"workspace_id": 0}
531
+ ):
532
+ print(item.path, item.permission, item.group_id)
533
+ files_sdk.permission.delete(9001, {}, {"workspace_id": 0})
534
+ ```
535
+
464
536
  ## Foreign Language Support
465
537
 
466
538
  The Files.com Python SDK supports localized responses by using the `files_sdk.set_language` configuration method.
@@ -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.504"
323
+ version = "1.6.506"
324
324
 
325
325
  __version__ = version
326
326
 
@@ -17,13 +17,13 @@ class UserLifecycleRule:
17
17
  "action": None, # string - Action to take on inactive users (disable or delete)
18
18
  "inactivity_days": None, # int64 - Number of days of inactivity before the rule applies
19
19
  "include_folder_admins": None, # boolean - If true, the rule will apply to folder admins.
20
- "include_site_admins": None, # boolean - If true, the rule will apply to site admins.
21
- "apply_to_all_workspaces": None, # boolean - If true, a default-workspace rule also applies to users in all workspaces.
20
+ "include_site_admins": None, # boolean - If true, the rule includes Site Administrators, who always belong to the Default Workspace. Can only be enabled when `workspace_id` is `0`.
21
+ "apply_to_all_workspaces": None, # boolean - If true, a Default Workspace rule also applies to users in all Custom Workspaces. Can only be enabled when `workspace_id` is `0`.
22
22
  "name": None, # string - User Lifecycle Rule name
23
23
  "notify_users": None, # boolean - If true, users will be emailed before the rule disables or deletes them.
24
24
  "partner_tag": None, # string - If provided, only users belonging to Partners with this tag at the Partner level will be affected by the rule. Tags must only contain lowercase letters, numbers, and hyphens.
25
25
  "site_id": None, # int64 - Site ID
26
- "workspace_id": None, # int64 - Workspace ID. `0` means the default workspace.
26
+ "workspace_id": None, # int64 - Workspace whose users the rule applies to. `0` means the Default Workspace. A Custom Workspace rule applies only to users who belong to that Workspace, regardless of access granted to other users.
27
27
  "user_state": None, # string - State of the users to apply the rule to (inactive or disabled)
28
28
  "user_tag": None, # string - If provided, only users with this tag will be affected by the rule. Tags must only contain lowercase letters, numbers, and hyphens.
29
29
  }
@@ -54,18 +54,18 @@ class UserLifecycleRule:
54
54
 
55
55
  # Parameters:
56
56
  # action - string - Action to take on inactive users (disable or delete)
57
- # apply_to_all_workspaces - boolean - If true, a default-workspace rule also applies to users in all workspaces.
57
+ # apply_to_all_workspaces - boolean - If true, a Default Workspace rule also applies to users in all Custom Workspaces. Can only be enabled when `workspace_id` is `0`.
58
58
  # authentication_method - string - User authentication method for which the rule will apply. Use `all_non_sso` to target every non-SSO authentication method with one rule.
59
59
  # group_ids - array(int64) - Array of Group IDs to which the rule applies. If empty or not set, the rule applies to all users.
60
60
  # inactivity_days - int64 - Number of days of inactivity before the rule applies
61
- # include_site_admins - boolean - If true, the rule will apply to site admins.
61
+ # include_site_admins - boolean - If true, the rule includes Site Administrators, who always belong to the Default Workspace. Can only be enabled when `workspace_id` is `0`.
62
62
  # include_folder_admins - boolean - If true, the rule will apply to folder admins.
63
63
  # name - string - User Lifecycle Rule name
64
64
  # notify_users - boolean - If true, users will be emailed before the rule disables or deletes them.
65
65
  # partner_tag - string - If provided, only users belonging to Partners with this tag at the Partner level will be affected by the rule. Tags must only contain lowercase letters, numbers, and hyphens.
66
66
  # user_state - string - State of the users to apply the rule to (inactive or disabled)
67
67
  # user_tag - string - If provided, only users with this tag will be affected by the rule. Tags must only contain lowercase letters, numbers, and hyphens.
68
- # workspace_id - int64 - Workspace ID. `0` means the default workspace.
68
+ # workspace_id - int64 - Workspace whose users the rule applies to. `0` means the Default Workspace. A Custom Workspace rule applies only to users who belong to that Workspace, regardless of access granted to other users.
69
69
  def update(self, params=None):
70
70
  if not isinstance(params, dict):
71
71
  params = {}
@@ -223,18 +223,18 @@ def get(id, params=None, options=None):
223
223
 
224
224
  # Parameters:
225
225
  # action - string - Action to take on inactive users (disable or delete)
226
- # apply_to_all_workspaces - boolean - If true, a default-workspace rule also applies to users in all workspaces.
226
+ # apply_to_all_workspaces - boolean - If true, a Default Workspace rule also applies to users in all Custom Workspaces. Can only be enabled when `workspace_id` is `0`.
227
227
  # authentication_method - string - User authentication method for which the rule will apply. Use `all_non_sso` to target every non-SSO authentication method with one rule.
228
228
  # group_ids - array(int64) - Array of Group IDs to which the rule applies. If empty or not set, the rule applies to all users.
229
229
  # inactivity_days - int64 - Number of days of inactivity before the rule applies
230
- # include_site_admins - boolean - If true, the rule will apply to site admins.
230
+ # include_site_admins - boolean - If true, the rule includes Site Administrators, who always belong to the Default Workspace. Can only be enabled when `workspace_id` is `0`.
231
231
  # include_folder_admins - boolean - If true, the rule will apply to folder admins.
232
232
  # name - string - User Lifecycle Rule name
233
233
  # notify_users - boolean - If true, users will be emailed before the rule disables or deletes them.
234
234
  # partner_tag - string - If provided, only users belonging to Partners with this tag at the Partner level will be affected by the rule. Tags must only contain lowercase letters, numbers, and hyphens.
235
235
  # user_state - string - State of the users to apply the rule to (inactive or disabled)
236
236
  # user_tag - string - If provided, only users with this tag will be affected by the rule. Tags must only contain lowercase letters, numbers, and hyphens.
237
- # workspace_id - int64 - Workspace ID. `0` means the default workspace.
237
+ # workspace_id - int64 - Workspace whose users the rule applies to. `0` means the Default Workspace. A Custom Workspace rule applies only to users who belong to that Workspace, regardless of access granted to other users.
238
238
  def create(params=None, options=None):
239
239
  if not isinstance(params, dict):
240
240
  params = {}
@@ -306,18 +306,18 @@ def create(params=None, options=None):
306
306
 
307
307
  # Parameters:
308
308
  # action - string - Action to take on inactive users (disable or delete)
309
- # apply_to_all_workspaces - boolean - If true, a default-workspace rule also applies to users in all workspaces.
309
+ # apply_to_all_workspaces - boolean - If true, a Default Workspace rule also applies to users in all Custom Workspaces. Can only be enabled when `workspace_id` is `0`.
310
310
  # authentication_method - string - User authentication method for which the rule will apply. Use `all_non_sso` to target every non-SSO authentication method with one rule.
311
311
  # group_ids - array(int64) - Array of Group IDs to which the rule applies. If empty or not set, the rule applies to all users.
312
312
  # inactivity_days - int64 - Number of days of inactivity before the rule applies
313
- # include_site_admins - boolean - If true, the rule will apply to site admins.
313
+ # include_site_admins - boolean - If true, the rule includes Site Administrators, who always belong to the Default Workspace. Can only be enabled when `workspace_id` is `0`.
314
314
  # include_folder_admins - boolean - If true, the rule will apply to folder admins.
315
315
  # name - string - User Lifecycle Rule name
316
316
  # notify_users - boolean - If true, users will be emailed before the rule disables or deletes them.
317
317
  # partner_tag - string - If provided, only users belonging to Partners with this tag at the Partner level will be affected by the rule. Tags must only contain lowercase letters, numbers, and hyphens.
318
318
  # user_state - string - State of the users to apply the rule to (inactive or disabled)
319
319
  # user_tag - string - If provided, only users with this tag will be affected by the rule. Tags must only contain lowercase letters, numbers, and hyphens.
320
- # workspace_id - int64 - Workspace ID. `0` means the default workspace.
320
+ # workspace_id - int64 - Workspace whose users the rule applies to. `0` means the Default Workspace. A Custom Workspace rule applies only to users who belong to that Workspace, regardless of access granted to other users.
321
321
  def update(id, params=None, options=None):
322
322
  if not isinstance(params, dict):
323
323
  params = {}
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "files_com"
7
- version = "1.6.504"
7
+ version = "1.6.506"
8
8
  description = "Python bindings for the Files.com API"
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -1 +0,0 @@
1
- 1.6.504
File without changes