Files.com 2.0.10__tar.gz → 2.0.11__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-2.0.10/files_com.egg-info → files_com-2.0.11}/PKG-INFO +1 -1
- {files_com-2.0.10 → files_com-2.0.11/files_com.egg-info}/PKG-INFO +1 -1
- {files_com-2.0.10 → files_com-2.0.11}/files_com.egg-info/SOURCES.txt +1 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/__init__.py +1 -1
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/checkpoint.py +18 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/jobs.py +17 -3
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/file.py +11 -4
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/upload.py +344 -87
- files_com-2.0.11/files_sdk/windows_file.py +544 -0
- {files_com-2.0.10 → files_com-2.0.11}/pyproject.toml +2 -2
- {files_com-2.0.10 → files_com-2.0.11}/LICENSE +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/MANIFEST.in +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/README.md +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_com.egg-info/dependency_links.txt +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_com.egg-info/requires.txt +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_com.egg-info/top_level.txt +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/access.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/adaptive.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/api.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/api_client.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/attachment.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/client.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/context.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/download.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/download_status.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/error.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/lifetime.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/list_obj.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/localfs.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/migration.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/__init__.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/account_line_item.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/action.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/action_log.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/action_notification_export.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/action_notification_export_result.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/agent_node.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/agent_node_connection.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/agent_node_instance.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/agent_push_update.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/ai_assistant_personality.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/ai_task.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/api_key.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/api_request_log.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/app.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/as2_incoming_message.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/as2_outgoing_message.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/as2_partner.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/as2_station.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/auto.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/automation.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/automation_authoring_schema.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/automation_execution_node.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/automation_log.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/automation_run.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/bandwidth_snapshot.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/behavior.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/bundle.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/bundle_action.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/bundle_download.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/bundle_notification.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/bundle_path.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/bundle_recipient.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/bundle_registration.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/chat_message.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/chat_session.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/child_site_management_policy.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/clickwrap.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/custom_domain.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/desktop_configuration_profile.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/direct_connection_info.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/dns_record.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/email_incoming_message.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/email_log.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/errors.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/event_channel.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/event_delivery_attempt.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/event_record.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/event_subscription.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/event_target.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/exavault_api_request_log.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/expectation.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/expectation_evaluation.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/expectation_incident.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/external_event.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/file_action.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/file_comment.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/file_comment_reaction.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/file_migration.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/file_migration_log.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/file_upload_part.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/folder.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/form_field.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/form_field_set.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/ftp_action_log.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/gpg_key.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/group.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/group_user.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/history.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/history_export.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/history_export_result.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/holiday_calendar.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/holiday_region.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/image.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/inbound_s3_log.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/inbox_recipient.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/inbox_registration.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/inbox_upload.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/integration_centric_profile.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/invoice.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/invoice_line_item.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/ip_address.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/key_lifecycle_rule.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/lock.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/metadata_category.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/notification.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/outbound_connection_log.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/partner.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/partner_channel.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/partner_channel_template.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/partner_connection.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/partner_site.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/partner_site_request.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/payment.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/payment_line_item.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/pending_work_event.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/permission.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/preview.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/public_hosting_request_log.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/public_ip_address.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/public_key.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/remote_bandwidth_snapshot.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/remote_mount_backend.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/remote_server.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/remote_server_configuration_file.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/remote_server_credential.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/request.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/restore.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/schedule.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/scheduled_export.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/scim_log.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/secret.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/session.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/settings_change.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/sftp_action_log.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/sftp_host_key.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/share_group.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/share_group_member.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/siem_http_destination.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/siem_http_destination_event.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/site.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/site_subdomain_redirect.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/snapshot.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/sso_event.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/sso_strategy.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/status.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/style.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/sync.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/sync_log.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/sync_run.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/sync_run_live_transfer.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/usage_by_top_level_dir.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/usage_daily_snapshot.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/usage_snapshot.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/user.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/user_additional_email_recipient.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/user_cipher_use.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/user_lifecycle_rule.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/user_request.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/user_security_event.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/user_sftp_client_use.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/web_dav_action_log.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/webhook_test.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/workspace.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/models/zip_list_entry.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/path_comparison.json +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/path_util.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/py.typed +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/region.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/transport.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/util.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/files_sdk/writing.py +0 -0
- {files_com-2.0.10 → files_com-2.0.11}/setup.cfg +0 -0
|
@@ -623,6 +623,15 @@ class _Slot:
|
|
|
623
623
|
self.job.pending.pop(self.name, None)
|
|
624
624
|
self.job.dirty = True
|
|
625
625
|
|
|
626
|
+
def invalidate(self):
|
|
627
|
+
"""Forget the file's state, on disk now: its transfer saw its source
|
|
628
|
+
change, so nothing of it may be resumed. The job's checkpoint is
|
|
629
|
+
saved without it, keeping every other file's."""
|
|
630
|
+
with self.job._state_lock:
|
|
631
|
+
self.job.pending.pop(self.name, None)
|
|
632
|
+
self.job.dirty = True
|
|
633
|
+
self.job.save_job(final=True)
|
|
634
|
+
|
|
626
635
|
|
|
627
636
|
class _FileStore:
|
|
628
637
|
"""A CheckpointFile as a transfer's checkpoint: the state it held when
|
|
@@ -645,6 +654,15 @@ class _FileStore:
|
|
|
645
654
|
def clear(self):
|
|
646
655
|
self.checkpoint.clear()
|
|
647
656
|
|
|
657
|
+
def invalidate(self):
|
|
658
|
+
"""Record, on disk now, that there is nothing to resume: the
|
|
659
|
+
transfer saw its source change, so what it recorded must not be
|
|
660
|
+
resumed. Saved in place rather than removed, since a removal can
|
|
661
|
+
leave the file there (_remove, on Windows); a later call finds no
|
|
662
|
+
state and starts again."""
|
|
663
|
+
self._state = None
|
|
664
|
+
self.checkpoint.save(None, True)
|
|
665
|
+
|
|
648
666
|
|
|
649
667
|
def file_store(path, kind, key) -> tuple[CheckpointFile, _FileStore]:
|
|
650
668
|
"""Open the checkpoint at path for one transfer."""
|
|
@@ -651,12 +651,24 @@ def _remote_join(root, relative):
|
|
|
651
651
|
)
|
|
652
652
|
|
|
653
653
|
|
|
654
|
+
def _entry_status(directory, name):
|
|
655
|
+
"""The entry name in directory itself, never through a link, with the
|
|
656
|
+
device and inode its upload checks (a DirEntry's are zero on Windows);
|
|
657
|
+
or the error looking at it raised, as when it is gone since it was
|
|
658
|
+
listed, for it alone."""
|
|
659
|
+
try:
|
|
660
|
+
return directory.lstat(name)
|
|
661
|
+
except OSError as error:
|
|
662
|
+
return error
|
|
663
|
+
|
|
664
|
+
|
|
654
665
|
def _local_items(tree, remote_root) -> Iterator[_Item]:
|
|
655
666
|
"""The files and empty folders under tree's directory, a directory at a
|
|
656
667
|
time, in name order. Each directory is opened from the job's directory
|
|
657
668
|
one folder at a time, never through a link; links and special files are
|
|
658
669
|
skipped, not followed. Each file is uploaded only if it is still the
|
|
659
|
-
file found here.
|
|
670
|
+
file found here. An entry that cannot be looked at fails alone; a
|
|
671
|
+
folder that cannot be opened or listed fails as a whole."""
|
|
660
672
|
stack: list[tuple[str, ...]] = [()]
|
|
661
673
|
while stack:
|
|
662
674
|
parts = stack.pop()
|
|
@@ -671,7 +683,7 @@ def _local_items(tree, remote_root) -> Iterator[_Item]:
|
|
|
671
683
|
) as scanner:
|
|
672
684
|
entries = sorted(
|
|
673
685
|
(
|
|
674
|
-
(entry.name, entry.
|
|
686
|
+
(entry.name, _entry_status(directory, entry.name))
|
|
675
687
|
for entry in scanner
|
|
676
688
|
),
|
|
677
689
|
key=lambda pair: pair[0],
|
|
@@ -699,7 +711,9 @@ def _local_items(tree, remote_root) -> Iterator[_Item]:
|
|
|
699
711
|
)
|
|
700
712
|
local = os.path.join(path, entry_name)
|
|
701
713
|
remote = _remote_join(remote_root, name)
|
|
702
|
-
if
|
|
714
|
+
if isinstance(found, OSError):
|
|
715
|
+
yield _Item("skip", name, local, remote, error=found)
|
|
716
|
+
elif stat.S_ISLNK(found.st_mode):
|
|
703
717
|
yield _Item(
|
|
704
718
|
"skip", name, local, remote, reason="symbolic link"
|
|
705
719
|
)
|
|
@@ -2105,8 +2105,12 @@ class FileResource:
|
|
|
2105
2105
|
adapts to how the upload is going, up to max_concurrency; tuning
|
|
2106
2106
|
(an UploadTuning) changes how, or turns adapting off. progress, if
|
|
2107
2107
|
given, is called on this thread with an UploadProgress as parts
|
|
2108
|
-
arrive. The file must not change while it uploads
|
|
2109
|
-
|
|
2108
|
+
arrive. The file must not change while it uploads. The SDK checks
|
|
2109
|
+
it as it reads it and before completing the upload, by its size,
|
|
2110
|
+
times and identity and, on Windows, by Windows' notice of a write
|
|
2111
|
+
to a file on a local disk where Windows gives one, and a change it
|
|
2112
|
+
finds fails the upload instead of completing it; but no check finds
|
|
2113
|
+
every change. One
|
|
2110
2114
|
operation covers every request of the upload, and the client's
|
|
2111
2115
|
transfer_limiter bounds its parts in progress. params can set
|
|
2112
2116
|
mkdir_parents, with_rename, buffered_upload, custom_metadata and
|
|
@@ -2114,8 +2118,11 @@ class FileResource:
|
|
|
2114
2118
|
|
|
2115
2119
|
checkpoint, a local path, keeps what the upload has done so far, so
|
|
2116
2120
|
that calling upload_file again with it resumes the upload if it
|
|
2117
|
-
stopped
|
|
2118
|
-
|
|
2121
|
+
stopped, while the file's size, times and identity are as they were,
|
|
2122
|
+
which cannot prove its bytes are; an upload that found the file
|
|
2123
|
+
changed keeps nothing to resume. pause_token (a PauseToken) pauses
|
|
2124
|
+
it, raising TransferPausedError once its parts in progress have
|
|
2125
|
+
finished."""
|
|
2119
2126
|
operation = Operation.start(self._scope, options)
|
|
2120
2127
|
operation.require_single_completion()
|
|
2121
2128
|
if destination is None:
|