blob: cd3ab8968208ee28f33023e244387293597a6778 [file] [log] [blame]
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!doctype html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<title>nexuscli.nexuscli API documentation</title>
<meta name="description" content="This module provides a native python client interface to the NEXUS (https://github.com/apache/incuba..." />
<link href='http://fonts.googleapis.com/css?family=Source+Sans+Pro:400,300' rel='stylesheet' type='text/css'>
<style type="text/css">
* {
box-sizing: border-box;
}
/*! normalize.css v1.1.1 | MIT License | git.io/normalize */
/* ==========================================================================
HTML5 display definitions
========================================================================== */
/**
* Correct `block` display not defined in IE 6/7/8/9 and Firefox 3.
*/
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
nav,
section,
summary {
display: block;
}
/**
* Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3.
*/
audio,
canvas,
video {
display: inline-block;
*display: inline;
*zoom: 1;
}
/**
* Prevent modern browsers from displaying `audio` without controls.
* Remove excess height in iOS 5 devices.
*/
audio:not([controls]) {
display: none;
height: 0;
}
/**
* Address styling not present in IE 7/8/9, Firefox 3, and Safari 4.
* Known issue: no IE 6 support.
*/
[hidden] {
display: none;
}
/* ==========================================================================
Base
========================================================================== */
/**
* 1. Prevent system color scheme's background color being used in Firefox, IE,
* and Opera.
* 2. Prevent system color scheme's text color being used in Firefox, IE, and
* Opera.
* 3. Correct text resizing oddly in IE 6/7 when body `font-size` is set using
* `em` units.
* 4. Prevent iOS text size adjust after orientation change, without disabling
* user zoom.
*/
html {
background: #fff; /* 1 */
color: #000; /* 2 */
font-size: 100%; /* 3 */
-webkit-text-size-adjust: 100%; /* 4 */
-ms-text-size-adjust: 100%; /* 4 */
}
/**
* Address `font-family` inconsistency between `textarea` and other form
* elements.
*/
html,
button,
input,
select,
textarea {
font-family: sans-serif;
}
/**
* Address margins handled incorrectly in IE 6/7.
*/
body {
margin: 0;
}
/* ==========================================================================
Links
========================================================================== */
/**
* Address `outline` inconsistency between Chrome and other browsers.
*/
a:focus {
outline: thin dotted;
}
/**
* Improve readability when focused and also mouse hovered in all browsers.
*/
a:active,
a:hover {
outline: 0;
}
/* ==========================================================================
Typography
========================================================================== */
/**
* Address font sizes and margins set differently in IE 6/7.
* Address font sizes within `section` and `article` in Firefox 4+, Safari 5,
* and Chrome.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
h2 {
font-size: 1.5em;
margin: 0.83em 0;
}
h3 {
font-size: 1.17em;
margin: 1em 0;
}
h4 {
font-size: 1em;
margin: 1.33em 0;
}
h5 {
font-size: 0.83em;
margin: 1.67em 0;
}
h6 {
font-size: 0.67em;
margin: 2.33em 0;
}
/**
* Address styling not present in IE 7/8/9, Safari 5, and Chrome.
*/
abbr[title] {
border-bottom: 1px dotted;
}
/**
* Address style set to `bolder` in Firefox 3+, Safari 4/5, and Chrome.
*/
b,
strong {
font-weight: bold;
}
blockquote {
margin: 1em 40px;
}
/**
* Address styling not present in Safari 5 and Chrome.
*/
dfn {
font-style: italic;
}
/**
* Address differences between Firefox and other browsers.
* Known issue: no IE 6/7 normalization.
*/
hr {
-moz-box-sizing: content-box;
box-sizing: content-box;
height: 0;
}
/**
* Address styling not present in IE 6/7/8/9.
*/
mark {
background: #ff0;
color: #000;
}
/**
* Address margins set differently in IE 6/7.
*/
p,
pre {
margin: 1em 0;
}
/**
* Correct font family set oddly in IE 6, Safari 4/5, and Chrome.
*/
code,
kbd,
pre,
samp {
font-family: monospace, serif;
_font-family: 'courier new', monospace;
font-size: 1em;
}
/**
* Improve readability of pre-formatted text in all browsers.
*/
pre {
white-space: pre;
white-space: pre-wrap;
word-wrap: break-word;
}
/**
* Address CSS quotes not supported in IE 6/7.
*/
q {
quotes: none;
}
/**
* Address `quotes` property not supported in Safari 4.
*/
q:before,
q:after {
content: '';
content: none;
}
/**
* Address inconsistent and variable font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
/* ==========================================================================
Lists
========================================================================== */
/**
* Address margins set differently in IE 6/7.
*/
dl,
menu,
ol,
ul {
margin: 1em 0;
}
dd {
margin: 0 0 0 40px;
}
/**
* Address paddings set differently in IE 6/7.
*/
menu,
ol,
ul {
padding: 0 0 0 40px;
}
/**
* Correct list images handled incorrectly in IE 7.
*/
nav ul,
nav ol {
list-style: none;
list-style-image: none;
}
/* ==========================================================================
Embedded content
========================================================================== */
/**
* 1. Remove border when inside `a` element in IE 6/7/8/9 and Firefox 3.
* 2. Improve image quality when scaled in IE 7.
*/
img {
border: 0; /* 1 */
-ms-interpolation-mode: bicubic; /* 2 */
}
/**
* Correct overflow displayed oddly in IE 9.
*/
svg:not(:root) {
overflow: hidden;
}
/* ==========================================================================
Figures
========================================================================== */
/**
* Address margin not present in IE 6/7/8/9, Safari 5, and Opera 11.
*/
figure {
margin: 0;
}
/* ==========================================================================
Forms
========================================================================== */
/**
* Correct margin displayed oddly in IE 6/7.
*/
form {
margin: 0;
}
/**
* Define consistent border, margin, and padding.
*/
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
/**
* 1. Correct color not being inherited in IE 6/7/8/9.
* 2. Correct text not wrapping in Firefox 3.
* 3. Correct alignment displayed oddly in IE 6/7.
*/
legend {
border: 0; /* 1 */
padding: 0;
white-space: normal; /* 2 */
*margin-left: -7px; /* 3 */
}
/**
* 1. Correct font size not being inherited in all browsers.
* 2. Address margins set differently in IE 6/7, Firefox 3+, Safari 5,
* and Chrome.
* 3. Improve appearance and consistency in all browsers.
*/
button,
input,
select,
textarea {
font-size: 100%; /* 1 */
margin: 0; /* 2 */
vertical-align: baseline; /* 3 */
*vertical-align: middle; /* 3 */
}
/**
* Address Firefox 3+ setting `line-height` on `input` using `!important` in
* the UA stylesheet.
*/
button,
input {
line-height: normal;
}
/**
* Address inconsistent `text-transform` inheritance for `button` and `select`.
* All other form control elements do not inherit `text-transform` values.
* Correct `button` style inheritance in Chrome, Safari 5+, and IE 6+.
* Correct `select` style inheritance in Firefox 4+ and Opera.
*/
button,
select {
text-transform: none;
}
/**
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
* and `video` controls.
* 2. Correct inability to style clickable `input` types in iOS.
* 3. Improve usability and consistency of cursor style between image-type
* `input` and others.
* 4. Remove inner spacing in IE 7 without affecting normal text inputs.
* Known issue: inner spacing remains in IE 6.
*/
button,
html input[type="button"], /* 1 */
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button; /* 2 */
cursor: pointer; /* 3 */
*overflow: visible; /* 4 */
}
/**
* Re-set default cursor for disabled elements.
*/
button[disabled],
html input[disabled] {
cursor: default;
}
/**
* 1. Address box sizing set to content-box in IE 8/9.
* 2. Remove excess padding in IE 8/9.
* 3. Remove excess padding in IE 7.
* Known issue: excess padding remains in IE 6.
*/
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
*height: 13px; /* 3 */
*width: 13px; /* 3 */
}
/**
* 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
* 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
* (include `-moz` to future-proof).
*/
input[type="search"] {
-webkit-appearance: textfield; /* 1 */
-moz-box-sizing: content-box;
-webkit-box-sizing: content-box; /* 2 */
box-sizing: content-box;
}
/**
* Remove inner padding and search cancel button in Safari 5 and Chrome
* on OS X.
*/
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* Remove inner padding and border in Firefox 3+.
*/
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
/**
* 1. Remove default vertical scrollbar in IE 6/7/8/9.
* 2. Improve readability and alignment in all browsers.
*/
textarea {
overflow: auto; /* 1 */
vertical-align: top; /* 2 */
}
/* ==========================================================================
Tables
========================================================================== */
/**
* Remove most spacing between table cells.
*/
table {
border-collapse: collapse;
border-spacing: 0;
}
</style>
<style type="text/css">
html, body {
margin: 0;
padding: 0;
min-height: 100%;
}
body {
background: #fff;
font-family: "Source Sans Pro", "Helvetica Neueue", Helvetica, sans;
font-weight: 300;
font-size: 16px;
line-height: 1.6em;
}
#content {
width: 70%;
max-width: 850px;
float: left;
padding: 30px 60px;
border-left: 1px solid #ddd;
}
#sidebar {
width: 25%;
float: left;
padding: 30px;
overflow: hidden;
}
#nav {
font-size: 130%;
margin: 0 0 15px 0;
}
#top {
display: block;
position: fixed;
bottom: 5px;
left: 5px;
font-size: .85em;
text-transform: uppercase;
}
#footer {
font-size: .75em;
padding: 5px 30px;
border-top: 1px solid #ddd;
text-align: right;
}
#footer p {
margin: 0 0 0 30px;
display: inline-block;
}
h1, h2, h3, h4, h5 {
font-weight: 300;
}
h1 {
font-size: 2.5em;
line-height: 1.1em;
margin: 0 0 .50em 0;
}
h2 {
font-size: 1.75em;
margin: 1em 0 .50em 0;
}
h3 {
margin: 25px 0 10px 0;
}
h4 {
margin: 0;
font-size: 105%;
}
a {
color: #058;
text-decoration: none;
transition: color .3s ease-in-out;
}
a:hover {
color: #e08524;
transition: color .3s ease-in-out;
}
pre, code, .mono, .name {
font-family: "Ubuntu Mono", "Cousine", "DejaVu Sans Mono", monospace;
}
.title .name {
font-weight: bold;
}
.section-title {
margin-top: 2em;
}
.ident {
color: #900;
}
code {
background: #f9f9f9;
}
pre {
background: #fefefe;
border: 1px solid #ddd;
box-shadow: 2px 2px 0 #f3f3f3;
margin: 0 30px;
padding: 15px 30px;
}
.codehilite {
margin: 0 30px 10px 30px;
}
.codehilite pre {
margin: 0;
}
.codehilite .err { background: #ff3300; color: #fff !important; }
table#module-list {
font-size: 110%;
}
table#module-list tr td:first-child {
padding-right: 10px;
white-space: nowrap;
}
table#module-list td {
vertical-align: top;
padding-bottom: 8px;
}
table#module-list td p {
margin: 0 0 7px 0;
}
.def {
display: table;
}
.def p {
display: table-cell;
vertical-align: top;
text-align: left;
}
.def p:first-child {
white-space: nowrap;
}
.def p:last-child {
width: 100%;
}
#index {
list-style-type: none;
margin: 0;
padding: 0;
}
ul#index .class_name {
/* font-size: 110%; */
font-weight: bold;
}
#index ul {
margin: 0;
}
.item {
margin: 0 0 15px 0;
}
.item .class {
margin: 0 0 25px 30px;
}
.item .class ul.class_list {
margin: 0 0 20px 0;
}
.item .name {
background: #fafafa;
margin: 0;
font-weight: bold;
padding: 5px 10px;
border-radius: 3px;
display: inline-block;
min-width: 40%;
}
.item .name:hover {
background: #f6f6f6;
}
.item .empty_desc {
margin: 0 0 5px 0;
padding: 0;
}
.item .inheritance {
margin: 3px 0 0 30px;
}
.item .inherited {
color: #666;
}
.item .desc {
padding: 0 8px;
margin: 0;
}
.item .desc p {
margin: 0 0 10px 0;
}
.source_cont {
margin: 0;
padding: 0;
}
.source_link a {
background: #ffc300;
font-weight: 400;
font-size: .75em;
text-transform: uppercase;
color: #fff;
text-shadow: 1px 1px 0 #f4b700;
padding: 3px 8px;
border-radius: 2px;
transition: background .3s ease-in-out;
}
.source_link a:hover {
background: #FF7200;
text-shadow: none;
transition: background .3s ease-in-out;
}
.source {
display: none;
max-height: 600px;
overflow-y: scroll;
margin-bottom: 15px;
}
.source .codehilite {
margin: 0;
}
.desc h1, .desc h2, .desc h3 {
font-size: 100% !important;
}
.clear {
clear: both;
}
@media all and (max-width: 950px) {
#sidebar {
width: 35%;
}
#content {
width: 65%;
}
}
@media all and (max-width: 650px) {
#top {
display: none;
}
#sidebar {
float: none;
width: auto;
}
#content {
float: none;
width: auto;
padding: 30px;
}
#index ul {
padding: 0;
margin-bottom: 15px;
}
#index ul li {
display: inline-block;
margin-right: 30px;
}
#footer {
text-align: left;
}
#footer p {
display: block;
margin: inherit;
}
}
/*****************************/
</style>
<style type="text/css">
.codehilite .hll { background-color: #ffffcc }
.codehilite { background: #f8f8f8; }
.codehilite .c { color: #408080; font-style: italic } /* Comment */
.codehilite .err { border: 1px solid #FF0000 } /* Error */
.codehilite .k { color: #008000; font-weight: bold } /* Keyword */
.codehilite .o { color: #666666 } /* Operator */
.codehilite .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.codehilite .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.codehilite .cp { color: #BC7A00 } /* Comment.Preproc */
.codehilite .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.codehilite .c1 { color: #408080; font-style: italic } /* Comment.Single */
.codehilite .cs { color: #408080; font-style: italic } /* Comment.Special */
.codehilite .gd { color: #A00000 } /* Generic.Deleted */
.codehilite .ge { font-style: italic } /* Generic.Emph */
.codehilite .gr { color: #FF0000 } /* Generic.Error */
.codehilite .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.codehilite .gi { color: #00A000 } /* Generic.Inserted */
.codehilite .go { color: #888888 } /* Generic.Output */
.codehilite .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.codehilite .gs { font-weight: bold } /* Generic.Strong */
.codehilite .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.codehilite .gt { color: #0044DD } /* Generic.Traceback */
.codehilite .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.codehilite .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.codehilite .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.codehilite .kp { color: #008000 } /* Keyword.Pseudo */
.codehilite .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.codehilite .kt { color: #B00040 } /* Keyword.Type */
.codehilite .m { color: #666666 } /* Literal.Number */
.codehilite .s { color: #BA2121 } /* Literal.String */
.codehilite .na { color: #7D9029 } /* Name.Attribute */
.codehilite .nb { color: #008000 } /* Name.Builtin */
.codehilite .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.codehilite .no { color: #880000 } /* Name.Constant */
.codehilite .nd { color: #AA22FF } /* Name.Decorator */
.codehilite .ni { color: #999999; font-weight: bold } /* Name.Entity */
.codehilite .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.codehilite .nf { color: #0000FF } /* Name.Function */
.codehilite .nl { color: #A0A000 } /* Name.Label */
.codehilite .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.codehilite .nt { color: #008000; font-weight: bold } /* Name.Tag */
.codehilite .nv { color: #19177C } /* Name.Variable */
.codehilite .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.codehilite .w { color: #bbbbbb } /* Text.Whitespace */
.codehilite .mb { color: #666666 } /* Literal.Number.Bin */
.codehilite .mf { color: #666666 } /* Literal.Number.Float */
.codehilite .mh { color: #666666 } /* Literal.Number.Hex */
.codehilite .mi { color: #666666 } /* Literal.Number.Integer */
.codehilite .mo { color: #666666 } /* Literal.Number.Oct */
.codehilite .sa { color: #BA2121 } /* Literal.String.Affix */
.codehilite .sb { color: #BA2121 } /* Literal.String.Backtick */
.codehilite .sc { color: #BA2121 } /* Literal.String.Char */
.codehilite .dl { color: #BA2121 } /* Literal.String.Delimiter */
.codehilite .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.codehilite .s2 { color: #BA2121 } /* Literal.String.Double */
.codehilite .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.codehilite .sh { color: #BA2121 } /* Literal.String.Heredoc */
.codehilite .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.codehilite .sx { color: #008000 } /* Literal.String.Other */
.codehilite .sr { color: #BB6688 } /* Literal.String.Regex */
.codehilite .s1 { color: #BA2121 } /* Literal.String.Single */
.codehilite .ss { color: #19177C } /* Literal.String.Symbol */
.codehilite .bp { color: #008000 } /* Name.Builtin.Pseudo */
.codehilite .fm { color: #0000FF } /* Name.Function.Magic */
.codehilite .vc { color: #19177C } /* Name.Variable.Class */
.codehilite .vg { color: #19177C } /* Name.Variable.Global */
.codehilite .vi { color: #19177C } /* Name.Variable.Instance */
.codehilite .vm { color: #19177C } /* Name.Variable.Magic */
.codehilite .il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<style type="text/css">
/* ==========================================================================
EXAMPLE Media Queries for Responsive Design.
These examples override the primary ('mobile first') styles.
Modify as content requires.
========================================================================== */
@media only screen and (min-width: 35em) {
/* Style adjustments for viewports that meet the condition */
}
@media print,
(-o-min-device-pixel-ratio: 5/4),
(-webkit-min-device-pixel-ratio: 1.25),
(min-resolution: 120dpi) {
/* Style adjustments for high resolution devices */
}
/* ==========================================================================
Print styles.
Inlined to avoid required HTTP connection: h5bp.com/r
========================================================================== */
@media print {
* {
background: transparent !important;
color: #000 !important; /* Black prints faster: h5bp.com/s */
box-shadow: none !important;
text-shadow: none !important;
}
a,
a:visited {
text-decoration: underline;
}
a[href]:after {
content: " (" attr(href) ")";
}
abbr[title]:after {
content: " (" attr(title) ")";
}
/*
* Don't show links for images, or javascript/internal links
*/
.ir a:after,
a[href^="javascript:"]:after,
a[href^="#"]:after {
content: "";
}
pre,
blockquote {
border: 1px solid #999;
page-break-inside: avoid;
}
thead {
display: table-header-group; /* h5bp.com/t */
}
tr,
img {
page-break-inside: avoid;
}
img {
max-width: 100% !important;
}
@page {
margin: 0.5cm;
}
p,
h2,
h3 {
orphans: 3;
widows: 3;
}
h2,
h3 {
page-break-after: avoid;
}
}
</style>
<script type="text/javascript">
function toggle(id, $link) {
$node = document.getElementById(id);
if (!$node)
return;
if (!$node.style.display || $node.style.display == 'none') {
$node.style.display = 'block';
$link.innerHTML = 'Hide source &nequiv;';
} else {
$node.style.display = 'none';
$link.innerHTML = 'Show source &equiv;';
}
}
</script>
</head>
<body>
<a href="#" id="top">Top</a>
<div id="container">
<div id="sidebar">
<h1>Index</h1>
<ul id="index">
<li class="set"><h3><a href="#header-variables">Module variables</a></h3>
<ul>
<li class="mono"><a href="#nexuscli.nexuscli.ISO_FORMAT">ISO_FORMAT</a></li>
<li class="mono"><a href="#nexuscli.nexuscli.session">session</a></li>
<li class="mono"><a href="#nexuscli.nexuscli.target">target</a></li>
</ul>
</li>
<li class="set"><h3><a href="#header-functions">Functions</a></h3>
<ul>
<li class="mono"><a href="#nexuscli.nexuscli.daily_difference_average">daily_difference_average</a></li>
<li class="mono"><a href="#nexuscli.nexuscli.dataset_list">dataset_list</a></li>
<li class="mono"><a href="#nexuscli.nexuscli.set_target">set_target</a></li>
<li class="mono"><a href="#nexuscli.nexuscli.subset">subset</a></li>
<li class="mono"><a href="#nexuscli.nexuscli.time_series">time_series</a></li>
</ul>
</li>
<li class="set"><h3><a href="#header-classes">Classes</a></h3>
<ul>
<li class="mono">
<span class="class_name"><a href="#nexuscli.nexuscli.Point">Point</a></span>
</li>
<li class="mono">
<span class="class_name"><a href="#nexuscli.nexuscli.TimeSeries">TimeSeries</a></span>
</li>
</ul>
</li>
</ul>
</div>
<article id="content">
<header id="section-intro">
<h1 class="title"><span class="name">nexuscli.nexuscli</span> module</h1>
<p>This module provides a native python client interface to the NEXUS (https://github.com/apache/incubator-sdap-nexus)
webservice API.</p>
<p>Usage:</p>
<div class="codehilite"><pre><span></span><span class="kn">import</span> <span class="nn">nexuscli</span>
<span class="n">nexuscli</span><span class="o">.</span><span class="n">set_target</span><span class="p">(</span><span class="s2">&quot;http://nexus-webapp:8083&quot;</span><span class="p">)</span>
<span class="n">nexuscli</span><span class="o">.</span><span class="n">dataset_list</span><span class="p">()</span>
</pre></div>
<p class="source_link"><a href="javascript:void(0);" onclick="toggle('source-nexuscli.nexuscli', this);">Show source &equiv;</a></p>
<div id="source-nexuscli.nexuscli" class="source">
<div class="codehilite"><pre><span></span><span class="c1"># Licensed to the Apache Software Foundation (ASF) under one or more</span>
<span class="c1"># contributor license agreements. See the NOTICE file distributed with</span>
<span class="c1"># this work for additional information regarding copyright ownership.</span>
<span class="c1"># The ASF licenses this file to You under the Apache License, Version 2.0</span>
<span class="c1"># (the &quot;License&quot;); you may not use this file except in compliance with</span>
<span class="c1"># the License. You may obtain a copy of the License at</span>
<span class="c1">#</span>
<span class="c1"># http://www.apache.org/licenses/LICENSE-2.0</span>
<span class="c1">#</span>
<span class="c1"># Unless required by applicable law or agreed to in writing, software</span>
<span class="c1"># distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
<span class="c1"># WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
<span class="c1"># See the License for the specific language governing permissions and</span>
<span class="c1"># limitations under the License.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">This module provides a native python client interface to the NEXUS (https://github.com/apache/incubator-sdap-nexus)</span>
<span class="sd">webservice API.</span>
<span class="sd">Usage:</span>
<span class="sd"> import nexuscli</span>
<span class="sd"> </span>
<span class="sd"> nexuscli.set_target(&quot;http://nexus-webapp:8083&quot;)</span>
<span class="sd"> nexuscli.dataset_list()</span>
<span class="sd"> </span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="kn">as</span> <span class="nn">np</span>
<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">namedtuple</span><span class="p">,</span> <span class="n">OrderedDict</span>
<span class="kn">from</span> <span class="nn">pytz</span> <span class="kn">import</span> <span class="n">UTC</span>
<span class="n">__pdoc__</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">TimeSeries</span> <span class="o">=</span> <span class="n">namedtuple</span><span class="p">(</span><span class="s1">&#39;TimeSeries&#39;</span><span class="p">,</span> <span class="p">(</span><span class="s1">&#39;dataset&#39;</span><span class="p">,</span> <span class="s1">&#39;time&#39;</span><span class="p">,</span> <span class="s1">&#39;mean&#39;</span><span class="p">,</span> <span class="s1">&#39;standard_deviation&#39;</span><span class="p">,</span> <span class="s1">&#39;count&#39;</span><span class="p">,</span> <span class="s1">&#39;minimum&#39;</span><span class="p">,</span> <span class="s1">&#39;maximum&#39;</span><span class="p">))</span>
<span class="n">TimeSeries</span><span class="o">.</span><span class="vm">__doc__</span> <span class="o">=</span> <span class="s1">&#39;&#39;&#39;</span><span class="se">\</span>
<span class="s1">An object containing Time Series arrays.</span>
<span class="s1">&#39;&#39;&#39;</span>
<span class="n">__pdoc__</span><span class="p">[</span><span class="s1">&#39;TimeSeries.dataset&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;Name of the Dataset&quot;</span>
<span class="n">__pdoc__</span><span class="p">[</span><span class="s1">&#39;TimeSeries.time&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;`numpy` array containing times as `datetime` objects&quot;</span>
<span class="n">__pdoc__</span><span class="p">[</span><span class="s1">&#39;TimeSeries.mean&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;`numpy` array containing means&quot;</span>
<span class="n">__pdoc__</span><span class="p">[</span><span class="s1">&#39;TimeSeries.standard_deviation&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;`numpy` array containing standard deviations&quot;</span>
<span class="n">__pdoc__</span><span class="p">[</span><span class="s1">&#39;TimeSeries.count&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;`numpy` array containing counts&quot;</span>
<span class="n">__pdoc__</span><span class="p">[</span><span class="s1">&#39;TimeSeries.minimum&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;`numpy` array containing minimums&quot;</span>
<span class="n">__pdoc__</span><span class="p">[</span><span class="s1">&#39;TimeSeries.maximum&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;`numpy` array containing maximums&quot;</span>
<span class="n">Point</span> <span class="o">=</span> <span class="n">namedtuple</span><span class="p">(</span><span class="s1">&#39;Point&#39;</span><span class="p">,</span> <span class="p">(</span><span class="s1">&#39;time&#39;</span><span class="p">,</span> <span class="s1">&#39;latitude&#39;</span><span class="p">,</span> <span class="s1">&#39;longitude&#39;</span><span class="p">,</span> <span class="s1">&#39;variable&#39;</span><span class="p">))</span>
<span class="n">Point</span><span class="o">.</span><span class="vm">__doc__</span> <span class="o">=</span> <span class="s1">&#39;&#39;&#39;</span><span class="se">\</span>
<span class="s1">An object containing Point attributes.</span>
<span class="s1">&#39;&#39;&#39;</span>
<span class="n">__pdoc__</span><span class="p">[</span><span class="s1">&#39;Point.time&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;time value as `datetime` object&quot;</span>
<span class="n">__pdoc__</span><span class="p">[</span><span class="s1">&#39;Point.latitude&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;latitude value&quot;</span>
<span class="n">__pdoc__</span><span class="p">[</span><span class="s1">&#39;Point.longitude&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;longitude value&quot;</span>
<span class="n">__pdoc__</span><span class="p">[</span><span class="s1">&#39;Point.variable&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;dictionary of variable values&quot;</span>
<span class="n">ISO_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">T%H:%M:%SZ&quot;</span>
<span class="n">target</span> <span class="o">=</span> <span class="s1">&#39;http://localhost:8083&#39;</span>
<span class="n">session</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">session</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">set_target</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">use_session</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Set the URL for the NEXUS webapp endpoint. </span>
<span class="sd"> </span>
<span class="sd"> __url__ URL for NEXUS webapp endpoint </span>
<span class="sd"> __return__ None</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">global</span> <span class="n">target</span>
<span class="n">target</span> <span class="o">=</span> <span class="n">url</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">use_session</span><span class="p">:</span>
<span class="k">global</span> <span class="n">session</span>
<span class="n">session</span> <span class="o">=</span> <span class="n">requests</span>
<span class="k">def</span> <span class="nf">dataset_list</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get a list of datasets and the start and end time for each.</span>
<span class="sd"> </span>
<span class="sd"> __return__ list of datasets. Each entry in the list contains `shortname`, `start`, and `end`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;{}/list&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">target</span><span class="p">))</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
<span class="n">list_response</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">dataset</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="n">dataset</span><span class="p">[</span><span class="s1">&#39;start&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">utcfromtimestamp</span><span class="p">(</span><span class="n">dataset</span><span class="p">[</span><span class="s1">&#39;start&#39;</span><span class="p">]</span> <span class="o">/</span> <span class="mi">1000</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">ISO_FORMAT</span><span class="p">)</span>
<span class="n">dataset</span><span class="p">[</span><span class="s1">&#39;end&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">utcfromtimestamp</span><span class="p">(</span><span class="n">dataset</span><span class="p">[</span><span class="s1">&#39;end&#39;</span><span class="p">]</span> <span class="o">/</span> <span class="mi">1000</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">ISO_FORMAT</span><span class="p">)</span>
<span class="n">ordered_dict</span> <span class="o">=</span> <span class="n">OrderedDict</span><span class="p">()</span>
<span class="n">ordered_dict</span><span class="p">[</span><span class="s1">&#39;shortName&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">dataset</span><span class="p">[</span><span class="s1">&#39;shortName&#39;</span><span class="p">]</span>
<span class="n">ordered_dict</span><span class="p">[</span><span class="s1">&#39;start&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">dataset</span><span class="p">[</span><span class="s1">&#39;start&#39;</span><span class="p">]</span>
<span class="n">ordered_dict</span><span class="p">[</span><span class="s1">&#39;end&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">dataset</span><span class="p">[</span><span class="s1">&#39;end&#39;</span><span class="p">]</span>
<span class="n">list_response</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ordered_dict</span><span class="p">)</span>
<span class="k">return</span> <span class="n">list_response</span>
<span class="k">def</span> <span class="nf">daily_difference_average</span><span class="p">(</span><span class="n">dataset</span><span class="p">,</span> <span class="n">bounding_box</span><span class="p">,</span> <span class="n">start_datetime</span><span class="p">,</span> <span class="n">end_datetime</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Generate an anomaly Time series for a given dataset, bounding box, and timeframe.</span>
<span class="sd"> </span>
<span class="sd"> __dataset__ Name of the dataset as a String </span>
<span class="sd"> __bounding_box__ Bounding box for area of interest as a `shapely.geometry.polygon.Polygon` </span>
<span class="sd"> __start_datetime__ Start time as a `datetime.datetime` </span>
<span class="sd"> __end_datetime__ End time as a `datetime.datetime` </span>
<span class="sd"> </span>
<span class="sd"> __return__ List of `nexuscli.nexuscli.TimeSeries` namedtuples</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">url</span> <span class="o">=</span> <span class="s2">&quot;{}/dailydifferenceaverage_spark?&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
<span class="n">params</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;dataset&#39;</span><span class="p">:</span> <span class="n">dataset</span><span class="p">,</span>
<span class="s1">&#39;climatology&#39;</span><span class="p">:</span> <span class="s2">&quot;{}_CLIM&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">dataset</span><span class="p">),</span>
<span class="s1">&#39;b&#39;</span><span class="p">:</span> <span class="s1">&#39;,&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">b</span><span class="p">)</span> <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">bounding_box</span><span class="o">.</span><span class="n">bounds</span><span class="p">),</span>
<span class="s1">&#39;startTime&#39;</span><span class="p">:</span> <span class="n">start_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="s1">&#39;endTime&#39;</span><span class="p">:</span> <span class="n">end_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="p">}</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">)</span>
<span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">response</span><span class="p">[</span><span class="s1">&#39;data&#39;</span><span class="p">])</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">&quot;No data found in {} between {} and {} for Datasets {}.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">bounding_box</span><span class="o">.</span><span class="n">wkt</span><span class="p">,</span>
<span class="n">start_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span>
<span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="n">end_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span>
<span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="n">dataset</span><span class="p">)</span>
<span class="n">time_series_result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">key_to_index</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">x</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">k</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())}</span>
<span class="n">time_series_data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="nb">tuple</span><span class="p">(</span><span class="n">each</span><span class="o">.</span><span class="n">values</span><span class="p">())</span> <span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="p">[</span><span class="n">entry</span> <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">data</span><span class="p">]])</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">time_series_data</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">time_series_result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">TimeSeries</span><span class="p">(</span>
<span class="n">dataset</span><span class="o">=</span><span class="n">dataset</span><span class="p">,</span>
<span class="n">time</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">datetime</span><span class="o">.</span><span class="n">utcfromtimestamp</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">tzinfo</span><span class="o">=</span><span class="n">UTC</span><span class="p">)</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span>
<span class="n">time_series_data</span><span class="p">[:,</span> <span class="n">key_to_index</span><span class="p">[</span><span class="s1">&#39;time&#39;</span><span class="p">]]]),</span>
<span class="n">mean</span><span class="o">=</span><span class="n">time_series_data</span><span class="p">[:,</span> <span class="n">key_to_index</span><span class="p">[</span><span class="s1">&#39;mean&#39;</span><span class="p">]],</span>
<span class="n">standard_deviation</span><span class="o">=</span><span class="n">time_series_data</span><span class="p">[:,</span> <span class="n">key_to_index</span><span class="p">[</span><span class="s1">&#39;std&#39;</span><span class="p">]],</span>
<span class="n">count</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
<span class="n">minimum</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
<span class="n">maximum</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">time_series_result</span>
<span class="k">def</span> <span class="nf">time_series</span><span class="p">(</span><span class="n">datasets</span><span class="p">,</span> <span class="n">bounding_box</span><span class="p">,</span> <span class="n">start_datetime</span><span class="p">,</span> <span class="n">end_datetime</span><span class="p">,</span> <span class="n">spark</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Send a request to NEXUS to calculate a time series.</span>
<span class="sd"> </span>
<span class="sd"> __datasets__ Sequence (max length 2) of the name of the dataset(s) </span>
<span class="sd"> __bounding_box__ Bounding box for area of interest as a `shapely.geometry.polygon.Polygon` </span>
<span class="sd"> __start_datetime__ Start time as a `datetime.datetime` </span>
<span class="sd"> __end_datetime__ End time as a `datetime.datetime` </span>
<span class="sd"> __spark__ Optionally use spark. Default: `False`</span>
<span class="sd"> </span>
<span class="sd"> __return__ List of `nexuscli.nexuscli.TimeSeries` namedtuples</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">datasets</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="n">datasets</span> <span class="o">=</span> <span class="p">[</span><span class="n">datasets</span><span class="p">]</span>
<span class="k">assert</span> <span class="mi">0</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">datasets</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">&quot;datasets must be a sequence of 1 or 2 items&quot;</span>
<span class="n">params</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;ds&#39;</span><span class="p">:</span> <span class="s1">&#39;,&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">datasets</span><span class="p">),</span>
<span class="s1">&#39;b&#39;</span><span class="p">:</span> <span class="s1">&#39;,&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">b</span><span class="p">)</span> <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">bounding_box</span><span class="o">.</span><span class="n">bounds</span><span class="p">),</span>
<span class="s1">&#39;startTime&#39;</span><span class="p">:</span> <span class="n">start_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="s1">&#39;endTime&#39;</span><span class="p">:</span> <span class="n">end_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="p">}</span>
<span class="k">if</span> <span class="n">spark</span><span class="p">:</span>
<span class="n">url</span> <span class="o">=</span> <span class="s2">&quot;{}/timeSeriesSpark?&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
<span class="n">params</span><span class="p">[</span><span class="s1">&#39;spark&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;mesos,16,32&quot;</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">url</span> <span class="o">=</span> <span class="s2">&quot;{}/stats?&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">)</span>
<span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">response</span><span class="p">[</span><span class="s1">&#39;data&#39;</span><span class="p">])</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">&quot;No data found in {} between {} and {} for Datasets {}.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">bounding_box</span><span class="o">.</span><span class="n">wkt</span><span class="p">,</span>
<span class="n">start_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span>
<span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="n">end_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span>
<span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="n">datasets</span><span class="p">)</span>
<span class="n">time_series_result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">response</span><span class="p">[</span><span class="s1">&#39;meta&#39;</span><span class="p">])):</span>
<span class="n">key_to_index</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">x</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">k</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())}</span>
<span class="n">time_series_data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="nb">tuple</span><span class="p">(</span><span class="n">each</span><span class="o">.</span><span class="n">values</span><span class="p">())</span> <span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="p">[</span><span class="n">entry</span> <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">data</span> <span class="k">if</span> <span class="n">entry</span><span class="p">[</span><span class="s1">&#39;ds&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="n">i</span><span class="p">]])</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">time_series_data</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">time_series_result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">TimeSeries</span><span class="p">(</span>
<span class="n">dataset</span><span class="o">=</span><span class="n">response</span><span class="p">[</span><span class="s1">&#39;meta&#39;</span><span class="p">][</span><span class="n">i</span><span class="p">][</span><span class="s1">&#39;shortName&#39;</span><span class="p">],</span>
<span class="n">time</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">datetime</span><span class="o">.</span><span class="n">utcfromtimestamp</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">tzinfo</span><span class="o">=</span><span class="n">UTC</span><span class="p">)</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span>
<span class="n">time_series_data</span><span class="p">[:,</span> <span class="n">key_to_index</span><span class="p">[</span><span class="s1">&#39;time&#39;</span><span class="p">]]]),</span>
<span class="n">mean</span><span class="o">=</span><span class="n">time_series_data</span><span class="p">[:,</span> <span class="n">key_to_index</span><span class="p">[</span><span class="s1">&#39;mean&#39;</span><span class="p">]],</span>
<span class="n">standard_deviation</span><span class="o">=</span><span class="n">time_series_data</span><span class="p">[:,</span> <span class="n">key_to_index</span><span class="p">[</span><span class="s1">&#39;std&#39;</span><span class="p">]],</span>
<span class="n">count</span><span class="o">=</span><span class="n">time_series_data</span><span class="p">[:,</span> <span class="n">key_to_index</span><span class="p">[</span><span class="s1">&#39;cnt&#39;</span><span class="p">]],</span>
<span class="n">minimum</span><span class="o">=</span><span class="n">time_series_data</span><span class="p">[:,</span> <span class="n">key_to_index</span><span class="p">[</span><span class="s1">&#39;min&#39;</span><span class="p">]],</span>
<span class="n">maximum</span><span class="o">=</span><span class="n">time_series_data</span><span class="p">[:,</span> <span class="n">key_to_index</span><span class="p">[</span><span class="s1">&#39;max&#39;</span><span class="p">]],</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">time_series_result</span>
<span class="k">def</span> <span class="nf">subset</span><span class="p">(</span><span class="n">dataset</span><span class="p">,</span> <span class="n">bounding_box</span><span class="p">,</span> <span class="n">start_datetime</span><span class="p">,</span> <span class="n">end_datetime</span><span class="p">,</span> <span class="n">parameter</span><span class="p">,</span> <span class="n">metadata_filter</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Fetches point values for a given dataset and geographical area or metadata criteria and time range.</span>
<span class="sd"> __dataset__ Name of the dataset as a String </span>
<span class="sd"> __bounding_box__ Bounding box for area of interest as a `shapely.geometry.polygon.Polygon` </span>
<span class="sd"> __start_datetime__ Start time as a `datetime.datetime` </span>
<span class="sd"> __end_datetime__ End time as a `datetime.datetime` </span>
<span class="sd"> __parameter__ The parameter of interest. One of &#39;sst&#39;, &#39;sss&#39;, &#39;wind&#39; or None </span>
<span class="sd"> __metadata_filter__ List of key:value String metadata criteria </span>
<span class="sd"> __return__ List of `nexuscli.nexuscli.Point` namedtuples</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">url</span> <span class="o">=</span> <span class="s2">&quot;{}/datainbounds?&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
<span class="n">params</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;ds&#39;</span><span class="p">:</span> <span class="n">dataset</span><span class="p">,</span>
<span class="s1">&#39;startTime&#39;</span><span class="p">:</span> <span class="n">start_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="s1">&#39;endTime&#39;</span><span class="p">:</span> <span class="n">end_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="s1">&#39;parameter&#39;</span><span class="p">:</span> <span class="n">parameter</span><span class="p">,</span>
<span class="p">}</span>
<span class="k">if</span> <span class="n">bounding_box</span><span class="p">:</span>
<span class="n">params</span><span class="p">[</span><span class="s1">&#39;b&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;,&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">b</span><span class="p">)</span> <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">bounding_box</span><span class="o">.</span><span class="n">bounds</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">metadata_filter</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">metadata_filter</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">params</span><span class="p">[</span><span class="s1">&#39;metadataFilter&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">metadata_filter</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">)</span>
<span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">response</span><span class="p">[</span><span class="s1">&#39;data&#39;</span><span class="p">])</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">&quot;No data found in {} between {} and {} for Datasets {}.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">bounding_box</span><span class="o">.</span><span class="n">wkt</span> <span class="k">if</span> <span class="n">bounding_box</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="k">else</span> <span class="n">metadata_filter</span><span class="p">,</span>
<span class="n">start_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span>
<span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="n">end_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span>
<span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="n">dataset</span><span class="p">)</span>
<span class="n">subset_result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="n">subset_result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">Point</span><span class="p">(</span>
<span class="n">time</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">utcfromtimestamp</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="s1">&#39;time&#39;</span><span class="p">])</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">tzinfo</span><span class="o">=</span><span class="n">UTC</span><span class="p">),</span>
<span class="n">longitude</span><span class="o">=</span><span class="n">d</span><span class="p">[</span><span class="s1">&#39;longitude&#39;</span><span class="p">],</span>
<span class="n">latitude</span><span class="o">=</span><span class="n">d</span><span class="p">[</span><span class="s1">&#39;latitude&#39;</span><span class="p">],</span>
<span class="n">variable</span><span class="o">=</span><span class="n">d</span><span class="p">[</span><span class="s1">&#39;data&#39;</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">subset_result</span>
</pre></div>
</div>
</header>
<section id="section-items">
<h2 class="section-title" id="header-variables">Module variables</h2>
<div class="item">
<p id="nexuscli.nexuscli.ISO_FORMAT" class="name">var <span class="ident">ISO_FORMAT</span></p>
<div class="source_cont">
</div>
</div>
<div class="item">
<p id="nexuscli.nexuscli.session" class="name">var <span class="ident">session</span></p>
<div class="source_cont">
</div>
</div>
<div class="item">
<p id="nexuscli.nexuscli.target" class="name">var <span class="ident">target</span></p>
<div class="source_cont">
</div>
</div>
<h2 class="section-title" id="header-functions">Functions</h2>
<div class="item">
<div class="name def" id="nexuscli.nexuscli.daily_difference_average">
<p>def <span class="ident">daily_difference_average</span>(</p><p>dataset, bounding_box, start_datetime, end_datetime)</p>
</div>
<div class="desc"><p>Generate an anomaly Time series for a given dataset, bounding box, and timeframe.</p>
<p><strong>dataset</strong> Name of the dataset as a String<br />
<strong>bounding_box</strong> Bounding box for area of interest as a <code>shapely.geometry.polygon.Polygon</code><br />
<strong>start_datetime</strong> Start time as a <code>datetime.datetime</code><br />
<strong>end_datetime</strong> End time as a <code>datetime.datetime</code> </p>
<p><strong>return</strong> List of <a href="#nexuscli.nexuscli.TimeSeries"><code>TimeSeries</code></a> namedtuples</p></div>
<div class="source_cont">
<p class="source_link"><a href="javascript:void(0);" onclick="toggle('source-nexuscli.nexuscli.daily_difference_average', this);">Show source &equiv;</a></p>
<div id="source-nexuscli.nexuscli.daily_difference_average" class="source">
<div class="codehilite"><pre><span></span><span class="k">def</span> <span class="nf">daily_difference_average</span><span class="p">(</span><span class="n">dataset</span><span class="p">,</span> <span class="n">bounding_box</span><span class="p">,</span> <span class="n">start_datetime</span><span class="p">,</span> <span class="n">end_datetime</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Generate an anomaly Time series for a given dataset, bounding box, and timeframe.</span>
<span class="sd"> </span>
<span class="sd"> __dataset__ Name of the dataset as a String </span>
<span class="sd"> __bounding_box__ Bounding box for area of interest as a `shapely.geometry.polygon.Polygon` </span>
<span class="sd"> __start_datetime__ Start time as a `datetime.datetime` </span>
<span class="sd"> __end_datetime__ End time as a `datetime.datetime` </span>
<span class="sd"> </span>
<span class="sd"> __return__ List of `nexuscli.nexuscli.TimeSeries` namedtuples</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">url</span> <span class="o">=</span> <span class="s2">&quot;{}/dailydifferenceaverage_spark?&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
<span class="n">params</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;dataset&#39;</span><span class="p">:</span> <span class="n">dataset</span><span class="p">,</span>
<span class="s1">&#39;climatology&#39;</span><span class="p">:</span> <span class="s2">&quot;{}_CLIM&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">dataset</span><span class="p">),</span>
<span class="s1">&#39;b&#39;</span><span class="p">:</span> <span class="s1">&#39;,&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">b</span><span class="p">)</span> <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">bounding_box</span><span class="o">.</span><span class="n">bounds</span><span class="p">),</span>
<span class="s1">&#39;startTime&#39;</span><span class="p">:</span> <span class="n">start_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="s1">&#39;endTime&#39;</span><span class="p">:</span> <span class="n">end_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="p">}</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">)</span>
<span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">response</span><span class="p">[</span><span class="s1">&#39;data&#39;</span><span class="p">])</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">&quot;No data found in {} between {} and {} for Datasets {}.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">bounding_box</span><span class="o">.</span><span class="n">wkt</span><span class="p">,</span>
<span class="n">start_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span>
<span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="n">end_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span>
<span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="n">dataset</span><span class="p">)</span>
<span class="n">time_series_result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">key_to_index</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">x</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">k</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())}</span>
<span class="n">time_series_data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="nb">tuple</span><span class="p">(</span><span class="n">each</span><span class="o">.</span><span class="n">values</span><span class="p">())</span> <span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="p">[</span><span class="n">entry</span> <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">data</span><span class="p">]])</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">time_series_data</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">time_series_result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">TimeSeries</span><span class="p">(</span>
<span class="n">dataset</span><span class="o">=</span><span class="n">dataset</span><span class="p">,</span>
<span class="n">time</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">datetime</span><span class="o">.</span><span class="n">utcfromtimestamp</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">tzinfo</span><span class="o">=</span><span class="n">UTC</span><span class="p">)</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span>
<span class="n">time_series_data</span><span class="p">[:,</span> <span class="n">key_to_index</span><span class="p">[</span><span class="s1">&#39;time&#39;</span><span class="p">]]]),</span>
<span class="n">mean</span><span class="o">=</span><span class="n">time_series_data</span><span class="p">[:,</span> <span class="n">key_to_index</span><span class="p">[</span><span class="s1">&#39;mean&#39;</span><span class="p">]],</span>
<span class="n">standard_deviation</span><span class="o">=</span><span class="n">time_series_data</span><span class="p">[:,</span> <span class="n">key_to_index</span><span class="p">[</span><span class="s1">&#39;std&#39;</span><span class="p">]],</span>
<span class="n">count</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
<span class="n">minimum</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
<span class="n">maximum</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">time_series_result</span>
</pre></div>
</div>
</div>
</div>
<div class="item">
<div class="name def" id="nexuscli.nexuscli.dataset_list">
<p>def <span class="ident">dataset_list</span>(</p><p>)</p>
</div>
<div class="desc"><p>Get a list of datasets and the start and end time for each.</p>
<p><strong>return</strong> list of datasets. Each entry in the list contains <code>shortname</code>, <code>start</code>, and <code>end</code></p></div>
<div class="source_cont">
<p class="source_link"><a href="javascript:void(0);" onclick="toggle('source-nexuscli.nexuscli.dataset_list', this);">Show source &equiv;</a></p>
<div id="source-nexuscli.nexuscli.dataset_list" class="source">
<div class="codehilite"><pre><span></span><span class="k">def</span> <span class="nf">dataset_list</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get a list of datasets and the start and end time for each.</span>
<span class="sd"> </span>
<span class="sd"> __return__ list of datasets. Each entry in the list contains `shortname`, `start`, and `end`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;{}/list&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">target</span><span class="p">))</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
<span class="n">list_response</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">dataset</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="n">dataset</span><span class="p">[</span><span class="s1">&#39;start&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">utcfromtimestamp</span><span class="p">(</span><span class="n">dataset</span><span class="p">[</span><span class="s1">&#39;start&#39;</span><span class="p">]</span> <span class="o">/</span> <span class="mi">1000</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">ISO_FORMAT</span><span class="p">)</span>
<span class="n">dataset</span><span class="p">[</span><span class="s1">&#39;end&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">utcfromtimestamp</span><span class="p">(</span><span class="n">dataset</span><span class="p">[</span><span class="s1">&#39;end&#39;</span><span class="p">]</span> <span class="o">/</span> <span class="mi">1000</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">ISO_FORMAT</span><span class="p">)</span>
<span class="n">ordered_dict</span> <span class="o">=</span> <span class="n">OrderedDict</span><span class="p">()</span>
<span class="n">ordered_dict</span><span class="p">[</span><span class="s1">&#39;shortName&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">dataset</span><span class="p">[</span><span class="s1">&#39;shortName&#39;</span><span class="p">]</span>
<span class="n">ordered_dict</span><span class="p">[</span><span class="s1">&#39;start&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">dataset</span><span class="p">[</span><span class="s1">&#39;start&#39;</span><span class="p">]</span>
<span class="n">ordered_dict</span><span class="p">[</span><span class="s1">&#39;end&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">dataset</span><span class="p">[</span><span class="s1">&#39;end&#39;</span><span class="p">]</span>
<span class="n">list_response</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ordered_dict</span><span class="p">)</span>
<span class="k">return</span> <span class="n">list_response</span>
</pre></div>
</div>
</div>
</div>
<div class="item">
<div class="name def" id="nexuscli.nexuscli.set_target">
<p>def <span class="ident">set_target</span>(</p><p>url, use_session=True)</p>
</div>
<div class="desc"><p>Set the URL for the NEXUS webapp endpoint. </p>
<p><strong>url</strong> URL for NEXUS webapp endpoint <br />
<strong>return</strong> None</p></div>
<div class="source_cont">
<p class="source_link"><a href="javascript:void(0);" onclick="toggle('source-nexuscli.nexuscli.set_target', this);">Show source &equiv;</a></p>
<div id="source-nexuscli.nexuscli.set_target" class="source">
<div class="codehilite"><pre><span></span><span class="k">def</span> <span class="nf">set_target</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">use_session</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Set the URL for the NEXUS webapp endpoint. </span>
<span class="sd"> </span>
<span class="sd"> __url__ URL for NEXUS webapp endpoint </span>
<span class="sd"> __return__ None</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">global</span> <span class="n">target</span>
<span class="n">target</span> <span class="o">=</span> <span class="n">url</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">use_session</span><span class="p">:</span>
<span class="k">global</span> <span class="n">session</span>
<span class="n">session</span> <span class="o">=</span> <span class="n">requests</span>
</pre></div>
</div>
</div>
</div>
<div class="item">
<div class="name def" id="nexuscli.nexuscli.subset">
<p>def <span class="ident">subset</span>(</p><p>dataset, bounding_box, start_datetime, end_datetime, parameter, metadata_filter)</p>
</div>
<div class="desc"><p>Fetches point values for a given dataset and geographical area or metadata criteria and time range.</p>
<p><strong>dataset</strong> Name of the dataset as a String<br />
<strong>bounding_box</strong> Bounding box for area of interest as a <code>shapely.geometry.polygon.Polygon</code><br />
<strong>start_datetime</strong> Start time as a <code>datetime.datetime</code><br />
<strong>end_datetime</strong> End time as a <code>datetime.datetime</code><br />
<strong>parameter</strong> The parameter of interest. One of 'sst', 'sss', 'wind' or None<br />
<strong>metadata_filter</strong> List of key:value String metadata criteria </p>
<p><strong>return</strong> List of <a href="#nexuscli.nexuscli.Point"><code>Point</code></a> namedtuples</p></div>
<div class="source_cont">
<p class="source_link"><a href="javascript:void(0);" onclick="toggle('source-nexuscli.nexuscli.subset', this);">Show source &equiv;</a></p>
<div id="source-nexuscli.nexuscli.subset" class="source">
<div class="codehilite"><pre><span></span><span class="k">def</span> <span class="nf">subset</span><span class="p">(</span><span class="n">dataset</span><span class="p">,</span> <span class="n">bounding_box</span><span class="p">,</span> <span class="n">start_datetime</span><span class="p">,</span> <span class="n">end_datetime</span><span class="p">,</span> <span class="n">parameter</span><span class="p">,</span> <span class="n">metadata_filter</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Fetches point values for a given dataset and geographical area or metadata criteria and time range.</span>
<span class="sd"> __dataset__ Name of the dataset as a String </span>
<span class="sd"> __bounding_box__ Bounding box for area of interest as a `shapely.geometry.polygon.Polygon` </span>
<span class="sd"> __start_datetime__ Start time as a `datetime.datetime` </span>
<span class="sd"> __end_datetime__ End time as a `datetime.datetime` </span>
<span class="sd"> __parameter__ The parameter of interest. One of &#39;sst&#39;, &#39;sss&#39;, &#39;wind&#39; or None </span>
<span class="sd"> __metadata_filter__ List of key:value String metadata criteria </span>
<span class="sd"> __return__ List of `nexuscli.nexuscli.Point` namedtuples</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">url</span> <span class="o">=</span> <span class="s2">&quot;{}/datainbounds?&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
<span class="n">params</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;ds&#39;</span><span class="p">:</span> <span class="n">dataset</span><span class="p">,</span>
<span class="s1">&#39;startTime&#39;</span><span class="p">:</span> <span class="n">start_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="s1">&#39;endTime&#39;</span><span class="p">:</span> <span class="n">end_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="s1">&#39;parameter&#39;</span><span class="p">:</span> <span class="n">parameter</span><span class="p">,</span>
<span class="p">}</span>
<span class="k">if</span> <span class="n">bounding_box</span><span class="p">:</span>
<span class="n">params</span><span class="p">[</span><span class="s1">&#39;b&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;,&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">b</span><span class="p">)</span> <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">bounding_box</span><span class="o">.</span><span class="n">bounds</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">metadata_filter</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">metadata_filter</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">params</span><span class="p">[</span><span class="s1">&#39;metadataFilter&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">metadata_filter</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">)</span>
<span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">response</span><span class="p">[</span><span class="s1">&#39;data&#39;</span><span class="p">])</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">&quot;No data found in {} between {} and {} for Datasets {}.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">bounding_box</span><span class="o">.</span><span class="n">wkt</span> <span class="k">if</span> <span class="n">bounding_box</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="k">else</span> <span class="n">metadata_filter</span><span class="p">,</span>
<span class="n">start_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span>
<span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="n">end_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span>
<span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="n">dataset</span><span class="p">)</span>
<span class="n">subset_result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="n">subset_result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">Point</span><span class="p">(</span>
<span class="n">time</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">utcfromtimestamp</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="s1">&#39;time&#39;</span><span class="p">])</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">tzinfo</span><span class="o">=</span><span class="n">UTC</span><span class="p">),</span>
<span class="n">longitude</span><span class="o">=</span><span class="n">d</span><span class="p">[</span><span class="s1">&#39;longitude&#39;</span><span class="p">],</span>
<span class="n">latitude</span><span class="o">=</span><span class="n">d</span><span class="p">[</span><span class="s1">&#39;latitude&#39;</span><span class="p">],</span>
<span class="n">variable</span><span class="o">=</span><span class="n">d</span><span class="p">[</span><span class="s1">&#39;data&#39;</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">subset_result</span>
</pre></div>
</div>
</div>
</div>
<div class="item">
<div class="name def" id="nexuscli.nexuscli.time_series">
<p>def <span class="ident">time_series</span>(</p><p>datasets, bounding_box, start_datetime, end_datetime, spark=False)</p>
</div>
<div class="desc"><p>Send a request to NEXUS to calculate a time series.</p>
<p><strong>datasets</strong> Sequence (max length 2) of the name of the dataset(s)<br />
<strong>bounding_box</strong> Bounding box for area of interest as a <code>shapely.geometry.polygon.Polygon</code><br />
<strong>start_datetime</strong> Start time as a <code>datetime.datetime</code><br />
<strong>end_datetime</strong> End time as a <code>datetime.datetime</code><br />
<strong>spark</strong> Optionally use spark. Default: <code>False</code></p>
<p><strong>return</strong> List of <a href="#nexuscli.nexuscli.TimeSeries"><code>TimeSeries</code></a> namedtuples</p></div>
<div class="source_cont">
<p class="source_link"><a href="javascript:void(0);" onclick="toggle('source-nexuscli.nexuscli.time_series', this);">Show source &equiv;</a></p>
<div id="source-nexuscli.nexuscli.time_series" class="source">
<div class="codehilite"><pre><span></span><span class="k">def</span> <span class="nf">time_series</span><span class="p">(</span><span class="n">datasets</span><span class="p">,</span> <span class="n">bounding_box</span><span class="p">,</span> <span class="n">start_datetime</span><span class="p">,</span> <span class="n">end_datetime</span><span class="p">,</span> <span class="n">spark</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Send a request to NEXUS to calculate a time series.</span>
<span class="sd"> </span>
<span class="sd"> __datasets__ Sequence (max length 2) of the name of the dataset(s) </span>
<span class="sd"> __bounding_box__ Bounding box for area of interest as a `shapely.geometry.polygon.Polygon` </span>
<span class="sd"> __start_datetime__ Start time as a `datetime.datetime` </span>
<span class="sd"> __end_datetime__ End time as a `datetime.datetime` </span>
<span class="sd"> __spark__ Optionally use spark. Default: `False`</span>
<span class="sd"> </span>
<span class="sd"> __return__ List of `nexuscli.nexuscli.TimeSeries` namedtuples</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">datasets</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="n">datasets</span> <span class="o">=</span> <span class="p">[</span><span class="n">datasets</span><span class="p">]</span>
<span class="k">assert</span> <span class="mi">0</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">datasets</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">&quot;datasets must be a sequence of 1 or 2 items&quot;</span>
<span class="n">params</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;ds&#39;</span><span class="p">:</span> <span class="s1">&#39;,&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">datasets</span><span class="p">),</span>
<span class="s1">&#39;b&#39;</span><span class="p">:</span> <span class="s1">&#39;,&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">b</span><span class="p">)</span> <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">bounding_box</span><span class="o">.</span><span class="n">bounds</span><span class="p">),</span>
<span class="s1">&#39;startTime&#39;</span><span class="p">:</span> <span class="n">start_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="s1">&#39;endTime&#39;</span><span class="p">:</span> <span class="n">end_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="p">}</span>
<span class="k">if</span> <span class="n">spark</span><span class="p">:</span>
<span class="n">url</span> <span class="o">=</span> <span class="s2">&quot;{}/timeSeriesSpark?&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
<span class="n">params</span><span class="p">[</span><span class="s1">&#39;spark&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;mesos,16,32&quot;</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">url</span> <span class="o">=</span> <span class="s2">&quot;{}/stats?&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">)</span>
<span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">response</span><span class="p">[</span><span class="s1">&#39;data&#39;</span><span class="p">])</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">&quot;No data found in {} between {} and {} for Datasets {}.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">bounding_box</span><span class="o">.</span><span class="n">wkt</span><span class="p">,</span>
<span class="n">start_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span>
<span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="n">end_datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span>
<span class="n">ISO_FORMAT</span><span class="p">),</span>
<span class="n">datasets</span><span class="p">)</span>
<span class="n">time_series_result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">response</span><span class="p">[</span><span class="s1">&#39;meta&#39;</span><span class="p">])):</span>
<span class="n">key_to_index</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">x</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">k</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())}</span>
<span class="n">time_series_data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="nb">tuple</span><span class="p">(</span><span class="n">each</span><span class="o">.</span><span class="n">values</span><span class="p">())</span> <span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="p">[</span><span class="n">entry</span> <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">data</span> <span class="k">if</span> <span class="n">entry</span><span class="p">[</span><span class="s1">&#39;ds&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="n">i</span><span class="p">]])</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">time_series_data</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">time_series_result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">TimeSeries</span><span class="p">(</span>
<span class="n">dataset</span><span class="o">=</span><span class="n">response</span><span class="p">[</span><span class="s1">&#39;meta&#39;</span><span class="p">][</span><span class="n">i</span><span class="p">][</span><span class="s1">&#39;shortName&#39;</span><span class="p">],</span>
<span class="n">time</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">datetime</span><span class="o">.</span><span class="n">utcfromtimestamp</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">tzinfo</span><span class="o">=</span><span class="n">UTC</span><span class="p">)</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span>
<span class="n">time_series_data</span><span class="p">[:,</span> <span class="n">key_to_index</span><span class="p">[</span><span class="s1">&#39;time&#39;</span><span class="p">]]]),</span>
<span class="n">mean</span><span class="o">=</span><span class="n">time_series_data</span><span class="p">[:,</span> <span class="n">key_to_index</span><span class="p">[</span><span class="s1">&#39;mean&#39;</span><span class="p">]],</span>
<span class="n">standard_deviation</span><span class="o">=</span><span class="n">time_series_data</span><span class="p">[:,</span> <span class="n">key_to_index</span><span class="p">[</span><span class="s1">&#39;std&#39;</span><span class="p">]],</span>
<span class="n">count</span><span class="o">=</span><span class="n">time_series_data</span><span class="p">[:,</span> <span class="n">key_to_index</span><span class="p">[</span><span class="s1">&#39;cnt&#39;</span><span class="p">]],</span>
<span class="n">minimum</span><span class="o">=</span><span class="n">time_series_data</span><span class="p">[:,</span> <span class="n">key_to_index</span><span class="p">[</span><span class="s1">&#39;min&#39;</span><span class="p">]],</span>
<span class="n">maximum</span><span class="o">=</span><span class="n">time_series_data</span><span class="p">[:,</span> <span class="n">key_to_index</span><span class="p">[</span><span class="s1">&#39;max&#39;</span><span class="p">]],</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">time_series_result</span>
</pre></div>
</div>
</div>
</div>
<h2 class="section-title" id="header-classes">Classes</h2>
<div class="item">
<p id="nexuscli.nexuscli.Point" class="name">class <span class="ident">Point</span></p>
<div class="desc"><p>An object containing Point attributes.</p></div>
<div class="source_cont">
</div>
<div class="class">
<h3>Ancestors (in MRO)</h3>
<ul class="class_list">
<li><a href="#nexuscli.nexuscli.Point">Point</a></li>
<li>builtins.tuple</li>
<li>builtins.object</li>
</ul>
<h3>Instance variables</h3>
<div class="item">
<p id="nexuscli.nexuscli.Point.latitude" class="name">var <span class="ident">latitude</span></p>
<div class="desc"><p>latitude value</p></div>
<div class="source_cont">
</div>
</div>
<div class="item">
<p id="nexuscli.nexuscli.Point.longitude" class="name">var <span class="ident">longitude</span></p>
<div class="desc"><p>longitude value</p></div>
<div class="source_cont">
</div>
</div>
<div class="item">
<p id="nexuscli.nexuscli.Point.time" class="name">var <span class="ident">time</span></p>
<div class="desc"><p>time value as <code>datetime</code> object</p></div>
<div class="source_cont">
</div>
</div>
<div class="item">
<p id="nexuscli.nexuscli.Point.variable" class="name">var <span class="ident">variable</span></p>
<div class="desc"><p>dictionary of variable values</p></div>
<div class="source_cont">
</div>
</div>
</div>
</div>
<div class="item">
<p id="nexuscli.nexuscli.TimeSeries" class="name">class <span class="ident">TimeSeries</span></p>
<div class="desc"><p>An object containing Time Series arrays.</p></div>
<div class="source_cont">
</div>
<div class="class">
<h3>Ancestors (in MRO)</h3>
<ul class="class_list">
<li><a href="#nexuscli.nexuscli.TimeSeries">TimeSeries</a></li>
<li>builtins.tuple</li>
<li>builtins.object</li>
</ul>
<h3>Instance variables</h3>
<div class="item">
<p id="nexuscli.nexuscli.TimeSeries.count" class="name">var <span class="ident">count</span></p>
<div class="desc"><p><code>numpy</code> array containing counts</p></div>
<div class="source_cont">
</div>
</div>
<div class="item">
<p id="nexuscli.nexuscli.TimeSeries.dataset" class="name">var <span class="ident">dataset</span></p>
<div class="desc"><p>Name of the Dataset</p></div>
<div class="source_cont">
</div>
</div>
<div class="item">
<p id="nexuscli.nexuscli.TimeSeries.maximum" class="name">var <span class="ident">maximum</span></p>
<div class="desc"><p><code>numpy</code> array containing maximums</p></div>
<div class="source_cont">
</div>
</div>
<div class="item">
<p id="nexuscli.nexuscli.TimeSeries.mean" class="name">var <span class="ident">mean</span></p>
<div class="desc"><p><code>numpy</code> array containing means</p></div>
<div class="source_cont">
</div>
</div>
<div class="item">
<p id="nexuscli.nexuscli.TimeSeries.minimum" class="name">var <span class="ident">minimum</span></p>
<div class="desc"><p><code>numpy</code> array containing minimums</p></div>
<div class="source_cont">
</div>
</div>
<div class="item">
<p id="nexuscli.nexuscli.TimeSeries.standard_deviation" class="name">var <span class="ident">standard_deviation</span></p>
<div class="desc"><p><code>numpy</code> array containing standard deviations</p></div>
<div class="source_cont">
</div>
</div>
<div class="item">
<p id="nexuscli.nexuscli.TimeSeries.time" class="name">var <span class="ident">time</span></p>
<div class="desc"><p><code>numpy</code> array containing times as <code>datetime</code> objects</p></div>
<div class="source_cont">
</div>
</div>
</div>
</div>
</section>
</article>
<div class="clear"> </div>
<footer id="footer">
<p>
Documentation generated by
<a href="https://github.com/BurntSushi/pdoc">pdoc 0.3.2</a>
</p>
<p>pdoc is in the public domain with the
<a href="http://unlicense.org">UNLICENSE</a></p>
<p>Design by <a href="http://nadh.in">Kailash Nadh</a></p>
</footer>
</div>
</body>
</html>