# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

import mdf_toolbox

# # Globus Transfer Utilities
# While using the Globus Web App to perform data transfers is easy, programmatically doing the same has some overhead, which these utilities try to reduce.

# ## `quick_transfer`
# `quick_transfer()` starts a transfer and monitors its progress. You must have a `TransferClient` already created and authenticated (see the Authentication Utilities tutorial).
#
# You must provide:
#
# `transfer_client`: An authenticated Transfer client
#
# `source_ep`: The source endpoint ID
#
# `dest_ep`: The destination endpoint ID
#
# `path_list`: A list of tuples, where the first element is a source path,
#              and the second element is the destination path.
#              Directory paths must end in a slash, and file paths must not.

transfer_client = mdf_toolbox.login(services=["transfer"])["transfer"]
source_ep = ""
dest_ep = ""
path_list = [
    ("/home/source/files/file.dat", "/home/destination/doc.dat"),
    ("/home/source/all_reports/", "/home/destination/docs/reports/")
]

mdf_toolbox.quick_transfer(transfer_client, source_ep, dest_ep, path_list)

# It is normal for Globus Transfer to encounter a few transient errors when transferring data. The transfer is very robust and can usually recover from most issues. By default, `quick_transfer()` will tolerate 10 error events before cancelling the transfer. You can customize this with `retries`, with `-1` indicating infinite retries (until the transfer times out naturally).
#
# Additionally, you can customize the poll interval (in seconds) with `interval`.

mdf_toolbox.quick_transfer(transfer_client, source_ep, dest_ep, path_list,
                           interval=7, retries=-1)

# ## `custom_transfer`
# `custom_transfer()` is similar to `quick_transfer()`, but allows you greater control over the finer details. It is also more complex.
#
# All of the required parameters from `quick_transfer()` are required for `custom_transfer()`. `interval` is also available. However, you can additionally set the natural timeout due to inactivity (in seconds) with `inactivity_time`.
#
# The major difference between the two transfer utilities is that `custom_transfer()` will `yield` any error events and allow you to `.send(False)` to cancel the transfer.

transfer_generator = mdf_toolbox.quick_transfer(
                                    transfer_client, source_ep, dest_ep,
                                    path_list, inactivity_time=600)
res = next(transfer)
print(res)
try:
    while True:
        res = transfer.send(True)
        print(res)
except StopIteration:
    pass

# ## `get_local_ep`
# `get_local_ep()` attempts to discover the local machine's Globus Connect Personal endpoint ID. It does not properly detect Globus Connect Server endpoints, and can sometimes return inaccurate results if the local machine is not running GCP. If there are multiple possible endpoints, the user is prompted to choose the correct one.
#
# `get_local_ep()` requires a `TransferClient`.
#
# If possible, it is recommended to get the local EP ID some other way, such as through the Globus Web App or by asking the endpoint's owner.

mdf_toolbox.get_local_ep(transfer_client)



StarcoderdataJupyterScriptsDedupFiltered