10349: Add code snippet for combining collections.
[arvados.git] / doc / sdk / python / cookbook.html.textile.liquid
1 ---
2 layout: default
3 navsection: sdk
4 navmenu: Python
5 title: Code cookbook
6 ...
7 {% comment %}
8 Copyright (C) The Arvados Authors. All rights reserved.
9
10 SPDX-License-Identifier: CC-BY-SA-3.0
11 {% endcomment %}
12
13 h2. Cancel a container request
14
15 <pre><code>import arvados
16 arvados.api().container_requests().update(uuid=container_request_uuid, body={"priority": 0}).execute()
17 </code></pre>
18
19 h2. Cancel all container requests
20
21 <pre><code>import arvados
22 api = arvados.api()
23 result = api.container_requests().list(filters=[["state", "=", "Committed"], ["priority", ">", "0"]]).execute()["items"]
24 for container_request in result:
25     api.container_requests().update(uuid=container_request["uuid"], body={"priority": 0}).execute()
26 </code></pre>
27
28 h2. List completed container requests
29
30 <pre><code>import arvados
31 api = arvados.api()
32 result = api.container_requests().list(filters=[["name", "like", name], ["state", "=", "Final"]]).execute()["items"]
33 container_uuids = [cr["container_uuid"] for cr in result]
34 containers = api.containers().list(filters=[["uuid", "in", container_uuids]]).execute()["items"]
35 container_dict = {c["uuid"]: c for c in containers}
36
37 for container_request in result:
38     container = container_dict[container_request["container_uuid"]]
39     print("%s, %s, %s" % (container_request["uuid"], container_request["name"], "Success" if container["exit_code"] == 0 else "Failed"))
40 </code></pre>
41
42 h2. Get input of a CWL workflow
43
44 <pre><code>import arvados
45 api = arvados.api()
46 container_request = arvados.api().container_requests().get(uuid=container_request_uuid).execute()
47 print(container_request["mounts"]["/var/lib/cwl/cwl.input.json"])
48 </code></pre>
49
50 h2. Get output of a CWL workflow
51
52 <pre><code>import arvados
53 import arvados.collection
54 api = arvados.api()
55 container_request = arvados.api().container_requests().get(uuid=container_request_uuid).execute()
56 collection = arvados.collection.CollectionReader(container_request["output_uuid"])
57 print(collection.open("cwl.output.json").read())
58 </code></pre>
59
60 h2. List input of child requests
61
62 <pre><code>import arvados
63 api = arvados.api()
64 parent_request_uuid = "qr1hi-xvhdp-zzzzzzzzzzzzzzz"
65 namefilter = "bwa%"
66 container_request = arvados.api().container_requests().get(uuid=parent_request_uuid).execute()
67 parent_container_uuid = container_request["container_uuid"]
68 child_requests = arvados.api().container_requests().list(filters=[
69     ["requesting_container_uuid", "=", parent_container_uuid],
70     ["name", "like", namefilter]]).execute()
71 for c in child_requests["items"]:
72     print("%s" % c["name"])
73     for m in c["mounts"].values():
74         if "portable_data_hash" in m:
75             print("  %s" % m["portable_data_hash"])
76 </code></pre>
77
78 h2. List output of child requests
79
80 <pre><code>import arvados
81 api = arvados.api()
82 parent_request_uuid = "qr1hi-xvhdp-61y7cjymnhyp7yu"
83 namefilter = "bwa%"
84 container_request = arvados.api().container_requests().get(uuid=parent_request_uuid).execute()
85 parent_container_uuid = container_request["container_uuid"]
86 child_requests = arvados.api().container_requests().list(filters=[
87     ["requesting_container_uuid", "=", parent_container_uuid],
88     ["name", "like", namefilter]]).execute()
89 output_uuids = [c["output_uuid"] for c in child_requests["items"]]
90 collections = arvados.api().collections().list(filters=[["uuid", "in", output_uuids]]).execute()
91 uuid_to_pdh = {c["uuid"]: c["portable_data_hash"] for c in collections["items"]}
92 for c in child_requests["items"]:
93     print("%s -> %s" % (c["name"], uuid_to_pdh[c["output_uuid"]]))
94 </code></pre>
95
96 h2. List failed child requests
97
98 <pre><code>import arvados
99 api = arvados.api()
100 parent_request_uuid = "qr1hi-xvhdp-3d8f1zatx1xio36"
101 container_request = arvados.api().container_requests().get(uuid=parent_request_uuid).execute()
102 parent_container_uuid = container_request["container_uuid"]
103 child_requests = arvados.api().container_requests().list(filters=[
104     ["requesting_container_uuid", "=", parent_container_uuid]], limit=1000).execute()
105 child_containers = {c["container_uuid"]: c for c in child_requests["items"]}
106 cancelled_child_containers = arvados.api().containers().list(filters=[
107     ["exit_code", "!=", "0"],
108     ["uuid", "in", child_containers.keys()]], limit=1000).execute()
109 for c in cancelled_child_containers["items"]:
110     print("%s (%s)" % (child_containers[c["uuid"]]["name"], child_containers[c["uuid"]]["uuid"]))
111 </code></pre>
112
113 h2. Get log of a child request
114
115 <pre><code>import arvados
116 import arvados.collection
117 api = arvados.api()
118 container_request_uuid = "qr1hi-xvhdp-3d8f1zatx1xio36"
119 container_request = arvados.api().container_requests().get(uuid=container_request_uuid).execute()
120 collection = arvados.collection.CollectionReader(container_request["log_uuid"])
121 for c in collection:
122     print(collection.open(c).read())
123 </code></pre>
124
125 h2. Create a collection sharing link
126
127 <pre><code>import arvados
128 api = arvados.api()
129 download="https://your.download.server"
130 collection_uuid="your-4zz18-collectionuuid"
131 token = api.api_client_authorizations().create(body={"api_client_authorization":{"scopes": [
132     "GET /arvados/v1/collections/%s" % collection_uuid,
133     "GET /arvados/v1/collections/%s/" % collection_uuid,
134     "GET /arvados/v1/keep_services/accessible"]}}).execute()
135 print("%s/c=%s/t=%s/_/" % (download, collection_uuid, token["api_token"]))
136 </code></pre>
137
138 h2. Combine two or more collections
139
140 Note, if two collections have files of the same name, the contents will be concatenated in the resulting manifest.
141
142 <pre><code>import arvados
143 import arvados.collection
144 api = arvados.api()
145 project_uuid = "qr1hi-tpzed-zzzzzzzzzzzzzzz"
146 collection_uuids = ["qr1hi-4zz18-aaaaaaaaaaaaaaa", "qr1hi-4zz18-bbbbbbbbbbbbbbb"]
147 combined_manifest = ""
148 for u in collection_uuids:
149     c = api.collections().get(uuid=u).execute()
150     combined_manifest += c["manifest_text"]
151 newcol = arvados.collection.Collection(combined_manifest)
152 newcol.save_new(name="My combined collection", owner_uuid=project_uuid)
153 </code></pre>