18574: Adds some documentation's cookbook examples.
[arvados.git] / doc / sdk / python / cookbook.html.textile.liquid
index ff3bcf90e052ec033a4d572f0a84392514dfd3e7..cce25f1a37b52589db9badcd3405577dc24cf0b3 100644 (file)
@@ -242,8 +242,8 @@ h2. Copy files from a collection to a new collection
 {% codeblock as python %}
 import arvados.collection
 
-source_collection = "x1u39-4zz18-krzg64ufvehgitl"
-target_project = "x1u39-j7d0g-67q94einb8ptznm"
+source_collection = "zzzzz-4zz18-zzzzzzzzzzzzzzz"
+target_project = "zzzzz-j7d0g-zzzzzzzzzzzzzzz"
 target_name = "Files copied from source_collection"
 files_to_copy = ["folder1/sample1/sample1_R1.fastq",
                  "folder1/sample2/sample2_R1.fastq"]
@@ -263,8 +263,8 @@ h2. Copy files from a collection to another collection
 {% codeblock as python %}
 import arvados.collection
 
-source_collection = "x1u39-4zz18-krzg64ufvehgitl"
-target_collection = "x1u39-4zz18-67q94einb8ptznm"
+source_collection = "zzzzz-4zz18-zzzzzzzzzzzzzzz"
+target_collection = "zzzzz-4zz18-aaaaaaaaaaaaaaa"
 files_to_copy = ["folder1/sample1/sample1_R1.fastq",
                  "folder1/sample2/sample2_R1.fastq"]
 
@@ -277,6 +277,16 @@ for f in files_to_copy:
 target.save()
 {% endcodeblock %}
 
+h2. Delete a file from an existing collection
+
+{% codeblock as python %}
+import arvados
+
+c = arvados.collection.Collection("zzzzz-4zz18-zzzzzzzzzzzzzzz")
+c.remove("file2.txt")
+c.save()
+{% endcodeblock %}
+
 h2. Listing records with paging
 
 Use the @arvados.util.keyset_list_all@ helper method to iterate over all the records matching an optional filter.  This method handles paging internally and returns results incrementally using a Python iterator.  The first parameter of the method takes a @list@ method of an Arvados resource (@collections@, @container_requests@, etc).
@@ -288,3 +298,33 @@ api = arvados.api()
 for c in arvados.util.keyset_list_all(api.collections().list, filters=[["name", "like", "%sample123%"]]):
     print("got collection " + c["uuid"])
 {% endcodeblock %}
+
+h2. Querying the vocabulary definition
+
+The Python SDK provides facilities to interact with the "active metadata vocabulary":{{ site.baseurl }}/admin/metadata-vocabulary.html in the system. The developer can do key and value lookups in a case-insensitive manner:
+
+{% codeblock as python %}
+>>> from arvados import api, vocabulary
+>>> voc = vocabulary.load_vocabulary(api('v1'))
+>>> [k.identifier for k in set(voc.key_aliases.values())]
+['IDTAGCOLORS', 'IDTAGFRUITS', 'IDTAGCOMMENT', 'IDTAGIMPORTANCES', 'IDTAGCATEGORIES', 'IDTAGSIZES', 'IDTAGANIMALS']
+>>> voc['IDTAGSIZES'].preferred_label
+'Size'
+>>> [v.preferred_label for v in set(voc['size'].value_aliases.values())]
+['S', 'M', 'L', 'XL', 'XS']
+>>> voc['size']['s'].aliases
+['S', 'small']
+>>> voc['size']['Small'].identifier
+'IDVALSIZES2'
+{% endcodeblock %}
+
+h2. Translating between vocabulary identifiers and labels
+
+Client software might need to present properties to the user in a human-readable form or take input from the user without requiring them to remember identifiers. For these cases, there're a couple of conversion methods that take a dictionary as input like this:
+
+{% codeblock as python %}
+>>> voc.convert_to_labels({'IDTAGIMPORTANCES': 'IDVALIMPORTANCES1'})
+{'Importance': 'Critical'}
+>>> voc.convert_to_identifiers({'creature': 'elephant'})
+{'IDTAGANIMALS': 'IDVALANIMALS3'}
+{% endcodeblock %}
\ No newline at end of file