|
| 1 | +""" |
| 2 | +shares_api_example.py |
| 3 | +
|
| 4 | +Example script to demonstrate the usage of the shares API in the CS3Client class. |
| 5 | +note that these are examples, and is not meant to be run as a script. |
| 6 | +
|
| 7 | +Authors: Rasmus Welander, Diogo Castro, Giuseppe Lo Presti. |
| 8 | + |
| 9 | +Last updated: 19/08/2024 |
| 10 | +""" |
| 11 | + |
| 12 | +import logging |
| 13 | +import configparser |
| 14 | +from cs3client import CS3Client |
| 15 | +from cs3resource import Resource |
| 16 | + |
| 17 | +config = configparser.ConfigParser() |
| 18 | +with open("default.conf") as fdef: |
| 19 | + config.read_file(fdef) |
| 20 | +# log |
| 21 | +log = logging.getLogger(__name__) |
| 22 | + |
| 23 | +client = CS3Client(config, "cs3client", log) |
| 24 | +# client.auth.set_token("<your_token_here>") |
| 25 | +# OR |
| 26 | +client.auth.set_client_secret("<your_client_secret_here>") |
| 27 | + |
| 28 | +# Authentication |
| 29 | +print(client.auth.get_token()) |
| 30 | + |
| 31 | +res = None |
| 32 | + |
| 33 | +# Create share # |
| 34 | +resource = Resource.from_file_ref_and_endpoint("/eos/user/r/rwelande/text.txt") |
| 35 | +resource_info = client.file.stat(resource) |
| 36 | + |
| 37 | +# VIEWER |
| 38 | +user = client. user. get_user_by_claim( "mail", "[email protected]") |
| 39 | +res = client.share.create_share(resource_info, user.id.opaque_id, user.id.idp, "VIEWER", "USER") |
| 40 | +if res is not None: |
| 41 | + print(res) |
| 42 | + |
| 43 | +# EDITOR |
| 44 | +user = client.user.get_user_by_claim("username", "lopresti") |
| 45 | +res = client.share.create_share(resource_info, user.id.opaque_id, user.id.idp, "EDITOR", "USER") |
| 46 | +if res is not None: |
| 47 | + print(res) |
| 48 | + |
| 49 | +# List existing shares # |
| 50 | + |
| 51 | +# Create a filter list |
| 52 | +filter_list = [] |
| 53 | +filter = client.share.create_share_filter(resource_id=resource_info.id, filter_type="TYPE_RESOURCE_ID") |
| 54 | +filter_list.append(filter) |
| 55 | +filter = client.share.create_share_filter(share_state="SHARE_STATE_PENDING", filter_type="TYPE_STATE") |
| 56 | +filter_list.append(filter) |
| 57 | +res, _ = client.share.list_existing_shares() |
| 58 | +if res is not None: |
| 59 | + for share_info in res: |
| 60 | + print(share_info.share) |
| 61 | + |
| 62 | +# Get share # |
| 63 | +share_id = "58" |
| 64 | +res = client.share.get_share(opaque_id=share_id) |
| 65 | +if res is not None: |
| 66 | + print(res) |
| 67 | + |
| 68 | +# update share # |
| 69 | +share_id = "58" |
| 70 | +res = client.share.update_share(opaque_id=share_id, role="VIEWER") |
| 71 | +if res is not None: |
| 72 | + print(res) |
| 73 | + |
| 74 | +# remove share # |
| 75 | +share_id = "58" |
| 76 | +res = client.share.remove_share(opaque_id=share_id) |
| 77 | +if res is not None: |
| 78 | + print(res) |
| 79 | + |
| 80 | +# List existing received shares # |
| 81 | + |
| 82 | +# Create a filter list |
| 83 | +filter_list = [] |
| 84 | +filter = client.share.create_share_filter(share_state="SHARE_STATE_ACCEPTED", filter_type="TYPE_STATE") |
| 85 | + |
| 86 | +# Append the filter to the filter list |
| 87 | +filter_list.append(filter) |
| 88 | + |
| 89 | +# NOTE: filters for received shares are not implemented (14/08/2024), therefore it is left out |
| 90 | +res, _ = client.share.list_received_existing_shares() |
| 91 | +if res is not None: |
| 92 | + for share_info in res: |
| 93 | + print(share_info.received_share) |
| 94 | + |
| 95 | +# get received share # |
| 96 | +share_id = "43" |
| 97 | + |
| 98 | +received_share = client.share.get_received_share(opaque_id=share_id) |
| 99 | +if received_share is not None: |
| 100 | + print(received_share) |
| 101 | + |
| 102 | +# update recieved share # |
| 103 | +res = client.share.update_received_share(received_share=received_share, state="SHARE_STATE_ACCEPTED") |
| 104 | +if res is not None: |
| 105 | + print(res) |
| 106 | + |
| 107 | +# create public share # |
| 108 | +res = client.share.create_public_share(resource_info, role="VIEWER") |
| 109 | +if res is not None: |
| 110 | + print(res) |
| 111 | + |
| 112 | +# list existing public shares # |
| 113 | + |
| 114 | +# Create a filter list |
| 115 | +filter_list = [] |
| 116 | +filter = client.share.create_public_share_filter(resource_id=resource_info.id, filter_type="TYPE_RESOURCE_ID") |
| 117 | +filter_list.append(filter) |
| 118 | +print(filter_list) |
| 119 | +res, _ = client.share.list_existing_public_shares(filter_list=filter_list) |
| 120 | +if res is not None: |
| 121 | + for share_info in res: |
| 122 | + print(share_info.share) |
| 123 | + |
| 124 | +# get public share # |
| 125 | +share_id = "63" |
| 126 | +# OR |
| 127 | +token = "7FbP1EBXJQTqK0d" |
| 128 | +res = client.share.get_public_share(opaque_id=share_id, sign=True) |
| 129 | +if res is not None: |
| 130 | + print(res) |
| 131 | + |
| 132 | +# update public share # |
| 133 | +res = client.share.update_public_share(type="TYPE_PASSWORD", token=token, role="VIEWER", password="hello") |
| 134 | +if res is not None: |
| 135 | + print(res) |
| 136 | + |
| 137 | +# remove public share # |
| 138 | +res = client.share.remove_public_share(token=token) |
| 139 | +if res is not None: |
| 140 | + print(res) |
0 commit comments