-
Notifications
You must be signed in to change notification settings - Fork 38
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add a TimersClient app scope helper for data_access + example doc (#1074
) * Implement add_app_transfer_data_access_scope This is a Timers helper for setting up a data_access scope in the correct nested context. It has identical validation to the Transfer equivalent, and is tested for parity. * Add a new GlobusApp example using TimersClient This is a new (experimental) example, meant to replace the "timer_operations" examples with a more refined usage, based on GlobusApp. It relies on `TimersClient.add_app_transfer_data_access_scope`. * Promote the "experimental" timer example doc This moves the doc into non-experimental examples, and replaces the older 'timer_operations' example it was written to replace. * Update Timer Management examples per review Co-authored-by: Ada <107940310+ada-globus@users.noreply.github.com> --------- Co-authored-by: Ada <107940310+ada-globus@users.noreply.github.com>
- Loading branch information
1 parent
1871538
commit 8f33a74
Showing
12 changed files
with
303 additions
and
237 deletions.
There are no files selected for viewing
7 changes: 7 additions & 0 deletions
7
changelog.d/20241004_152509_sirosen_timers_client_scope_helper.rst
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
Added | ||
~~~~~ | ||
|
||
- Add ``TimersClient.add_app_transfer_data_access_scope`` for ``TimersClient`` | ||
instances which are integrated with ``GlobusApp``. This method registers the | ||
nested scope dependency for a ``data_access`` requirement for a transfer | ||
timer. (:pr:`NUMBER`) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
89 changes: 89 additions & 0 deletions
89
docs/examples/timer_management/create_timer_data_access.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
#!/usr/bin/env python | ||
|
||
import argparse | ||
import datetime | ||
|
||
import globus_sdk | ||
from globus_sdk.experimental.globus_app import UserApp | ||
|
||
# Tutorial Client ID - <replace this with your own client> | ||
NATIVE_CLIENT_ID = "61338d24-54d5-408f-a10d-66c06b59f6d2" | ||
USER_APP = UserApp("manage-timers-example", client_id=NATIVE_CLIENT_ID) | ||
|
||
|
||
def uses_data_access(transfer_client, collection_id): | ||
doc = transfer_client.get_endpoint(collection_id) | ||
if doc["entity_type"] != "GCSv5_mapped_collection": | ||
return False | ||
if doc["high_assurance"]: | ||
return False | ||
return True | ||
|
||
|
||
def main(): | ||
parser = argparse.ArgumentParser() | ||
# the source, destination, and path to a file or dir to sync | ||
parser.add_argument("SOURCE_COLLECTION") | ||
parser.add_argument("DESTINATION_COLLECTION") | ||
parser.add_argument("PATH") | ||
parser.add_argument( | ||
"--interval-seconds", | ||
help="How frequently the timer runs, in seconds (default: 1 hour)", | ||
default=3600, | ||
type=int, | ||
) | ||
parser.add_argument( | ||
"--days", | ||
help="How many days to run the timer (default: 2)", | ||
default=2, | ||
type=int, | ||
) | ||
args = parser.parse_args() | ||
|
||
timers_client = globus_sdk.TimersClient(app=USER_APP) | ||
transfer_client = globus_sdk.TransferClient(app=USER_APP) | ||
|
||
# check if the source or destination use 'data_access' scopes | ||
# if so, register these requirements with the app | ||
if uses_data_access(transfer_client, args.SOURCE_COLLECTION): | ||
timers_client.add_app_transfer_data_access_scope(args.SOURCE_COLLECTION) | ||
if uses_data_access(transfer_client, args.DESTINATION_COLLECTION): | ||
timers_client.add_app_transfer_data_access_scope(args.DESTINATION_COLLECTION) | ||
|
||
# from this point onwards, the example is the same as the basic create_timer.py | ||
# script -- we've handled the nuance of data_access | ||
# | ||
# when the timer submission runs, you *may* be prompted to login again, if | ||
# 'data_access' requirements were detected | ||
|
||
body = globus_sdk.TransferData( | ||
source_endpoint=args.SOURCE_COLLECTION, | ||
destination_endpoint=args.DESTINATION_COLLECTION, | ||
) | ||
body.add_item(args.PATH, args.PATH) | ||
|
||
# the timer will run until the end date, on whatever interval was requested | ||
schedule = globus_sdk.RecurringTimerSchedule( | ||
interval_seconds=args.interval_seconds, | ||
end={ | ||
"condition": "time", | ||
"datetime": datetime.datetime.now() + datetime.timedelta(days=args.days), | ||
}, | ||
) | ||
|
||
timer = timers_client.create_timer( | ||
timer=globus_sdk.TransferTimer( | ||
name=( | ||
"create-timer-example " | ||
f"[created at {datetime.datetime.now().isoformat()}]" | ||
), | ||
body=body, | ||
schedule=schedule, | ||
) | ||
) | ||
print("Finished submitting timer.") | ||
print(f"timer_id: {timer['timer']['job_id']}") | ||
|
||
|
||
if __name__ == "__main__": | ||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
#!/usr/bin/env python | ||
|
||
import argparse | ||
|
||
import globus_sdk | ||
from globus_sdk.experimental.globus_app import UserApp | ||
|
||
# Tutorial Client ID - <replace this with your own client> | ||
NATIVE_CLIENT_ID = "61338d24-54d5-408f-a10d-66c06b59f6d2" | ||
USER_APP = UserApp("manage-timers-example", client_id=NATIVE_CLIENT_ID) | ||
|
||
|
||
def main(): | ||
parser = argparse.ArgumentParser() | ||
parser.add_argument("TIMER_ID") | ||
args = parser.parse_args() | ||
|
||
client = globus_sdk.TimersClient(app=USER_APP) | ||
|
||
client.delete_job(args.TIMER_ID) | ||
print("Finished deleting timer.") | ||
|
||
|
||
if __name__ == "__main__": | ||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
#!/usr/bin/env python | ||
|
||
import globus_sdk | ||
from globus_sdk.experimental.globus_app import UserApp | ||
|
||
# Tutorial Client ID - <replace this with your own client> | ||
NATIVE_CLIENT_ID = "61338d24-54d5-408f-a10d-66c06b59f6d2" | ||
USER_APP = UserApp("manage-timers-example", client_id=NATIVE_CLIENT_ID) | ||
|
||
|
||
def main(): | ||
client = globus_sdk.TimersClient(app=USER_APP) | ||
|
||
first = True | ||
for record in client.list_jobs(query_params={"filter_active": True})["jobs"]: | ||
if not first: | ||
print("---") | ||
first = False | ||
print("name:", record["name"]) | ||
print("id:", record["job_id"]) | ||
|
||
|
||
if __name__ == "__main__": | ||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
:orphan: | ||
|
||
The documentation which was found on this page has moved to | ||
:ref:`Timer Management Examples <timer_management_examples>`. |
Oops, something went wrong.