{"id":634,"date":"2022-10-20T18:20:37","date_gmt":"2022-10-20T18:20:37","guid":{"rendered":"https:\/\/terrabioappdev.wpenginepowered.com\/run-your-notebooks-programmatically-in-the-cloud\/"},"modified":"2023-12-27T04:55:45","modified_gmt":"2023-12-27T04:55:45","slug":"run-your-notebooks-programmatically-in-the-cloud","status":"publish","type":"post","link":"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/","title":{"rendered":"Run your notebooks programmatically in the cloud"},"content":{"rendered":"<p><i><span style=\"font-weight: 400;\">John Bates is a software engineer at Verily. In this guest blog post, he and his fellow software engineer Nicole Deflaux share two solutions they developed for running Jupyter notebooks programmatically in support of their own analysis work.\u00a0<\/span><\/i><\/p>\n<hr \/>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Our team makes extensive use of Jupyter Notebooks for developing new analyses, because they enable us to iterate very quickly and collaboratively in an interactive environment.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">However, we have found there are certain situations where we want to run a notebook programmatically \u2014 meaning, just launch the entire analysis with a single command, without having to manually open the notebook and run cells.<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">To run a notebook with a known, clean virtual machine configuration to confirm it has no unresolved dependencies on locally installed Python packages, R packages, or on local files.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">To run a notebook with many different sets of parameters, all in parallel.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">To execute a long-running notebook (e.g., taking hours or even days) on a machine separate from where you are working interactively.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">To automate an analysis that was developed in a notebook without porting it to a workflow.<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Fortunately, there is a command-line tool called <\/span><a href=\"https:\/\/papermill.readthedocs.io\/en\/latest\/\"><span style=\"font-weight: 400;\">Papermill<\/span><\/a><span style=\"font-weight: 400;\"> that makes it possible to parameterize and execute Jupyter Notebooks programmatically. So all you really need to achieve these goals from within Terra is to devise a way to launch the Papermill command on a clean <\/span><span style=\"font-weight: 400;\">virtual machine.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">We recently developed a pair of approaches to do exactly that, using either the Workflow execution system or the Terminal in a Cloud Environment. This has been very useful for our team, so we created a <\/span><a href=\"https:\/\/app.terra.bio\/#workspaces\/verily-terra-solutions\/Programmatic%20Notebook%20Execution%20Tutorial\"><span style=\"font-weight: 400;\">public workspace<\/span><\/a><span style=\"font-weight: 400;\"> that demonstrates how you too can do this with minimal effort.<\/span><\/p>\n<p style=\"text-align: center;\">\u2014 \u2601\ufe0f \u2014<\/p>\n<p><span style=\"font-weight: 400;\">The Workflow approach uses a single-task WDL script, <\/span><a href=\"https:\/\/dockstore.org\/workflows\/github.com\/DataBiosphere\/terra-examples\/notebook_workflow\"><span style=\"font-weight: 400;\">notebook_workflow.wdl<\/span><\/a><span style=\"font-weight: 400;\">, that we wrote to serve as a lightweight wrapper for the Papermill command. You can submit this WDL through Terra&#8217;s Workflows execution interface as usual, specifying as inputs the path to the notebook file you want to run programmatically as well as the environment container to use for testing, and any number of other relevant parameters.\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"size-large wp-image-1469 aligncenter\" src=\"https:\/\/terra.bio\/wp-content\/uploads\/2023\/12\/progr_exec_notebooks-wf-1024x546.png\" alt=\"\" width=\"800\" height=\"427\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">The output of this workflow is a copy of the original notebook, fully executed and rendered in html, along with any files generated by the notebook execution itself.<\/span><\/p>\n<p style=\"text-align: center;\">\u2014 \u2601\ufe0f \u2014<\/p>\n<p><span style=\"font-weight: 400;\">In contrast, the Terminal option uses <\/span><a href=\"https:\/\/github.com\/DataBiosphere\/dsub\"><span style=\"font-weight: 400;\">dsub<\/span><\/a><span style=\"font-weight: 400;\">, a Google Cloud tool that was developed for submitting and running batch scripts in the cloud. The basic idea behind dsub is to emulate the experience of using high-performance computing job schedulers like Grid Engine and Slurm, which allow you to write a script and then submit it to a job scheduler from a shell prompt on your local machine. You can then disconnect from the shell, go about your business, then later come back and query the status of your job using a predefined command generated at submission time.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">You can use this tool in Terra by launching a Jupyter Cloud Environment (Python kernel), which includes a built-in Terminal app that you can fire up by clicking on its icon in the right-hand toolbar. Once you&#8217;ve installed dsub and its dependencies into your environment, you can run dsub commands to submit jobs to Google Cloud as if it were your local compute server.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For the purpose of running notebooks programmatically, you need to run a dsub command that will in turn launch the desired Papermill command, with the appropriate inputs and environment configuration. This may sound complicated, but the actual command that you will run in the Terminal is short and straightforward: to keep things simple, we wrote a Python script called <\/span><a href=\"https:\/\/github.com\/DataBiosphere\/terra-examples\/blob\/main\/programmatic_execution_of_notebooks\/dsub_notebook.py\"><span style=\"font-weight: 400;\">dsub_notebook.py<\/span><\/a><span style=\"font-weight: 400;\"> that wraps all the functionality you need to configure, launch and monitor the Papermill job through dsub. All you need to do is adapt the command with your input notebook and any appropriate parameters, and run it in the Terminal of your Python Cloud Environment.\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" class=\"size-large wp-image-1471 aligncenter\" src=\"https:\/\/terra.bio\/wp-content\/uploads\/2023\/12\/progr_exec_notebooks-term-1024x377.png\" alt=\"\" width=\"800\" height=\"295\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">This produces the same outputs as the Workflows option: a copy of the original notebook, fully executed and rendered in html, along with any files generated by the notebook execution itself.<\/span><\/p>\n<p style=\"text-align: center;\">\u2014 \u2601\ufe0f \u2014<\/p>\n<p><span style=\"font-weight: 400;\">You can find a detailed tutorial with step by steps instructions in the <\/span><a href=\"https:\/\/app.terra.bio\/#workspaces\/verily-terra-solutions\/Programmatic%20Notebook%20Execution%20Tutorial\"><span style=\"font-weight: 400;\">public workspace<\/span><\/a><span style=\"font-weight: 400;\"> that we created to demonstrate how this works in practice. The tutorial includes an example notebook parameterized with Papermill, with three choices of input datasets, as well as a setup notebook to install dsub into your environment quickly and painlessly.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">We hope you will find this resource useful and would love to hear your feedback on how we could make it even better, either in the <\/span><a href=\"https:\/\/support.terra.bio\/hc\/en-us\/community\/topics\/360000500432-General-Discussion\"><span style=\"font-weight: 400;\">public Terra forum<\/span><\/a><span style=\"font-weight: 400;\"> or privately <\/span><a href=\"https:\/\/support.terra.bio\/hc\/en-us\/requests\/new\"><span style=\"font-weight: 400;\">through the helpdesk<\/span><\/a><span style=\"font-weight: 400;\">. You can also open an issue in the <\/span><a href=\"https:\/\/github.com\/DataBiosphere\/terra-examples\/issues\"><span style=\"font-weight: 400;\">terra-examples repository<\/span><\/a><span style=\"font-weight: 400;\"> to report a problem or discuss a technical aspect of the scripts.<\/span><\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<h4><span style=\"color: #008000;\">Resources<\/span><\/h4>\n<ul>\n<li><a href=\"https:\/\/app.terra.bio\/#workspaces\/verily-terra-solutions\/Programmatic%20Notebook%20Execution%20Tutorial\">Programmatic Notebook Execution Tutorial<\/a>\u00a0(public Terra workspace)<\/li>\n<li><a href=\"https:\/\/github.com\/DataBiosphere\/terra-examples\/issues\"><span style=\"font-weight: 400;\">terra-examples repository<\/span><\/a> (examples and utility scripts)<\/li>\n<li><a href=\"https:\/\/papermill.readthedocs.io\/en\/latest\/\"><span style=\"font-weight: 400;\">Papermill documentation<\/span><\/a><\/li>\n<li><a href=\"https:\/\/github.com\/DataBiosphere\/dsub\"><span style=\"font-weight: 400;\">dsub documentation<\/span><\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Verily software engineers share tips and resources for running Jupyter notebooks programmatically without writing any code.<\/p>\n","protected":false},"author":47,"featured_media":637,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[12,155,43,13,44,119,45,38,32,14],"tags":[],"class_list":["post-634","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-analysis","category-developers","category-features","category-guest-author","category-interactive-analysis","category-most-recent","category-notebooks","category-tutorials","category-workflows","category-workspaces"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Run your notebooks programmatically in the cloud - Terra<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Run your notebooks programmatically in the cloud - Terra\" \/>\n<meta property=\"og:description\" content=\"Verily software engineers share tips and resources for running Jupyter notebooks programmatically without writing any code.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/\" \/>\n<meta property=\"og:site_name\" content=\"Terra\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-20T18:20:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-27T04:55:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/terra.bio\/wp-content\/uploads\/2023\/12\/progr_exec_notebooks_og.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"627\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"John Bates\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"John Bates\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/\"},\"author\":{\"name\":\"John Bates\",\"@id\":\"https:\/\/terra.bio\/#\/schema\/person\/9ba3eefa2899efa39a6ad6126d3e2fe6\"},\"headline\":\"Run your notebooks programmatically in the cloud\",\"datePublished\":\"2022-10-20T18:20:37+00:00\",\"dateModified\":\"2023-12-27T04:55:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/\"},\"wordCount\":816,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/terra.bio\/#organization\"},\"image\":{\"@id\":\"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/terra.bio\/wp-content\/uploads\/2023\/12\/progr_exec_notebooks_og.png\",\"articleSection\":[\"Analysis\",\"Developers\",\"Features\",\"Guest Author\",\"Interactive Analysis\",\"Most Recent\",\"Notebooks\",\"Tutorials\",\"Workflows\",\"Workspaces\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/\",\"url\":\"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/\",\"name\":\"Run your notebooks programmatically in the cloud - Terra\",\"isPartOf\":{\"@id\":\"https:\/\/terra.bio\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/terra.bio\/wp-content\/uploads\/2023\/12\/progr_exec_notebooks_og.png\",\"datePublished\":\"2022-10-20T18:20:37+00:00\",\"dateModified\":\"2023-12-27T04:55:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/#primaryimage\",\"url\":\"https:\/\/terra.bio\/wp-content\/uploads\/2023\/12\/progr_exec_notebooks_og.png\",\"contentUrl\":\"https:\/\/terra.bio\/wp-content\/uploads\/2023\/12\/progr_exec_notebooks_og.png\",\"width\":1200,\"height\":627,\"caption\":\"progr_exec_notebooks_og\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/terra.bio\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Run your notebooks programmatically in the cloud\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/terra.bio\/#website\",\"url\":\"https:\/\/terra.bio\/\",\"name\":\"Terra\",\"description\":\"Science at Scale\",\"publisher\":{\"@id\":\"https:\/\/terra.bio\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/terra.bio\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/terra.bio\/#organization\",\"name\":\"Terra\",\"url\":\"https:\/\/terra.bio\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/terra.bio\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/terra.bio\/wp-content\/uploads\/2023\/12\/Terra-Bio-App@2x.webp\",\"contentUrl\":\"https:\/\/terra.bio\/wp-content\/uploads\/2023\/12\/Terra-Bio-App@2x.webp\",\"width\":287,\"height\":318,\"caption\":\"Terra\"},\"image\":{\"@id\":\"https:\/\/terra.bio\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/terra.bio\/#\/schema\/person\/9ba3eefa2899efa39a6ad6126d3e2fe6\",\"name\":\"John Bates\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/terra.bio\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/11db96d1f9c1e5d79d4a53303d56f900aef6c4ffe3873b5341da9d118de4067e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/11db96d1f9c1e5d79d4a53303d56f900aef6c4ffe3873b5341da9d118de4067e?s=96&d=mm&r=g\",\"caption\":\"John Bates\"},\"url\":\"https:\/\/terra.bio\/author\/bates\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Run your notebooks programmatically in the cloud - Terra","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/","og_locale":"en_US","og_type":"article","og_title":"Run your notebooks programmatically in the cloud - Terra","og_description":"Verily software engineers share tips and resources for running Jupyter notebooks programmatically without writing any code.","og_url":"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/","og_site_name":"Terra","article_published_time":"2022-10-20T18:20:37+00:00","article_modified_time":"2023-12-27T04:55:45+00:00","og_image":[{"width":1200,"height":627,"url":"https:\/\/terra.bio\/wp-content\/uploads\/2023\/12\/progr_exec_notebooks_og.png","type":"image\/png"}],"author":"John Bates","twitter_card":"summary_large_image","twitter_misc":{"Written by":"John Bates","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/#article","isPartOf":{"@id":"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/"},"author":{"name":"John Bates","@id":"https:\/\/terra.bio\/#\/schema\/person\/9ba3eefa2899efa39a6ad6126d3e2fe6"},"headline":"Run your notebooks programmatically in the cloud","datePublished":"2022-10-20T18:20:37+00:00","dateModified":"2023-12-27T04:55:45+00:00","mainEntityOfPage":{"@id":"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/"},"wordCount":816,"commentCount":0,"publisher":{"@id":"https:\/\/terra.bio\/#organization"},"image":{"@id":"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/#primaryimage"},"thumbnailUrl":"https:\/\/terra.bio\/wp-content\/uploads\/2023\/12\/progr_exec_notebooks_og.png","articleSection":["Analysis","Developers","Features","Guest Author","Interactive Analysis","Most Recent","Notebooks","Tutorials","Workflows","Workspaces"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/","url":"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/","name":"Run your notebooks programmatically in the cloud - Terra","isPartOf":{"@id":"https:\/\/terra.bio\/#website"},"primaryImageOfPage":{"@id":"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/#primaryimage"},"image":{"@id":"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/#primaryimage"},"thumbnailUrl":"https:\/\/terra.bio\/wp-content\/uploads\/2023\/12\/progr_exec_notebooks_og.png","datePublished":"2022-10-20T18:20:37+00:00","dateModified":"2023-12-27T04:55:45+00:00","breadcrumb":{"@id":"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/#primaryimage","url":"https:\/\/terra.bio\/wp-content\/uploads\/2023\/12\/progr_exec_notebooks_og.png","contentUrl":"https:\/\/terra.bio\/wp-content\/uploads\/2023\/12\/progr_exec_notebooks_og.png","width":1200,"height":627,"caption":"progr_exec_notebooks_og"},{"@type":"BreadcrumbList","@id":"https:\/\/terra.bio\/run-your-notebooks-programmatically-in-the-cloud\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/terra.bio\/"},{"@type":"ListItem","position":2,"name":"Run your notebooks programmatically in the cloud"}]},{"@type":"WebSite","@id":"https:\/\/terra.bio\/#website","url":"https:\/\/terra.bio\/","name":"Terra","description":"Science at Scale","publisher":{"@id":"https:\/\/terra.bio\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/terra.bio\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/terra.bio\/#organization","name":"Terra","url":"https:\/\/terra.bio\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/terra.bio\/#\/schema\/logo\/image\/","url":"https:\/\/terra.bio\/wp-content\/uploads\/2023\/12\/Terra-Bio-App@2x.webp","contentUrl":"https:\/\/terra.bio\/wp-content\/uploads\/2023\/12\/Terra-Bio-App@2x.webp","width":287,"height":318,"caption":"Terra"},"image":{"@id":"https:\/\/terra.bio\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/terra.bio\/#\/schema\/person\/9ba3eefa2899efa39a6ad6126d3e2fe6","name":"John Bates","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/terra.bio\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/11db96d1f9c1e5d79d4a53303d56f900aef6c4ffe3873b5341da9d118de4067e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/11db96d1f9c1e5d79d4a53303d56f900aef6c4ffe3873b5341da9d118de4067e?s=96&d=mm&r=g","caption":"John Bates"},"url":"https:\/\/terra.bio\/author\/bates\/"}]}},"_links":{"self":[{"href":"https:\/\/terra.bio\/wp-json\/wp\/v2\/posts\/634","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/terra.bio\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/terra.bio\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/terra.bio\/wp-json\/wp\/v2\/users\/47"}],"replies":[{"embeddable":true,"href":"https:\/\/terra.bio\/wp-json\/wp\/v2\/comments?post=634"}],"version-history":[{"count":0,"href":"https:\/\/terra.bio\/wp-json\/wp\/v2\/posts\/634\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/terra.bio\/wp-json\/wp\/v2\/media\/637"}],"wp:attachment":[{"href":"https:\/\/terra.bio\/wp-json\/wp\/v2\/media?parent=634"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/terra.bio\/wp-json\/wp\/v2\/categories?post=634"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/terra.bio\/wp-json\/wp\/v2\/tags?post=634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}