Files.com 1.6.484__tar.gz → 1.6.486__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {files_com-1.6.484/files_com.egg-info → files_com-1.6.486}/PKG-INFO +18 -23
- {files_com-1.6.484 → files_com-1.6.486}/README.md +17 -22
- files_com-1.6.486/_VERSION +1 -0
- {files_com-1.6.484 → files_com-1.6.486/files_com.egg-info}/PKG-INFO +18 -23
- {files_com-1.6.484 → files_com-1.6.486}/files_com.egg-info/SOURCES.txt +2 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/__init__.py +1 -1
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/api_client.py +37 -22
- files_com-1.6.486/files_sdk/path_comparison.json +20621 -0
- files_com-1.6.486/files_sdk/path_util.py +33 -0
- {files_com-1.6.484 → files_com-1.6.486}/pyproject.toml +4 -4
- files_com-1.6.486/tests/test_path_util.py +53 -0
- files_com-1.6.486/tests/test_transfer_privacy.py +97 -0
- files_com-1.6.484/_VERSION +0 -1
- files_com-1.6.484/files_sdk/path_util.py +0 -42
- files_com-1.6.484/tests/test_path_util.py +0 -27
- {files_com-1.6.484 → files_com-1.6.486}/LICENSE +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_com.egg-info/dependency_links.txt +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_com.egg-info/requires.txt +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_com.egg-info/top_level.txt +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/api.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/error.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/list_obj.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/__init__.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/account_line_item.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/action.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/action_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/action_notification_export.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/action_notification_export_result.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/agent_node.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/agent_node_connection.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/agent_node_instance.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/agent_push_update.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/ai_assistant_personality.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/ai_task.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/api_key.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/api_request_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/app.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/as2_incoming_message.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/as2_outgoing_message.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/as2_partner.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/as2_station.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/auto.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/automation.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/automation_authoring_schema.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/automation_execution_node.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/automation_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/automation_run.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/bandwidth_snapshot.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/behavior.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/bundle.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/bundle_action.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/bundle_download.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/bundle_notification.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/bundle_path.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/bundle_recipient.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/bundle_registration.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/chat_message.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/chat_session.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/child_site_management_policy.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/clickwrap.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/custom_domain.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/desktop_configuration_profile.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/direct_connection_info.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/dns_record.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/email_incoming_message.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/email_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/errors.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/event_channel.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/event_delivery_attempt.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/event_record.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/event_subscription.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/event_target.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/exavault_api_request_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/expectation.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/expectation_evaluation.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/expectation_incident.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/external_event.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/file.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/file_action.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/file_comment.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/file_comment_reaction.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/file_migration.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/file_migration_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/file_upload_part.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/folder.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/form_field.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/form_field_set.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/ftp_action_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/gpg_key.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/group.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/group_user.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/history.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/history_export.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/history_export_result.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/holiday_calendar.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/holiday_region.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/image.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/inbound_s3_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/inbox_recipient.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/inbox_registration.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/inbox_upload.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/integration_centric_profile.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/invoice.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/invoice_line_item.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/ip_address.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/key_lifecycle_rule.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/lock.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/metadata_category.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/notification.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/outbound_connection_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/partner.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/partner_channel.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/partner_channel_template.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/partner_connection.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/partner_site.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/partner_site_request.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/payment.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/payment_line_item.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/pending_work_event.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/permission.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/preview.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/public_hosting_request_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/public_ip_address.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/public_key.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/remote_bandwidth_snapshot.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/remote_mount_backend.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/remote_server.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/remote_server_configuration_file.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/remote_server_credential.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/request.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/restore.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/schedule.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/scheduled_export.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/scim_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/secret.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/session.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/settings_change.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/sftp_action_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/sftp_host_key.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/share_group.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/share_group_member.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/siem_http_destination.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/siem_http_destination_event.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/site.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/site_subdomain_redirect.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/snapshot.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/sso_event.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/sso_strategy.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/status.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/style.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/sync.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/sync_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/sync_run.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/sync_run_live_transfer.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/usage_by_top_level_dir.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/usage_daily_snapshot.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/usage_snapshot.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/user.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/user_additional_email_recipient.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/user_cipher_use.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/user_lifecycle_rule.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/user_request.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/user_security_event.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/user_sftp_client_use.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/web_dav_action_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/webhook_test.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/workspace.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/models/zip_list_entry.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/files_sdk/util.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/setup.cfg +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_account_line_item.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_action.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_action_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_action_notification_export.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_action_notification_export_result.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_agent_node.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_agent_node_connection.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_agent_node_instance.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_agent_push_update.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_ai_assistant_personality.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_ai_task.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_api_errors.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_api_key.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_api_request_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_app.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_as2_incoming_message.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_as2_outgoing_message.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_as2_partner.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_as2_station.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_auto.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_automation.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_automation_authoring_schema.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_automation_execution_node.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_automation_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_automation_run.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_bandwidth_snapshot.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_behavior.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_bundle.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_bundle_action.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_bundle_download.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_bundle_notification.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_bundle_path.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_bundle_recipient.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_bundle_registration.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_chat_message.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_chat_session.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_child_site_management_policy.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_clickwrap.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_connection_adapter.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_custom_domain.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_decimal_contract.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_desktop_configuration_profile.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_direct_connection_info.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_dns_record.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_email_incoming_message.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_email_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_errors.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_event_channel.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_event_delivery_attempt.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_event_record.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_event_subscription.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_event_target.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_exavault_api_request_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_expectation.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_expectation_evaluation.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_expectation_incident.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_external_event.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_file.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_file_action.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_file_comment.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_file_comment_reaction.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_file_migration.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_file_migration_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_file_underscore_destinations.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_file_upload_part.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_folder.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_form_field.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_form_field_set.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_ftp_action_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_gpg_key.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_group.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_group_user.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_history.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_history_export.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_history_export_result.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_holiday_calendar.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_holiday_region.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_image.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_inbound_s3_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_inbox_recipient.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_inbox_registration.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_inbox_upload.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_integration_centric_profile.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_invoice.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_invoice_line_item.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_ip_address.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_key_lifecycle_rule.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_lock.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_metadata_category.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_notification.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_outbound_connection_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_partner.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_partner_channel.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_partner_channel_template.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_partner_connection.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_partner_site.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_partner_site_request.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_path_parameter_encoding.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_payment.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_payment_line_item.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_pending_work_event.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_permission.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_preview.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_public_hosting_request_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_public_ip_address.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_public_key.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_redirect_auth.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_remote_bandwidth_snapshot.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_remote_mount_backend.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_remote_server.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_remote_server_configuration_file.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_remote_server_credential.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_request.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_restore.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_schedule.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_scheduled_export.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_scim_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_secret.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_session.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_settings_change.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_sftp_action_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_sftp_host_key.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_share_group.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_share_group_member.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_siem_http_destination.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_siem_http_destination_event.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_site.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_site_subdomain_redirect.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_snapshot.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_sso_event.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_sso_strategy.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_status.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_stream_download.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_style.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_sync.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_sync_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_sync_run.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_sync_run_live_transfer.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_usage_by_top_level_dir.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_usage_daily_snapshot.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_usage_snapshot.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_user.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_user_additional_email_recipient.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_user_cipher_use.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_user_lifecycle_rule.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_user_request.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_user_security_event.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_user_sftp_client_use.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_web_dav_action_log.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_webhook_test.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_workspace.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_workspace_id.py +0 -0
- {files_com-1.6.484 → files_com-1.6.486}/tests/test_zip_list_entry.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: files_com
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.486
|
|
4
4
|
Summary: Python bindings for the Files.com API
|
|
5
5
|
License: MIT
|
|
6
6
|
Requires-Python: >=3.5
|
|
@@ -384,16 +384,16 @@ except files_sdk.error.Error as err:
|
|
|
384
384
|
|
|
385
385
|
## Paths
|
|
386
386
|
|
|
387
|
-
|
|
387
|
+
Files.com preserves the spelling of file and folder paths while comparing them using shared case and Unicode rules. Use the SDK comparison helpers when matching paths locally.
|
|
388
388
|
<div></div>
|
|
389
389
|
|
|
390
390
|
### Capitalization
|
|
391
391
|
|
|
392
|
-
Files.com
|
|
392
|
+
Files.com uses case-insensitive path matching based on its fixed Unicode comparison map.
|
|
393
393
|
|
|
394
|
-
For example,
|
|
394
|
+
For example, the following paths have the same comparison key:
|
|
395
395
|
|
|
396
|
-
| Path Variant |
|
|
396
|
+
| Path Variant | Comparison Key |
|
|
397
397
|
|---------------------------------------|------------------------------|
|
|
398
398
|
| `Documents/Reports/Q1.pdf` | `documents/reports/q1.pdf` |
|
|
399
399
|
| `documents/reports/q1.PDF` | `documents/reports/q1.pdf` |
|
|
@@ -420,32 +420,27 @@ if files_sdk.path_util.is_same("Fïłèńämê.Txt", "filename.txt"):
|
|
|
420
420
|
|
|
421
421
|
### Slashes
|
|
422
422
|
|
|
423
|
-
|
|
423
|
+
Use `/` between folder and file names, without leading or trailing slashes. SDK normalization helpers convert backslashes to `/`, remove duplicate separators, and discard exact `.` and `..` components. Discarding `..` leaves the preceding folder name intact.
|
|
424
424
|
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
|
429
|
-
|
|
|
430
|
-
| `folder/
|
|
431
|
-
|
|
|
425
|
+
| Input | Normalized path |
|
|
426
|
+
|-------|-----------------|
|
|
427
|
+
| `folder/subfolder/file.txt` | `folder/subfolder/file.txt` |
|
|
428
|
+
| `/folder/subfolder/file.txt` | `folder/subfolder/file.txt` |
|
|
429
|
+
| `folder/subfolder/file.txt/` | `folder/subfolder/file.txt` |
|
|
430
|
+
| `//folder//file.txt` | `folder/file.txt` |
|
|
431
|
+
| `folder/../file.txt` | `folder/file.txt` |
|
|
432
432
|
|
|
433
433
|
<div></div>
|
|
434
434
|
|
|
435
|
-
### Unicode
|
|
435
|
+
### Unicode and Path Comparison
|
|
436
436
|
|
|
437
|
-
Files.com
|
|
437
|
+
Files.com compares paths using a fixed mapping shared by the server and SDKs. It treats case and many accent differences as equivalent: `Résumé.txt` and `resume.txt` identify the same file, as do `q` followed by a combining acute accent and `q`. The mapping also handles other equivalences, such as Hiragana and Katakana. Lowercasing or applying a standard Unicode normalization form alone does not reproduce these rules.
|
|
438
438
|
|
|
439
|
-
|
|
439
|
+
SDK comparison helpers normalize path separators and dot segments, then apply the bundled [versioned comparison map](https://github.com/Files-com/files-sdk-javascript/blob/master/shared/path_comparison.json). The [shared examples](https://github.com/Files-com/files-sdk-javascript/blob/master/shared/comparison_examples.json) give exact comparison results for integrations that implement their own matching. The map uses hexadecimal Unicode scalar values as keys: a missing entry preserves the character, an empty replacement removes it, and other replacements may contain several characters. Apply each replacement once without normalizing or lowercasing the result again.
|
|
440
440
|
|
|
441
|
-
|
|
442
|
-
|----------------------------------------|------------------------|
|
|
443
|
-
| `uploads/\u0065\u0301.txt` | `uploads/é.txt` |
|
|
444
|
-
| `docs/Café/Report.txt` | `docs/Café/Report.txt` |
|
|
441
|
+
Use comparison results only for matching. Send the original path spelling in API requests and preserve it for display and local filenames; comparison results can have a different spelling or length.
|
|
445
442
|
|
|
446
|
-
|
|
447
|
-
- Precomposed and decomposed characters are unified.
|
|
448
|
-
- This affects search, deduplication, and comparisons across SDKs.
|
|
443
|
+
Trailing whitespace is significant for comparison. `report.txt` and `report.txt ` are different file paths, and SDK helpers preserve spaces, tabs, and newlines. Folder names cannot end in whitespace. See [Unicode Normalization](https://www.files.com/docs/files-and-folders/file-system-semantics/unicode-normalization) for the complete path rules.
|
|
449
444
|
|
|
450
445
|
<div></div>
|
|
451
446
|
|
|
@@ -372,16 +372,16 @@ except files_sdk.error.Error as err:
|
|
|
372
372
|
|
|
373
373
|
## Paths
|
|
374
374
|
|
|
375
|
-
|
|
375
|
+
Files.com preserves the spelling of file and folder paths while comparing them using shared case and Unicode rules. Use the SDK comparison helpers when matching paths locally.
|
|
376
376
|
<div></div>
|
|
377
377
|
|
|
378
378
|
### Capitalization
|
|
379
379
|
|
|
380
|
-
Files.com
|
|
380
|
+
Files.com uses case-insensitive path matching based on its fixed Unicode comparison map.
|
|
381
381
|
|
|
382
|
-
For example,
|
|
382
|
+
For example, the following paths have the same comparison key:
|
|
383
383
|
|
|
384
|
-
| Path Variant |
|
|
384
|
+
| Path Variant | Comparison Key |
|
|
385
385
|
|---------------------------------------|------------------------------|
|
|
386
386
|
| `Documents/Reports/Q1.pdf` | `documents/reports/q1.pdf` |
|
|
387
387
|
| `documents/reports/q1.PDF` | `documents/reports/q1.pdf` |
|
|
@@ -408,32 +408,27 @@ if files_sdk.path_util.is_same("Fïłèńämê.Txt", "filename.txt"):
|
|
|
408
408
|
|
|
409
409
|
### Slashes
|
|
410
410
|
|
|
411
|
-
|
|
411
|
+
Use `/` between folder and file names, without leading or trailing slashes. SDK normalization helpers convert backslashes to `/`, remove duplicate separators, and discard exact `.` and `..` components. Discarding `..` leaves the preceding folder name intact.
|
|
412
412
|
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
|
417
|
-
|
|
|
418
|
-
| `folder/
|
|
419
|
-
|
|
|
413
|
+
| Input | Normalized path |
|
|
414
|
+
|-------|-----------------|
|
|
415
|
+
| `folder/subfolder/file.txt` | `folder/subfolder/file.txt` |
|
|
416
|
+
| `/folder/subfolder/file.txt` | `folder/subfolder/file.txt` |
|
|
417
|
+
| `folder/subfolder/file.txt/` | `folder/subfolder/file.txt` |
|
|
418
|
+
| `//folder//file.txt` | `folder/file.txt` |
|
|
419
|
+
| `folder/../file.txt` | `folder/file.txt` |
|
|
420
420
|
|
|
421
421
|
<div></div>
|
|
422
422
|
|
|
423
|
-
### Unicode
|
|
423
|
+
### Unicode and Path Comparison
|
|
424
424
|
|
|
425
|
-
Files.com
|
|
425
|
+
Files.com compares paths using a fixed mapping shared by the server and SDKs. It treats case and many accent differences as equivalent: `Résumé.txt` and `resume.txt` identify the same file, as do `q` followed by a combining acute accent and `q`. The mapping also handles other equivalences, such as Hiragana and Katakana. Lowercasing or applying a standard Unicode normalization form alone does not reproduce these rules.
|
|
426
426
|
|
|
427
|
-
|
|
427
|
+
SDK comparison helpers normalize path separators and dot segments, then apply the bundled [versioned comparison map](https://github.com/Files-com/files-sdk-javascript/blob/master/shared/path_comparison.json). The [shared examples](https://github.com/Files-com/files-sdk-javascript/blob/master/shared/comparison_examples.json) give exact comparison results for integrations that implement their own matching. The map uses hexadecimal Unicode scalar values as keys: a missing entry preserves the character, an empty replacement removes it, and other replacements may contain several characters. Apply each replacement once without normalizing or lowercasing the result again.
|
|
428
428
|
|
|
429
|
-
|
|
430
|
-
|----------------------------------------|------------------------|
|
|
431
|
-
| `uploads/\u0065\u0301.txt` | `uploads/é.txt` |
|
|
432
|
-
| `docs/Café/Report.txt` | `docs/Café/Report.txt` |
|
|
429
|
+
Use comparison results only for matching. Send the original path spelling in API requests and preserve it for display and local filenames; comparison results can have a different spelling or length.
|
|
433
430
|
|
|
434
|
-
|
|
435
|
-
- Precomposed and decomposed characters are unified.
|
|
436
|
-
- This affects search, deduplication, and comparisons across SDKs.
|
|
431
|
+
Trailing whitespace is significant for comparison. `report.txt` and `report.txt ` are different file paths, and SDK helpers preserve spaces, tabs, and newlines. Folder names cannot end in whitespace. See [Unicode Normalization](https://www.files.com/docs/files-and-folders/file-system-semantics/unicode-normalization) for the complete path rules.
|
|
437
432
|
|
|
438
433
|
<div></div>
|
|
439
434
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.6.486
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: files_com
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.486
|
|
4
4
|
Summary: Python bindings for the Files.com API
|
|
5
5
|
License: MIT
|
|
6
6
|
Requires-Python: >=3.5
|
|
@@ -384,16 +384,16 @@ except files_sdk.error.Error as err:
|
|
|
384
384
|
|
|
385
385
|
## Paths
|
|
386
386
|
|
|
387
|
-
|
|
387
|
+
Files.com preserves the spelling of file and folder paths while comparing them using shared case and Unicode rules. Use the SDK comparison helpers when matching paths locally.
|
|
388
388
|
<div></div>
|
|
389
389
|
|
|
390
390
|
### Capitalization
|
|
391
391
|
|
|
392
|
-
Files.com
|
|
392
|
+
Files.com uses case-insensitive path matching based on its fixed Unicode comparison map.
|
|
393
393
|
|
|
394
|
-
For example,
|
|
394
|
+
For example, the following paths have the same comparison key:
|
|
395
395
|
|
|
396
|
-
| Path Variant |
|
|
396
|
+
| Path Variant | Comparison Key |
|
|
397
397
|
|---------------------------------------|------------------------------|
|
|
398
398
|
| `Documents/Reports/Q1.pdf` | `documents/reports/q1.pdf` |
|
|
399
399
|
| `documents/reports/q1.PDF` | `documents/reports/q1.pdf` |
|
|
@@ -420,32 +420,27 @@ if files_sdk.path_util.is_same("Fïłèńämê.Txt", "filename.txt"):
|
|
|
420
420
|
|
|
421
421
|
### Slashes
|
|
422
422
|
|
|
423
|
-
|
|
423
|
+
Use `/` between folder and file names, without leading or trailing slashes. SDK normalization helpers convert backslashes to `/`, remove duplicate separators, and discard exact `.` and `..` components. Discarding `..` leaves the preceding folder name intact.
|
|
424
424
|
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
|
429
|
-
|
|
|
430
|
-
| `folder/
|
|
431
|
-
|
|
|
425
|
+
| Input | Normalized path |
|
|
426
|
+
|-------|-----------------|
|
|
427
|
+
| `folder/subfolder/file.txt` | `folder/subfolder/file.txt` |
|
|
428
|
+
| `/folder/subfolder/file.txt` | `folder/subfolder/file.txt` |
|
|
429
|
+
| `folder/subfolder/file.txt/` | `folder/subfolder/file.txt` |
|
|
430
|
+
| `//folder//file.txt` | `folder/file.txt` |
|
|
431
|
+
| `folder/../file.txt` | `folder/file.txt` |
|
|
432
432
|
|
|
433
433
|
<div></div>
|
|
434
434
|
|
|
435
|
-
### Unicode
|
|
435
|
+
### Unicode and Path Comparison
|
|
436
436
|
|
|
437
|
-
Files.com
|
|
437
|
+
Files.com compares paths using a fixed mapping shared by the server and SDKs. It treats case and many accent differences as equivalent: `Résumé.txt` and `resume.txt` identify the same file, as do `q` followed by a combining acute accent and `q`. The mapping also handles other equivalences, such as Hiragana and Katakana. Lowercasing or applying a standard Unicode normalization form alone does not reproduce these rules.
|
|
438
438
|
|
|
439
|
-
|
|
439
|
+
SDK comparison helpers normalize path separators and dot segments, then apply the bundled [versioned comparison map](https://github.com/Files-com/files-sdk-javascript/blob/master/shared/path_comparison.json). The [shared examples](https://github.com/Files-com/files-sdk-javascript/blob/master/shared/comparison_examples.json) give exact comparison results for integrations that implement their own matching. The map uses hexadecimal Unicode scalar values as keys: a missing entry preserves the character, an empty replacement removes it, and other replacements may contain several characters. Apply each replacement once without normalizing or lowercasing the result again.
|
|
440
440
|
|
|
441
|
-
|
|
442
|
-
|----------------------------------------|------------------------|
|
|
443
|
-
| `uploads/\u0065\u0301.txt` | `uploads/é.txt` |
|
|
444
|
-
| `docs/Café/Report.txt` | `docs/Café/Report.txt` |
|
|
441
|
+
Use comparison results only for matching. Send the original path spelling in API requests and preserve it for display and local filenames; comparison results can have a different spelling or length.
|
|
445
442
|
|
|
446
|
-
|
|
447
|
-
- Precomposed and decomposed characters are unified.
|
|
448
|
-
- This affects search, deduplication, and comparisons across SDKs.
|
|
443
|
+
Trailing whitespace is significant for comparison. `report.txt` and `report.txt ` are different file paths, and SDK helpers preserve spaces, tabs, and newlines. Folder names cannot end in whitespace. See [Unicode Normalization](https://www.files.com/docs/files-and-folders/file-system-semantics/unicode-normalization) for the complete path rules.
|
|
449
444
|
|
|
450
445
|
<div></div>
|
|
451
446
|
|
|
@@ -11,6 +11,7 @@ files_sdk/api.py
|
|
|
11
11
|
files_sdk/api_client.py
|
|
12
12
|
files_sdk/error.py
|
|
13
13
|
files_sdk/list_obj.py
|
|
14
|
+
files_sdk/path_comparison.json
|
|
14
15
|
files_sdk/path_util.py
|
|
15
16
|
files_sdk/util.py
|
|
16
17
|
files_sdk/../README.md
|
|
@@ -300,6 +301,7 @@ tests/test_sync.py
|
|
|
300
301
|
tests/test_sync_log.py
|
|
301
302
|
tests/test_sync_run.py
|
|
302
303
|
tests/test_sync_run_live_transfer.py
|
|
304
|
+
tests/test_transfer_privacy.py
|
|
303
305
|
tests/test_usage_by_top_level_dir.py
|
|
304
306
|
tests/test_usage_daily_snapshot.py
|
|
305
307
|
tests/test_usage_snapshot.py
|
|
@@ -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(
|
|
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(
|
|
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=
|
|
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(
|
|
366
|
+
return APIError(message, **opts)
|
|
352
367
|
|
|
353
368
|
def handle_network_error(self, error, request, num_retries):
|
|
354
|
-
util.log_error("Network 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",
|
|
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
|
-
|
|
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)
|