[ARVADOS] updated: 7385689b6fd8df96434aadf7c0377d684c4abe1c

Git user git at public.curoverse.com
Tue Sep 12 11:18:20 EDT 2017


Summary of changes:
 doc/_config.yml                                 |   2 +
 doc/sdk/go/example.html.textile.liquid          |  28 ++--
 doc/sdk/java/example.html.textile.liquid        |  32 ++---
 doc/sdk/perl/example.html.textile.liquid        |  55 ++++----
 doc/sdk/python/cookbook.html.textile.liquid     | 166 ++++++++++++++++++++++++
 doc/sdk/python/example.html.textile.liquid      |  28 ++--
 doc/sdk/ruby/example.html.textile.liquid        |  33 ++---
 doc/user/reference/cookbook.html.textile.liquid |  12 ++
 doc/zenweb-liquid.rb                            |  44 ++++++-
 9 files changed, 303 insertions(+), 97 deletions(-)
 create mode 100644 doc/sdk/python/cookbook.html.textile.liquid
 create mode 100644 doc/user/reference/cookbook.html.textile.liquid

       via  7385689b6fd8df96434aadf7c0377d684c4abe1c (commit)
       via  d9e495b553de6d76aaf6c4735977315e6fb0e51f (commit)
       via  ea137ac25c445c2f45a3643f23e6d2772a4b3887 (commit)
       via  7a61a3b1f2f4c9b63195abb6990c12966895c254 (commit)
       via  c4f252e766aa196d97801d99bb74720e451ca185 (commit)
       via  38e6bfb62552b6bedebe4fdf505f89ecdb5e4287 (commit)
       via  7f108bc7e00604fd0e346b044c05579bfa380e9a (commit)
      from  b35c837cb09c1c748ba06a23b1a047da864d97fb (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit 7385689b6fd8df96434aadf7c0377d684c4abe1c
Merge: b35c837 d9e495b
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Tue Sep 12 11:17:55 2017 -0400

    Merge branch '10349-cookbook' closes #10349
    
    Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <pamstutz at veritasgenetics.com>


commit d9e495b553de6d76aaf6c4735977315e6fb0e51f
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Tue Sep 12 11:15:24 2017 -0400

    10349: Add support for syntax highlighting inline code blocks.
    
    Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <pamstutz at veritasgenetics.com>

diff --git a/doc/sdk/go/example.html.textile.liquid b/doc/sdk/go/example.html.textile.liquid
index 45a2e44..a5a109b 100644
--- a/doc/sdk/go/example.html.textile.liquid
+++ b/doc/sdk/go/example.html.textile.liquid
@@ -16,7 +16,7 @@ In these examples, the site prefix is @aaaaa at .
 
 h2.  Initialize SDK
 
-<pre>
+{% codeblock as go %}
 import (
   "git.curoverse.com/arvados.git/sdk/go/arvados"
   "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
@@ -28,49 +28,49 @@ func main() {
     log.Fatalf("Error setting up arvados client %s", err.Error())
   }
 }
-</pre>
+{% endcodeblock %}
 
 h2. create
 
-<pre>
+{% codeblock as go %}
   var collection arvados.Collection
   err := api.Create("collections", Dict{"collection": Dict{"name": "create example"}}, &collection)
-</pre>
+{% endcodeblock %}
 
 h2. delete
 
-<pre>
+{% codeblock as go %}
   var collection arvados.Collection
   err := api.Delete("collections", "aaaaa-4zz18-ccccccccccccccc", Dict{}, &collection)
-</pre>
+{% endcodeblock %}
 
 h2. get
 
-<pre>
+{% codeblock as go %}
   var collection arvados.Collection
   err := api.Get("collections", "aaaaa-4zz18-ccccccccccccccc", Dict{}, &collection)
-</pre>
+{% endcodeblock %}
 
 h2. list
 
-<pre>
+{% codeblock as go %}
   var collection arvados.Collection
   err := api.List("collections", Dict{}, &collection)
-</pre>
+{% endcodeblock %}
 
 h2. update
 
-<pre>
+{% codeblock as go %}
   var collection arvados.Collection
   err := api.Update("collections", "aaaaa-4zz18-ccccccccccccccc", Dict{"collection": Dict{"name": "update example"}}, &collection)
-</pre>
+{% endcodeblock %}
 
 h2. Get current user
 
-<pre>
+{% codeblock as go %}
   var user arvados.User
   err := api.Get("users", "current", Dict{}, &user)
-</pre>
+{% endcodeblock %}
 
 h2. Example program
 
diff --git a/doc/sdk/java/example.html.textile.liquid b/doc/sdk/java/example.html.textile.liquid
index 0eabdcb..bc15b83 100644
--- a/doc/sdk/java/example.html.textile.liquid
+++ b/doc/sdk/java/example.html.textile.liquid
@@ -12,47 +12,47 @@ SPDX-License-Identifier: CC-BY-SA-3.0
 
 h2. Initialize SDK
 
-<pre>
+{% codeblock as java %}
 import org.arvados.sdk.Arvados;
-</pre>
+{% endcodeblock %}
 
-<pre>
+{% codeblock as java %}
     String apiName = "arvados";
     String apiVersion = "v1";
 
     Arvados arv = new Arvados(apiName, apiVersion);
-</pre>
+{% endcodeblock %}
 
 h2. create
 
-<pre>
+{% codeblock as java %}
     Map<String, String> collection = new HashMap<String, String>();
     collection.put("name", "create example");
 
     Map<String, Object> params = new HashMap<String, Object>();
     params.put("collection", collection);
     Map response = arv.call("collections", "create", params);
-</pre>
+{% endcodeblock %}
 
 h2. delete
 
-<pre>
+{% codeblock as java %}
     Map<String, Object> params = new HashMap<String, Object>();
     params.put("uuid", uuid);
     Map response = arv.call("collections", "delete", params);
-</pre>
+{% endcodeblock %}
 
 h2. get
 
-<pre>
+{% codeblock as java %}
     params = new HashMap<String, Object>();
     params.put("uuid", userUuid);
     Map response = arv.call("users", "get", params);
-</pre>
+{% endcodeblock %}
 
 h2. list
 
-<pre>
+{% codeblock as java %}
     Map<String, Object> params = new HashMap<String, Object>();
     Map response = arv.call("users", "list", params);
 
@@ -61,11 +61,11 @@ h2. list
 
     Map firstUser = (Map)items.get(0);
     String userUuid = (String)firstUser.get("uuid");
-</pre>
+{% endcodeblock %}
 
 h2. update
 
-<pre>
+{% codeblock as java %}
     Map<String, String> collection = new HashMap<String, String>();
     collection.put("name", "update example");
 
@@ -73,11 +73,11 @@ h2. update
     params.put("uuid", uuid);
     params.put("collection", collection);
     Map response = arv.call("collections", "update", params);
-</pre>
+{% endcodeblock %}
 
 h2. Get current user
 
-<pre>
+{% codeblock as java %}
     Map<String, Object> params = new HashMap<String, Object>();
     Map response = arv.call("users", "current", params);
-</pre>
+{% endcodeblock %}
diff --git a/doc/sdk/perl/example.html.textile.liquid b/doc/sdk/perl/example.html.textile.liquid
index 42932a3..b51cfe4 100644
--- a/doc/sdk/perl/example.html.textile.liquid
+++ b/doc/sdk/perl/example.html.textile.liquid
@@ -14,12 +14,10 @@ h2. Initialize SDK
 
 Set up an API client user agent:
 
-<notextile>
-<pre><code class="userinput">
+{% codeblock as perl %}
 use Arvados;
 my $arv = Arvados->new('apiVersion' => 'v1');
-</code></pre>
-</notextile>
+{% endcodeblock %}
 
 The SDK retrieves the list of API methods from the server at run time. Therefore, the set of available methods is determined by the server version rather than the SDK version.
 
@@ -27,60 +25,53 @@ h2. create
 
 Create an object:
 
-<notextile>
-<pre><code class="userinput">my $test_link = $arv->{'links'}->{'create'}->execute('link' => { 'link_class' => 'test', 'name' => 'test' });
-</code></pre>
-</notextile>
+{% codeblock as perl %}
+my $test_link = $arv->{'links'}->{'create'}->execute('link' => { 'link_class' => 'test', 'name' => 'test' });
+{% endcodeblock %}
 
 h2. delete
 
-<notextile>
-<pre><code class="userinput">my $some_user = $arv->{'collections'}->{'get'}->execute('uuid' => $collection_uuid);
-</code></pre>
-</notextile>
+{% codeblock as perl %}
+my $some_user = $arv->{'collections'}->{'get'}->execute('uuid' => $collection_uuid);
+{% endcodeblock %}
 
 h2. get
 
 Retrieve an object by ID:
 
-<notextile>
-<pre><code class="userinput">my $some_user = $arv->{'users'}->{'get'}->execute('uuid' => $current_user_uuid);
-</code></pre>
-</notextile>
+{% codeblock as perl %}
+my $some_user = $arv->{'users'}->{'get'}->execute('uuid' => $current_user_uuid);
+{% endcodeblock %}
 
 Get the UUID of an object that was retrieved using the SDK:
 
-<notextile>
-<pre><code class="userinput">my $current_user_uuid = $current_user->{'uuid'}
-</code></pre>
-</notextile>
+{% codeblock as perl %}
+my $current_user_uuid = $current_user->{'uuid'}
+{% endcodeblock %}
 
 h2. list
 
 Get a list of objects:
 
-<notextile>
-<pre><code class="userinput">my $repos = $arv->{'repositories'}->{'list'}->execute;
+{% codeblock as perl %}
+my $repos = $arv->{'repositories'}->{'list'}->execute;
 print ("UUID of first repo returned is ", $repos->{'items'}->[0], "\n");
-</code></pre>
-</notextile>
+{% endcodeblock %}
 
 h2. update
 
 Update an object:
 
-<notextile>
-<pre><code class="userinput">my $test_link = $arv->{'links'}->{'update'}->execute(
+{% codeblock as perl %}
+my $test_link = $arv->{'links'}->{'update'}->execute(
         'uuid' => $test_link->{'uuid'},
         'link' => { 'properties' => { 'foo' => 'bar' } });
-</code></pre>
-</notextile>
+{% endcodeblock %}
 
 h2. Get current user
 
 Get the User object for the current user:
 
-<notextile>
-<pre><code class="userinput">my $current_user = $arv->{'users'}->{'current'}->execute;
-</code></pre>
-</notextile>
+{% codeblock as perl %}
+my $current_user = $arv->{'users'}->{'current'}->execute;
+{% endcodeblock %}
diff --git a/doc/sdk/python/cookbook.html.textile.liquid b/doc/sdk/python/cookbook.html.textile.liquid
index fa059f7..a046654 100644
--- a/doc/sdk/python/cookbook.html.textile.liquid
+++ b/doc/sdk/python/cookbook.html.textile.liquid
@@ -12,22 +12,25 @@ SPDX-License-Identifier: CC-BY-SA-3.0
 
 h2. Cancel a container request
 
-<pre><code>import arvados
+{% codeblock as python %}
+import arvados
 arvados.api().container_requests().update(uuid=container_request_uuid, body={"priority": 0}).execute()
-</code></pre>
+{% endcodeblock %}
 
 h2. Cancel all container requests
 
-<pre><code>import arvados
+{% codeblock as python %}
+import arvados
 api = arvados.api()
 result = api.container_requests().list(filters=[["state", "=", "Committed"], ["priority", ">", "0"]]).execute()["items"]
 for container_request in result:
     api.container_requests().update(uuid=container_request["uuid"], body={"priority": 0}).execute()
-</code></pre>
+{% endcodeblock %}
 
 h2. List completed container requests
 
-<pre><code>import arvados
+{% codeblock as python %}
+import arvados
 api = arvados.api()
 result = api.container_requests().list(filters=[["name", "like", name], ["state", "=", "Final"]]).execute()["items"]
 container_uuids = [cr["container_uuid"] for cr in result]
@@ -37,32 +40,37 @@ container_dict = {c["uuid"]: c for c in containers}
 for container_request in result:
     container = container_dict[container_request["container_uuid"]]
     print("%s, %s, %s" % (container_request["uuid"], container_request["name"], "Success" if container["exit_code"] == 0 else "Failed"))
-</code></pre>
+{% endcodeblock %}
 
 h2. Get input of a CWL workflow
 
-<pre><code>import arvados
+{% codeblock as python %}
+import arvados
 api = arvados.api()
+container_request_uuid="qr1hi-xvhdp-zzzzzzzzzzzzzzz"
 container_request = arvados.api().container_requests().get(uuid=container_request_uuid).execute()
 print(container_request["mounts"]["/var/lib/cwl/cwl.input.json"])
-</code></pre>
+{% endcodeblock %}
 
 h2. Get output of a CWL workflow
 
-<pre><code>import arvados
+{% codeblock as python %}
+import arvados
 import arvados.collection
 api = arvados.api()
+container_request_uuid="qr1hi-xvhdp-zzzzzzzzzzzzzzz"
 container_request = arvados.api().container_requests().get(uuid=container_request_uuid).execute()
 collection = arvados.collection.CollectionReader(container_request["output_uuid"])
 print(collection.open("cwl.output.json").read())
-</code></pre>
+{% endcodeblock %}
 
 h2. List input of child requests
 
-<pre><code>import arvados
+{% codeblock as python %}
+import arvados
 api = arvados.api()
 parent_request_uuid = "qr1hi-xvhdp-zzzzzzzzzzzzzzz"
-namefilter = "bwa%"
+namefilter = "bwa%"  # the "like" filter uses SQL pattern match syntax
 container_request = arvados.api().container_requests().get(uuid=parent_request_uuid).execute()
 parent_container_uuid = container_request["container_uuid"]
 child_requests = arvados.api().container_requests().list(filters=[
@@ -73,14 +81,15 @@ for c in child_requests["items"]:
     for m in c["mounts"].values():
         if "portable_data_hash" in m:
             print("  %s" % m["portable_data_hash"])
-</code></pre>
+{% endcodeblock %}
 
 h2. List output of child requests
 
-<pre><code>import arvados
+{% codeblock as python %}
+import arvados
 api = arvados.api()
-parent_request_uuid = "qr1hi-xvhdp-61y7cjymnhyp7yu"
-namefilter = "bwa%"
+parent_request_uuid = "qr1hi-xvhdp-zzzzzzzzzzzzzzz"
+namefilter = "bwa%"  # the "like" filter uses SQL pattern match syntax
 container_request = arvados.api().container_requests().get(uuid=parent_request_uuid).execute()
 parent_container_uuid = container_request["container_uuid"]
 child_requests = arvados.api().container_requests().list(filters=[
@@ -91,13 +100,14 @@ collections = arvados.api().collections().list(filters=[["uuid", "in", output_uu
 uuid_to_pdh = {c["uuid"]: c["portable_data_hash"] for c in collections["items"]}
 for c in child_requests["items"]:
     print("%s -> %s" % (c["name"], uuid_to_pdh[c["output_uuid"]]))
-</code></pre>
+{% endcodeblock %}
 
 h2. List failed child requests
 
-<pre><code>import arvados
+{% codeblock as python %}
+import arvados
 api = arvados.api()
-parent_request_uuid = "qr1hi-xvhdp-3d8f1zatx1xio36"
+parent_request_uuid = "qr1hi-xvhdp-zzzzzzzzzzzzzzz"
 container_request = arvados.api().container_requests().get(uuid=parent_request_uuid).execute()
 parent_container_uuid = container_request["container_uuid"]
 child_requests = arvados.api().container_requests().list(filters=[
@@ -108,38 +118,41 @@ cancelled_child_containers = arvados.api().containers().list(filters=[
     ["uuid", "in", child_containers.keys()]], limit=1000).execute()
 for c in cancelled_child_containers["items"]:
     print("%s (%s)" % (child_containers[c["uuid"]]["name"], child_containers[c["uuid"]]["uuid"]))
-</code></pre>
+{% endcodeblock %}
 
 h2. Get log of a child request
 
-<pre><code>import arvados
+{% codeblock as python %}
+import arvados
 import arvados.collection
 api = arvados.api()
-container_request_uuid = "qr1hi-xvhdp-3d8f1zatx1xio36"
+container_request_uuid = "qr1hi-xvhdp-zzzzzzzzzzzzzzz"
 container_request = arvados.api().container_requests().get(uuid=container_request_uuid).execute()
 collection = arvados.collection.CollectionReader(container_request["log_uuid"])
 for c in collection:
     print(collection.open(c).read())
-</code></pre>
+{% endcodeblock %}
 
 h2. Create a collection sharing link
 
-<pre><code>import arvados
+{% codeblock as python %}
+import arvados
 api = arvados.api()
 download="https://your.download.server"
-collection_uuid="your-4zz18-collectionuuid"
+collection_uuid="qr1hi-4zz18-zzzzzzzzzzzzzzz"
 token = api.api_client_authorizations().create(body={"api_client_authorization":{"scopes": [
     "GET /arvados/v1/collections/%s" % collection_uuid,
     "GET /arvados/v1/collections/%s/" % collection_uuid,
     "GET /arvados/v1/keep_services/accessible"]}}).execute()
 print("%s/c=%s/t=%s/_/" % (download, collection_uuid, token["api_token"]))
-</code></pre>
+{% endcodeblock %}
 
 h2. Combine two or more collections
 
 Note, if two collections have files of the same name, the contents will be concatenated in the resulting manifest.
 
-<pre><code>import arvados
+{% codeblock as python %}
+import arvados
 import arvados.collection
 api = arvados.api()
 project_uuid = "qr1hi-tpzed-zzzzzzzzzzzzzzz"
@@ -150,4 +163,4 @@ for u in collection_uuids:
     combined_manifest += c["manifest_text"]
 newcol = arvados.collection.Collection(combined_manifest)
 newcol.save_new(name="My combined collection", owner_uuid=project_uuid)
-</code></pre>
+{% endcodeblock %}
diff --git a/doc/sdk/python/example.html.textile.liquid b/doc/sdk/python/example.html.textile.liquid
index 6f6ba99..504d078 100644
--- a/doc/sdk/python/example.html.textile.liquid
+++ b/doc/sdk/python/example.html.textile.liquid
@@ -14,43 +14,43 @@ In these examples, the site prefix is @aaaaa at .
 
 h2.  Initialize SDK
 
-<pre>
+{% codeblock as python %}
 import arvados
 api = arvados.api("v1")
-</pre>
+{% endcodeblock %}
 
 h2. create
 
-<pre>
+{% codeblock as python %}
 result = api.collections().create(body={"collection": {"name": "create example"}}).execute()
-</pre>
+{% endcodeblock %}
 
 h2. delete
 
-<pre>
+{% codeblock as python %}
 result = api.collections().delete(uuid="aaaaa-4zz18-ccccccccccccccc").execute()
-</pre>
+{% endcodeblock %}
 
 h2. get
 
-<pre>
+{% codeblock as python %}
 result = api.collections().get(uuid="aaaaa-4zz18-ccccccccccccccc").execute()
-</pre>
+{% endcodeblock %}
 
 h2. list
 
-<pre>
+{% codeblock as python %}
 result = api.collections().list(filters=[["uuid", "=", "aaaaa-bbbbb-ccccccccccccccc"]]).execute()
-</pre>
+{% endcodeblock %}
 
 h2. update
 
-<pre>
+{% codeblock as python %}
 result = api.collections().update(uuid="aaaaa-4zz18-ccccccccccccccc", body={"collection": {"name": "update example"}}).execute()
-</pre>
+{% endcodeblock %}
 
 h2. Get current user
 
-<pre>
+{% codeblock as python %}
 result = api.users().current().execute()
-</pre>
+{% endcodeblock %}
diff --git a/doc/sdk/ruby/example.html.textile.liquid b/doc/sdk/ruby/example.html.textile.liquid
index 621b664..b8c0dcb 100644
--- a/doc/sdk/ruby/example.html.textile.liquid
+++ b/doc/sdk/ruby/example.html.textile.liquid
@@ -14,10 +14,10 @@ h2.  Initialize SDK
 
 Import the module and set up an API client user agent:
 
-<pre>
+{% codeblock as ruby %}
 require 'arvados'
 arv = Arvados.new(apiVersion: 'v1')
-</pre>
+{% endcodeblock %}
 
 The SDK retrieves the list of API methods from the server at run time. Therefore, the set of available methods is determined by the server version rather than the SDK version.
 
@@ -25,56 +25,57 @@ h2. create
 
 Create an object:
 
-<pre>
+{% codeblock as ruby %}
 new_link = arv.link.create(link: {link_class: 'test', name: 'test'})
-</pre>
+{% endcodeblock %}
 
 h2. delete
 
 Delete an object:
 
-<pre>
+{% codeblock as ruby %}
 arv.link.delete(uuid: new_link[:uuid])
-</pre>
+{% endcodeblock %}
 
 h2. get
 
 Retrieve an object by ID:
 
-<pre>
+{% codeblock as ruby %}
 some_user = arv.user.get(uuid: current_user_uuid)
-</pre>
+{% endcodeblock %}
 
 h2. list
 
 Get a list of objects:
 
-<pre>
+{% codeblock as ruby %}
 repos = arv.repository.list
 first_repo = repos[:items][0]
 puts "UUID of first repo returned is #{first_repo[:uuid]}"</code>
+{% endcodeblock %}
+
 UUID of first repo returned is qr1hi-s0uqq-b1bnybpx3u5temz
-</pre>
 
 h2. update
 
 Update an object:
 
-<pre>
+{% codeblock as ruby %}
 updated_link = arv.link.update(uuid: new_link[:uuid],
                                link: {properties: {foo: 'bar'}})
-</pre>
+{% endcodeblock %}
 
 h2. Get current user
 
 Get the User object for the current user:
 
-<pre>
+{% codeblock as ruby %}
 current_user = arv.user.current
-</pre>
+{% endcodeblock %}
 
 Get the UUID of an object that was retrieved using the SDK:
 
-<pre>
+{% codeblock as ruby %}
 current_user_uuid = current_user[:uuid]
-</pre>
+{% endcodeblock %}
diff --git a/doc/zenweb-liquid.rb b/doc/zenweb-liquid.rb
index 4a68281..baa8fe4 100644
--- a/doc/zenweb-liquid.rb
+++ b/doc/zenweb-liquid.rb
@@ -16,7 +16,7 @@ module Zenweb
     def render_liquid page, content
       liquid self.body, content, page, binding
     end
-    
+
     ##
     # Render a page's liquid and return the intermediate result
     def liquid template, content, page, binding = TOPLEVEL_BINDING
@@ -24,7 +24,7 @@ module Zenweb
       unless defined? @liquid_template
         @liquid_template = Liquid::Template.parse(template)
       end
-      
+
       vars = {}
       vars["content"] = content
 
@@ -38,7 +38,7 @@ module Zenweb
 
       vars["page"] = page.config.h.clone
       vars["page"]["url"] = page.url
-      
+
       @liquid_template.render(vars)
     end
   end
@@ -57,7 +57,7 @@ module Zenweb
         raise SyntaxError.new("Error in tag 'code' - Valid syntax: include '[code_file]' as '[language]'")
       end
     end
-    
+
     def render(context)
       require 'coderay'
 
@@ -71,6 +71,40 @@ module Zenweb
       html
     end
 
-    Liquid::Template.register_tag('code', LiquidCode)    
+    Liquid::Template.register_tag('code', LiquidCode)
+  end
+
+  class LiquidCodeBlock < Liquid::Block
+    Syntax = /((?:as)\s+(#{Liquid::QuotedFragment}+))?/o
+
+    def initialize(tag_name, markup, tokens)
+      Liquid::Tag.instance_method(:initialize).bind(self).call(tag_name, markup, tokens)
+
+      if markup =~ Syntax
+        @language = $2
+        @attributes = {}
+      else
+        raise SyntaxError.new("Error in tag 'code' - Valid syntax: codeblock as '[language]'")
+      end
+    end
+
+    def render(context)
+      require 'coderay'
+
+      partial = super
+      html = ''
+
+      if partial[0] == '\n'
+        partial = partial[1..-1]
+      end
+
+      context.stack do
+        html = CodeRay.scan(partial, @language).div
+      end
+
+      "<notextile>#{html}</notextile>"
+    end
+
+    Liquid::Template.register_tag('codeblock', LiquidCodeBlock)
   end
 end

commit ea137ac25c445c2f45a3643f23e6d2772a4b3887
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Tue Sep 12 09:47:59 2017 -0400

    10349: Add code snippet for combining collections.
    
    Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <pamstutz at veritasgenetics.com>

diff --git a/doc/sdk/python/cookbook.html.textile.liquid b/doc/sdk/python/cookbook.html.textile.liquid
index 98a5fe8..fa059f7 100644
--- a/doc/sdk/python/cookbook.html.textile.liquid
+++ b/doc/sdk/python/cookbook.html.textile.liquid
@@ -134,3 +134,20 @@ token = api.api_client_authorizations().create(body={"api_client_authorization":
     "GET /arvados/v1/keep_services/accessible"]}}).execute()
 print("%s/c=%s/t=%s/_/" % (download, collection_uuid, token["api_token"]))
 </code></pre>
+
+h2. Combine two or more collections
+
+Note, if two collections have files of the same name, the contents will be concatenated in the resulting manifest.
+
+<pre><code>import arvados
+import arvados.collection
+api = arvados.api()
+project_uuid = "qr1hi-tpzed-zzzzzzzzzzzzzzz"
+collection_uuids = ["qr1hi-4zz18-aaaaaaaaaaaaaaa", "qr1hi-4zz18-bbbbbbbbbbbbbbb"]
+combined_manifest = ""
+for u in collection_uuids:
+    c = api.collections().get(uuid=u).execute()
+    combined_manifest += c["manifest_text"]
+newcol = arvados.collection.Collection(combined_manifest)
+newcol.save_new(name="My combined collection", owner_uuid=project_uuid)
+</code></pre>

commit 7a61a3b1f2f4c9b63195abb6990c12966895c254
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Mon Sep 11 11:57:54 2017 -0400

    10349: Fix formatting.  Add link from user guide to improve discoverability.
    
    Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <pamstutz at veritasgenetics.com>

diff --git a/doc/_config.yml b/doc/_config.yml
index 75165a0..3068647 100644
--- a/doc/_config.yml
+++ b/doc/_config.yml
@@ -70,6 +70,7 @@ navbar:
     - Develop a web service:
       - user/topics/arv-web.html.textile.liquid
     - Reference:
+      - user/reference/cookbook.html.textile.liquid
       - user/topics/run-command.html.textile.liquid
       - user/reference/job-pipeline-ref.html.textile.liquid
       - user/examples/crunch-examples.html.textile.liquid
@@ -89,6 +90,7 @@ navbar:
       - sdk/python/python.html.textile.liquid
       - sdk/python/crunch-utility-libraries.html.textile.liquid
       - sdk/python/events.html.textile.liquid
+      - sdk/python/cookbook.html.textile.liquid
     - CLI:
       - sdk/cli/install.html.textile.liquid
       - sdk/cli/index.html.textile.liquid
diff --git a/doc/sdk/python/cookbook.html.textile.liquid b/doc/sdk/python/cookbook.html.textile.liquid
index df8181f..98a5fe8 100644
--- a/doc/sdk/python/cookbook.html.textile.liquid
+++ b/doc/sdk/python/cookbook.html.textile.liquid
@@ -12,25 +12,22 @@ SPDX-License-Identifier: CC-BY-SA-3.0
 
 h2. Cancel a container request
 
-<code>
-import arvados
+<pre><code>import arvados
 arvados.api().container_requests().update(uuid=container_request_uuid, body={"priority": 0}).execute()
-</code>
+</code></pre>
 
 h2. Cancel all container requests
 
-<code>
-import arvados
+<pre><code>import arvados
 api = arvados.api()
 result = api.container_requests().list(filters=[["state", "=", "Committed"], ["priority", ">", "0"]]).execute()["items"]
 for container_request in result:
     api.container_requests().update(uuid=container_request["uuid"], body={"priority": 0}).execute()
-</code>
+</code></pre>
 
 h2. List completed container requests
 
-<code>
-import arvados
+<pre><code>import arvados
 api = arvados.api()
 result = api.container_requests().list(filters=[["name", "like", name], ["state", "=", "Final"]]).execute()["items"]
 container_uuids = [cr["container_uuid"] for cr in result]
@@ -40,32 +37,29 @@ container_dict = {c["uuid"]: c for c in containers}
 for container_request in result:
     container = container_dict[container_request["container_uuid"]]
     print("%s, %s, %s" % (container_request["uuid"], container_request["name"], "Success" if container["exit_code"] == 0 else "Failed"))
-</code>
+</code></pre>
 
 h2. Get input of a CWL workflow
 
-<code>
-import arvados
+<pre><code>import arvados
 api = arvados.api()
 container_request = arvados.api().container_requests().get(uuid=container_request_uuid).execute()
 print(container_request["mounts"]["/var/lib/cwl/cwl.input.json"])
-</code>
+</code></pre>
 
 h2. Get output of a CWL workflow
 
-<code>
-import arvados
+<pre><code>import arvados
 import arvados.collection
 api = arvados.api()
 container_request = arvados.api().container_requests().get(uuid=container_request_uuid).execute()
 collection = arvados.collection.CollectionReader(container_request["output_uuid"])
 print(collection.open("cwl.output.json").read())
-</code>
+</code></pre>
 
 h2. List input of child requests
 
-<code>
-import arvados
+<pre><code>import arvados
 api = arvados.api()
 parent_request_uuid = "qr1hi-xvhdp-zzzzzzzzzzzzzzz"
 namefilter = "bwa%"
@@ -79,12 +73,11 @@ for c in child_requests["items"]:
     for m in c["mounts"].values():
         if "portable_data_hash" in m:
             print("  %s" % m["portable_data_hash"])
-</code>
+</code></pre>
 
 h2. List output of child requests
 
-<code>
-import arvados
+<pre><code>import arvados
 api = arvados.api()
 parent_request_uuid = "qr1hi-xvhdp-61y7cjymnhyp7yu"
 namefilter = "bwa%"
@@ -98,12 +91,11 @@ collections = arvados.api().collections().list(filters=[["uuid", "in", output_uu
 uuid_to_pdh = {c["uuid"]: c["portable_data_hash"] for c in collections["items"]}
 for c in child_requests["items"]:
     print("%s -> %s" % (c["name"], uuid_to_pdh[c["output_uuid"]]))
-</code>
+</code></pre>
 
 h2. List failed child requests
 
-<code>
-import arvados
+<pre><code>import arvados
 api = arvados.api()
 parent_request_uuid = "qr1hi-xvhdp-3d8f1zatx1xio36"
 container_request = arvados.api().container_requests().get(uuid=parent_request_uuid).execute()
@@ -116,12 +108,11 @@ cancelled_child_containers = arvados.api().containers().list(filters=[
     ["uuid", "in", child_containers.keys()]], limit=1000).execute()
 for c in cancelled_child_containers["items"]:
     print("%s (%s)" % (child_containers[c["uuid"]]["name"], child_containers[c["uuid"]]["uuid"]))
-</code>
+</code></pre>
 
 h2. Get log of a child request
 
-<code>
-import arvados
+<pre><code>import arvados
 import arvados.collection
 api = arvados.api()
 container_request_uuid = "qr1hi-xvhdp-3d8f1zatx1xio36"
@@ -129,12 +120,11 @@ container_request = arvados.api().container_requests().get(uuid=container_reques
 collection = arvados.collection.CollectionReader(container_request["log_uuid"])
 for c in collection:
     print(collection.open(c).read())
-</code>
+</code></pre>
 
 h2. Create a collection sharing link
 
-<code>
-import arvados
+<pre><code>import arvados
 api = arvados.api()
 download="https://your.download.server"
 collection_uuid="your-4zz18-collectionuuid"
@@ -143,4 +133,4 @@ token = api.api_client_authorizations().create(body={"api_client_authorization":
     "GET /arvados/v1/collections/%s/" % collection_uuid,
     "GET /arvados/v1/keep_services/accessible"]}}).execute()
 print("%s/c=%s/t=%s/_/" % (download, collection_uuid, token["api_token"]))
-</code>
+</code></pre>
diff --git a/doc/user/reference/cookbook.html.textile.liquid b/doc/user/reference/cookbook.html.textile.liquid
new file mode 100644
index 0000000..b2411f3
--- /dev/null
+++ b/doc/user/reference/cookbook.html.textile.liquid
@@ -0,0 +1,12 @@
+---
+layout: default
+navsection: userguide
+title: "Arvados SDK Examples"
+...
+{% comment %}
+Copyright (C) The Arvados Authors. All rights reserved.
+
+SPDX-License-Identifier: CC-BY-SA-3.0
+{% endcomment %}
+
+Code snippets for perform various tasks with the API are "documented in the SDK section":{{site.baseurl}}/sdk/python/cookbook.html .

commit c4f252e766aa196d97801d99bb74720e451ca185
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Mon Sep 11 10:59:02 2017 -0400

    10349: Add snippts for listing inputs/outputs of containers, failed child
    requests, list logs of request.
    
    Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <pamstutz at veritasgenetics.com>

diff --git a/doc/sdk/python/cookbook.html.textile.liquid b/doc/sdk/python/cookbook.html.textile.liquid
index 7ce547a..df8181f 100644
--- a/doc/sdk/python/cookbook.html.textile.liquid
+++ b/doc/sdk/python/cookbook.html.textile.liquid
@@ -62,6 +62,75 @@ collection = arvados.collection.CollectionReader(container_request["output_uuid"
 print(collection.open("cwl.output.json").read())
 </code>
 
+h2. List input of child requests
+
+<code>
+import arvados
+api = arvados.api()
+parent_request_uuid = "qr1hi-xvhdp-zzzzzzzzzzzzzzz"
+namefilter = "bwa%"
+container_request = arvados.api().container_requests().get(uuid=parent_request_uuid).execute()
+parent_container_uuid = container_request["container_uuid"]
+child_requests = arvados.api().container_requests().list(filters=[
+    ["requesting_container_uuid", "=", parent_container_uuid],
+    ["name", "like", namefilter]]).execute()
+for c in child_requests["items"]:
+    print("%s" % c["name"])
+    for m in c["mounts"].values():
+        if "portable_data_hash" in m:
+            print("  %s" % m["portable_data_hash"])
+</code>
+
+h2. List output of child requests
+
+<code>
+import arvados
+api = arvados.api()
+parent_request_uuid = "qr1hi-xvhdp-61y7cjymnhyp7yu"
+namefilter = "bwa%"
+container_request = arvados.api().container_requests().get(uuid=parent_request_uuid).execute()
+parent_container_uuid = container_request["container_uuid"]
+child_requests = arvados.api().container_requests().list(filters=[
+    ["requesting_container_uuid", "=", parent_container_uuid],
+    ["name", "like", namefilter]]).execute()
+output_uuids = [c["output_uuid"] for c in child_requests["items"]]
+collections = arvados.api().collections().list(filters=[["uuid", "in", output_uuids]]).execute()
+uuid_to_pdh = {c["uuid"]: c["portable_data_hash"] for c in collections["items"]}
+for c in child_requests["items"]:
+    print("%s -> %s" % (c["name"], uuid_to_pdh[c["output_uuid"]]))
+</code>
+
+h2. List failed child requests
+
+<code>
+import arvados
+api = arvados.api()
+parent_request_uuid = "qr1hi-xvhdp-3d8f1zatx1xio36"
+container_request = arvados.api().container_requests().get(uuid=parent_request_uuid).execute()
+parent_container_uuid = container_request["container_uuid"]
+child_requests = arvados.api().container_requests().list(filters=[
+    ["requesting_container_uuid", "=", parent_container_uuid]], limit=1000).execute()
+child_containers = {c["container_uuid"]: c for c in child_requests["items"]}
+cancelled_child_containers = arvados.api().containers().list(filters=[
+    ["exit_code", "!=", "0"],
+    ["uuid", "in", child_containers.keys()]], limit=1000).execute()
+for c in cancelled_child_containers["items"]:
+    print("%s (%s)" % (child_containers[c["uuid"]]["name"], child_containers[c["uuid"]]["uuid"]))
+</code>
+
+h2. Get log of a child request
+
+<code>
+import arvados
+import arvados.collection
+api = arvados.api()
+container_request_uuid = "qr1hi-xvhdp-3d8f1zatx1xio36"
+container_request = arvados.api().container_requests().get(uuid=container_request_uuid).execute()
+collection = arvados.collection.CollectionReader(container_request["log_uuid"])
+for c in collection:
+    print(collection.open(c).read())
+</code>
+
 h2. Create a collection sharing link
 
 <code>
@@ -75,5 +144,3 @@ token = api.api_client_authorizations().create(body={"api_client_authorization":
     "GET /arvados/v1/keep_services/accessible"]}}).execute()
 print("%s/c=%s/t=%s/_/" % (download, collection_uuid, token["api_token"]))
 </code>
-
-h2. Run a CWL workflow from a workflow record

commit 38e6bfb62552b6bedebe4fdf505f89ecdb5e4287
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Wed Aug 30 17:33:13 2017 -0400

    10349: Add "Create a collection sharing link"
    
    Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <pamstutz at veritasgenetics.com>

diff --git a/doc/sdk/python/cookbook.html.textile.liquid b/doc/sdk/python/cookbook.html.textile.liquid
index 2adb986..7ce547a 100644
--- a/doc/sdk/python/cookbook.html.textile.liquid
+++ b/doc/sdk/python/cookbook.html.textile.liquid
@@ -62,4 +62,18 @@ collection = arvados.collection.CollectionReader(container_request["output_uuid"
 print(collection.open("cwl.output.json").read())
 </code>
 
+h2. Create a collection sharing link
+
+<code>
+import arvados
+api = arvados.api()
+download="https://your.download.server"
+collection_uuid="your-4zz18-collectionuuid"
+token = api.api_client_authorizations().create(body={"api_client_authorization":{"scopes": [
+    "GET /arvados/v1/collections/%s" % collection_uuid,
+    "GET /arvados/v1/collections/%s/" % collection_uuid,
+    "GET /arvados/v1/keep_services/accessible"]}}).execute()
+print("%s/c=%s/t=%s/_/" % (download, collection_uuid, token["api_token"]))
+</code>
+
 h2. Run a CWL workflow from a workflow record

commit 7f108bc7e00604fd0e346b044c05579bfa380e9a
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Mon Aug 14 09:33:00 2017 -0400

    10349: Working on Python code snippits for manipulating container requests.
    
    Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <pamstutz at veritasgenetics.com>

diff --git a/doc/sdk/python/cookbook.html.textile.liquid b/doc/sdk/python/cookbook.html.textile.liquid
new file mode 100644
index 0000000..2adb986
--- /dev/null
+++ b/doc/sdk/python/cookbook.html.textile.liquid
@@ -0,0 +1,65 @@
+---
+layout: default
+navsection: sdk
+navmenu: Python
+title: Code cookbook
+...
+{% comment %}
+Copyright (C) The Arvados Authors. All rights reserved.
+
+SPDX-License-Identifier: CC-BY-SA-3.0
+{% endcomment %}
+
+h2. Cancel a container request
+
+<code>
+import arvados
+arvados.api().container_requests().update(uuid=container_request_uuid, body={"priority": 0}).execute()
+</code>
+
+h2. Cancel all container requests
+
+<code>
+import arvados
+api = arvados.api()
+result = api.container_requests().list(filters=[["state", "=", "Committed"], ["priority", ">", "0"]]).execute()["items"]
+for container_request in result:
+    api.container_requests().update(uuid=container_request["uuid"], body={"priority": 0}).execute()
+</code>
+
+h2. List completed container requests
+
+<code>
+import arvados
+api = arvados.api()
+result = api.container_requests().list(filters=[["name", "like", name], ["state", "=", "Final"]]).execute()["items"]
+container_uuids = [cr["container_uuid"] for cr in result]
+containers = api.containers().list(filters=[["uuid", "in", container_uuids]]).execute()["items"]
+container_dict = {c["uuid"]: c for c in containers}
+
+for container_request in result:
+    container = container_dict[container_request["container_uuid"]]
+    print("%s, %s, %s" % (container_request["uuid"], container_request["name"], "Success" if container["exit_code"] == 0 else "Failed"))
+</code>
+
+h2. Get input of a CWL workflow
+
+<code>
+import arvados
+api = arvados.api()
+container_request = arvados.api().container_requests().get(uuid=container_request_uuid).execute()
+print(container_request["mounts"]["/var/lib/cwl/cwl.input.json"])
+</code>
+
+h2. Get output of a CWL workflow
+
+<code>
+import arvados
+import arvados.collection
+api = arvados.api()
+container_request = arvados.api().container_requests().get(uuid=container_request_uuid).execute()
+collection = arvados.collection.CollectionReader(container_request["output_uuid"])
+print(collection.open("cwl.output.json").read())
+</code>
+
+h2. Run a CWL workflow from a workflow record

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list