Skip to content

Commit 8d40b34

Browse files
Rasmus Oscar Welanderglpatcern
authored andcommitted
Added shares API, examples and tests
1 parent 059d78b commit 8d40b34

File tree

3 files changed

+1469
-0
lines changed

3 files changed

+1469
-0
lines changed

examples/shares_api_example.py

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
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

Comments
 (0)