blob: 2323155d8766ffc54a45e68728dfc2f567a55178 [file] [log] [blame]
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="generator" content="pdoc 12.3.1"/>
<title>python.teaclave API documentation</title>
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
<style>/*! syntax-highlighting.css */pre{line-height:125%;}span.linenos{color:inherit; background-color:transparent; padding-left:5px; padding-right:20px;}.pdoc-code .hll{background-color:#ffffcc}.pdoc-code{background:#f8f8f8;}.pdoc-code .c{color:#3D7B7B; font-style:italic}.pdoc-code .err{border:1px solid #FF0000}.pdoc-code .k{color:#008000; font-weight:bold}.pdoc-code .o{color:#666666}.pdoc-code .ch{color:#3D7B7B; font-style:italic}.pdoc-code .cm{color:#3D7B7B; font-style:italic}.pdoc-code .cp{color:#9C6500}.pdoc-code .cpf{color:#3D7B7B; font-style:italic}.pdoc-code .c1{color:#3D7B7B; font-style:italic}.pdoc-code .cs{color:#3D7B7B; font-style:italic}.pdoc-code .gd{color:#A00000}.pdoc-code .ge{font-style:italic}.pdoc-code .gr{color:#E40000}.pdoc-code .gh{color:#000080; font-weight:bold}.pdoc-code .gi{color:#008400}.pdoc-code .go{color:#717171}.pdoc-code .gp{color:#000080; font-weight:bold}.pdoc-code .gs{font-weight:bold}.pdoc-code .gu{color:#800080; font-weight:bold}.pdoc-code .gt{color:#0044DD}.pdoc-code .kc{color:#008000; font-weight:bold}.pdoc-code .kd{color:#008000; font-weight:bold}.pdoc-code .kn{color:#008000; font-weight:bold}.pdoc-code .kp{color:#008000}.pdoc-code .kr{color:#008000; font-weight:bold}.pdoc-code .kt{color:#B00040}.pdoc-code .m{color:#666666}.pdoc-code .s{color:#BA2121}.pdoc-code .na{color:#687822}.pdoc-code .nb{color:#008000}.pdoc-code .nc{color:#0000FF; font-weight:bold}.pdoc-code .no{color:#880000}.pdoc-code .nd{color:#AA22FF}.pdoc-code .ni{color:#717171; font-weight:bold}.pdoc-code .ne{color:#CB3F38; font-weight:bold}.pdoc-code .nf{color:#0000FF}.pdoc-code .nl{color:#767600}.pdoc-code .nn{color:#0000FF; font-weight:bold}.pdoc-code .nt{color:#008000; font-weight:bold}.pdoc-code .nv{color:#19177C}.pdoc-code .ow{color:#AA22FF; font-weight:bold}.pdoc-code .w{color:#bbbbbb}.pdoc-code .mb{color:#666666}.pdoc-code .mf{color:#666666}.pdoc-code .mh{color:#666666}.pdoc-code .mi{color:#666666}.pdoc-code .mo{color:#666666}.pdoc-code .sa{color:#BA2121}.pdoc-code .sb{color:#BA2121}.pdoc-code .sc{color:#BA2121}.pdoc-code .dl{color:#BA2121}.pdoc-code .sd{color:#BA2121; font-style:italic}.pdoc-code .s2{color:#BA2121}.pdoc-code .se{color:#AA5D1F; font-weight:bold}.pdoc-code .sh{color:#BA2121}.pdoc-code .si{color:#A45A77; font-weight:bold}.pdoc-code .sx{color:#008000}.pdoc-code .sr{color:#A45A77}.pdoc-code .s1{color:#BA2121}.pdoc-code .ss{color:#19177C}.pdoc-code .bp{color:#008000}.pdoc-code .fm{color:#0000FF}.pdoc-code .vc{color:#19177C}.pdoc-code .vg{color:#19177C}.pdoc-code .vi{color:#19177C}.pdoc-code .vm{color:#19177C}.pdoc-code .il{color:#666666}</style>
<style>/*! theme.css */:root{--pdoc-background:#fff;}.pdoc{--text:#212529;--muted:#6c757d;--link:#3660a5;--link-hover:#1659c5;--code:#f8f8f8;--active:#fff598;--accent:#eee;--accent2:#c1c1c1;--nav-hover:rgba(255, 255, 255, 0.5);--name:#0066BB;--def:#008800;--annotation:#007020;}</style>
<style>/*! layout.css */html, body{width:100%;height:100%;}html, main{scroll-behavior:smooth;}body{background-color:var(--pdoc-background);}@media (max-width:769px){#navtoggle{cursor:pointer;position:absolute;width:50px;height:40px;top:1rem;right:1rem;border-color:var(--text);color:var(--text);display:flex;opacity:0.8;}#navtoggle:hover{opacity:1;}#togglestate + div{display:none;}#togglestate:checked + div{display:inherit;}main, header{padding:2rem 3vw;}header + main{margin-top:-3rem;}.git-button{display:none !important;}nav input[type="search"]{max-width:77%;}nav input[type="search"]:first-child{margin-top:-6px;}nav input[type="search"]:valid ~ *{display:none !important;}}@media (min-width:770px){:root{--sidebar-width:clamp(12.5rem, 28vw, 22rem);}nav{position:fixed;overflow:auto;height:100vh;width:var(--sidebar-width);}main, header{padding:3rem 2rem 3rem calc(var(--sidebar-width) + 3rem);width:calc(54rem + var(--sidebar-width));max-width:100%;}header + main{margin-top:-4rem;}#navtoggle{display:none;}}#togglestate{position:absolute;height:0;opacity:0;}nav.pdoc{--pad:clamp(0.5rem, 2vw, 1.75rem);--indent:1.5rem;background-color:var(--accent);border-right:1px solid var(--accent2);box-shadow:0 0 20px rgba(50, 50, 50, .2) inset;padding:0 0 0 var(--pad);overflow-wrap:anywhere;scrollbar-width:thin; scrollbar-color:var(--accent2) transparent }nav.pdoc::-webkit-scrollbar{width:.4rem; }nav.pdoc::-webkit-scrollbar-thumb{background-color:var(--accent2); }nav.pdoc > div{padding:var(--pad) 0;}nav.pdoc .module-list-button{display:inline-flex;align-items:center;color:var(--text);border-color:var(--muted);margin-bottom:1rem;}nav.pdoc .module-list-button:hover{border-color:var(--text);}nav.pdoc input[type=search]{display:block;outline-offset:0;width:calc(100% - var(--pad));}nav.pdoc .logo{max-width:calc(100% - var(--pad));max-height:35vh;display:block;margin:0 auto 1rem;transform:translate(calc(-.5 * var(--pad)), 0);}nav.pdoc ul{list-style:none;padding-left:0;}nav.pdoc > div > ul{margin-left:calc(0px - var(--pad));}nav.pdoc li a{padding:.2rem 0 .2rem calc(var(--pad) + var(--indent));}nav.pdoc > div > ul > li > a{padding-left:var(--pad);}nav.pdoc li{transition:all 100ms;}nav.pdoc li:hover{background-color:var(--nav-hover);}nav.pdoc a, nav.pdoc a:hover{color:var(--text);}nav.pdoc a{display:block;}nav.pdoc > h2:first-of-type{margin-top:1.5rem;}nav.pdoc .class:before{content:"class ";color:var(--muted);}nav.pdoc .function:after{content:"()";color:var(--muted);}nav.pdoc footer:before{content:"";display:block;width:calc(100% - var(--pad));border-top:solid var(--accent2) 1px;margin-top:1.5rem;padding-top:.5rem;}nav.pdoc footer{font-size:small;}</style>
<style>/*! content.css */.pdoc{color:var(--text);box-sizing:border-box;line-height:1.5;background:none;}.pdoc .pdoc-button{display:inline-block;border:solid black 1px;border-radius:2px;font-size:.75rem;padding:calc(0.5em - 1px) 1em;transition:100ms all;}.pdoc .pdoc-alert{padding:1rem 1rem 1rem calc(1.5rem + 24px);border:1px solid transparent;border-radius:.25rem;background-repeat:no-repeat;background-position:1rem center;margin-bottom:1rem;}.pdoc .pdoc-alert > *:last-child{margin-bottom:0;}.pdoc .pdoc-alert-note {color:#084298;background-color:#cfe2ff;border-color:#b6d4fe;background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22%23084298%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20d%3D%22M8%2016A8%208%200%201%200%208%200a8%208%200%200%200%200%2016zm.93-9.412-1%204.705c-.07.34.029.533.304.533.194%200%20.487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703%200-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381%202.29-.287zM8%205.5a1%201%200%201%201%200-2%201%201%200%200%201%200%202z%22/%3E%3C/svg%3E");}.pdoc .pdoc-alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5;background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22%23664d03%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20d%3D%22M8.982%201.566a1.13%201.13%200%200%200-1.96%200L.165%2013.233c-.457.778.091%201.767.98%201.767h13.713c.889%200%201.438-.99.98-1.767L8.982%201.566zM8%205c.535%200%20.954.462.9.995l-.35%203.507a.552.552%200%200%201-1.1%200L7.1%205.995A.905.905%200%200%201%208%205zm.002%206a1%201%200%201%201%200%202%201%201%200%200%201%200-2z%22/%3E%3C/svg%3E");}.pdoc .pdoc-alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7;background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22%23842029%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20d%3D%22M5.52.359A.5.5%200%200%201%206%200h4a.5.5%200%200%201%20.474.658L8.694%206H12.5a.5.5%200%200%201%20.395.807l-7%209a.5.5%200%200%201-.873-.454L6.823%209.5H3.5a.5.5%200%200%201-.48-.641l2.5-8.5z%22/%3E%3C/svg%3E");}.pdoc .visually-hidden{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important;}.pdoc h1, .pdoc h2, .pdoc h3{font-weight:300;margin:.3em 0;padding:.2em 0;}.pdoc > section:not(.module-info) h1{font-size:1.5rem;font-weight:500;}.pdoc > section:not(.module-info) h2{font-size:1.4rem;font-weight:500;}.pdoc > section:not(.module-info) h3{font-size:1.3rem;font-weight:500;}.pdoc > section:not(.module-info) h4{font-size:1.2rem;}.pdoc > section:not(.module-info) h5{font-size:1.1rem;}.pdoc a{text-decoration:none;color:var(--link);}.pdoc a:hover{color:var(--link-hover);}.pdoc blockquote{margin-left:2rem;}.pdoc pre{border-top:1px solid var(--accent2);border-bottom:1px solid var(--accent2);margin-top:0;margin-bottom:1em;padding:.5rem 0 .5rem .5rem;overflow-x:auto;background-color:var(--code);}.pdoc code{color:var(--text);padding:.2em .4em;margin:0;font-size:85%;background-color:var(--code);border-radius:6px;}.pdoc a > code{color:inherit;}.pdoc pre > code{display:inline-block;font-size:inherit;background:none;border:none;padding:0;}.pdoc > section:not(.module-info){margin-bottom:1.5rem;}.pdoc .modulename{margin-top:0;font-weight:bold;}.pdoc .modulename a{color:var(--link);transition:100ms all;}.pdoc .git-button{float:right;border:solid var(--link) 1px;}.pdoc .git-button:hover{background-color:var(--link);color:var(--pdoc-background);}.view-source-toggle-state,.view-source-toggle-state ~ .pdoc-code{display:none;}.view-source-toggle-state:checked ~ .pdoc-code{display:block;}.view-source-button{display:inline-block;float:right;font-size:.75rem;line-height:1.5rem;color:var(--muted);padding:0 .4rem 0 1.3rem;cursor:pointer;text-indent:-2px;}.view-source-button > span{visibility:hidden;}.module-info .view-source-button{float:none;display:flex;justify-content:flex-end;margin:-1.2rem .4rem -.2rem 0;}.view-source-button::before{position:absolute;content:"View Source";display:list-item;list-style-type:disclosure-closed;}.view-source-toggle-state:checked ~ .attr .view-source-button::before,.view-source-toggle-state:checked ~ .view-source-button::before{list-style-type:disclosure-open;}.pdoc .docstring{margin-bottom:1.5rem;}.pdoc section:not(.module-info) .docstring{margin-left:clamp(0rem, 5vw - 2rem, 1rem);}.pdoc .docstring .pdoc-code{margin-left:1em;margin-right:1em;}.pdoc h1:target,.pdoc h2:target,.pdoc h3:target,.pdoc h4:target,.pdoc h5:target,.pdoc h6:target,.pdoc .pdoc-code > pre > span:target{background-color:var(--active);box-shadow:-1rem 0 0 0 var(--active);}.pdoc .pdoc-code > pre > span:target{display:block;}.pdoc div:target > .attr,.pdoc section:target > .attr,.pdoc dd:target > a{background-color:var(--active);}.pdoc *{scroll-margin:2rem;}.pdoc .pdoc-code .linenos{user-select:none;}.pdoc .attr:hover{filter:contrast(0.95);}.pdoc section, .pdoc .classattr{position:relative;}.pdoc .headerlink{--width:clamp(1rem, 3vw, 2rem);position:absolute;top:0;left:calc(0rem - var(--width));transition:all 100ms ease-in-out;opacity:0;}.pdoc .headerlink::before{content:"#";display:block;text-align:center;width:var(--width);height:2.3rem;line-height:2.3rem;font-size:1.5rem;}.pdoc .attr:hover ~ .headerlink,.pdoc *:target > .headerlink,.pdoc .headerlink:hover{opacity:1;}.pdoc .attr{display:block;margin:.5rem 0 .5rem;padding:.4rem .4rem .4rem 1rem;background-color:var(--accent);overflow-x:auto;}.pdoc .classattr{margin-left:2rem;}.pdoc .name{color:var(--name);font-weight:bold;}.pdoc .def{color:var(--def);font-weight:bold;}.pdoc .signature{background-color:transparent;}.pdoc .param, .pdoc .return-annotation{white-space:pre;}.pdoc .signature.multiline .param{display:block;}.pdoc .signature.condensed .param{display:inline-block;}.pdoc .annotation{color:var(--annotation);}.pdoc .inherited{margin-left:2rem;}.pdoc .inherited dt{font-weight:700;}.pdoc .inherited dt, .pdoc .inherited dd{display:inline;margin-left:0;margin-bottom:.5rem;}.pdoc .inherited dd:not(:last-child):after{content:", ";}.pdoc .inherited .class:before{content:"class ";}.pdoc .inherited .function a:after{content:"()";}.pdoc .search-result .docstring{overflow:auto;max-height:25vh;}.pdoc .search-result.focused > .attr{background-color:var(--active);}.pdoc .attribution{margin-top:2rem;display:block;opacity:0.5;transition:all 200ms;filter:grayscale(100%);}.pdoc .attribution:hover{opacity:1;filter:grayscale(0%);}.pdoc .attribution img{margin-left:5px;height:35px;vertical-align:middle;width:70px;transition:all 200ms;}.pdoc table{display:block;width:max-content;max-width:100%;overflow:auto;margin-bottom:1rem;}.pdoc table th{font-weight:600;}.pdoc table th, .pdoc table td{padding:6px 13px;border:1px solid var(--accent2);}</style>
<style>/*! custom.css */</style></head>
<body>
<nav class="pdoc">
<label id="navtoggle" for="togglestate" class="pdoc-button"><svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke-linecap='round' stroke="currentColor" stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg></label>
<input id="togglestate" type="checkbox" aria-hidden="true" tabindex="-1">
<div>
<h2>API Documentation</h2>
<ul class="memberlist">
<li>
<a class="class" href="#FrontendService">FrontendService</a>
<ul class="memberlist">
<li>
<a class="function" href="#FrontendService.__init__">FrontendService</a>
</li>
<li>
<a class="function" href="#FrontendService.register_function">register_function</a>
</li>
<li>
<a class="function" href="#FrontendService.update_function">update_function</a>
</li>
<li>
<a class="function" href="#FrontendService.list_functions">list_functions</a>
</li>
<li>
<a class="function" href="#FrontendService.get_function">get_function</a>
</li>
<li>
<a class="function" href="#FrontendService.get_function_usage_stats">get_function_usage_stats</a>
</li>
<li>
<a class="function" href="#FrontendService.delete_function">delete_function</a>
</li>
<li>
<a class="function" href="#FrontendService.disable_function">disable_function</a>
</li>
<li>
<a class="function" href="#FrontendService.register_input_file">register_input_file</a>
</li>
<li>
<a class="function" href="#FrontendService.register_output_file">register_output_file</a>
</li>
<li>
<a class="function" href="#FrontendService.create_task">create_task</a>
</li>
<li>
<a class="function" href="#FrontendService.assign_data_to_task">assign_data_to_task</a>
</li>
<li>
<a class="function" href="#FrontendService.approve_task">approve_task</a>
</li>
<li>
<a class="function" href="#FrontendService.invoke_task">invoke_task</a>
</li>
<li>
<a class="function" href="#FrontendService.cancel_task">cancel_task</a>
</li>
<li>
<a class="function" href="#FrontendService.get_task">get_task</a>
</li>
<li>
<a class="function" href="#FrontendService.get_task_result">get_task_result</a>
</li>
<li>
<a class="function" href="#FrontendService.get_output_cmac_by_tag">get_output_cmac_by_tag</a>
</li>
<li>
<a class="function" href="#FrontendService.query_audit_logs">query_audit_logs</a>
</li>
</ul>
</li>
<li>
<a class="class" href="#AuthenticationService">AuthenticationService</a>
<ul class="memberlist">
<li>
<a class="function" href="#AuthenticationService.__init__">AuthenticationService</a>
</li>
<li>
<a class="function" href="#AuthenticationService.user_register">user_register</a>
</li>
<li>
<a class="function" href="#AuthenticationService.user_update">user_update</a>
</li>
<li>
<a class="function" href="#AuthenticationService.user_login">user_login</a>
</li>
<li>
<a class="function" href="#AuthenticationService.user_change_password">user_change_password</a>
</li>
<li>
<a class="function" href="#AuthenticationService.reset_user_password">reset_user_password</a>
</li>
<li>
<a class="function" href="#AuthenticationService.delete_user">delete_user</a>
</li>
<li>
<a class="function" href="#AuthenticationService.list_users">list_users</a>
</li>
</ul>
</li>
<li>
<a class="class" href="#FunctionArgument">FunctionArgument</a>
<ul class="memberlist">
<li>
<a class="function" href="#FunctionArgument.__init__">FunctionArgument</a>
</li>
</ul>
</li>
<li>
<a class="class" href="#FunctionInput">FunctionInput</a>
<ul class="memberlist">
<li>
<a class="function" href="#FunctionInput.__init__">FunctionInput</a>
</li>
</ul>
</li>
<li>
<a class="class" href="#FunctionOutput">FunctionOutput</a>
<ul class="memberlist">
<li>
<a class="function" href="#FunctionOutput.__init__">FunctionOutput</a>
</li>
</ul>
</li>
<li>
<a class="class" href="#OwnerList">OwnerList</a>
<ul class="memberlist">
<li>
<a class="function" href="#OwnerList.__init__">OwnerList</a>
</li>
</ul>
</li>
<li>
<a class="class" href="#DataMap">DataMap</a>
<ul class="memberlist">
<li>
<a class="function" href="#DataMap.__init__">DataMap</a>
</li>
</ul>
</li>
</ul>
<a class="attribution" title="pdoc: Python API documentation generator" href="https://pdoc.dev" target="_blank">
built with <span class="visually-hidden">pdoc</span><img
alt="pdoc logo"
src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20role%3D%22img%22%20aria-label%3D%22pdoc%20logo%22%20width%3D%22300%22%20height%3D%22150%22%20viewBox%3D%22-1%200%2060%2030%22%3E%3Ctitle%3Epdoc%3C/title%3E%3Cpath%20d%3D%22M29.621%2021.293c-.011-.273-.214-.475-.511-.481a.5.5%200%200%200-.489.503l-.044%201.393c-.097.551-.695%201.215-1.566%201.704-.577.428-1.306.486-2.193.182-1.426-.617-2.467-1.654-3.304-2.487l-.173-.172a3.43%203.43%200%200%200-.365-.306.49.49%200%200%200-.286-.196c-1.718-1.06-4.931-1.47-7.353.191l-.219.15c-1.707%201.187-3.413%202.131-4.328%201.03-.02-.027-.49-.685-.141-1.763.233-.721.546-2.408.772-4.076.042-.09.067-.187.046-.288.166-1.347.277-2.625.241-3.351%201.378-1.008%202.271-2.586%202.271-4.362%200-.976-.272-1.935-.788-2.774-.057-.094-.122-.18-.184-.268.033-.167.052-.339.052-.516%200-1.477-1.202-2.679-2.679-2.679-.791%200-1.496.352-1.987.9a6.3%206.3%200%200%200-1.001.029c-.492-.564-1.207-.929-2.012-.929-1.477%200-2.679%201.202-2.679%202.679A2.65%202.65%200%200%200%20.97%206.554c-.383.747-.595%201.572-.595%202.41%200%202.311%201.507%204.29%203.635%205.107-.037.699-.147%202.27-.423%203.294l-.137.461c-.622%202.042-2.515%208.257%201.727%2010.643%201.614.908%203.06%201.248%204.317%201.248%202.665%200%204.492-1.524%205.322-2.401%201.476-1.559%202.886-1.854%206.491.82%201.877%201.393%203.514%201.753%204.861%201.068%202.223-1.713%202.811-3.867%203.399-6.374.077-.846.056-1.469.054-1.537zm-4.835%204.313c-.054.305-.156.586-.242.629-.034-.007-.131-.022-.307-.157-.145-.111-.314-.478-.456-.908.221.121.432.25.675.355.115.039.219.051.33.081zm-2.251-1.238c-.05.33-.158.648-.252.694-.022.001-.125-.018-.307-.157-.217-.166-.488-.906-.639-1.573.358.344.754.693%201.198%201.036zm-3.887-2.337c-.006-.116-.018-.231-.041-.342.635.145%201.189.368%201.599.625.097.231.166.481.174.642-.03.049-.055.101-.067.158-.046.013-.128.026-.298.004-.278-.037-.901-.57-1.367-1.087zm-1.127-.497c.116.306.176.625.12.71-.019.014-.117.045-.345.016-.206-.027-.604-.332-.986-.695.41-.051.816-.056%201.211-.031zm-4.535%201.535c.209.22.379.47.358.598-.006.041-.088.138-.351.234-.144.055-.539-.063-.979-.259a11.66%2011.66%200%200%200%20.972-.573zm.983-.664c.359-.237.738-.418%201.126-.554.25.237.479.548.457.694-.006.042-.087.138-.351.235-.174.064-.694-.105-1.232-.375zm-3.381%201.794c-.022.145-.061.29-.149.401-.133.166-.358.248-.69.251h-.002c-.133%200-.306-.26-.45-.621.417.091.854.07%201.291-.031zm-2.066-8.077a4.78%204.78%200%200%201-.775-.584c.172-.115.505-.254.88-.378l-.105.962zm-.331%202.302a10.32%2010.32%200%200%201-.828-.502c.202-.143.576-.328.984-.49l-.156.992zm-.45%202.157l-.701-.403c.214-.115.536-.249.891-.376a11.57%2011.57%200%200%201-.19.779zm-.181%201.716c.064.398.194.702.298.893-.194-.051-.435-.162-.736-.398.061-.119.224-.3.438-.495zM8.87%204.141c0%20.152-.123.276-.276.276s-.275-.124-.275-.276.123-.276.276-.276.275.124.275.276zm-.735-.389a1.15%201.15%200%200%200-.314.783%201.16%201.16%200%200%200%201.162%201.162c.457%200%20.842-.27%201.032-.653.026.117.042.238.042.362a1.68%201.68%200%200%201-1.679%201.679%201.68%201.68%200%200%201-1.679-1.679c0-.843.626-1.535%201.436-1.654zM5.059%205.406A1.68%201.68%200%200%201%203.38%207.085a1.68%201.68%200%200%201-1.679-1.679c0-.037.009-.072.011-.109.21.3.541.508.935.508a1.16%201.16%200%200%200%201.162-1.162%201.14%201.14%200%200%200-.474-.912c.015%200%20.03-.005.045-.005.926.001%201.679.754%201.679%201.68zM3.198%204.141c0%20.152-.123.276-.276.276s-.275-.124-.275-.276.123-.276.276-.276.275.124.275.276zM1.375%208.964c0-.52.103-1.035.288-1.52.466.394%201.06.64%201.717.64%201.144%200%202.116-.725%202.499-1.738.383%201.012%201.355%201.738%202.499%201.738.867%200%201.631-.421%202.121-1.062.307.605.478%201.267.478%201.942%200%202.486-2.153%204.51-4.801%204.51s-4.801-2.023-4.801-4.51zm24.342%2019.349c-.985.498-2.267.168-3.813-.979-3.073-2.281-5.453-3.199-7.813-.705-1.315%201.391-4.163%203.365-8.423.97-3.174-1.786-2.239-6.266-1.261-9.479l.146-.492c.276-1.02.395-2.457.444-3.268a6.11%206.11%200%200%200%201.18.115%206.01%206.01%200%200%200%202.536-.562l-.006.175c-.802.215-1.848.612-2.021%201.25-.079.295.021.601.274.837.219.203.415.364.598.501-.667.304-1.243.698-1.311%201.179-.02.144-.022.507.393.787.213.144.395.26.564.365-1.285.521-1.361.96-1.381%201.126-.018.142-.011.496.427.746l.854.489c-.473.389-.971.914-.999%201.429-.018.278.095.532.316.713.675.556%201.231.721%201.653.721.059%200%20.104-.014.158-.02.207.707.641%201.64%201.513%201.64h.013c.8-.008%201.236-.345%201.462-.626.173-.216.268-.457.325-.692.424.195.93.374%201.372.374.151%200%20.294-.021.423-.068.732-.27.944-.704.993-1.021.009-.061.003-.119.002-.179.266.086.538.147.789.147.15%200%20.294-.021.423-.069.542-.2.797-.489.914-.754.237.147.478.258.704.288.106.014.205.021.296.021.356%200%20.595-.101.767-.229.438.435%201.094.992%201.656%201.067.106.014.205.021.296.021a1.56%201.56%200%200%200%20.323-.035c.17.575.453%201.289.866%201.605.358.273.665.362.914.362a.99.99%200%200%200%20.421-.093%201.03%201.03%200%200%200%20.245-.164c.168.428.39.846.68%201.068.358.273.665.362.913.362a.99.99%200%200%200%20.421-.093c.317-.148.512-.448.639-.762.251.157.495.257.726.257.127%200%20.25-.024.37-.071.427-.17.706-.617.841-1.314.022-.015.047-.022.068-.038.067-.051.133-.104.196-.159-.443%201.486-1.107%202.761-2.086%203.257zM8.66%209.925a.5.5%200%201%200-1%200c0%20.653-.818%201.205-1.787%201.205s-1.787-.552-1.787-1.205a.5.5%200%201%200-1%200c0%201.216%201.25%202.205%202.787%202.205s2.787-.989%202.787-2.205zm4.4%2015.965l-.208.097c-2.661%201.258-4.708%201.436-6.086.527-1.542-1.017-1.88-3.19-1.844-4.198a.4.4%200%200%200-.385-.414c-.242-.029-.406.164-.414.385-.046%201.249.367%203.686%202.202%204.896.708.467%201.547.7%202.51.7%201.248%200%202.706-.392%204.362-1.174l.185-.086a.4.4%200%200%200%20.205-.527c-.089-.204-.326-.291-.527-.206zM9.547%202.292c.093.077.205.114.317.114a.5.5%200%200%200%20.318-.886L8.817.397a.5.5%200%200%200-.703.068.5.5%200%200%200%20.069.703l1.364%201.124zm-7.661-.065c.086%200%20.173-.022.253-.068l1.523-.893a.5.5%200%200%200-.506-.863l-1.523.892a.5.5%200%200%200-.179.685c.094.158.261.247.432.247z%22%20transform%3D%22matrix%28-1%200%200%201%2058%200%29%22%20fill%3D%22%233bb300%22/%3E%3Cpath%20d%3D%22M.3%2021.86V10.18q0-.46.02-.68.04-.22.18-.5.28-.54%201.34-.54%201.06%200%201.42.28.38.26.44.78.76-1.04%202.38-1.04%201.64%200%203.1%201.54%201.46%201.54%201.46%203.58%200%202.04-1.46%203.58-1.44%201.54-3.08%201.54-1.64%200-2.38-.92v4.04q0%20.46-.04.68-.02.22-.18.5-.14.3-.5.42-.36.12-.98.12-.62%200-1-.12-.36-.12-.52-.4-.14-.28-.18-.5-.02-.22-.02-.68zm3.96-9.42q-.46.54-.46%201.18%200%20.64.46%201.18.48.52%201.2.52.74%200%201.24-.52.52-.52.52-1.18%200-.66-.48-1.18-.48-.54-1.26-.54-.76%200-1.22.54zm14.741-8.36q.16-.3.54-.42.38-.12%201-.12.64%200%201.02.12.38.12.52.42.16.3.18.54.04.22.04.68v11.94q0%20.46-.04.7-.02.22-.18.5-.3.54-1.7.54-1.38%200-1.54-.98-.84.96-2.34.96-1.8%200-3.28-1.56-1.48-1.58-1.48-3.66%200-2.1%201.48-3.68%201.5-1.58%203.28-1.58%201.48%200%202.3%201v-4.2q0-.46.02-.68.04-.24.18-.52zm-3.24%2010.86q.52.54%201.26.54.74%200%201.22-.54.5-.54.5-1.18%200-.66-.48-1.22-.46-.56-1.26-.56-.8%200-1.28.56-.48.54-.48%201.2%200%20.66.52%201.2zm7.833-1.2q0-2.4%201.68-3.96%201.68-1.56%203.84-1.56%202.16%200%203.82%201.56%201.66%201.54%201.66%203.94%200%201.66-.86%202.96-.86%201.28-2.1%201.9-1.22.6-2.54.6-1.32%200-2.56-.64-1.24-.66-2.1-1.92-.84-1.28-.84-2.88zm4.18%201.44q.64.48%201.3.48.66%200%201.32-.5.66-.5.66-1.48%200-.98-.62-1.46-.62-.48-1.34-.48-.72%200-1.34.5-.62.5-.62%201.48%200%20.96.64%201.46zm11.412-1.44q0%20.84.56%201.32.56.46%201.18.46.64%200%201.18-.36.56-.38.9-.38.6%200%201.46%201.06.46.58.46%201.04%200%20.76-1.1%201.42-1.14.8-2.8.8-1.86%200-3.58-1.34-.82-.64-1.34-1.7-.52-1.08-.52-2.36%200-1.3.52-2.34.52-1.06%201.34-1.7%201.66-1.32%203.54-1.32.76%200%201.48.22.72.2%201.06.4l.32.2q.36.24.56.38.52.4.52.92%200%20.5-.42%201.14-.72%201.1-1.38%201.1-.38%200-1.08-.44-.36-.34-1.04-.34-.66%200-1.24.48-.58.48-.58%201.34z%22%20fill%3D%22green%22/%3E%3C/svg%3E"/>
</a>
</div>
</nav>
<main class="pdoc">
<section class="module-info">
<h1 class="modulename">
python<wbr>.teaclave </h1>
<div class="docstring"><p>Python package <code>teaclave</code> is the client SDK for Python developers, providing
some essential data structures, service, and client classes to establish
trusted TLS channel and communicate with Teaclave services (e.g., the
authentication service and frontend service) through RPC protocols.</p>
</div>
<input id="mod-teaclave-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-source-button" for="mod-teaclave-view-source"><span>View Source</span></label>
<div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos"> 1</span></a><span class="ch">#!/usr/bin/env python3</span>
</span><span id="L-2"><a href="#L-2"><span class="linenos"> 2</span></a>
</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="c1"># Licensed to the Apache Software Foundation (ASF) under one</span>
</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a><span class="c1"># or more contributor license agreements. See the NOTICE file</span>
</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a><span class="c1"># distributed with this work for additional information</span>
</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="c1"># regarding copyright ownership. The ASF licenses this file</span>
</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a><span class="c1"># to you under the Apache License, Version 2.0 (the</span>
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a><span class="c1"># &quot;License&quot;); you may not use this file except in compliance</span>
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a><span class="c1"># with the License. You may obtain a copy of the License at</span>
</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a><span class="c1">#</span>
</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a><span class="c1"># http://www.apache.org/licenses/LICENSE-2.0</span>
</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a><span class="c1">#</span>
</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a><span class="c1"># Unless required by applicable law or agreed to in writing,</span>
</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a><span class="c1"># software distributed under the License is distributed on an</span>
</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a><span class="c1"># &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span>
</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a><span class="c1"># KIND, either express or implied. See the License for the</span>
</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a><span class="c1"># specific language governing permissions and limitations</span>
</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a><span class="c1"># under the License.</span>
</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a><span class="sd">Python package `teaclave` is the client SDK for Python developers, providing</span>
</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a><span class="sd">some essential data structures, service, and client classes to establish</span>
</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a><span class="sd">trusted TLS channel and communicate with Teaclave services (e.g., the</span>
</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a><span class="sd">authentication service and frontend service) through RPC protocols.</span>
</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a>
</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a><span class="kn">import</span> <span class="nn">json</span>
</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a><span class="kn">import</span> <span class="nn">base64</span>
</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a><span class="kn">import</span> <span class="nn">toml</span>
</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a><span class="kn">import</span> <span class="nn">time</span>
</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a><span class="kn">import</span> <span class="nn">os</span>
</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a><span class="kn">import</span> <span class="nn">ssl</span>
</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a>
</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a><span class="kn">import</span> <span class="nn">cryptography</span>
</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a><span class="kn">from</span> <span class="nn">cryptography</span> <span class="kn">import</span> <span class="n">x509</span>
</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a><span class="kn">from</span> <span class="nn">cryptography.hazmat.backends</span> <span class="kn">import</span> <span class="n">default_backend</span>
</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a>
</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a><span class="kn">from</span> <span class="nn">google.protobuf.json_format</span> <span class="kn">import</span> <span class="n">MessageToDict</span>
</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a><span class="kn">from</span> <span class="nn">google.protobuf.empty_pb2</span> <span class="kn">import</span> <span class="n">Empty</span>
</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a><span class="kn">from</span> <span class="nn">grpclib.client</span> <span class="kn">import</span> <span class="n">Channel</span><span class="p">,</span> <span class="n">_ChannelState</span>
</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a><span class="kn">from</span> <span class="nn">grpclib.protocol</span> <span class="kn">import</span> <span class="n">H2Protocol</span>
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a>
</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a><span class="kn">from</span> <span class="nn">OpenSSL.crypto</span> <span class="kn">import</span> <span class="n">load_certificate</span><span class="p">,</span> <span class="n">FILETYPE_PEM</span><span class="p">,</span> <span class="n">FILETYPE_ASN1</span>
</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a><span class="kn">from</span> <span class="nn">OpenSSL.crypto</span> <span class="kn">import</span> <span class="n">X509Store</span><span class="p">,</span> <span class="n">X509StoreContext</span>
</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a><span class="kn">from</span> <span class="nn">OpenSSL</span> <span class="kn">import</span> <span class="n">crypto</span>
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a>
</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a><span class="kn">import</span> <span class="nn">teaclave_authentication_service_pb2</span> <span class="k">as</span> <span class="nn">auth</span>
</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a><span class="kn">import</span> <span class="nn">teaclave_frontend_service_pb2</span> <span class="k">as</span> <span class="nn">fe</span>
</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a><span class="kn">from</span> <span class="nn">teaclave_authentication_service_grpc</span> <span class="kn">import</span> <span class="n">TeaclaveAuthenticationApiStub</span>
</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a><span class="kn">from</span> <span class="nn">teaclave_frontend_service_grpc</span> <span class="kn">import</span> <span class="n">TeaclaveFrontendStub</span>
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a><span class="kn">from</span> <span class="nn">teaclave_common_pb2</span> <span class="kn">import</span> <span class="n">TaskStatus</span><span class="p">,</span> <span class="n">FileCryptoInfo</span>
</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a>
</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a><span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Tuple</span><span class="p">,</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">Any</span>
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a>
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a><span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span>
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="s1">&#39;FrontendService&#39;</span><span class="p">,</span> <span class="s1">&#39;AuthenticationService&#39;</span><span class="p">,</span> <span class="s1">&#39;FunctionArgument&#39;</span><span class="p">,</span>
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="s1">&#39;FunctionInput&#39;</span><span class="p">,</span> <span class="s1">&#39;FunctionOutput&#39;</span><span class="p">,</span> <span class="s1">&#39;OwnerList&#39;</span><span class="p">,</span> <span class="s1">&#39;DataMap&#39;</span>
</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a><span class="p">]</span>
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a>
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a><span class="n">Metadata</span> <span class="o">=</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span>
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a>
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a>
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a><span class="k">class</span> <span class="nc">Request</span><span class="p">:</span>
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="n">message</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a>
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">method</span><span class="p">,</span> <span class="n">response</span><span class="p">,</span> <span class="n">metadata</span><span class="o">=</span><span class="nb">dict</span><span class="p">()):</span>
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">method</span> <span class="o">=</span> <span class="n">method</span>
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">metadata</span> <span class="o">=</span> <span class="n">metadata</span>
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">response</span> <span class="o">=</span> <span class="n">response</span>
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a>
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a>
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a><span class="k">class</span> <span class="nc">TeaclaveException</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="k">pass</span>
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a>
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a>
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a><span class="k">class</span> <span class="nc">TeaclaveService</span><span class="p">:</span>
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="n">metadata</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">stub</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a>
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">address</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">],</span>
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">as_root_ca_cert_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">enclave_info_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">dump_report</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_name</span> <span class="o">=</span> <span class="n">name</span>
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_address</span> <span class="o">=</span> <span class="n">address</span>
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_as_root_ca_cert_path</span> <span class="o">=</span> <span class="n">as_root_ca_cert_path</span>
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_enclave_info_path</span> <span class="o">=</span> <span class="n">enclave_info_path</span>
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_dump_report</span> <span class="o">=</span> <span class="n">dump_report</span>
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a>
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span> <span class="o">=</span> <span class="n">TeaclaveChannel</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_address</span><span class="p">,</span>
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_as_root_ca_cert_path</span><span class="p">,</span>
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_enclave_info_path</span><span class="p">)</span>
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_loop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="o">.</span><span class="n">_loop</span>
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a>
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="k">def</span> <span class="nf">call_method</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_loop</span><span class="o">.</span><span class="n">run_until_complete</span><span class="p">(</span>
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">stub</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">method</span><span class="p">)(</span><span class="n">request</span><span class="o">.</span><span class="n">message</span><span class="p">,</span>
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="n">metadata</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">metadata</span><span class="p">))</span>
</span><span id="L-100"><a href="#L-100"><span class="linenos"> 100</span></a>
</span><span id="L-101"><a href="#L-101"><span class="linenos"> 101</span></a> <span class="k">def</span> <span class="fm">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-102"><a href="#L-102"><span class="linenos"> 102</span></a> <span class="k">return</span> <span class="bp">self</span>
</span><span id="L-103"><a href="#L-103"><span class="linenos"> 103</span></a>
</span><span id="L-104"><a href="#L-104"><span class="linenos"> 104</span></a> <span class="k">def</span> <span class="fm">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">exc</span><span class="p">):</span>
</span><span id="L-105"><a href="#L-105"><span class="linenos"> 105</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span><span id="L-106"><a href="#L-106"><span class="linenos"> 106</span></a>
</span><span id="L-107"><a href="#L-107"><span class="linenos"> 107</span></a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-108"><a href="#L-108"><span class="linenos"> 108</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span><span id="L-109"><a href="#L-109"><span class="linenos"> 109</span></a>
</span><span id="L-110"><a href="#L-110"><span class="linenos"> 110</span></a> <span class="k">def</span> <span class="fm">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-111"><a href="#L-111"><span class="linenos"> 111</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span><span id="L-112"><a href="#L-112"><span class="linenos"> 112</span></a>
</span><span id="L-113"><a href="#L-113"><span class="linenos"> 113</span></a> <span class="k">def</span> <span class="nf">check_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-114"><a href="#L-114"><span class="linenos"> 114</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">:</span> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="s2">&quot;Metadata is None&quot;</span><span class="p">)</span>
</span><span id="L-115"><a href="#L-115"><span class="linenos"> 115</span></a>
</span><span id="L-116"><a href="#L-116"><span class="linenos"> 116</span></a> <span class="k">def</span> <span class="nf">check_channel</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-117"><a href="#L-117"><span class="linenos"> 117</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-118"><a href="#L-118"><span class="linenos"> 118</span></a>
</span><span id="L-119"><a href="#L-119"><span class="linenos"> 119</span></a> <span class="k">def</span> <span class="nf">get_metadata</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-120"><a href="#L-120"><span class="linenos"> 120</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">metadata</span>
</span><span id="L-121"><a href="#L-121"><span class="linenos"> 121</span></a>
</span><span id="L-122"><a href="#L-122"><span class="linenos"> 122</span></a>
</span><span id="L-123"><a href="#L-123"><span class="linenos"> 123</span></a><span class="k">def</span> <span class="nf">create_context</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">ssl</span><span class="o">.</span><span class="n">SSLContext</span><span class="p">:</span>
</span><span id="L-124"><a href="#L-124"><span class="linenos"> 124</span></a> <span class="n">ctx</span> <span class="o">=</span> <span class="n">ssl</span><span class="o">.</span><span class="n">_create_unverified_context</span><span class="p">()</span>
</span><span id="L-125"><a href="#L-125"><span class="linenos"> 125</span></a> <span class="n">ctx</span><span class="o">.</span><span class="n">options</span> <span class="o">|=</span> <span class="n">ssl</span><span class="o">.</span><span class="n">OP_NO_TLSv1</span> <span class="o">|</span> <span class="n">ssl</span><span class="o">.</span><span class="n">OP_NO_TLSv1_1</span>
</span><span id="L-126"><a href="#L-126"><span class="linenos"> 126</span></a> <span class="n">ctx</span><span class="o">.</span><span class="n">set_ciphers</span><span class="p">(</span><span class="s1">&#39;ECDHE+AESGCM:ECDHE+CHACHA20:DHE+AESGCM:DHE+CHACHA20&#39;</span><span class="p">)</span>
</span><span id="L-127"><a href="#L-127"><span class="linenos"> 127</span></a> <span class="n">ctx</span><span class="o">.</span><span class="n">set_alpn_protocols</span><span class="p">([</span><span class="s1">&#39;h2&#39;</span><span class="p">])</span>
</span><span id="L-128"><a href="#L-128"><span class="linenos"> 128</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-129"><a href="#L-129"><span class="linenos"> 129</span></a> <span class="n">ctx</span><span class="o">.</span><span class="n">set_npn_protocols</span><span class="p">([</span><span class="s1">&#39;h2&#39;</span><span class="p">])</span>
</span><span id="L-130"><a href="#L-130"><span class="linenos"> 130</span></a> <span class="k">except</span> <span class="ne">NotImplementedError</span><span class="p">:</span>
</span><span id="L-131"><a href="#L-131"><span class="linenos"> 131</span></a> <span class="k">pass</span>
</span><span id="L-132"><a href="#L-132"><span class="linenos"> 132</span></a> <span class="k">return</span> <span class="n">ctx</span>
</span><span id="L-133"><a href="#L-133"><span class="linenos"> 133</span></a>
</span><span id="L-134"><a href="#L-134"><span class="linenos"> 134</span></a>
</span><span id="L-135"><a href="#L-135"><span class="linenos"> 135</span></a><span class="k">class</span> <span class="nc">TeaclaveChannel</span><span class="p">(</span><span class="n">Channel</span><span class="p">):</span>
</span><span id="L-136"><a href="#L-136"><span class="linenos"> 136</span></a>
</span><span id="L-137"><a href="#L-137"><span class="linenos"> 137</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="L-138"><a href="#L-138"><span class="linenos"> 138</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-139"><a href="#L-139"><span class="linenos"> 139</span></a> <span class="n">address</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">],</span>
</span><span id="L-140"><a href="#L-140"><span class="linenos"> 140</span></a> <span class="n">as_root_ca_cert_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-141"><a href="#L-141"><span class="linenos"> 141</span></a> <span class="n">enclave_info_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-142"><a href="#L-142"><span class="linenos"> 142</span></a> <span class="n">dump_report</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-143"><a href="#L-143"><span class="linenos"> 143</span></a> <span class="n">context</span> <span class="o">=</span> <span class="n">create_context</span><span class="p">()</span>
</span><span id="L-144"><a href="#L-144"><span class="linenos"> 144</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">host</span><span class="o">=</span><span class="n">address</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">port</span><span class="o">=</span><span class="n">address</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">ssl</span><span class="o">=</span><span class="n">context</span><span class="p">)</span>
</span><span id="L-145"><a href="#L-145"><span class="linenos"> 145</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_name</span> <span class="o">=</span> <span class="n">name</span>
</span><span id="L-146"><a href="#L-146"><span class="linenos"> 146</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_as_root_ca_cert_path</span> <span class="o">=</span> <span class="n">as_root_ca_cert_path</span>
</span><span id="L-147"><a href="#L-147"><span class="linenos"> 147</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_enclave_info_path</span> <span class="o">=</span> <span class="n">enclave_info_path</span>
</span><span id="L-148"><a href="#L-148"><span class="linenos"> 148</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_dump_report</span> <span class="o">=</span> <span class="n">dump_report</span>
</span><span id="L-149"><a href="#L-149"><span class="linenos"> 149</span></a>
</span><span id="L-150"><a href="#L-150"><span class="linenos"> 150</span></a> <span class="k">def</span> <span class="nf">check_channel</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-151"><a href="#L-151"><span class="linenos"> 151</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">==</span> <span class="n">_ChannelState</span><span class="o">.</span><span class="n">TRANSIENT_FAILURE</span><span class="p">:</span>
</span><span id="L-152"><a href="#L-152"><span class="linenos"> 152</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="s2">&quot;Channel is None&quot;</span><span class="p">)</span>
</span><span id="L-153"><a href="#L-153"><span class="linenos"> 153</span></a>
</span><span id="L-154"><a href="#L-154"><span class="linenos"> 154</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">__connect__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">H2Protocol</span><span class="p">:</span>
</span><span id="L-155"><a href="#L-155"><span class="linenos"> 155</span></a> <span class="n">protocol</span> <span class="o">=</span> <span class="k">await</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">__connect__</span><span class="p">()</span>
</span><span id="L-156"><a href="#L-156"><span class="linenos"> 156</span></a> <span class="n">sslobj</span> <span class="o">=</span> <span class="n">protocol</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">_transport</span><span class="o">.</span><span class="n">get_extra_info</span><span class="p">(</span><span class="s1">&#39;ssl_object&#39;</span><span class="p">)</span>
</span><span id="L-157"><a href="#L-157"><span class="linenos"> 157</span></a> <span class="n">cert</span> <span class="o">=</span> <span class="n">sslobj</span><span class="o">.</span><span class="n">getpeercert</span><span class="p">(</span><span class="n">binary_form</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-158"><a href="#L-158"><span class="linenos"> 158</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">cert</span><span class="p">:</span> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="s2">&quot;Peer cert is None&quot;</span><span class="p">)</span>
</span><span id="L-159"><a href="#L-159"><span class="linenos"> 159</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-160"><a href="#L-160"><span class="linenos"> 160</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_verify_report</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_as_root_ca_cert_path</span><span class="p">,</span>
</span><span id="L-161"><a href="#L-161"><span class="linenos"> 161</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_enclave_info_path</span><span class="p">,</span> <span class="n">cert</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_name</span><span class="p">)</span>
</span><span id="L-162"><a href="#L-162"><span class="linenos"> 162</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-163"><a href="#L-163"><span class="linenos"> 163</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span>
</span><span id="L-164"><a href="#L-164"><span class="linenos"> 164</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to verify attestation report: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-165"><a href="#L-165"><span class="linenos"> 165</span></a> <span class="k">return</span> <span class="n">protocol</span>
</span><span id="L-166"><a href="#L-166"><span class="linenos"> 166</span></a>
</span><span id="L-167"><a href="#L-167"><span class="linenos"> 167</span></a> <span class="k">def</span> <span class="nf">_verify_report</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">as_root_ca_cert_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">enclave_info_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-168"><a href="#L-168"><span class="linenos"> 168</span></a> <span class="n">cert</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span> <span class="n">endpoint_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-169"><a href="#L-169"><span class="linenos"> 169</span></a>
</span><span id="L-170"><a href="#L-170"><span class="linenos"> 170</span></a> <span class="k">def</span> <span class="nf">load_certificates</span><span class="p">(</span><span class="n">pem_bytes</span><span class="p">):</span>
</span><span id="L-171"><a href="#L-171"><span class="linenos"> 171</span></a> <span class="n">start_line</span> <span class="o">=</span> <span class="sa">b</span><span class="s1">&#39;-----BEGIN CERTIFICATE-----&#39;</span>
</span><span id="L-172"><a href="#L-172"><span class="linenos"> 172</span></a> <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-173"><a href="#L-173"><span class="linenos"> 173</span></a> <span class="n">cert_slots</span> <span class="o">=</span> <span class="n">pem_bytes</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">start_line</span><span class="p">)</span>
</span><span id="L-174"><a href="#L-174"><span class="linenos"> 174</span></a> <span class="k">for</span> <span class="n">single_pem_cert</span> <span class="ow">in</span> <span class="n">cert_slots</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
</span><span id="L-175"><a href="#L-175"><span class="linenos"> 175</span></a> <span class="n">cert</span> <span class="o">=</span> <span class="n">load_certificate</span><span class="p">(</span><span class="n">FILETYPE_ASN1</span><span class="p">,</span>
</span><span id="L-176"><a href="#L-176"><span class="linenos"> 176</span></a> <span class="n">start_line</span> <span class="o">+</span> <span class="n">single_pem_cert</span><span class="p">)</span>
</span><span id="L-177"><a href="#L-177"><span class="linenos"> 177</span></a> <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cert</span><span class="p">)</span>
</span><span id="L-178"><a href="#L-178"><span class="linenos"> 178</span></a> <span class="k">return</span> <span class="n">result</span>
</span><span id="L-179"><a href="#L-179"><span class="linenos"> 179</span></a>
</span><span id="L-180"><a href="#L-180"><span class="linenos"> 180</span></a> <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;SGX_MODE&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="s1">&#39;SW&#39;</span><span class="p">:</span>
</span><span id="L-181"><a href="#L-181"><span class="linenos"> 181</span></a> <span class="k">return</span>
</span><span id="L-182"><a href="#L-182"><span class="linenos"> 182</span></a>
</span><span id="L-183"><a href="#L-183"><span class="linenos"> 183</span></a> <span class="n">cert</span> <span class="o">=</span> <span class="n">x509</span><span class="o">.</span><span class="n">load_der_x509_certificate</span><span class="p">(</span><span class="n">cert</span><span class="p">,</span> <span class="n">default_backend</span><span class="p">())</span>
</span><span id="L-184"><a href="#L-184"><span class="linenos"> 184</span></a>
</span><span id="L-185"><a href="#L-185"><span class="linenos"> 185</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dump_report</span><span class="p">:</span>
</span><span id="L-186"><a href="#L-186"><span class="linenos"> 186</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-187"><a href="#L-187"><span class="linenos"> 187</span></a> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_name</span> <span class="o">+</span> <span class="s2">&quot;_attestation_report.pem&quot;</span><span class="p">,</span> <span class="s2">&quot;wb&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span><span id="L-188"><a href="#L-188"><span class="linenos"> 188</span></a> <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span>
</span><span id="L-189"><a href="#L-189"><span class="linenos"> 189</span></a> <span class="n">cert</span><span class="o">.</span><span class="n">public_bytes</span><span class="p">(</span><span class="n">cryptography</span><span class="o">.</span><span class="n">hazmat</span><span class="o">.</span><span class="n">primitives</span><span class="o">.</span>
</span><span id="L-190"><a href="#L-190"><span class="linenos"> 190</span></a> <span class="n">serialization</span><span class="o">.</span><span class="n">Encoding</span><span class="o">.</span><span class="n">PEM</span><span class="p">))</span>
</span><span id="L-191"><a href="#L-191"><span class="linenos"> 191</span></a> <span class="k">except</span><span class="p">:</span>
</span><span id="L-192"><a href="#L-192"><span class="linenos"> 192</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="s2">&quot;Failed to dump attestation report&quot;</span><span class="p">)</span>
</span><span id="L-193"><a href="#L-193"><span class="linenos"> 193</span></a>
</span><span id="L-194"><a href="#L-194"><span class="linenos"> 194</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-195"><a href="#L-195"><span class="linenos"> 195</span></a> <span class="n">ext</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">cert</span><span class="o">.</span><span class="n">extensions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">value</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
</span><span id="L-196"><a href="#L-196"><span class="linenos"> 196</span></a> <span class="k">except</span><span class="p">:</span>
</span><span id="L-197"><a href="#L-197"><span class="linenos"> 197</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="s2">&quot;Failed to load extensions&quot;</span><span class="p">)</span>
</span><span id="L-198"><a href="#L-198"><span class="linenos"> 198</span></a>
</span><span id="L-199"><a href="#L-199"><span class="linenos"> 199</span></a> <span class="n">report</span> <span class="o">=</span> <span class="nb">bytes</span><span class="p">(</span><span class="n">ext</span><span class="p">[</span><span class="s2">&quot;report&quot;</span><span class="p">])</span>
</span><span id="L-200"><a href="#L-200"><span class="linenos"> 200</span></a> <span class="n">signature</span> <span class="o">=</span> <span class="nb">bytes</span><span class="p">(</span><span class="n">ext</span><span class="p">[</span><span class="s2">&quot;signature&quot;</span><span class="p">])</span>
</span><span id="L-201"><a href="#L-201"><span class="linenos"> 201</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-202"><a href="#L-202"><span class="linenos"> 202</span></a> <span class="n">certs</span> <span class="o">=</span> <span class="p">[</span>
</span><span id="L-203"><a href="#L-203"><span class="linenos"> 203</span></a> <span class="n">load_certificate</span><span class="p">(</span><span class="n">FILETYPE_ASN1</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">(</span><span class="n">c</span><span class="p">))</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">ext</span><span class="p">[</span><span class="s2">&quot;certs&quot;</span><span class="p">]</span>
</span><span id="L-204"><a href="#L-204"><span class="linenos"> 204</span></a> <span class="p">]</span>
</span><span id="L-205"><a href="#L-205"><span class="linenos"> 205</span></a> <span class="k">except</span><span class="p">:</span>
</span><span id="L-206"><a href="#L-206"><span class="linenos"> 206</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span>
</span><span id="L-207"><a href="#L-207"><span class="linenos"> 207</span></a> <span class="s2">&quot;Failed to load singing certificate of the report&quot;</span><span class="p">)</span>
</span><span id="L-208"><a href="#L-208"><span class="linenos"> 208</span></a>
</span><span id="L-209"><a href="#L-209"><span class="linenos"> 209</span></a> <span class="c1"># verify signing cert with AS root cert</span>
</span><span id="L-210"><a href="#L-210"><span class="linenos"> 210</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-211"><a href="#L-211"><span class="linenos"> 211</span></a> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">as_root_ca_cert_path</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span><span id="L-212"><a href="#L-212"><span class="linenos"> 212</span></a> <span class="n">as_root_ca_cert</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
</span><span id="L-213"><a href="#L-213"><span class="linenos"> 213</span></a> <span class="k">except</span><span class="p">:</span>
</span><span id="L-214"><a href="#L-214"><span class="linenos"> 214</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span>
</span><span id="L-215"><a href="#L-215"><span class="linenos"> 215</span></a> <span class="s2">&quot;Failed to open attestation service root certificate&quot;</span><span class="p">)</span>
</span><span id="L-216"><a href="#L-216"><span class="linenos"> 216</span></a>
</span><span id="L-217"><a href="#L-217"><span class="linenos"> 217</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-218"><a href="#L-218"><span class="linenos"> 218</span></a> <span class="n">as_root_ca_cert</span> <span class="o">=</span> <span class="n">load_certificate</span><span class="p">(</span><span class="n">FILETYPE_PEM</span><span class="p">,</span> <span class="n">as_root_ca_cert</span><span class="p">)</span>
</span><span id="L-219"><a href="#L-219"><span class="linenos"> 219</span></a> <span class="k">except</span><span class="p">:</span>
</span><span id="L-220"><a href="#L-220"><span class="linenos"> 220</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span>
</span><span id="L-221"><a href="#L-221"><span class="linenos"> 221</span></a> <span class="s2">&quot;Failed to load attestation service root certificate&quot;</span><span class="p">)</span>
</span><span id="L-222"><a href="#L-222"><span class="linenos"> 222</span></a>
</span><span id="L-223"><a href="#L-223"><span class="linenos"> 223</span></a> <span class="n">store</span> <span class="o">=</span> <span class="n">X509Store</span><span class="p">()</span>
</span><span id="L-224"><a href="#L-224"><span class="linenos"> 224</span></a> <span class="n">store</span><span class="o">.</span><span class="n">add_cert</span><span class="p">(</span><span class="n">as_root_ca_cert</span><span class="p">)</span>
</span><span id="L-225"><a href="#L-225"><span class="linenos"> 225</span></a> <span class="n">client_cert</span> <span class="o">=</span> <span class="n">certs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="L-226"><a href="#L-226"><span class="linenos"> 226</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">certs</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="L-227"><a href="#L-227"><span class="linenos"> 227</span></a> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">certs</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
</span><span id="L-228"><a href="#L-228"><span class="linenos"> 228</span></a> <span class="n">store</span><span class="o">.</span><span class="n">add_cert</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
</span><span id="L-229"><a href="#L-229"><span class="linenos"> 229</span></a> <span class="n">store_ctx</span> <span class="o">=</span> <span class="n">X509StoreContext</span><span class="p">(</span><span class="n">store</span><span class="p">,</span> <span class="n">client_cert</span><span class="p">)</span>
</span><span id="L-230"><a href="#L-230"><span class="linenos"> 230</span></a>
</span><span id="L-231"><a href="#L-231"><span class="linenos"> 231</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-232"><a href="#L-232"><span class="linenos"> 232</span></a> <span class="n">store_ctx</span><span class="o">.</span><span class="n">verify_certificate</span><span class="p">()</span>
</span><span id="L-233"><a href="#L-233"><span class="linenos"> 233</span></a>
</span><span id="L-234"><a href="#L-234"><span class="linenos"> 234</span></a> <span class="c1"># verify report&#39;s signature</span>
</span><span id="L-235"><a href="#L-235"><span class="linenos"> 235</span></a> <span class="n">crypto</span><span class="o">.</span><span class="n">verify</span><span class="p">(</span><span class="n">certs</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">signature</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">(</span><span class="n">ext</span><span class="p">[</span><span class="s2">&quot;report&quot;</span><span class="p">]),</span> <span class="s1">&#39;sha256&#39;</span><span class="p">)</span>
</span><span id="L-236"><a href="#L-236"><span class="linenos"> 236</span></a> <span class="k">except</span><span class="p">:</span>
</span><span id="L-237"><a href="#L-237"><span class="linenos"> 237</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="s2">&quot;Failed to verify report signature&quot;</span><span class="p">)</span>
</span><span id="L-238"><a href="#L-238"><span class="linenos"> 238</span></a>
</span><span id="L-239"><a href="#L-239"><span class="linenos"> 239</span></a> <span class="n">report</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">report</span><span class="p">)</span>
</span><span id="L-240"><a href="#L-240"><span class="linenos"> 240</span></a> <span class="n">quote</span> <span class="o">=</span> <span class="n">report</span><span class="p">[</span><span class="s1">&#39;isvEnclaveQuoteBody&#39;</span><span class="p">]</span>
</span><span id="L-241"><a href="#L-241"><span class="linenos"> 241</span></a> <span class="n">quote</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">quote</span><span class="p">)</span>
</span><span id="L-242"><a href="#L-242"><span class="linenos"> 242</span></a>
</span><span id="L-243"><a href="#L-243"><span class="linenos"> 243</span></a> <span class="c1"># get report_data from the quote</span>
</span><span id="L-244"><a href="#L-244"><span class="linenos"> 244</span></a> <span class="n">report_data</span> <span class="o">=</span> <span class="n">quote</span><span class="p">[</span><span class="mi">368</span><span class="p">:</span><span class="mi">368</span> <span class="o">+</span> <span class="mi">64</span><span class="p">]</span>
</span><span id="L-245"><a href="#L-245"><span class="linenos"> 245</span></a> <span class="c1"># get EC pub key from the certificate</span>
</span><span id="L-246"><a href="#L-246"><span class="linenos"> 246</span></a> <span class="n">pub_key</span> <span class="o">=</span> <span class="n">cert</span><span class="o">.</span><span class="n">public_key</span><span class="p">()</span><span class="o">.</span><span class="n">public_bytes</span><span class="p">(</span>
</span><span id="L-247"><a href="#L-247"><span class="linenos"> 247</span></a> <span class="n">cryptography</span><span class="o">.</span><span class="n">hazmat</span><span class="o">.</span><span class="n">primitives</span><span class="o">.</span><span class="n">serialization</span><span class="o">.</span><span class="n">Encoding</span><span class="o">.</span><span class="n">X962</span><span class="p">,</span>
</span><span id="L-248"><a href="#L-248"><span class="linenos"> 248</span></a> <span class="n">cryptography</span><span class="o">.</span><span class="n">hazmat</span><span class="o">.</span><span class="n">primitives</span><span class="o">.</span><span class="n">serialization</span><span class="o">.</span><span class="n">PublicFormat</span><span class="o">.</span>
</span><span id="L-249"><a href="#L-249"><span class="linenos"> 249</span></a> <span class="n">UncompressedPoint</span><span class="p">)</span>
</span><span id="L-250"><a href="#L-250"><span class="linenos"> 250</span></a>
</span><span id="L-251"><a href="#L-251"><span class="linenos"> 251</span></a> <span class="c1"># verify whether the certificate is bound to the quote</span>
</span><span id="L-252"><a href="#L-252"><span class="linenos"> 252</span></a> <span class="k">assert</span> <span class="p">(</span><span class="n">pub_key</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="mi">4</span><span class="p">)</span>
</span><span id="L-253"><a href="#L-253"><span class="linenos"> 253</span></a> <span class="k">if</span> <span class="n">pub_key</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="o">!=</span> <span class="n">report_data</span><span class="p">:</span>
</span><span id="L-254"><a href="#L-254"><span class="linenos"> 254</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span>
</span><span id="L-255"><a href="#L-255"><span class="linenos"> 255</span></a> <span class="s2">&quot;Failed to verify the certificate agaist the report data in the quote&quot;</span>
</span><span id="L-256"><a href="#L-256"><span class="linenos"> 256</span></a> <span class="p">)</span>
</span><span id="L-257"><a href="#L-257"><span class="linenos"> 257</span></a>
</span><span id="L-258"><a href="#L-258"><span class="linenos"> 258</span></a> <span class="c1"># get mr_enclave and mr_signer from the quote</span>
</span><span id="L-259"><a href="#L-259"><span class="linenos"> 259</span></a> <span class="n">mr_enclave</span> <span class="o">=</span> <span class="n">quote</span><span class="p">[</span><span class="mi">112</span><span class="p">:</span><span class="mi">112</span> <span class="o">+</span> <span class="mi">32</span><span class="p">]</span><span class="o">.</span><span class="n">hex</span><span class="p">()</span>
</span><span id="L-260"><a href="#L-260"><span class="linenos"> 260</span></a> <span class="n">mr_signer</span> <span class="o">=</span> <span class="n">quote</span><span class="p">[</span><span class="mi">176</span><span class="p">:</span><span class="mi">176</span> <span class="o">+</span> <span class="mi">32</span><span class="p">]</span><span class="o">.</span><span class="n">hex</span><span class="p">()</span>
</span><span id="L-261"><a href="#L-261"><span class="linenos"> 261</span></a>
</span><span id="L-262"><a href="#L-262"><span class="linenos"> 262</span></a> <span class="c1"># get enclave_info</span>
</span><span id="L-263"><a href="#L-263"><span class="linenos"> 263</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-264"><a href="#L-264"><span class="linenos"> 264</span></a> <span class="n">enclave_info</span> <span class="o">=</span> <span class="n">toml</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">enclave_info_path</span><span class="p">)</span>
</span><span id="L-265"><a href="#L-265"><span class="linenos"> 265</span></a> <span class="k">except</span><span class="p">:</span>
</span><span id="L-266"><a href="#L-266"><span class="linenos"> 266</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="s2">&quot;Failed to load enclave info&quot;</span><span class="p">)</span>
</span><span id="L-267"><a href="#L-267"><span class="linenos"> 267</span></a>
</span><span id="L-268"><a href="#L-268"><span class="linenos"> 268</span></a> <span class="c1"># verify mr_enclave and mr_signer</span>
</span><span id="L-269"><a href="#L-269"><span class="linenos"> 269</span></a> <span class="n">enclave_name</span> <span class="o">=</span> <span class="s2">&quot;teaclave_&quot;</span> <span class="o">+</span> <span class="n">endpoint_name</span> <span class="o">+</span> <span class="s2">&quot;_service&quot;</span>
</span><span id="L-270"><a href="#L-270"><span class="linenos"> 270</span></a> <span class="k">if</span> <span class="n">mr_enclave</span> <span class="o">!=</span> <span class="n">enclave_info</span><span class="p">[</span><span class="n">enclave_name</span><span class="p">][</span><span class="s2">&quot;mr_enclave&quot;</span><span class="p">]:</span>
</span><span id="L-271"><a href="#L-271"><span class="linenos"> 271</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">&quot;Failed to verify mr_enclave&quot;</span><span class="p">)</span>
</span><span id="L-272"><a href="#L-272"><span class="linenos"> 272</span></a>
</span><span id="L-273"><a href="#L-273"><span class="linenos"> 273</span></a> <span class="k">if</span> <span class="n">mr_signer</span> <span class="o">!=</span> <span class="n">enclave_info</span><span class="p">[</span><span class="n">enclave_name</span><span class="p">][</span><span class="s2">&quot;mr_signer&quot;</span><span class="p">]:</span>
</span><span id="L-274"><a href="#L-274"><span class="linenos"> 274</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">&quot;Failed to verify mr_signer&quot;</span><span class="p">)</span>
</span><span id="L-275"><a href="#L-275"><span class="linenos"> 275</span></a>
</span><span id="L-276"><a href="#L-276"><span class="linenos"> 276</span></a>
</span><span id="L-277"><a href="#L-277"><span class="linenos"> 277</span></a><span class="k">class</span> <span class="nc">FunctionInput</span><span class="p">:</span>
</span><span id="L-278"><a href="#L-278"><span class="linenos"> 278</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Function input for registering.</span>
</span><span id="L-279"><a href="#L-279"><span class="linenos"> 279</span></a>
</span><span id="L-280"><a href="#L-280"><span class="linenos"> 280</span></a><span class="sd"> Args:</span>
</span><span id="L-281"><a href="#L-281"><span class="linenos"> 281</span></a>
</span><span id="L-282"><a href="#L-282"><span class="linenos"> 282</span></a><span class="sd"> name: Name of input data.</span>
</span><span id="L-283"><a href="#L-283"><span class="linenos"> 283</span></a><span class="sd"> description: Description of the input data.</span>
</span><span id="L-284"><a href="#L-284"><span class="linenos"> 284</span></a><span class="sd"> optional: [Default: False] Data owners do not need to register the data.</span>
</span><span id="L-285"><a href="#L-285"><span class="linenos"> 285</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-286"><a href="#L-286"><span class="linenos"> 286</span></a>
</span><span id="L-287"><a href="#L-287"><span class="linenos"> 287</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-288"><a href="#L-288"><span class="linenos"> 288</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">FunctionInput</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
</span><span id="L-289"><a href="#L-289"><span class="linenos"> 289</span></a> <span class="n">description</span><span class="o">=</span><span class="n">description</span><span class="p">,</span>
</span><span id="L-290"><a href="#L-290"><span class="linenos"> 290</span></a> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span><span class="p">)</span>
</span><span id="L-291"><a href="#L-291"><span class="linenos"> 291</span></a>
</span><span id="L-292"><a href="#L-292"><span class="linenos"> 292</span></a>
</span><span id="L-293"><a href="#L-293"><span class="linenos"> 293</span></a><span class="k">class</span> <span class="nc">FunctionOutput</span><span class="p">:</span>
</span><span id="L-294"><a href="#L-294"><span class="linenos"> 294</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Function output for registering.</span>
</span><span id="L-295"><a href="#L-295"><span class="linenos"> 295</span></a>
</span><span id="L-296"><a href="#L-296"><span class="linenos"> 296</span></a><span class="sd"> Args:</span>
</span><span id="L-297"><a href="#L-297"><span class="linenos"> 297</span></a>
</span><span id="L-298"><a href="#L-298"><span class="linenos"> 298</span></a><span class="sd"> name: Name of output data.</span>
</span><span id="L-299"><a href="#L-299"><span class="linenos"> 299</span></a><span class="sd"> description: Description of the output data.</span>
</span><span id="L-300"><a href="#L-300"><span class="linenos"> 300</span></a><span class="sd"> optional: [Default: False] Data owners do not need to register the data.</span>
</span><span id="L-301"><a href="#L-301"><span class="linenos"> 301</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-302"><a href="#L-302"><span class="linenos"> 302</span></a>
</span><span id="L-303"><a href="#L-303"><span class="linenos"> 303</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-304"><a href="#L-304"><span class="linenos"> 304</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">FunctionOutput</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
</span><span id="L-305"><a href="#L-305"><span class="linenos"> 305</span></a> <span class="n">description</span><span class="o">=</span><span class="n">description</span><span class="p">,</span>
</span><span id="L-306"><a href="#L-306"><span class="linenos"> 306</span></a> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span><span class="p">)</span>
</span><span id="L-307"><a href="#L-307"><span class="linenos"> 307</span></a>
</span><span id="L-308"><a href="#L-308"><span class="linenos"> 308</span></a>
</span><span id="L-309"><a href="#L-309"><span class="linenos"> 309</span></a><span class="k">class</span> <span class="nc">FunctionArgument</span><span class="p">:</span>
</span><span id="L-310"><a href="#L-310"><span class="linenos"> 310</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Function argument for registring.</span>
</span><span id="L-311"><a href="#L-311"><span class="linenos"> 311</span></a>
</span><span id="L-312"><a href="#L-312"><span class="linenos"> 312</span></a><span class="sd"> Args:</span>
</span><span id="L-313"><a href="#L-313"><span class="linenos"> 313</span></a><span class="sd"> key: Name of the argument.</span>
</span><span id="L-314"><a href="#L-314"><span class="linenos"> 314</span></a><span class="sd"> default_value: A default value of the argument. The default value is &quot;&quot;.</span>
</span><span id="L-315"><a href="#L-315"><span class="linenos"> 315</span></a><span class="sd"> allow_overwrite: If allow_overwrite flag is set to be true. The service</span>
</span><span id="L-316"><a href="#L-316"><span class="linenos"> 316</span></a><span class="sd"> will allow the task creator to overwrite the arguement</span>
</span><span id="L-317"><a href="#L-317"><span class="linenos"> 317</span></a><span class="sd"> value when creating tasks.</span>
</span><span id="L-318"><a href="#L-318"><span class="linenos"> 318</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-319"><a href="#L-319"><span class="linenos"> 319</span></a>
</span><span id="L-320"><a href="#L-320"><span class="linenos"> 320</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="L-321"><a href="#L-321"><span class="linenos"> 321</span></a> <span class="n">key</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-322"><a href="#L-322"><span class="linenos"> 322</span></a> <span class="n">default_value</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
</span><span id="L-323"><a href="#L-323"><span class="linenos"> 323</span></a> <span class="n">allow_overwrite</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
</span><span id="L-324"><a href="#L-324"><span class="linenos"> 324</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">FunctionArgument</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
</span><span id="L-325"><a href="#L-325"><span class="linenos"> 325</span></a> <span class="n">default_value</span><span class="o">=</span><span class="n">default_value</span><span class="p">,</span>
</span><span id="L-326"><a href="#L-326"><span class="linenos"> 326</span></a> <span class="n">allow_overwrite</span><span class="o">=</span><span class="n">allow_overwrite</span><span class="p">)</span>
</span><span id="L-327"><a href="#L-327"><span class="linenos"> 327</span></a>
</span><span id="L-328"><a href="#L-328"><span class="linenos"> 328</span></a>
</span><span id="L-329"><a href="#L-329"><span class="linenos"> 329</span></a><span class="k">class</span> <span class="nc">OwnerList</span><span class="p">:</span>
</span><span id="L-330"><a href="#L-330"><span class="linenos"> 330</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Defines data ownership.</span>
</span><span id="L-331"><a href="#L-331"><span class="linenos"> 331</span></a>
</span><span id="L-332"><a href="#L-332"><span class="linenos"> 332</span></a><span class="sd"> Args:</span>
</span><span id="L-333"><a href="#L-333"><span class="linenos"> 333</span></a>
</span><span id="L-334"><a href="#L-334"><span class="linenos"> 334</span></a><span class="sd"> data_name: Name of output data.</span>
</span><span id="L-335"><a href="#L-335"><span class="linenos"> 335</span></a><span class="sd"> uids: A list of user id which own this data.</span>
</span><span id="L-336"><a href="#L-336"><span class="linenos"> 336</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-337"><a href="#L-337"><span class="linenos"> 337</span></a>
</span><span id="L-338"><a href="#L-338"><span class="linenos"> 338</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">uids</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]):</span>
</span><span id="L-339"><a href="#L-339"><span class="linenos"> 339</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">OwnerList</span><span class="p">(</span><span class="n">data_name</span><span class="o">=</span><span class="n">data_name</span><span class="p">,</span> <span class="n">uids</span><span class="o">=</span><span class="n">uids</span><span class="p">)</span>
</span><span id="L-340"><a href="#L-340"><span class="linenos"> 340</span></a>
</span><span id="L-341"><a href="#L-341"><span class="linenos"> 341</span></a>
</span><span id="L-342"><a href="#L-342"><span class="linenos"> 342</span></a><span class="k">class</span> <span class="nc">DataMap</span><span class="p">:</span>
</span><span id="L-343"><a href="#L-343"><span class="linenos"> 343</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Assign data id to input or output data.</span>
</span><span id="L-344"><a href="#L-344"><span class="linenos"> 344</span></a>
</span><span id="L-345"><a href="#L-345"><span class="linenos"> 345</span></a><span class="sd"> Args:</span>
</span><span id="L-346"><a href="#L-346"><span class="linenos"> 346</span></a>
</span><span id="L-347"><a href="#L-347"><span class="linenos"> 347</span></a><span class="sd"> data_name: Name of output data.</span>
</span><span id="L-348"><a href="#L-348"><span class="linenos"> 348</span></a><span class="sd"> data_id: Id for the data name.</span>
</span><span id="L-349"><a href="#L-349"><span class="linenos"> 349</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-350"><a href="#L-350"><span class="linenos"> 350</span></a>
</span><span id="L-351"><a href="#L-351"><span class="linenos"> 351</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data_name</span><span class="p">,</span> <span class="n">data_id</span><span class="p">):</span>
</span><span id="L-352"><a href="#L-352"><span class="linenos"> 352</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">DataMap</span><span class="p">(</span><span class="n">data_name</span><span class="o">=</span><span class="n">data_name</span><span class="p">,</span> <span class="n">data_id</span><span class="o">=</span><span class="n">data_id</span><span class="p">)</span>
</span><span id="L-353"><a href="#L-353"><span class="linenos"> 353</span></a>
</span><span id="L-354"><a href="#L-354"><span class="linenos"> 354</span></a>
</span><span id="L-355"><a href="#L-355"><span class="linenos"> 355</span></a><span class="k">class</span> <span class="nc">CryptoInfo</span><span class="p">:</span>
</span><span id="L-356"><a href="#L-356"><span class="linenos"> 356</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Cryptographic information for the input/output data.</span>
</span><span id="L-357"><a href="#L-357"><span class="linenos"> 357</span></a>
</span><span id="L-358"><a href="#L-358"><span class="linenos"> 358</span></a><span class="sd"> Args:</span>
</span><span id="L-359"><a href="#L-359"><span class="linenos"> 359</span></a>
</span><span id="L-360"><a href="#L-360"><span class="linenos"> 360</span></a><span class="sd"> schema: Encryption algorithms for the input/output data.</span>
</span><span id="L-361"><a href="#L-361"><span class="linenos"> 361</span></a><span class="sd"> key: Key for encryption and decryption, bytes in list.</span>
</span><span id="L-362"><a href="#L-362"><span class="linenos"> 362</span></a><span class="sd"> iv: IV, bytes in list.</span>
</span><span id="L-363"><a href="#L-363"><span class="linenos"> 363</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-364"><a href="#L-364"><span class="linenos"> 364</span></a>
</span><span id="L-365"><a href="#L-365"><span class="linenos"> 365</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">key</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">iv</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]):</span>
</span><span id="L-366"><a href="#L-366"><span class="linenos"> 366</span></a>
</span><span id="L-367"><a href="#L-367"><span class="linenos"> 367</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">FileCryptoInfo</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
</span><span id="L-368"><a href="#L-368"><span class="linenos"> 368</span></a> <span class="n">key</span><span class="o">=</span><span class="nb">bytes</span><span class="p">(</span><span class="n">key</span><span class="p">),</span>
</span><span id="L-369"><a href="#L-369"><span class="linenos"> 369</span></a> <span class="n">iv</span><span class="o">=</span><span class="nb">bytes</span><span class="p">(</span><span class="n">iv</span><span class="p">))</span>
</span><span id="L-370"><a href="#L-370"><span class="linenos"> 370</span></a>
</span><span id="L-371"><a href="#L-371"><span class="linenos"> 371</span></a>
</span><span id="L-372"><a href="#L-372"><span class="linenos"> 372</span></a><span class="k">class</span> <span class="nc">UserRegisterRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-373"><a href="#L-373"><span class="linenos"> 373</span></a>
</span><span id="L-374"><a href="#L-374"><span class="linenos"> 374</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">user_password</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-375"><a href="#L-375"><span class="linenos"> 375</span></a> <span class="n">role</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">attribute</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-376"><a href="#L-376"><span class="linenos"> 376</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;UserRegister&quot;</span><span class="p">,</span> <span class="n">Empty</span><span class="p">,</span> <span class="n">metadata</span><span class="p">)</span>
</span><span id="L-377"><a href="#L-377"><span class="linenos"> 377</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">auth</span><span class="o">.</span><span class="n">UserRegisterRequest</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">user_id</span><span class="p">,</span>
</span><span id="L-378"><a href="#L-378"><span class="linenos"> 378</span></a> <span class="n">password</span><span class="o">=</span><span class="n">user_password</span><span class="p">,</span>
</span><span id="L-379"><a href="#L-379"><span class="linenos"> 379</span></a> <span class="n">role</span><span class="o">=</span><span class="n">role</span><span class="p">,</span>
</span><span id="L-380"><a href="#L-380"><span class="linenos"> 380</span></a> <span class="n">attribute</span><span class="o">=</span><span class="n">attribute</span><span class="p">)</span>
</span><span id="L-381"><a href="#L-381"><span class="linenos"> 381</span></a>
</span><span id="L-382"><a href="#L-382"><span class="linenos"> 382</span></a>
</span><span id="L-383"><a href="#L-383"><span class="linenos"> 383</span></a><span class="k">class</span> <span class="nc">UserUpdateRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-384"><a href="#L-384"><span class="linenos"> 384</span></a>
</span><span id="L-385"><a href="#L-385"><span class="linenos"> 385</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">user_password</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-386"><a href="#L-386"><span class="linenos"> 386</span></a> <span class="n">role</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">attribute</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-387"><a href="#L-387"><span class="linenos"> 387</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;UserUpdate&quot;</span><span class="p">,</span> <span class="n">Empty</span><span class="p">)</span>
</span><span id="L-388"><a href="#L-388"><span class="linenos"> 388</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">auth</span><span class="o">.</span><span class="n">UserUpdateRequest</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">user_id</span><span class="p">,</span>
</span><span id="L-389"><a href="#L-389"><span class="linenos"> 389</span></a> <span class="n">password</span><span class="o">=</span><span class="n">user_password</span><span class="p">,</span>
</span><span id="L-390"><a href="#L-390"><span class="linenos"> 390</span></a> <span class="n">role</span><span class="o">=</span><span class="n">role</span><span class="p">,</span>
</span><span id="L-391"><a href="#L-391"><span class="linenos"> 391</span></a> <span class="n">attribute</span><span class="o">=</span><span class="n">attribute</span><span class="p">)</span>
</span><span id="L-392"><a href="#L-392"><span class="linenos"> 392</span></a>
</span><span id="L-393"><a href="#L-393"><span class="linenos"> 393</span></a>
</span><span id="L-394"><a href="#L-394"><span class="linenos"> 394</span></a><span class="k">class</span> <span class="nc">UserLoginRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-395"><a href="#L-395"><span class="linenos"> 395</span></a>
</span><span id="L-396"><a href="#L-396"><span class="linenos"> 396</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">user_password</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-397"><a href="#L-397"><span class="linenos"> 397</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;UserLogin&quot;</span><span class="p">,</span> <span class="n">auth</span><span class="o">.</span><span class="n">UserLoginResponse</span><span class="p">)</span>
</span><span id="L-398"><a href="#L-398"><span class="linenos"> 398</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">auth</span><span class="o">.</span><span class="n">UserLoginRequest</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">user_id</span><span class="p">,</span>
</span><span id="L-399"><a href="#L-399"><span class="linenos"> 399</span></a> <span class="n">password</span><span class="o">=</span><span class="n">user_password</span><span class="p">)</span>
</span><span id="L-400"><a href="#L-400"><span class="linenos"> 400</span></a>
</span><span id="L-401"><a href="#L-401"><span class="linenos"> 401</span></a>
</span><span id="L-402"><a href="#L-402"><span class="linenos"> 402</span></a><span class="k">class</span> <span class="nc">UserChangePasswordRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-403"><a href="#L-403"><span class="linenos"> 403</span></a>
</span><span id="L-404"><a href="#L-404"><span class="linenos"> 404</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">password</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-405"><a href="#L-405"><span class="linenos"> 405</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;UserChangePassword&quot;</span><span class="p">,</span> <span class="n">Empty</span><span class="p">,</span> <span class="n">metadata</span><span class="p">)</span>
</span><span id="L-406"><a href="#L-406"><span class="linenos"> 406</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">auth</span><span class="o">.</span><span class="n">UserChangePasswordRequest</span><span class="p">(</span><span class="n">password</span><span class="o">=</span><span class="n">password</span><span class="p">)</span>
</span><span id="L-407"><a href="#L-407"><span class="linenos"> 407</span></a>
</span><span id="L-408"><a href="#L-408"><span class="linenos"> 408</span></a>
</span><span id="L-409"><a href="#L-409"><span class="linenos"> 409</span></a><span class="k">class</span> <span class="nc">ResetUserPasswordRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-410"><a href="#L-410"><span class="linenos"> 410</span></a>
</span><span id="L-411"><a href="#L-411"><span class="linenos"> 411</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-412"><a href="#L-412"><span class="linenos"> 412</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;ResetUserPassword&quot;</span><span class="p">,</span> <span class="n">auth</span><span class="o">.</span><span class="n">ResetUserPasswordResponse</span><span class="p">,</span>
</span><span id="L-413"><a href="#L-413"><span class="linenos"> 413</span></a> <span class="n">metadata</span><span class="p">)</span>
</span><span id="L-414"><a href="#L-414"><span class="linenos"> 414</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">auth</span><span class="o">.</span><span class="n">ResetUserPasswordRequest</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">user_id</span><span class="p">)</span>
</span><span id="L-415"><a href="#L-415"><span class="linenos"> 415</span></a>
</span><span id="L-416"><a href="#L-416"><span class="linenos"> 416</span></a>
</span><span id="L-417"><a href="#L-417"><span class="linenos"> 417</span></a><span class="k">class</span> <span class="nc">DeleteUserRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-418"><a href="#L-418"><span class="linenos"> 418</span></a>
</span><span id="L-419"><a href="#L-419"><span class="linenos"> 419</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-420"><a href="#L-420"><span class="linenos"> 420</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;DeleteUser&quot;</span><span class="p">,</span> <span class="n">Empty</span><span class="p">,</span> <span class="n">metadata</span><span class="p">)</span>
</span><span id="L-421"><a href="#L-421"><span class="linenos"> 421</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">auth</span><span class="o">.</span><span class="n">DeleteUserRequest</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">user_id</span><span class="p">)</span>
</span><span id="L-422"><a href="#L-422"><span class="linenos"> 422</span></a>
</span><span id="L-423"><a href="#L-423"><span class="linenos"> 423</span></a>
</span><span id="L-424"><a href="#L-424"><span class="linenos"> 424</span></a><span class="k">class</span> <span class="nc">ListUsersRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-425"><a href="#L-425"><span class="linenos"> 425</span></a>
</span><span id="L-426"><a href="#L-426"><span class="linenos"> 426</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-427"><a href="#L-427"><span class="linenos"> 427</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;ListUsers&quot;</span><span class="p">,</span> <span class="n">auth</span><span class="o">.</span><span class="n">ListUsersResponse</span><span class="p">,</span> <span class="n">metadata</span><span class="p">)</span>
</span><span id="L-428"><a href="#L-428"><span class="linenos"> 428</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">auth</span><span class="o">.</span><span class="n">ListUsersRequest</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">user_id</span><span class="p">)</span>
</span><span id="L-429"><a href="#L-429"><span class="linenos"> 429</span></a>
</span><span id="L-430"><a href="#L-430"><span class="linenos"> 430</span></a>
</span><span id="L-431"><a href="#L-431"><span class="linenos"> 431</span></a><span class="k">class</span> <span class="nc">AuthenticationService</span><span class="p">(</span><span class="n">TeaclaveService</span><span class="p">):</span>
</span><span id="L-432"><a href="#L-432"><span class="linenos"> 432</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-433"><a href="#L-433"><span class="linenos"> 433</span></a><span class="sd"> Establish trusted channel with the authentication service and provide</span>
</span><span id="L-434"><a href="#L-434"><span class="linenos"> 434</span></a><span class="sd"> clients to send request through RPC.</span>
</span><span id="L-435"><a href="#L-435"><span class="linenos"> 435</span></a>
</span><span id="L-436"><a href="#L-436"><span class="linenos"> 436</span></a><span class="sd"> Args:</span>
</span><span id="L-437"><a href="#L-437"><span class="linenos"> 437</span></a>
</span><span id="L-438"><a href="#L-438"><span class="linenos"> 438</span></a><span class="sd"> address: The address of the remote services in tuple.</span>
</span><span id="L-439"><a href="#L-439"><span class="linenos"> 439</span></a><span class="sd"> as_root_ca_cert_path: Root CA certification of the attestation services</span>
</span><span id="L-440"><a href="#L-440"><span class="linenos"> 440</span></a><span class="sd"> to verify the attestation report.</span>
</span><span id="L-441"><a href="#L-441"><span class="linenos"> 441</span></a><span class="sd"> enclave_info_path: Path of enclave info to verify the remote service in</span>
</span><span id="L-442"><a href="#L-442"><span class="linenos"> 442</span></a><span class="sd"> the attestation report.</span>
</span><span id="L-443"><a href="#L-443"><span class="linenos"> 443</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-444"><a href="#L-444"><span class="linenos"> 444</span></a>
</span><span id="L-445"><a href="#L-445"><span class="linenos"> 445</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="L-446"><a href="#L-446"><span class="linenos"> 446</span></a> <span class="n">address</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">],</span>
</span><span id="L-447"><a href="#L-447"><span class="linenos"> 447</span></a> <span class="n">as_root_ca_cert_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-448"><a href="#L-448"><span class="linenos"> 448</span></a> <span class="n">enclave_info_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-449"><a href="#L-449"><span class="linenos"> 449</span></a> <span class="n">dump_report</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-450"><a href="#L-450"><span class="linenos"> 450</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;authentication&quot;</span><span class="p">,</span> <span class="n">address</span><span class="p">,</span> <span class="n">as_root_ca_cert_path</span><span class="p">,</span>
</span><span id="L-451"><a href="#L-451"><span class="linenos"> 451</span></a> <span class="n">enclave_info_path</span><span class="p">,</span> <span class="n">dump_report</span><span class="p">)</span>
</span><span id="L-452"><a href="#L-452"><span class="linenos"> 452</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">stub</span> <span class="o">=</span> <span class="n">TeaclaveAuthenticationApiStub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="p">)</span>
</span><span id="L-453"><a href="#L-453"><span class="linenos"> 453</span></a>
</span><span id="L-454"><a href="#L-454"><span class="linenos"> 454</span></a> <span class="k">def</span> <span class="nf">user_register</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="L-455"><a href="#L-455"><span class="linenos"> 455</span></a> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-456"><a href="#L-456"><span class="linenos"> 456</span></a> <span class="n">user_password</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-457"><a href="#L-457"><span class="linenos"> 457</span></a> <span class="n">role</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span>
</span><span id="L-458"><a href="#L-458"><span class="linenos"> 458</span></a> <span class="n">attribute</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">):</span>
</span><span id="L-459"><a href="#L-459"><span class="linenos"> 459</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Register a new user.</span>
</span><span id="L-460"><a href="#L-460"><span class="linenos"> 460</span></a>
</span><span id="L-461"><a href="#L-461"><span class="linenos"> 461</span></a><span class="sd"> Args:</span>
</span><span id="L-462"><a href="#L-462"><span class="linenos"> 462</span></a>
</span><span id="L-463"><a href="#L-463"><span class="linenos"> 463</span></a><span class="sd"> user_id: User ID.</span>
</span><span id="L-464"><a href="#L-464"><span class="linenos"> 464</span></a><span class="sd"> user_password: Password.</span>
</span><span id="L-465"><a href="#L-465"><span class="linenos"> 465</span></a><span class="sd"> role: Role of user.</span>
</span><span id="L-466"><a href="#L-466"><span class="linenos"> 466</span></a><span class="sd"> attribute: Attribute related to the role.</span>
</span><span id="L-467"><a href="#L-467"><span class="linenos"> 467</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-468"><a href="#L-468"><span class="linenos"> 468</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-469"><a href="#L-469"><span class="linenos"> 469</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-470"><a href="#L-470"><span class="linenos"> 470</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">UserRegisterRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">,</span> <span class="n">user_password</span><span class="p">,</span>
</span><span id="L-471"><a href="#L-471"><span class="linenos"> 471</span></a> <span class="n">role</span><span class="p">,</span> <span class="n">attribute</span><span class="p">)</span>
</span><span id="L-472"><a href="#L-472"><span class="linenos"> 472</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-473"><a href="#L-473"><span class="linenos"> 473</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-474"><a href="#L-474"><span class="linenos"> 474</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="L-475"><a href="#L-475"><span class="linenos"> 475</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-476"><a href="#L-476"><span class="linenos"> 476</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to register user </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-477"><a href="#L-477"><span class="linenos"> 477</span></a>
</span><span id="L-478"><a href="#L-478"><span class="linenos"> 478</span></a> <span class="k">def</span> <span class="nf">user_update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="L-479"><a href="#L-479"><span class="linenos"> 479</span></a> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-480"><a href="#L-480"><span class="linenos"> 480</span></a> <span class="n">user_password</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-481"><a href="#L-481"><span class="linenos"> 481</span></a> <span class="n">role</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-482"><a href="#L-482"><span class="linenos"> 482</span></a> <span class="n">attribute</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">):</span>
</span><span id="L-483"><a href="#L-483"><span class="linenos"> 483</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Update an existing user.</span>
</span><span id="L-484"><a href="#L-484"><span class="linenos"> 484</span></a>
</span><span id="L-485"><a href="#L-485"><span class="linenos"> 485</span></a><span class="sd"> Args:</span>
</span><span id="L-486"><a href="#L-486"><span class="linenos"> 486</span></a>
</span><span id="L-487"><a href="#L-487"><span class="linenos"> 487</span></a><span class="sd"> user_id: User ID.</span>
</span><span id="L-488"><a href="#L-488"><span class="linenos"> 488</span></a><span class="sd"> user_password: Password.</span>
</span><span id="L-489"><a href="#L-489"><span class="linenos"> 489</span></a><span class="sd"> role: Role of user.</span>
</span><span id="L-490"><a href="#L-490"><span class="linenos"> 490</span></a><span class="sd"> attribute: Attribute related to the role.</span>
</span><span id="L-491"><a href="#L-491"><span class="linenos"> 491</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-492"><a href="#L-492"><span class="linenos"> 492</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-493"><a href="#L-493"><span class="linenos"> 493</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-494"><a href="#L-494"><span class="linenos"> 494</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">UserUpdateRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">,</span> <span class="n">user_password</span><span class="p">,</span>
</span><span id="L-495"><a href="#L-495"><span class="linenos"> 495</span></a> <span class="n">role</span><span class="p">,</span> <span class="n">attribute</span><span class="p">)</span>
</span><span id="L-496"><a href="#L-496"><span class="linenos"> 496</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-497"><a href="#L-497"><span class="linenos"> 497</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-498"><a href="#L-498"><span class="linenos"> 498</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="L-499"><a href="#L-499"><span class="linenos"> 499</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-500"><a href="#L-500"><span class="linenos"> 500</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to update user </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-501"><a href="#L-501"><span class="linenos"> 501</span></a>
</span><span id="L-502"><a href="#L-502"><span class="linenos"> 502</span></a> <span class="k">def</span> <span class="nf">user_login</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">user_password</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-503"><a href="#L-503"><span class="linenos"> 503</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Login and get a session token.</span>
</span><span id="L-504"><a href="#L-504"><span class="linenos"> 504</span></a>
</span><span id="L-505"><a href="#L-505"><span class="linenos"> 505</span></a><span class="sd"> Args:</span>
</span><span id="L-506"><a href="#L-506"><span class="linenos"> 506</span></a>
</span><span id="L-507"><a href="#L-507"><span class="linenos"> 507</span></a><span class="sd"> user_id: User ID.</span>
</span><span id="L-508"><a href="#L-508"><span class="linenos"> 508</span></a><span class="sd"> user_password: Password.</span>
</span><span id="L-509"><a href="#L-509"><span class="linenos"> 509</span></a>
</span><span id="L-510"><a href="#L-510"><span class="linenos"> 510</span></a><span class="sd"> Returns:</span>
</span><span id="L-511"><a href="#L-511"><span class="linenos"> 511</span></a>
</span><span id="L-512"><a href="#L-512"><span class="linenos"> 512</span></a><span class="sd"> str: User login token.</span>
</span><span id="L-513"><a href="#L-513"><span class="linenos"> 513</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-514"><a href="#L-514"><span class="linenos"> 514</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-515"><a href="#L-515"><span class="linenos"> 515</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">UserLoginRequest</span><span class="p">(</span><span class="n">user_id</span><span class="p">,</span> <span class="n">user_password</span><span class="p">)</span>
</span><span id="L-516"><a href="#L-516"><span class="linenos"> 516</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-517"><a href="#L-517"><span class="linenos"> 517</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-518"><a href="#L-518"><span class="linenos"> 518</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">metadata</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="n">user_id</span><span class="p">,</span> <span class="s2">&quot;token&quot;</span><span class="p">:</span> <span class="n">response</span><span class="o">.</span><span class="n">token</span><span class="p">}</span>
</span><span id="L-519"><a href="#L-519"><span class="linenos"> 519</span></a> <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">token</span>
</span><span id="L-520"><a href="#L-520"><span class="linenos"> 520</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-521"><a href="#L-521"><span class="linenos"> 521</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to login user </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-522"><a href="#L-522"><span class="linenos"> 522</span></a>
</span><span id="L-523"><a href="#L-523"><span class="linenos"> 523</span></a> <span class="k">def</span> <span class="nf">user_change_password</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_password</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-524"><a href="#L-524"><span class="linenos"> 524</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Change password.</span>
</span><span id="L-525"><a href="#L-525"><span class="linenos"> 525</span></a>
</span><span id="L-526"><a href="#L-526"><span class="linenos"> 526</span></a><span class="sd"> Args:</span>
</span><span id="L-527"><a href="#L-527"><span class="linenos"> 527</span></a>
</span><span id="L-528"><a href="#L-528"><span class="linenos"> 528</span></a><span class="sd"> user_password: New password.</span>
</span><span id="L-529"><a href="#L-529"><span class="linenos"> 529</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-530"><a href="#L-530"><span class="linenos"> 530</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-531"><a href="#L-531"><span class="linenos"> 531</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-532"><a href="#L-532"><span class="linenos"> 532</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">UserChangePasswordRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">user_password</span><span class="p">)</span>
</span><span id="L-533"><a href="#L-533"><span class="linenos"> 533</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-534"><a href="#L-534"><span class="linenos"> 534</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-535"><a href="#L-535"><span class="linenos"> 535</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="L-536"><a href="#L-536"><span class="linenos"> 536</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-537"><a href="#L-537"><span class="linenos"> 537</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to change password </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-538"><a href="#L-538"><span class="linenos"> 538</span></a>
</span><span id="L-539"><a href="#L-539"><span class="linenos"> 539</span></a> <span class="k">def</span> <span class="nf">reset_user_password</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-540"><a href="#L-540"><span class="linenos"> 540</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Reset password of a managed user.</span>
</span><span id="L-541"><a href="#L-541"><span class="linenos"> 541</span></a>
</span><span id="L-542"><a href="#L-542"><span class="linenos"> 542</span></a><span class="sd"> Args:</span>
</span><span id="L-543"><a href="#L-543"><span class="linenos"> 543</span></a>
</span><span id="L-544"><a href="#L-544"><span class="linenos"> 544</span></a><span class="sd"> user_id: User ID.</span>
</span><span id="L-545"><a href="#L-545"><span class="linenos"> 545</span></a>
</span><span id="L-546"><a href="#L-546"><span class="linenos"> 546</span></a><span class="sd"> Returns:</span>
</span><span id="L-547"><a href="#L-547"><span class="linenos"> 547</span></a>
</span><span id="L-548"><a href="#L-548"><span class="linenos"> 548</span></a><span class="sd"> str: New password.</span>
</span><span id="L-549"><a href="#L-549"><span class="linenos"> 549</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-550"><a href="#L-550"><span class="linenos"> 550</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-551"><a href="#L-551"><span class="linenos"> 551</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-552"><a href="#L-552"><span class="linenos"> 552</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">ResetUserPasswordRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">)</span>
</span><span id="L-553"><a href="#L-553"><span class="linenos"> 553</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-554"><a href="#L-554"><span class="linenos"> 554</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-555"><a href="#L-555"><span class="linenos"> 555</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="L-556"><a href="#L-556"><span class="linenos"> 556</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-557"><a href="#L-557"><span class="linenos"> 557</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="L-558"><a href="#L-558"><span class="linenos"> 558</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to reset password </span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-559"><a href="#L-559"><span class="linenos"> 559</span></a>
</span><span id="L-560"><a href="#L-560"><span class="linenos"> 560</span></a> <span class="k">def</span> <span class="nf">delete_user</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-561"><a href="#L-561"><span class="linenos"> 561</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Delete a user.</span>
</span><span id="L-562"><a href="#L-562"><span class="linenos"> 562</span></a>
</span><span id="L-563"><a href="#L-563"><span class="linenos"> 563</span></a><span class="sd"> Args:</span>
</span><span id="L-564"><a href="#L-564"><span class="linenos"> 564</span></a>
</span><span id="L-565"><a href="#L-565"><span class="linenos"> 565</span></a><span class="sd"> user_id: User ID.</span>
</span><span id="L-566"><a href="#L-566"><span class="linenos"> 566</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-567"><a href="#L-567"><span class="linenos"> 567</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-568"><a href="#L-568"><span class="linenos"> 568</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-569"><a href="#L-569"><span class="linenos"> 569</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">DeleteUserRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">)</span>
</span><span id="L-570"><a href="#L-570"><span class="linenos"> 570</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-571"><a href="#L-571"><span class="linenos"> 571</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-572"><a href="#L-572"><span class="linenos"> 572</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="L-573"><a href="#L-573"><span class="linenos"> 573</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-574"><a href="#L-574"><span class="linenos"> 574</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="L-575"><a href="#L-575"><span class="linenos"> 575</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to delete user (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-576"><a href="#L-576"><span class="linenos"> 576</span></a>
</span><span id="L-577"><a href="#L-577"><span class="linenos"> 577</span></a> <span class="k">def</span> <span class="nf">list_users</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-578"><a href="#L-578"><span class="linenos"> 578</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;List managed users</span>
</span><span id="L-579"><a href="#L-579"><span class="linenos"> 579</span></a>
</span><span id="L-580"><a href="#L-580"><span class="linenos"> 580</span></a><span class="sd"> Args:</span>
</span><span id="L-581"><a href="#L-581"><span class="linenos"> 581</span></a>
</span><span id="L-582"><a href="#L-582"><span class="linenos"> 582</span></a><span class="sd"> user_id: User ID.</span>
</span><span id="L-583"><a href="#L-583"><span class="linenos"> 583</span></a>
</span><span id="L-584"><a href="#L-584"><span class="linenos"> 584</span></a><span class="sd"> Returns:</span>
</span><span id="L-585"><a href="#L-585"><span class="linenos"> 585</span></a>
</span><span id="L-586"><a href="#L-586"><span class="linenos"> 586</span></a><span class="sd"> str: User list</span>
</span><span id="L-587"><a href="#L-587"><span class="linenos"> 587</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-588"><a href="#L-588"><span class="linenos"> 588</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-589"><a href="#L-589"><span class="linenos"> 589</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-590"><a href="#L-590"><span class="linenos"> 590</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">ListUsersRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">)</span>
</span><span id="L-591"><a href="#L-591"><span class="linenos"> 591</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-592"><a href="#L-592"><span class="linenos"> 592</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-593"><a href="#L-593"><span class="linenos"> 593</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="L-594"><a href="#L-594"><span class="linenos"> 594</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-595"><a href="#L-595"><span class="linenos"> 595</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="L-596"><a href="#L-596"><span class="linenos"> 596</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to list user (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-597"><a href="#L-597"><span class="linenos"> 597</span></a>
</span><span id="L-598"><a href="#L-598"><span class="linenos"> 598</span></a>
</span><span id="L-599"><a href="#L-599"><span class="linenos"> 599</span></a><span class="k">class</span> <span class="nc">RegisterFunctionRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-600"><a href="#L-600"><span class="linenos"> 600</span></a>
</span><span id="L-601"><a href="#L-601"><span class="linenos"> 601</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-602"><a href="#L-602"><span class="linenos"> 602</span></a> <span class="n">executor_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">public</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">payload</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span>
</span><span id="L-603"><a href="#L-603"><span class="linenos"> 603</span></a> <span class="n">arguments</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionArgument</span><span class="p">],</span>
</span><span id="L-604"><a href="#L-604"><span class="linenos"> 604</span></a> <span class="n">inputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionInput</span><span class="p">],</span> <span class="n">outputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionOutput</span><span class="p">],</span>
</span><span id="L-605"><a href="#L-605"><span class="linenos"> 605</span></a> <span class="n">user_allowlist</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">usage_quota</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
</span><span id="L-606"><a href="#L-606"><span class="linenos"> 606</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;RegisterFunction&quot;</span><span class="p">,</span> <span class="n">fe</span><span class="o">.</span><span class="n">RegisterFunctionResponse</span><span class="p">,</span>
</span><span id="L-607"><a href="#L-607"><span class="linenos"> 607</span></a> <span class="n">metadata</span><span class="p">)</span>
</span><span id="L-608"><a href="#L-608"><span class="linenos"> 608</span></a> <span class="n">arguments</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">message</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">arguments</span><span class="p">]</span>
</span><span id="L-609"><a href="#L-609"><span class="linenos"> 609</span></a> <span class="n">inputs</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">message</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">inputs</span><span class="p">]</span>
</span><span id="L-610"><a href="#L-610"><span class="linenos"> 610</span></a> <span class="n">outputs</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">message</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">outputs</span><span class="p">]</span>
</span><span id="L-611"><a href="#L-611"><span class="linenos"> 611</span></a>
</span><span id="L-612"><a href="#L-612"><span class="linenos"> 612</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">RegisterFunctionRequest</span><span class="p">(</span>
</span><span id="L-613"><a href="#L-613"><span class="linenos"> 613</span></a> <span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
</span><span id="L-614"><a href="#L-614"><span class="linenos"> 614</span></a> <span class="n">description</span><span class="o">=</span><span class="n">description</span><span class="p">,</span>
</span><span id="L-615"><a href="#L-615"><span class="linenos"> 615</span></a> <span class="n">executor_type</span><span class="o">=</span><span class="n">executor_type</span><span class="p">,</span>
</span><span id="L-616"><a href="#L-616"><span class="linenos"> 616</span></a> <span class="n">public</span><span class="o">=</span><span class="n">public</span><span class="p">,</span>
</span><span id="L-617"><a href="#L-617"><span class="linenos"> 617</span></a> <span class="n">payload</span><span class="o">=</span><span class="nb">bytes</span><span class="p">(</span><span class="n">payload</span><span class="p">),</span>
</span><span id="L-618"><a href="#L-618"><span class="linenos"> 618</span></a> <span class="n">arguments</span><span class="o">=</span><span class="n">arguments</span><span class="p">,</span>
</span><span id="L-619"><a href="#L-619"><span class="linenos"> 619</span></a> <span class="n">inputs</span><span class="o">=</span><span class="n">inputs</span><span class="p">,</span>
</span><span id="L-620"><a href="#L-620"><span class="linenos"> 620</span></a> <span class="n">outputs</span><span class="o">=</span><span class="n">outputs</span><span class="p">,</span>
</span><span id="L-621"><a href="#L-621"><span class="linenos"> 621</span></a> <span class="n">user_allowlist</span><span class="o">=</span><span class="n">user_allowlist</span><span class="p">,</span>
</span><span id="L-622"><a href="#L-622"><span class="linenos"> 622</span></a> <span class="n">usage_quota</span><span class="o">=</span><span class="n">usage_quota</span><span class="p">)</span>
</span><span id="L-623"><a href="#L-623"><span class="linenos"> 623</span></a>
</span><span id="L-624"><a href="#L-624"><span class="linenos"> 624</span></a>
</span><span id="L-625"><a href="#L-625"><span class="linenos"> 625</span></a><span class="k">class</span> <span class="nc">UpdateFunctionRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-626"><a href="#L-626"><span class="linenos"> 626</span></a>
</span><span id="L-627"><a href="#L-627"><span class="linenos"> 627</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-628"><a href="#L-628"><span class="linenos"> 628</span></a> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">executor_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">public</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span>
</span><span id="L-629"><a href="#L-629"><span class="linenos"> 629</span></a> <span class="n">payload</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">arguments</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionArgument</span><span class="p">],</span>
</span><span id="L-630"><a href="#L-630"><span class="linenos"> 630</span></a> <span class="n">inputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionInput</span><span class="p">],</span> <span class="n">outputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionOutput</span><span class="p">],</span>
</span><span id="L-631"><a href="#L-631"><span class="linenos"> 631</span></a> <span class="n">user_allowlist</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">usage_quota</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
</span><span id="L-632"><a href="#L-632"><span class="linenos"> 632</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;UpdateFunction&quot;</span><span class="p">,</span> <span class="n">fe</span><span class="o">.</span><span class="n">UpdateFunctionResponse</span><span class="p">,</span> <span class="n">metadata</span><span class="p">)</span>
</span><span id="L-633"><a href="#L-633"><span class="linenos"> 633</span></a> <span class="n">arguments</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">message</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">arguments</span><span class="p">]</span>
</span><span id="L-634"><a href="#L-634"><span class="linenos"> 634</span></a> <span class="n">inputs</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">message</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">inputs</span><span class="p">]</span>
</span><span id="L-635"><a href="#L-635"><span class="linenos"> 635</span></a> <span class="n">outputs</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">message</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">outputs</span><span class="p">]</span>
</span><span id="L-636"><a href="#L-636"><span class="linenos"> 636</span></a>
</span><span id="L-637"><a href="#L-637"><span class="linenos"> 637</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">UpdateFunctionRequest</span><span class="p">(</span><span class="n">function_id</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span>
</span><span id="L-638"><a href="#L-638"><span class="linenos"> 638</span></a> <span class="n">executor_type</span><span class="p">,</span> <span class="n">public</span><span class="p">,</span> <span class="n">payload</span><span class="p">,</span>
</span><span id="L-639"><a href="#L-639"><span class="linenos"> 639</span></a> <span class="n">arguments</span><span class="p">,</span> <span class="n">inputs</span><span class="p">,</span> <span class="n">outputs</span><span class="p">,</span>
</span><span id="L-640"><a href="#L-640"><span class="linenos"> 640</span></a> <span class="n">user_allowlist</span><span class="p">,</span> <span class="n">usage_quota</span><span class="p">)</span>
</span><span id="L-641"><a href="#L-641"><span class="linenos"> 641</span></a>
</span><span id="L-642"><a href="#L-642"><span class="linenos"> 642</span></a>
</span><span id="L-643"><a href="#L-643"><span class="linenos"> 643</span></a><span class="k">class</span> <span class="nc">ListFunctionsRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-644"><a href="#L-644"><span class="linenos"> 644</span></a>
</span><span id="L-645"><a href="#L-645"><span class="linenos"> 645</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-646"><a href="#L-646"><span class="linenos"> 646</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;ListFunctions&quot;</span><span class="p">,</span> <span class="n">fe</span><span class="o">.</span><span class="n">ListFunctionsResponse</span><span class="p">,</span> <span class="n">metadata</span><span class="p">)</span>
</span><span id="L-647"><a href="#L-647"><span class="linenos"> 647</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">ListFunctionsRequest</span><span class="p">(</span><span class="n">user_id</span><span class="o">=</span><span class="n">user_id</span><span class="p">)</span>
</span><span id="L-648"><a href="#L-648"><span class="linenos"> 648</span></a>
</span><span id="L-649"><a href="#L-649"><span class="linenos"> 649</span></a>
</span><span id="L-650"><a href="#L-650"><span class="linenos"> 650</span></a><span class="k">class</span> <span class="nc">DeleteFunctionRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-651"><a href="#L-651"><span class="linenos"> 651</span></a>
</span><span id="L-652"><a href="#L-652"><span class="linenos"> 652</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-653"><a href="#L-653"><span class="linenos"> 653</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;ListFunctions&quot;</span><span class="p">,</span> <span class="n">Empty</span><span class="p">,</span> <span class="n">metadata</span><span class="p">)</span>
</span><span id="L-654"><a href="#L-654"><span class="linenos"> 654</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">DeleteFunctionRequest</span><span class="p">(</span><span class="n">function_id</span><span class="o">=</span><span class="n">function_id</span><span class="p">)</span>
</span><span id="L-655"><a href="#L-655"><span class="linenos"> 655</span></a>
</span><span id="L-656"><a href="#L-656"><span class="linenos"> 656</span></a>
</span><span id="L-657"><a href="#L-657"><span class="linenos"> 657</span></a><span class="k">class</span> <span class="nc">DisableFunctionRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-658"><a href="#L-658"><span class="linenos"> 658</span></a>
</span><span id="L-659"><a href="#L-659"><span class="linenos"> 659</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-660"><a href="#L-660"><span class="linenos"> 660</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;DisableFunction&quot;</span><span class="p">,</span> <span class="n">Empty</span><span class="p">,</span> <span class="n">metadata</span><span class="p">)</span>
</span><span id="L-661"><a href="#L-661"><span class="linenos"> 661</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">DisableFunctionRequest</span><span class="p">(</span><span class="n">function_id</span><span class="o">=</span><span class="n">function_id</span><span class="p">)</span>
</span><span id="L-662"><a href="#L-662"><span class="linenos"> 662</span></a>
</span><span id="L-663"><a href="#L-663"><span class="linenos"> 663</span></a>
</span><span id="L-664"><a href="#L-664"><span class="linenos"> 664</span></a><span class="k">class</span> <span class="nc">GetFunctionRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-665"><a href="#L-665"><span class="linenos"> 665</span></a>
</span><span id="L-666"><a href="#L-666"><span class="linenos"> 666</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-667"><a href="#L-667"><span class="linenos"> 667</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;GetFunction&quot;</span><span class="p">,</span> <span class="n">fe</span><span class="o">.</span><span class="n">GetFunctionResponse</span><span class="p">,</span> <span class="n">metadata</span><span class="p">)</span>
</span><span id="L-668"><a href="#L-668"><span class="linenos"> 668</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">GetFunctionRequest</span><span class="p">(</span><span class="n">function_id</span><span class="o">=</span><span class="n">function_id</span><span class="p">)</span>
</span><span id="L-669"><a href="#L-669"><span class="linenos"> 669</span></a>
</span><span id="L-670"><a href="#L-670"><span class="linenos"> 670</span></a>
</span><span id="L-671"><a href="#L-671"><span class="linenos"> 671</span></a><span class="k">class</span> <span class="nc">GetFunctionUsageStatsRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-672"><a href="#L-672"><span class="linenos"> 672</span></a>
</span><span id="L-673"><a href="#L-673"><span class="linenos"> 673</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-674"><a href="#L-674"><span class="linenos"> 674</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;GetFunctionUsageStats&quot;</span><span class="p">,</span>
</span><span id="L-675"><a href="#L-675"><span class="linenos"> 675</span></a> <span class="n">fe</span><span class="o">.</span><span class="n">GetFunctionUsageStatsResponse</span><span class="p">,</span> <span class="n">metadata</span><span class="p">)</span>
</span><span id="L-676"><a href="#L-676"><span class="linenos"> 676</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">GetFunctionUsageStatsRequest</span><span class="p">(</span><span class="n">function_id</span><span class="o">=</span><span class="n">function_id</span><span class="p">)</span>
</span><span id="L-677"><a href="#L-677"><span class="linenos"> 677</span></a>
</span><span id="L-678"><a href="#L-678"><span class="linenos"> 678</span></a>
</span><span id="L-679"><a href="#L-679"><span class="linenos"> 679</span></a><span class="k">class</span> <span class="nc">RegisterInputFileRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-680"><a href="#L-680"><span class="linenos"> 680</span></a>
</span><span id="L-681"><a href="#L-681"><span class="linenos"> 681</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">cmac</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span>
</span><span id="L-682"><a href="#L-682"><span class="linenos"> 682</span></a> <span class="n">crypto_info</span><span class="p">:</span> <span class="n">CryptoInfo</span><span class="p">):</span>
</span><span id="L-683"><a href="#L-683"><span class="linenos"> 683</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;RegisterInputFile&quot;</span><span class="p">,</span> <span class="n">fe</span><span class="o">.</span><span class="n">RegisterInputFileResponse</span><span class="p">,</span>
</span><span id="L-684"><a href="#L-684"><span class="linenos"> 684</span></a> <span class="n">metadata</span><span class="p">)</span>
</span><span id="L-685"><a href="#L-685"><span class="linenos"> 685</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">RegisterInputFileRequest</span><span class="p">(</span>
</span><span id="L-686"><a href="#L-686"><span class="linenos"> 686</span></a> <span class="n">url</span><span class="o">=</span><span class="n">url</span><span class="p">,</span> <span class="n">cmac</span><span class="o">=</span><span class="nb">bytes</span><span class="p">(</span><span class="n">cmac</span><span class="p">),</span> <span class="n">crypto_info</span><span class="o">=</span><span class="n">crypto_info</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
</span><span id="L-687"><a href="#L-687"><span class="linenos"> 687</span></a>
</span><span id="L-688"><a href="#L-688"><span class="linenos"> 688</span></a>
</span><span id="L-689"><a href="#L-689"><span class="linenos"> 689</span></a><span class="k">class</span> <span class="nc">RegisterOutputFileRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-690"><a href="#L-690"><span class="linenos"> 690</span></a>
</span><span id="L-691"><a href="#L-691"><span class="linenos"> 691</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">crypto_info</span><span class="p">:</span> <span class="n">CryptoInfo</span><span class="p">):</span>
</span><span id="L-692"><a href="#L-692"><span class="linenos"> 692</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;RegisterOutputFile&quot;</span><span class="p">,</span> <span class="n">fe</span><span class="o">.</span><span class="n">RegisterOutputFileResponse</span><span class="p">,</span>
</span><span id="L-693"><a href="#L-693"><span class="linenos"> 693</span></a> <span class="n">metadata</span><span class="p">)</span>
</span><span id="L-694"><a href="#L-694"><span class="linenos"> 694</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">RegisterOutputFileRequest</span><span class="p">(</span>
</span><span id="L-695"><a href="#L-695"><span class="linenos"> 695</span></a> <span class="n">url</span><span class="o">=</span><span class="n">url</span><span class="p">,</span> <span class="n">crypto_info</span><span class="o">=</span><span class="n">crypto_info</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
</span><span id="L-696"><a href="#L-696"><span class="linenos"> 696</span></a>
</span><span id="L-697"><a href="#L-697"><span class="linenos"> 697</span></a>
</span><span id="L-698"><a href="#L-698"><span class="linenos"> 698</span></a><span class="k">class</span> <span class="nc">UpdateInputFileRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-699"><a href="#L-699"><span class="linenos"> 699</span></a>
</span><span id="L-700"><a href="#L-700"><span class="linenos"> 700</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">data_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">url</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-701"><a href="#L-701"><span class="linenos"> 701</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;UpdateInputFile&quot;</span><span class="p">,</span> <span class="n">fe</span><span class="o">.</span><span class="n">UpdateInputFileResponse</span><span class="p">,</span>
</span><span id="L-702"><a href="#L-702"><span class="linenos"> 702</span></a> <span class="n">metadata</span><span class="p">)</span>
</span><span id="L-703"><a href="#L-703"><span class="linenos"> 703</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">UpdateInputFileRequest</span><span class="p">(</span><span class="n">data_id</span><span class="o">=</span><span class="n">data_id</span><span class="p">,</span> <span class="n">url</span><span class="o">=</span><span class="n">url</span><span class="p">)</span>
</span><span id="L-704"><a href="#L-704"><span class="linenos"> 704</span></a>
</span><span id="L-705"><a href="#L-705"><span class="linenos"> 705</span></a>
</span><span id="L-706"><a href="#L-706"><span class="linenos"> 706</span></a><span class="k">class</span> <span class="nc">UpdateOutputFileRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-707"><a href="#L-707"><span class="linenos"> 707</span></a>
</span><span id="L-708"><a href="#L-708"><span class="linenos"> 708</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">data_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">url</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-709"><a href="#L-709"><span class="linenos"> 709</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;UpdateInputFile&quot;</span><span class="p">,</span> <span class="n">fe</span><span class="o">.</span><span class="n">UpdateOutputFileResponse</span><span class="p">,</span>
</span><span id="L-710"><a href="#L-710"><span class="linenos"> 710</span></a> <span class="n">metadata</span><span class="p">)</span>
</span><span id="L-711"><a href="#L-711"><span class="linenos"> 711</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">UpdateOutputFileRequest</span><span class="p">(</span><span class="n">data_id</span><span class="o">=</span><span class="n">data_id</span><span class="p">,</span> <span class="n">url</span><span class="o">=</span><span class="n">url</span><span class="p">)</span>
</span><span id="L-712"><a href="#L-712"><span class="linenos"> 712</span></a>
</span><span id="L-713"><a href="#L-713"><span class="linenos"> 713</span></a>
</span><span id="L-714"><a href="#L-714"><span class="linenos"> 714</span></a><span class="k">class</span> <span class="nc">CreateTaskRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-715"><a href="#L-715"><span class="linenos"> 715</span></a>
</span><span id="L-716"><a href="#L-716"><span class="linenos"> 716</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-717"><a href="#L-717"><span class="linenos"> 717</span></a> <span class="n">function_arguments</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span> <span class="n">executor</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-718"><a href="#L-718"><span class="linenos"> 718</span></a> <span class="n">inputs_ownership</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">OwnerList</span><span class="p">],</span>
</span><span id="L-719"><a href="#L-719"><span class="linenos"> 719</span></a> <span class="n">outputs_ownership</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">OwnerList</span><span class="p">]):</span>
</span><span id="L-720"><a href="#L-720"><span class="linenos"> 720</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;CreateTask&quot;</span><span class="p">,</span> <span class="n">fe</span><span class="o">.</span><span class="n">CreateTaskResponse</span><span class="p">,</span> <span class="n">metadata</span><span class="p">)</span>
</span><span id="L-721"><a href="#L-721"><span class="linenos"> 721</span></a> <span class="n">inputs_ownership</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">message</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">inputs_ownership</span><span class="p">]</span>
</span><span id="L-722"><a href="#L-722"><span class="linenos"> 722</span></a> <span class="n">outputs_ownership</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">message</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">outputs_ownership</span><span class="p">]</span>
</span><span id="L-723"><a href="#L-723"><span class="linenos"> 723</span></a>
</span><span id="L-724"><a href="#L-724"><span class="linenos"> 724</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">CreateTaskRequest</span><span class="p">(</span>
</span><span id="L-725"><a href="#L-725"><span class="linenos"> 725</span></a> <span class="n">function_id</span><span class="o">=</span><span class="n">function_id</span><span class="p">,</span>
</span><span id="L-726"><a href="#L-726"><span class="linenos"> 726</span></a> <span class="n">function_arguments</span><span class="o">=</span><span class="n">function_arguments</span><span class="p">,</span>
</span><span id="L-727"><a href="#L-727"><span class="linenos"> 727</span></a> <span class="n">executor</span><span class="o">=</span><span class="n">executor</span><span class="p">,</span>
</span><span id="L-728"><a href="#L-728"><span class="linenos"> 728</span></a> <span class="n">inputs_ownership</span><span class="o">=</span><span class="n">inputs_ownership</span><span class="p">,</span>
</span><span id="L-729"><a href="#L-729"><span class="linenos"> 729</span></a> <span class="n">outputs_ownership</span><span class="o">=</span><span class="n">outputs_ownership</span><span class="p">)</span>
</span><span id="L-730"><a href="#L-730"><span class="linenos"> 730</span></a>
</span><span id="L-731"><a href="#L-731"><span class="linenos"> 731</span></a>
</span><span id="L-732"><a href="#L-732"><span class="linenos"> 732</span></a><span class="k">class</span> <span class="nc">AssignDataRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-733"><a href="#L-733"><span class="linenos"> 733</span></a>
</span><span id="L-734"><a href="#L-734"><span class="linenos"> 734</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">inputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">DataMap</span><span class="p">],</span>
</span><span id="L-735"><a href="#L-735"><span class="linenos"> 735</span></a> <span class="n">outputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">DataMap</span><span class="p">]):</span>
</span><span id="L-736"><a href="#L-736"><span class="linenos"> 736</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;AssignData&quot;</span><span class="p">,</span> <span class="n">Empty</span><span class="p">,</span> <span class="n">metadata</span><span class="p">)</span>
</span><span id="L-737"><a href="#L-737"><span class="linenos"> 737</span></a> <span class="n">inputs</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">message</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">inputs</span><span class="p">]</span>
</span><span id="L-738"><a href="#L-738"><span class="linenos"> 738</span></a> <span class="n">outputs</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">message</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">outputs</span><span class="p">]</span>
</span><span id="L-739"><a href="#L-739"><span class="linenos"> 739</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">AssignDataRequest</span><span class="p">(</span><span class="n">task_id</span><span class="o">=</span><span class="n">task_id</span><span class="p">,</span>
</span><span id="L-740"><a href="#L-740"><span class="linenos"> 740</span></a> <span class="n">inputs</span><span class="o">=</span><span class="n">inputs</span><span class="p">,</span>
</span><span id="L-741"><a href="#L-741"><span class="linenos"> 741</span></a> <span class="n">outputs</span><span class="o">=</span><span class="n">outputs</span><span class="p">)</span>
</span><span id="L-742"><a href="#L-742"><span class="linenos"> 742</span></a>
</span><span id="L-743"><a href="#L-743"><span class="linenos"> 743</span></a>
</span><span id="L-744"><a href="#L-744"><span class="linenos"> 744</span></a><span class="k">class</span> <span class="nc">ApproveTaskRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-745"><a href="#L-745"><span class="linenos"> 745</span></a>
</span><span id="L-746"><a href="#L-746"><span class="linenos"> 746</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-747"><a href="#L-747"><span class="linenos"> 747</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;ApproveTask&quot;</span><span class="p">,</span> <span class="n">Empty</span><span class="p">,</span> <span class="n">metadata</span><span class="p">)</span>
</span><span id="L-748"><a href="#L-748"><span class="linenos"> 748</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">ApproveTaskRequest</span><span class="p">(</span><span class="n">task_id</span><span class="o">=</span><span class="n">task_id</span><span class="p">)</span>
</span><span id="L-749"><a href="#L-749"><span class="linenos"> 749</span></a>
</span><span id="L-750"><a href="#L-750"><span class="linenos"> 750</span></a>
</span><span id="L-751"><a href="#L-751"><span class="linenos"> 751</span></a><span class="k">class</span> <span class="nc">InvokeTaskRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-752"><a href="#L-752"><span class="linenos"> 752</span></a>
</span><span id="L-753"><a href="#L-753"><span class="linenos"> 753</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-754"><a href="#L-754"><span class="linenos"> 754</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;InvokeTask&quot;</span><span class="p">,</span> <span class="n">Empty</span><span class="p">,</span> <span class="n">metadata</span><span class="p">)</span>
</span><span id="L-755"><a href="#L-755"><span class="linenos"> 755</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">InvokeTaskRequest</span><span class="p">(</span><span class="n">task_id</span><span class="o">=</span><span class="n">task_id</span><span class="p">)</span>
</span><span id="L-756"><a href="#L-756"><span class="linenos"> 756</span></a>
</span><span id="L-757"><a href="#L-757"><span class="linenos"> 757</span></a>
</span><span id="L-758"><a href="#L-758"><span class="linenos"> 758</span></a><span class="k">class</span> <span class="nc">CancelTaskRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-759"><a href="#L-759"><span class="linenos"> 759</span></a>
</span><span id="L-760"><a href="#L-760"><span class="linenos"> 760</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-761"><a href="#L-761"><span class="linenos"> 761</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;CancelTask&quot;</span><span class="p">,</span> <span class="n">Empty</span><span class="p">,</span> <span class="n">metadata</span><span class="p">)</span>
</span><span id="L-762"><a href="#L-762"><span class="linenos"> 762</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">CancelTaskRequest</span><span class="p">(</span><span class="n">task_id</span><span class="o">=</span><span class="n">task_id</span><span class="p">)</span>
</span><span id="L-763"><a href="#L-763"><span class="linenos"> 763</span></a>
</span><span id="L-764"><a href="#L-764"><span class="linenos"> 764</span></a>
</span><span id="L-765"><a href="#L-765"><span class="linenos"> 765</span></a><span class="k">class</span> <span class="nc">GetTaskRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-766"><a href="#L-766"><span class="linenos"> 766</span></a>
</span><span id="L-767"><a href="#L-767"><span class="linenos"> 767</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-768"><a href="#L-768"><span class="linenos"> 768</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;GetTask&quot;</span><span class="p">,</span> <span class="n">fe</span><span class="o">.</span><span class="n">GetTaskResponse</span><span class="p">,</span> <span class="n">metadata</span><span class="p">)</span>
</span><span id="L-769"><a href="#L-769"><span class="linenos"> 769</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">GetTaskRequest</span><span class="p">(</span><span class="n">task_id</span><span class="o">=</span><span class="n">task_id</span><span class="p">)</span>
</span><span id="L-770"><a href="#L-770"><span class="linenos"> 770</span></a>
</span><span id="L-771"><a href="#L-771"><span class="linenos"> 771</span></a>
</span><span id="L-772"><a href="#L-772"><span class="linenos"> 772</span></a><span class="k">class</span> <span class="nc">QueryAuditLogsRequest</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
</span><span id="L-773"><a href="#L-773"><span class="linenos"> 773</span></a>
</span><span id="L-774"><a href="#L-774"><span class="linenos"> 774</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">:</span> <span class="n">Metadata</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
</span><span id="L-775"><a href="#L-775"><span class="linenos"> 775</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;QueryAuditLogs&quot;</span><span class="p">,</span> <span class="n">fe</span><span class="o">.</span><span class="n">QueryAuditLogsResponse</span><span class="p">,</span> <span class="n">metadata</span><span class="p">)</span>
</span><span id="L-776"><a href="#L-776"><span class="linenos"> 776</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">QueryAuditLogsReqeust</span><span class="p">(</span><span class="n">message</span><span class="o">=</span><span class="n">message</span><span class="p">,</span> <span class="n">limit</span><span class="o">=</span><span class="n">limit</span><span class="p">)</span>
</span><span id="L-777"><a href="#L-777"><span class="linenos"> 777</span></a>
</span><span id="L-778"><a href="#L-778"><span class="linenos"> 778</span></a>
</span><span id="L-779"><a href="#L-779"><span class="linenos"> 779</span></a><span class="k">class</span> <span class="nc">FrontendService</span><span class="p">(</span><span class="n">TeaclaveService</span><span class="p">):</span>
</span><span id="L-780"><a href="#L-780"><span class="linenos"> 780</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Establish trusted channel with the frontend service and provide</span>
</span><span id="L-781"><a href="#L-781"><span class="linenos"> 781</span></a><span class="sd"> clients to send request through RPC.</span>
</span><span id="L-782"><a href="#L-782"><span class="linenos"> 782</span></a>
</span><span id="L-783"><a href="#L-783"><span class="linenos"> 783</span></a><span class="sd"> Args:</span>
</span><span id="L-784"><a href="#L-784"><span class="linenos"> 784</span></a><span class="sd"> </span>
</span><span id="L-785"><a href="#L-785"><span class="linenos"> 785</span></a><span class="sd"> address: The address of the remote services in tuple.</span>
</span><span id="L-786"><a href="#L-786"><span class="linenos"> 786</span></a><span class="sd"> as_root_ca_cert_path: Root CA certification of the attestation services</span>
</span><span id="L-787"><a href="#L-787"><span class="linenos"> 787</span></a><span class="sd"> to verify the attestation report.</span>
</span><span id="L-788"><a href="#L-788"><span class="linenos"> 788</span></a><span class="sd"> enclave_info_path: Path of enclave info to verify the remote service in</span>
</span><span id="L-789"><a href="#L-789"><span class="linenos"> 789</span></a><span class="sd"> the attestation report.</span>
</span><span id="L-790"><a href="#L-790"><span class="linenos"> 790</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-791"><a href="#L-791"><span class="linenos"> 791</span></a>
</span><span id="L-792"><a href="#L-792"><span class="linenos"> 792</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="L-793"><a href="#L-793"><span class="linenos"> 793</span></a> <span class="n">address</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">],</span>
</span><span id="L-794"><a href="#L-794"><span class="linenos"> 794</span></a> <span class="n">as_root_ca_cert_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-795"><a href="#L-795"><span class="linenos"> 795</span></a> <span class="n">enclave_info_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-796"><a href="#L-796"><span class="linenos"> 796</span></a> <span class="n">dump_report</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-797"><a href="#L-797"><span class="linenos"> 797</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;frontend&quot;</span><span class="p">,</span> <span class="n">address</span><span class="p">,</span> <span class="n">as_root_ca_cert_path</span><span class="p">,</span>
</span><span id="L-798"><a href="#L-798"><span class="linenos"> 798</span></a> <span class="n">enclave_info_path</span><span class="p">,</span> <span class="n">dump_report</span><span class="p">)</span>
</span><span id="L-799"><a href="#L-799"><span class="linenos"> 799</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">stub</span> <span class="o">=</span> <span class="n">TeaclaveFrontendStub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="p">)</span>
</span><span id="L-800"><a href="#L-800"><span class="linenos"> 800</span></a>
</span><span id="L-801"><a href="#L-801"><span class="linenos"> 801</span></a> <span class="k">def</span> <span class="nf">register_function</span><span class="p">(</span>
</span><span id="L-802"><a href="#L-802"><span class="linenos"> 802</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="L-803"><a href="#L-803"><span class="linenos"> 803</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-804"><a href="#L-804"><span class="linenos"> 804</span></a> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-805"><a href="#L-805"><span class="linenos"> 805</span></a> <span class="n">executor_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-806"><a href="#L-806"><span class="linenos"> 806</span></a> <span class="n">public</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
</span><span id="L-807"><a href="#L-807"><span class="linenos"> 807</span></a> <span class="n">payload</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="L-808"><a href="#L-808"><span class="linenos"> 808</span></a> <span class="n">arguments</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionArgument</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="L-809"><a href="#L-809"><span class="linenos"> 809</span></a> <span class="n">inputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionInput</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="L-810"><a href="#L-810"><span class="linenos"> 810</span></a> <span class="n">outputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionOutput</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="L-811"><a href="#L-811"><span class="linenos"> 811</span></a> <span class="n">user_allowlist</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="L-812"><a href="#L-812"><span class="linenos"> 812</span></a> <span class="n">usage_quota</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span>
</span><span id="L-813"><a href="#L-813"><span class="linenos"> 813</span></a> <span class="p">):</span>
</span><span id="L-814"><a href="#L-814"><span class="linenos"> 814</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-815"><a href="#L-815"><span class="linenos"> 815</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-816"><a href="#L-816"><span class="linenos"> 816</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">RegisterFunctionRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span>
</span><span id="L-817"><a href="#L-817"><span class="linenos"> 817</span></a> <span class="n">executor_type</span><span class="p">,</span> <span class="n">public</span><span class="p">,</span> <span class="n">payload</span><span class="p">,</span>
</span><span id="L-818"><a href="#L-818"><span class="linenos"> 818</span></a> <span class="n">arguments</span><span class="p">,</span> <span class="n">inputs</span><span class="p">,</span> <span class="n">outputs</span><span class="p">,</span>
</span><span id="L-819"><a href="#L-819"><span class="linenos"> 819</span></a> <span class="n">user_allowlist</span><span class="p">,</span> <span class="n">usage_quota</span><span class="p">)</span>
</span><span id="L-820"><a href="#L-820"><span class="linenos"> 820</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-821"><a href="#L-821"><span class="linenos"> 821</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-822"><a href="#L-822"><span class="linenos"> 822</span></a> <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">function_id</span>
</span><span id="L-823"><a href="#L-823"><span class="linenos"> 823</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-824"><a href="#L-824"><span class="linenos"> 824</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="L-825"><a href="#L-825"><span class="linenos"> 825</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to register function (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-826"><a href="#L-826"><span class="linenos"> 826</span></a>
</span><span id="L-827"><a href="#L-827"><span class="linenos"> 827</span></a> <span class="k">def</span> <span class="nf">update_function</span><span class="p">(</span>
</span><span id="L-828"><a href="#L-828"><span class="linenos"> 828</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="L-829"><a href="#L-829"><span class="linenos"> 829</span></a> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-830"><a href="#L-830"><span class="linenos"> 830</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-831"><a href="#L-831"><span class="linenos"> 831</span></a> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-832"><a href="#L-832"><span class="linenos"> 832</span></a> <span class="n">executor_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-833"><a href="#L-833"><span class="linenos"> 833</span></a> <span class="n">public</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
</span><span id="L-834"><a href="#L-834"><span class="linenos"> 834</span></a> <span class="n">payload</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="L-835"><a href="#L-835"><span class="linenos"> 835</span></a> <span class="n">arguments</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionArgument</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="L-836"><a href="#L-836"><span class="linenos"> 836</span></a> <span class="n">inputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionInput</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="L-837"><a href="#L-837"><span class="linenos"> 837</span></a> <span class="n">outputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionOutput</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="L-838"><a href="#L-838"><span class="linenos"> 838</span></a> <span class="n">user_allowlist</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="L-839"><a href="#L-839"><span class="linenos"> 839</span></a> <span class="n">usage_quota</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span>
</span><span id="L-840"><a href="#L-840"><span class="linenos"> 840</span></a> <span class="p">):</span>
</span><span id="L-841"><a href="#L-841"><span class="linenos"> 841</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-842"><a href="#L-842"><span class="linenos"> 842</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-843"><a href="#L-843"><span class="linenos"> 843</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">UpdateFunctionRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span>
</span><span id="L-844"><a href="#L-844"><span class="linenos"> 844</span></a> <span class="n">description</span><span class="p">,</span> <span class="n">executor_type</span><span class="p">,</span> <span class="n">public</span><span class="p">,</span>
</span><span id="L-845"><a href="#L-845"><span class="linenos"> 845</span></a> <span class="n">payload</span><span class="p">,</span> <span class="n">arguments</span><span class="p">,</span> <span class="n">inputs</span><span class="p">,</span> <span class="n">outputs</span><span class="p">,</span>
</span><span id="L-846"><a href="#L-846"><span class="linenos"> 846</span></a> <span class="n">user_allowlist</span><span class="p">,</span> <span class="n">usage_quota</span><span class="p">)</span>
</span><span id="L-847"><a href="#L-847"><span class="linenos"> 847</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-848"><a href="#L-848"><span class="linenos"> 848</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-849"><a href="#L-849"><span class="linenos"> 849</span></a> <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">function_id</span>
</span><span id="L-850"><a href="#L-850"><span class="linenos"> 850</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-851"><a href="#L-851"><span class="linenos"> 851</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="L-852"><a href="#L-852"><span class="linenos"> 852</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to register function (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-853"><a href="#L-853"><span class="linenos"> 853</span></a>
</span><span id="L-854"><a href="#L-854"><span class="linenos"> 854</span></a> <span class="k">def</span> <span class="nf">list_functions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-855"><a href="#L-855"><span class="linenos"> 855</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-856"><a href="#L-856"><span class="linenos"> 856</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-857"><a href="#L-857"><span class="linenos"> 857</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">ListFunctionsRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">)</span>
</span><span id="L-858"><a href="#L-858"><span class="linenos"> 858</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-859"><a href="#L-859"><span class="linenos"> 859</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-860"><a href="#L-860"><span class="linenos"> 860</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-861"><a href="#L-861"><span class="linenos"> 861</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to list functions (</span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-862"><a href="#L-862"><span class="linenos"> 862</span></a> <span class="k">return</span> <span class="n">MessageToDict</span><span class="p">(</span><span class="n">response</span><span class="p">,</span>
</span><span id="L-863"><a href="#L-863"><span class="linenos"> 863</span></a> <span class="n">preserving_proto_field_name</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="L-864"><a href="#L-864"><span class="linenos"> 864</span></a> <span class="n">use_integers_for_enums</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-865"><a href="#L-865"><span class="linenos"> 865</span></a>
</span><span id="L-866"><a href="#L-866"><span class="linenos"> 866</span></a> <span class="k">def</span> <span class="nf">get_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-867"><a href="#L-867"><span class="linenos"> 867</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-868"><a href="#L-868"><span class="linenos"> 868</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-869"><a href="#L-869"><span class="linenos"> 869</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">GetFunctionRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">)</span>
</span><span id="L-870"><a href="#L-870"><span class="linenos"> 870</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-871"><a href="#L-871"><span class="linenos"> 871</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-872"><a href="#L-872"><span class="linenos"> 872</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="L-873"><a href="#L-873"><span class="linenos"> 873</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-874"><a href="#L-874"><span class="linenos"> 874</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="L-875"><a href="#L-875"><span class="linenos"> 875</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to get function (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-876"><a href="#L-876"><span class="linenos"> 876</span></a>
</span><span id="L-877"><a href="#L-877"><span class="linenos"> 877</span></a> <span class="k">def</span> <span class="nf">get_function_usage_stats</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-878"><a href="#L-878"><span class="linenos"> 878</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-879"><a href="#L-879"><span class="linenos"> 879</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-880"><a href="#L-880"><span class="linenos"> 880</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">GetFunctionUsageStatsRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">)</span>
</span><span id="L-881"><a href="#L-881"><span class="linenos"> 881</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-882"><a href="#L-882"><span class="linenos"> 882</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-883"><a href="#L-883"><span class="linenos"> 883</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="L-884"><a href="#L-884"><span class="linenos"> 884</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-885"><a href="#L-885"><span class="linenos"> 885</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="L-886"><a href="#L-886"><span class="linenos"> 886</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span>
</span><span id="L-887"><a href="#L-887"><span class="linenos"> 887</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to get function usage statistics (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-888"><a href="#L-888"><span class="linenos"> 888</span></a>
</span><span id="L-889"><a href="#L-889"><span class="linenos"> 889</span></a> <span class="k">def</span> <span class="nf">delete_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-891"><a href="#L-891"><span class="linenos"> 891</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-892"><a href="#L-892"><span class="linenos"> 892</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">DeleteFunctionRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">)</span>
</span><span id="L-893"><a href="#L-893"><span class="linenos"> 893</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-894"><a href="#L-894"><span class="linenos"> 894</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-895"><a href="#L-895"><span class="linenos"> 895</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="L-896"><a href="#L-896"><span class="linenos"> 896</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-897"><a href="#L-897"><span class="linenos"> 897</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="L-898"><a href="#L-898"><span class="linenos"> 898</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to delete function (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-899"><a href="#L-899"><span class="linenos"> 899</span></a>
</span><span id="L-900"><a href="#L-900"><span class="linenos"> 900</span></a> <span class="k">def</span> <span class="nf">disable_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-901"><a href="#L-901"><span class="linenos"> 901</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-902"><a href="#L-902"><span class="linenos"> 902</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-903"><a href="#L-903"><span class="linenos"> 903</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">DisableFunctionRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">)</span>
</span><span id="L-904"><a href="#L-904"><span class="linenos"> 904</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-905"><a href="#L-905"><span class="linenos"> 905</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-906"><a href="#L-906"><span class="linenos"> 906</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="L-907"><a href="#L-907"><span class="linenos"> 907</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-908"><a href="#L-908"><span class="linenos"> 908</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="L-909"><a href="#L-909"><span class="linenos"> 909</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to disable function (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-910"><a href="#L-910"><span class="linenos"> 910</span></a>
</span><span id="L-911"><a href="#L-911"><span class="linenos"> 911</span></a> <span class="k">def</span> <span class="nf">register_input_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">key</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span>
</span><span id="L-912"><a href="#L-912"><span class="linenos"> 912</span></a> <span class="n">iv</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">cmac</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]):</span>
</span><span id="L-913"><a href="#L-913"><span class="linenos"> 913</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-914"><a href="#L-914"><span class="linenos"> 914</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-915"><a href="#L-915"><span class="linenos"> 915</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">RegisterInputFileRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">cmac</span><span class="p">,</span>
</span><span id="L-916"><a href="#L-916"><span class="linenos"> 916</span></a> <span class="n">CryptoInfo</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">iv</span><span class="p">))</span>
</span><span id="L-917"><a href="#L-917"><span class="linenos"> 917</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-918"><a href="#L-918"><span class="linenos"> 918</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-919"><a href="#L-919"><span class="linenos"> 919</span></a> <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">data_id</span>
</span><span id="L-920"><a href="#L-920"><span class="linenos"> 920</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-921"><a href="#L-921"><span class="linenos"> 921</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="L-922"><a href="#L-922"><span class="linenos"> 922</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span>
</span><span id="L-923"><a href="#L-923"><span class="linenos"> 923</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to register input file (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-924"><a href="#L-924"><span class="linenos"> 924</span></a>
</span><span id="L-925"><a href="#L-925"><span class="linenos"> 925</span></a> <span class="k">def</span> <span class="nf">register_output_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">key</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span>
</span><span id="L-926"><a href="#L-926"><span class="linenos"> 926</span></a> <span class="n">iv</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]):</span>
</span><span id="L-927"><a href="#L-927"><span class="linenos"> 927</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-928"><a href="#L-928"><span class="linenos"> 928</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-929"><a href="#L-929"><span class="linenos"> 929</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">RegisterOutputFileRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span>
</span><span id="L-930"><a href="#L-930"><span class="linenos"> 930</span></a> <span class="n">CryptoInfo</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">iv</span><span class="p">))</span>
</span><span id="L-931"><a href="#L-931"><span class="linenos"> 931</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-932"><a href="#L-932"><span class="linenos"> 932</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-933"><a href="#L-933"><span class="linenos"> 933</span></a> <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">data_id</span>
</span><span id="L-934"><a href="#L-934"><span class="linenos"> 934</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-935"><a href="#L-935"><span class="linenos"> 935</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="L-936"><a href="#L-936"><span class="linenos"> 936</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span>
</span><span id="L-937"><a href="#L-937"><span class="linenos"> 937</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to register output file (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-938"><a href="#L-938"><span class="linenos"> 938</span></a>
</span><span id="L-939"><a href="#L-939"><span class="linenos"> 939</span></a> <span class="k">def</span> <span class="nf">create_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="L-940"><a href="#L-940"><span class="linenos"> 940</span></a> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-941"><a href="#L-941"><span class="linenos"> 941</span></a> <span class="n">function_arguments</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span>
</span><span id="L-942"><a href="#L-942"><span class="linenos"> 942</span></a> <span class="n">executor</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="L-943"><a href="#L-943"><span class="linenos"> 943</span></a> <span class="n">inputs_ownership</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">OwnerList</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="L-944"><a href="#L-944"><span class="linenos"> 944</span></a> <span class="n">outputs_ownership</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">OwnerList</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]):</span>
</span><span id="L-945"><a href="#L-945"><span class="linenos"> 945</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-946"><a href="#L-946"><span class="linenos"> 946</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-947"><a href="#L-947"><span class="linenos"> 947</span></a> <span class="n">function_arguments</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">function_arguments</span><span class="p">)</span>
</span><span id="L-948"><a href="#L-948"><span class="linenos"> 948</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">CreateTaskRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">,</span>
</span><span id="L-949"><a href="#L-949"><span class="linenos"> 949</span></a> <span class="n">function_arguments</span><span class="p">,</span> <span class="n">executor</span><span class="p">,</span>
</span><span id="L-950"><a href="#L-950"><span class="linenos"> 950</span></a> <span class="n">inputs_ownership</span><span class="p">,</span> <span class="n">outputs_ownership</span><span class="p">)</span>
</span><span id="L-951"><a href="#L-951"><span class="linenos"> 951</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-952"><a href="#L-952"><span class="linenos"> 952</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-953"><a href="#L-953"><span class="linenos"> 953</span></a> <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">task_id</span>
</span><span id="L-954"><a href="#L-954"><span class="linenos"> 954</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-955"><a href="#L-955"><span class="linenos"> 955</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="L-956"><a href="#L-956"><span class="linenos"> 956</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to create task (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-957"><a href="#L-957"><span class="linenos"> 957</span></a>
</span><span id="L-958"><a href="#L-958"><span class="linenos"> 958</span></a> <span class="k">def</span> <span class="nf">assign_data_to_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">inputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">DataMap</span><span class="p">],</span>
</span><span id="L-959"><a href="#L-959"><span class="linenos"> 959</span></a> <span class="n">outputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">DataMap</span><span class="p">]):</span>
</span><span id="L-960"><a href="#L-960"><span class="linenos"> 960</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-961"><a href="#L-961"><span class="linenos"> 961</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-962"><a href="#L-962"><span class="linenos"> 962</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">AssignDataRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">,</span> <span class="n">inputs</span><span class="p">,</span> <span class="n">outputs</span><span class="p">)</span>
</span><span id="L-963"><a href="#L-963"><span class="linenos"> 963</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-964"><a href="#L-964"><span class="linenos"> 964</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-965"><a href="#L-965"><span class="linenos"> 965</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-966"><a href="#L-966"><span class="linenos"> 966</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="L-967"><a href="#L-967"><span class="linenos"> 967</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span>
</span><span id="L-968"><a href="#L-968"><span class="linenos"> 968</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to assign data to task (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-969"><a href="#L-969"><span class="linenos"> 969</span></a>
</span><span id="L-970"><a href="#L-970"><span class="linenos"> 970</span></a> <span class="k">def</span> <span class="nf">approve_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-971"><a href="#L-971"><span class="linenos"> 971</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-972"><a href="#L-972"><span class="linenos"> 972</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-973"><a href="#L-973"><span class="linenos"> 973</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">ApproveTaskRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">)</span>
</span><span id="L-974"><a href="#L-974"><span class="linenos"> 974</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-975"><a href="#L-975"><span class="linenos"> 975</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-976"><a href="#L-976"><span class="linenos"> 976</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-977"><a href="#L-977"><span class="linenos"> 977</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="L-978"><a href="#L-978"><span class="linenos"> 978</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to approve task (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-979"><a href="#L-979"><span class="linenos"> 979</span></a>
</span><span id="L-980"><a href="#L-980"><span class="linenos"> 980</span></a> <span class="k">def</span> <span class="nf">invoke_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-981"><a href="#L-981"><span class="linenos"> 981</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-982"><a href="#L-982"><span class="linenos"> 982</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-983"><a href="#L-983"><span class="linenos"> 983</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">InvokeTaskRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">)</span>
</span><span id="L-984"><a href="#L-984"><span class="linenos"> 984</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-985"><a href="#L-985"><span class="linenos"> 985</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-986"><a href="#L-986"><span class="linenos"> 986</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-987"><a href="#L-987"><span class="linenos"> 987</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="L-988"><a href="#L-988"><span class="linenos"> 988</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to invoke task (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-989"><a href="#L-989"><span class="linenos"> 989</span></a>
</span><span id="L-990"><a href="#L-990"><span class="linenos"> 990</span></a> <span class="k">def</span> <span class="nf">cancel_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-991"><a href="#L-991"><span class="linenos"> 991</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-992"><a href="#L-992"><span class="linenos"> 992</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-993"><a href="#L-993"><span class="linenos"> 993</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">CancelTaskRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">)</span>
</span><span id="L-994"><a href="#L-994"><span class="linenos"> 994</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-995"><a href="#L-995"><span class="linenos"> 995</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-996"><a href="#L-996"><span class="linenos"> 996</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-997"><a href="#L-997"><span class="linenos"> 997</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="L-998"><a href="#L-998"><span class="linenos"> 998</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to cancel task (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-999"><a href="#L-999"><span class="linenos"> 999</span></a>
</span><span id="L-1000"><a href="#L-1000"><span class="linenos">1000</span></a> <span class="k">def</span> <span class="nf">get_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-1001"><a href="#L-1001"><span class="linenos">1001</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-1002"><a href="#L-1002"><span class="linenos">1002</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-1003"><a href="#L-1003"><span class="linenos">1003</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">GetTaskRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">)</span>
</span><span id="L-1004"><a href="#L-1004"><span class="linenos">1004</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-1005"><a href="#L-1005"><span class="linenos">1005</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-1006"><a href="#L-1006"><span class="linenos">1006</span></a> <span class="k">return</span> <span class="n">MessageToDict</span><span class="p">(</span><span class="n">response</span><span class="p">,</span>
</span><span id="L-1007"><a href="#L-1007"><span class="linenos">1007</span></a> <span class="n">preserving_proto_field_name</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="L-1008"><a href="#L-1008"><span class="linenos">1008</span></a> <span class="n">use_integers_for_enums</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-1009"><a href="#L-1009"><span class="linenos">1009</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-1010"><a href="#L-1010"><span class="linenos">1010</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="L-1011"><a href="#L-1011"><span class="linenos">1011</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to get task result (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-1012"><a href="#L-1012"><span class="linenos">1012</span></a>
</span><span id="L-1013"><a href="#L-1013"><span class="linenos">1013</span></a> <span class="k">def</span> <span class="nf">get_task_result</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-1014"><a href="#L-1014"><span class="linenos">1014</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-1015"><a href="#L-1015"><span class="linenos">1015</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">GetTaskRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">)</span>
</span><span id="L-1017"><a href="#L-1017"><span class="linenos">1017</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-1018"><a href="#L-1018"><span class="linenos">1018</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-1019"><a href="#L-1019"><span class="linenos">1019</span></a> <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span><span id="L-1020"><a href="#L-1020"><span class="linenos">1020</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-1021"><a href="#L-1021"><span class="linenos">1021</span></a> <span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="n">TaskStatus</span><span class="o">.</span><span class="n">Finished</span><span class="p">:</span>
</span><span id="L-1022"><a href="#L-1022"><span class="linenos">1022</span></a> <span class="k">break</span>
</span><span id="L-1023"><a href="#L-1023"><span class="linenos">1023</span></a> <span class="k">elif</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="n">TaskStatus</span><span class="o">.</span><span class="n">Canceled</span><span class="p">:</span>
</span><span id="L-1024"><a href="#L-1024"><span class="linenos">1024</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="s2">&quot;Task Canceled, Error: &quot;</span> <span class="o">+</span>
</span><span id="L-1025"><a href="#L-1025"><span class="linenos">1025</span></a> <span class="n">response</span><span class="o">.</span><span class="n">result</span><span class="o">.</span><span class="n">Err</span><span class="o">.</span><span class="n">reason</span><span class="p">)</span>
</span><span id="L-1026"><a href="#L-1026"><span class="linenos">1026</span></a> <span class="k">elif</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="n">TaskStatus</span><span class="o">.</span><span class="n">Failed</span><span class="p">:</span>
</span><span id="L-1027"><a href="#L-1027"><span class="linenos">1027</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="s2">&quot;Task Failed, Error: &quot;</span> <span class="o">+</span>
</span><span id="L-1028"><a href="#L-1028"><span class="linenos">1028</span></a> <span class="n">response</span><span class="o">.</span><span class="n">result</span><span class="o">.</span><span class="n">Err</span><span class="o">.</span><span class="n">reason</span><span class="p">)</span>
</span><span id="L-1029"><a href="#L-1029"><span class="linenos">1029</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-1030"><a href="#L-1030"><span class="linenos">1030</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="L-1031"><a href="#L-1031"><span class="linenos">1031</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span>
</span><span id="L-1032"><a href="#L-1032"><span class="linenos">1032</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to get task result (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-1033"><a href="#L-1033"><span class="linenos">1033</span></a>
</span><span id="L-1034"><a href="#L-1034"><span class="linenos">1034</span></a> <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">result</span><span class="o">.</span><span class="n">Ok</span><span class="o">.</span><span class="n">return_value</span>
</span><span id="L-1035"><a href="#L-1035"><span class="linenos">1035</span></a>
</span><span id="L-1036"><a href="#L-1036"><span class="linenos">1036</span></a> <span class="k">def</span> <span class="nf">get_output_cmac_by_tag</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">tag</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-1037"><a href="#L-1037"><span class="linenos">1037</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-1038"><a href="#L-1038"><span class="linenos">1038</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-1039"><a href="#L-1039"><span class="linenos">1039</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">GetTaskRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">)</span>
</span><span id="L-1040"><a href="#L-1040"><span class="linenos">1040</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-1041"><a href="#L-1041"><span class="linenos">1041</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-1042"><a href="#L-1042"><span class="linenos">1042</span></a> <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span><span id="L-1043"><a href="#L-1043"><span class="linenos">1043</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-1044"><a href="#L-1044"><span class="linenos">1044</span></a> <span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="n">TaskStatus</span><span class="o">.</span><span class="n">Finished</span><span class="p">:</span>
</span><span id="L-1045"><a href="#L-1045"><span class="linenos">1045</span></a> <span class="k">break</span>
</span><span id="L-1046"><a href="#L-1046"><span class="linenos">1046</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-1047"><a href="#L-1047"><span class="linenos">1047</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="L-1048"><a href="#L-1048"><span class="linenos">1048</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span>
</span><span id="L-1049"><a href="#L-1049"><span class="linenos">1049</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to get task result (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="L-1050"><a href="#L-1050"><span class="linenos">1050</span></a> <span class="n">response</span> <span class="o">=</span> <span class="n">MessageToDict</span><span class="p">(</span><span class="n">response</span><span class="p">,</span>
</span><span id="L-1051"><a href="#L-1051"><span class="linenos">1051</span></a> <span class="n">preserving_proto_field_name</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="L-1052"><a href="#L-1052"><span class="linenos">1052</span></a> <span class="n">use_integers_for_enums</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-1053"><a href="#L-1053"><span class="linenos">1053</span></a> <span class="k">return</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">response</span><span class="p">[</span><span class="s2">&quot;result&quot;</span><span class="p">][</span><span class="s2">&quot;Ok&quot;</span><span class="p">][</span><span class="s2">&quot;tags_map&quot;</span><span class="p">][</span><span class="n">tag</span><span class="p">])</span>
</span><span id="L-1054"><a href="#L-1054"><span class="linenos">1054</span></a>
</span><span id="L-1055"><a href="#L-1055"><span class="linenos">1055</span></a> <span class="k">def</span> <span class="nf">query_audit_logs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
</span><span id="L-1056"><a href="#L-1056"><span class="linenos">1056</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="L-1057"><a href="#L-1057"><span class="linenos">1057</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="L-1058"><a href="#L-1058"><span class="linenos">1058</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">QueryAuditLogsRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">limit</span><span class="p">)</span>
</span><span id="L-1059"><a href="#L-1059"><span class="linenos">1059</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-1060"><a href="#L-1060"><span class="linenos">1060</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="L-1061"><a href="#L-1061"><span class="linenos">1061</span></a> <span class="k">return</span> <span class="n">MessageToDict</span><span class="p">(</span><span class="n">response</span><span class="p">,</span>
</span><span id="L-1062"><a href="#L-1062"><span class="linenos">1062</span></a> <span class="n">preserving_proto_field_name</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="L-1063"><a href="#L-1063"><span class="linenos">1063</span></a> <span class="n">use_integers_for_enums</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-1064"><a href="#L-1064"><span class="linenos">1064</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-1065"><a href="#L-1065"><span class="linenos">1065</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="L-1066"><a href="#L-1066"><span class="linenos">1066</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to get audit logs (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span></pre></div>
</section>
<section id="FrontendService">
<input id="FrontendService-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">FrontendService</span><wbr>(<span class="base"><a href="#TeaclaveService">TeaclaveService</a></span>):
<label class="view-source-button" for="FrontendService-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FrontendService"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FrontendService-780"><a href="#FrontendService-780"><span class="linenos"> 780</span></a><span class="k">class</span> <span class="nc">FrontendService</span><span class="p">(</span><span class="n">TeaclaveService</span><span class="p">):</span>
</span><span id="FrontendService-781"><a href="#FrontendService-781"><span class="linenos"> 781</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Establish trusted channel with the frontend service and provide</span>
</span><span id="FrontendService-782"><a href="#FrontendService-782"><span class="linenos"> 782</span></a><span class="sd"> clients to send request through RPC.</span>
</span><span id="FrontendService-783"><a href="#FrontendService-783"><span class="linenos"> 783</span></a>
</span><span id="FrontendService-784"><a href="#FrontendService-784"><span class="linenos"> 784</span></a><span class="sd"> Args:</span>
</span><span id="FrontendService-785"><a href="#FrontendService-785"><span class="linenos"> 785</span></a><span class="sd"> </span>
</span><span id="FrontendService-786"><a href="#FrontendService-786"><span class="linenos"> 786</span></a><span class="sd"> address: The address of the remote services in tuple.</span>
</span><span id="FrontendService-787"><a href="#FrontendService-787"><span class="linenos"> 787</span></a><span class="sd"> as_root_ca_cert_path: Root CA certification of the attestation services</span>
</span><span id="FrontendService-788"><a href="#FrontendService-788"><span class="linenos"> 788</span></a><span class="sd"> to verify the attestation report.</span>
</span><span id="FrontendService-789"><a href="#FrontendService-789"><span class="linenos"> 789</span></a><span class="sd"> enclave_info_path: Path of enclave info to verify the remote service in</span>
</span><span id="FrontendService-790"><a href="#FrontendService-790"><span class="linenos"> 790</span></a><span class="sd"> the attestation report.</span>
</span><span id="FrontendService-791"><a href="#FrontendService-791"><span class="linenos"> 791</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="FrontendService-792"><a href="#FrontendService-792"><span class="linenos"> 792</span></a>
</span><span id="FrontendService-793"><a href="#FrontendService-793"><span class="linenos"> 793</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="FrontendService-794"><a href="#FrontendService-794"><span class="linenos"> 794</span></a> <span class="n">address</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">],</span>
</span><span id="FrontendService-795"><a href="#FrontendService-795"><span class="linenos"> 795</span></a> <span class="n">as_root_ca_cert_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FrontendService-796"><a href="#FrontendService-796"><span class="linenos"> 796</span></a> <span class="n">enclave_info_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FrontendService-797"><a href="#FrontendService-797"><span class="linenos"> 797</span></a> <span class="n">dump_report</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="FrontendService-798"><a href="#FrontendService-798"><span class="linenos"> 798</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;frontend&quot;</span><span class="p">,</span> <span class="n">address</span><span class="p">,</span> <span class="n">as_root_ca_cert_path</span><span class="p">,</span>
</span><span id="FrontendService-799"><a href="#FrontendService-799"><span class="linenos"> 799</span></a> <span class="n">enclave_info_path</span><span class="p">,</span> <span class="n">dump_report</span><span class="p">)</span>
</span><span id="FrontendService-800"><a href="#FrontendService-800"><span class="linenos"> 800</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">stub</span> <span class="o">=</span> <span class="n">TeaclaveFrontendStub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="p">)</span>
</span><span id="FrontendService-801"><a href="#FrontendService-801"><span class="linenos"> 801</span></a>
</span><span id="FrontendService-802"><a href="#FrontendService-802"><span class="linenos"> 802</span></a> <span class="k">def</span> <span class="nf">register_function</span><span class="p">(</span>
</span><span id="FrontendService-803"><a href="#FrontendService-803"><span class="linenos"> 803</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="FrontendService-804"><a href="#FrontendService-804"><span class="linenos"> 804</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FrontendService-805"><a href="#FrontendService-805"><span class="linenos"> 805</span></a> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FrontendService-806"><a href="#FrontendService-806"><span class="linenos"> 806</span></a> <span class="n">executor_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FrontendService-807"><a href="#FrontendService-807"><span class="linenos"> 807</span></a> <span class="n">public</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
</span><span id="FrontendService-808"><a href="#FrontendService-808"><span class="linenos"> 808</span></a> <span class="n">payload</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="FrontendService-809"><a href="#FrontendService-809"><span class="linenos"> 809</span></a> <span class="n">arguments</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionArgument</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="FrontendService-810"><a href="#FrontendService-810"><span class="linenos"> 810</span></a> <span class="n">inputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionInput</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="FrontendService-811"><a href="#FrontendService-811"><span class="linenos"> 811</span></a> <span class="n">outputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionOutput</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="FrontendService-812"><a href="#FrontendService-812"><span class="linenos"> 812</span></a> <span class="n">user_allowlist</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="FrontendService-813"><a href="#FrontendService-813"><span class="linenos"> 813</span></a> <span class="n">usage_quota</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span>
</span><span id="FrontendService-814"><a href="#FrontendService-814"><span class="linenos"> 814</span></a> <span class="p">):</span>
</span><span id="FrontendService-815"><a href="#FrontendService-815"><span class="linenos"> 815</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService-816"><a href="#FrontendService-816"><span class="linenos"> 816</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService-817"><a href="#FrontendService-817"><span class="linenos"> 817</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">RegisterFunctionRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span>
</span><span id="FrontendService-818"><a href="#FrontendService-818"><span class="linenos"> 818</span></a> <span class="n">executor_type</span><span class="p">,</span> <span class="n">public</span><span class="p">,</span> <span class="n">payload</span><span class="p">,</span>
</span><span id="FrontendService-819"><a href="#FrontendService-819"><span class="linenos"> 819</span></a> <span class="n">arguments</span><span class="p">,</span> <span class="n">inputs</span><span class="p">,</span> <span class="n">outputs</span><span class="p">,</span>
</span><span id="FrontendService-820"><a href="#FrontendService-820"><span class="linenos"> 820</span></a> <span class="n">user_allowlist</span><span class="p">,</span> <span class="n">usage_quota</span><span class="p">)</span>
</span><span id="FrontendService-821"><a href="#FrontendService-821"><span class="linenos"> 821</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService-822"><a href="#FrontendService-822"><span class="linenos"> 822</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService-823"><a href="#FrontendService-823"><span class="linenos"> 823</span></a> <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">function_id</span>
</span><span id="FrontendService-824"><a href="#FrontendService-824"><span class="linenos"> 824</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService-825"><a href="#FrontendService-825"><span class="linenos"> 825</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService-826"><a href="#FrontendService-826"><span class="linenos"> 826</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to register function (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="FrontendService-827"><a href="#FrontendService-827"><span class="linenos"> 827</span></a>
</span><span id="FrontendService-828"><a href="#FrontendService-828"><span class="linenos"> 828</span></a> <span class="k">def</span> <span class="nf">update_function</span><span class="p">(</span>
</span><span id="FrontendService-829"><a href="#FrontendService-829"><span class="linenos"> 829</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="FrontendService-830"><a href="#FrontendService-830"><span class="linenos"> 830</span></a> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FrontendService-831"><a href="#FrontendService-831"><span class="linenos"> 831</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FrontendService-832"><a href="#FrontendService-832"><span class="linenos"> 832</span></a> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FrontendService-833"><a href="#FrontendService-833"><span class="linenos"> 833</span></a> <span class="n">executor_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FrontendService-834"><a href="#FrontendService-834"><span class="linenos"> 834</span></a> <span class="n">public</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
</span><span id="FrontendService-835"><a href="#FrontendService-835"><span class="linenos"> 835</span></a> <span class="n">payload</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="FrontendService-836"><a href="#FrontendService-836"><span class="linenos"> 836</span></a> <span class="n">arguments</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionArgument</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="FrontendService-837"><a href="#FrontendService-837"><span class="linenos"> 837</span></a> <span class="n">inputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionInput</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="FrontendService-838"><a href="#FrontendService-838"><span class="linenos"> 838</span></a> <span class="n">outputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionOutput</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="FrontendService-839"><a href="#FrontendService-839"><span class="linenos"> 839</span></a> <span class="n">user_allowlist</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="FrontendService-840"><a href="#FrontendService-840"><span class="linenos"> 840</span></a> <span class="n">usage_quota</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span>
</span><span id="FrontendService-841"><a href="#FrontendService-841"><span class="linenos"> 841</span></a> <span class="p">):</span>
</span><span id="FrontendService-842"><a href="#FrontendService-842"><span class="linenos"> 842</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService-843"><a href="#FrontendService-843"><span class="linenos"> 843</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService-844"><a href="#FrontendService-844"><span class="linenos"> 844</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">UpdateFunctionRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span>
</span><span id="FrontendService-845"><a href="#FrontendService-845"><span class="linenos"> 845</span></a> <span class="n">description</span><span class="p">,</span> <span class="n">executor_type</span><span class="p">,</span> <span class="n">public</span><span class="p">,</span>
</span><span id="FrontendService-846"><a href="#FrontendService-846"><span class="linenos"> 846</span></a> <span class="n">payload</span><span class="p">,</span> <span class="n">arguments</span><span class="p">,</span> <span class="n">inputs</span><span class="p">,</span> <span class="n">outputs</span><span class="p">,</span>
</span><span id="FrontendService-847"><a href="#FrontendService-847"><span class="linenos"> 847</span></a> <span class="n">user_allowlist</span><span class="p">,</span> <span class="n">usage_quota</span><span class="p">)</span>
</span><span id="FrontendService-848"><a href="#FrontendService-848"><span class="linenos"> 848</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService-849"><a href="#FrontendService-849"><span class="linenos"> 849</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService-850"><a href="#FrontendService-850"><span class="linenos"> 850</span></a> <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">function_id</span>
</span><span id="FrontendService-851"><a href="#FrontendService-851"><span class="linenos"> 851</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService-852"><a href="#FrontendService-852"><span class="linenos"> 852</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService-853"><a href="#FrontendService-853"><span class="linenos"> 853</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to register function (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="FrontendService-854"><a href="#FrontendService-854"><span class="linenos"> 854</span></a>
</span><span id="FrontendService-855"><a href="#FrontendService-855"><span class="linenos"> 855</span></a> <span class="k">def</span> <span class="nf">list_functions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="FrontendService-856"><a href="#FrontendService-856"><span class="linenos"> 856</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService-857"><a href="#FrontendService-857"><span class="linenos"> 857</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService-858"><a href="#FrontendService-858"><span class="linenos"> 858</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">ListFunctionsRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">)</span>
</span><span id="FrontendService-859"><a href="#FrontendService-859"><span class="linenos"> 859</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService-860"><a href="#FrontendService-860"><span class="linenos"> 860</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService-861"><a href="#FrontendService-861"><span class="linenos"> 861</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService-862"><a href="#FrontendService-862"><span class="linenos"> 862</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to list functions (</span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="FrontendService-863"><a href="#FrontendService-863"><span class="linenos"> 863</span></a> <span class="k">return</span> <span class="n">MessageToDict</span><span class="p">(</span><span class="n">response</span><span class="p">,</span>
</span><span id="FrontendService-864"><a href="#FrontendService-864"><span class="linenos"> 864</span></a> <span class="n">preserving_proto_field_name</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="FrontendService-865"><a href="#FrontendService-865"><span class="linenos"> 865</span></a> <span class="n">use_integers_for_enums</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="FrontendService-866"><a href="#FrontendService-866"><span class="linenos"> 866</span></a>
</span><span id="FrontendService-867"><a href="#FrontendService-867"><span class="linenos"> 867</span></a> <span class="k">def</span> <span class="nf">get_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="FrontendService-868"><a href="#FrontendService-868"><span class="linenos"> 868</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService-869"><a href="#FrontendService-869"><span class="linenos"> 869</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService-870"><a href="#FrontendService-870"><span class="linenos"> 870</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">GetFunctionRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">)</span>
</span><span id="FrontendService-871"><a href="#FrontendService-871"><span class="linenos"> 871</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService-872"><a href="#FrontendService-872"><span class="linenos"> 872</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService-873"><a href="#FrontendService-873"><span class="linenos"> 873</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="FrontendService-874"><a href="#FrontendService-874"><span class="linenos"> 874</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService-875"><a href="#FrontendService-875"><span class="linenos"> 875</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService-876"><a href="#FrontendService-876"><span class="linenos"> 876</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to get function (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="FrontendService-877"><a href="#FrontendService-877"><span class="linenos"> 877</span></a>
</span><span id="FrontendService-878"><a href="#FrontendService-878"><span class="linenos"> 878</span></a> <span class="k">def</span> <span class="nf">get_function_usage_stats</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="FrontendService-879"><a href="#FrontendService-879"><span class="linenos"> 879</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService-880"><a href="#FrontendService-880"><span class="linenos"> 880</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService-881"><a href="#FrontendService-881"><span class="linenos"> 881</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">GetFunctionUsageStatsRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">)</span>
</span><span id="FrontendService-882"><a href="#FrontendService-882"><span class="linenos"> 882</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService-883"><a href="#FrontendService-883"><span class="linenos"> 883</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService-884"><a href="#FrontendService-884"><span class="linenos"> 884</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="FrontendService-885"><a href="#FrontendService-885"><span class="linenos"> 885</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService-886"><a href="#FrontendService-886"><span class="linenos"> 886</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService-887"><a href="#FrontendService-887"><span class="linenos"> 887</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span>
</span><span id="FrontendService-888"><a href="#FrontendService-888"><span class="linenos"> 888</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to get function usage statistics (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="FrontendService-889"><a href="#FrontendService-889"><span class="linenos"> 889</span></a>
</span><span id="FrontendService-890"><a href="#FrontendService-890"><span class="linenos"> 890</span></a> <span class="k">def</span> <span class="nf">delete_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="FrontendService-891"><a href="#FrontendService-891"><span class="linenos"> 891</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService-892"><a href="#FrontendService-892"><span class="linenos"> 892</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService-893"><a href="#FrontendService-893"><span class="linenos"> 893</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">DeleteFunctionRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">)</span>
</span><span id="FrontendService-894"><a href="#FrontendService-894"><span class="linenos"> 894</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService-895"><a href="#FrontendService-895"><span class="linenos"> 895</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService-896"><a href="#FrontendService-896"><span class="linenos"> 896</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="FrontendService-897"><a href="#FrontendService-897"><span class="linenos"> 897</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService-898"><a href="#FrontendService-898"><span class="linenos"> 898</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService-899"><a href="#FrontendService-899"><span class="linenos"> 899</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to delete function (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="FrontendService-900"><a href="#FrontendService-900"><span class="linenos"> 900</span></a>
</span><span id="FrontendService-901"><a href="#FrontendService-901"><span class="linenos"> 901</span></a> <span class="k">def</span> <span class="nf">disable_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="FrontendService-902"><a href="#FrontendService-902"><span class="linenos"> 902</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService-903"><a href="#FrontendService-903"><span class="linenos"> 903</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService-904"><a href="#FrontendService-904"><span class="linenos"> 904</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">DisableFunctionRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">)</span>
</span><span id="FrontendService-905"><a href="#FrontendService-905"><span class="linenos"> 905</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService-906"><a href="#FrontendService-906"><span class="linenos"> 906</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService-907"><a href="#FrontendService-907"><span class="linenos"> 907</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="FrontendService-908"><a href="#FrontendService-908"><span class="linenos"> 908</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService-909"><a href="#FrontendService-909"><span class="linenos"> 909</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService-910"><a href="#FrontendService-910"><span class="linenos"> 910</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to disable function (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="FrontendService-911"><a href="#FrontendService-911"><span class="linenos"> 911</span></a>
</span><span id="FrontendService-912"><a href="#FrontendService-912"><span class="linenos"> 912</span></a> <span class="k">def</span> <span class="nf">register_input_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">key</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span>
</span><span id="FrontendService-913"><a href="#FrontendService-913"><span class="linenos"> 913</span></a> <span class="n">iv</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">cmac</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]):</span>
</span><span id="FrontendService-914"><a href="#FrontendService-914"><span class="linenos"> 914</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService-915"><a href="#FrontendService-915"><span class="linenos"> 915</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService-916"><a href="#FrontendService-916"><span class="linenos"> 916</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">RegisterInputFileRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">cmac</span><span class="p">,</span>
</span><span id="FrontendService-917"><a href="#FrontendService-917"><span class="linenos"> 917</span></a> <span class="n">CryptoInfo</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">iv</span><span class="p">))</span>
</span><span id="FrontendService-918"><a href="#FrontendService-918"><span class="linenos"> 918</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService-919"><a href="#FrontendService-919"><span class="linenos"> 919</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService-920"><a href="#FrontendService-920"><span class="linenos"> 920</span></a> <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">data_id</span>
</span><span id="FrontendService-921"><a href="#FrontendService-921"><span class="linenos"> 921</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService-922"><a href="#FrontendService-922"><span class="linenos"> 922</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService-923"><a href="#FrontendService-923"><span class="linenos"> 923</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span>
</span><span id="FrontendService-924"><a href="#FrontendService-924"><span class="linenos"> 924</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to register input file (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="FrontendService-925"><a href="#FrontendService-925"><span class="linenos"> 925</span></a>
</span><span id="FrontendService-926"><a href="#FrontendService-926"><span class="linenos"> 926</span></a> <span class="k">def</span> <span class="nf">register_output_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">key</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span>
</span><span id="FrontendService-927"><a href="#FrontendService-927"><span class="linenos"> 927</span></a> <span class="n">iv</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]):</span>
</span><span id="FrontendService-928"><a href="#FrontendService-928"><span class="linenos"> 928</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService-929"><a href="#FrontendService-929"><span class="linenos"> 929</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService-930"><a href="#FrontendService-930"><span class="linenos"> 930</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">RegisterOutputFileRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span>
</span><span id="FrontendService-931"><a href="#FrontendService-931"><span class="linenos"> 931</span></a> <span class="n">CryptoInfo</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">iv</span><span class="p">))</span>
</span><span id="FrontendService-932"><a href="#FrontendService-932"><span class="linenos"> 932</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService-933"><a href="#FrontendService-933"><span class="linenos"> 933</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService-934"><a href="#FrontendService-934"><span class="linenos"> 934</span></a> <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">data_id</span>
</span><span id="FrontendService-935"><a href="#FrontendService-935"><span class="linenos"> 935</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService-936"><a href="#FrontendService-936"><span class="linenos"> 936</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService-937"><a href="#FrontendService-937"><span class="linenos"> 937</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span>
</span><span id="FrontendService-938"><a href="#FrontendService-938"><span class="linenos"> 938</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to register output file (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="FrontendService-939"><a href="#FrontendService-939"><span class="linenos"> 939</span></a>
</span><span id="FrontendService-940"><a href="#FrontendService-940"><span class="linenos"> 940</span></a> <span class="k">def</span> <span class="nf">create_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="FrontendService-941"><a href="#FrontendService-941"><span class="linenos"> 941</span></a> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FrontendService-942"><a href="#FrontendService-942"><span class="linenos"> 942</span></a> <span class="n">function_arguments</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span>
</span><span id="FrontendService-943"><a href="#FrontendService-943"><span class="linenos"> 943</span></a> <span class="n">executor</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FrontendService-944"><a href="#FrontendService-944"><span class="linenos"> 944</span></a> <span class="n">inputs_ownership</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">OwnerList</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="FrontendService-945"><a href="#FrontendService-945"><span class="linenos"> 945</span></a> <span class="n">outputs_ownership</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">OwnerList</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]):</span>
</span><span id="FrontendService-946"><a href="#FrontendService-946"><span class="linenos"> 946</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService-947"><a href="#FrontendService-947"><span class="linenos"> 947</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService-948"><a href="#FrontendService-948"><span class="linenos"> 948</span></a> <span class="n">function_arguments</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">function_arguments</span><span class="p">)</span>
</span><span id="FrontendService-949"><a href="#FrontendService-949"><span class="linenos"> 949</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">CreateTaskRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">,</span>
</span><span id="FrontendService-950"><a href="#FrontendService-950"><span class="linenos"> 950</span></a> <span class="n">function_arguments</span><span class="p">,</span> <span class="n">executor</span><span class="p">,</span>
</span><span id="FrontendService-951"><a href="#FrontendService-951"><span class="linenos"> 951</span></a> <span class="n">inputs_ownership</span><span class="p">,</span> <span class="n">outputs_ownership</span><span class="p">)</span>
</span><span id="FrontendService-952"><a href="#FrontendService-952"><span class="linenos"> 952</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService-953"><a href="#FrontendService-953"><span class="linenos"> 953</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService-954"><a href="#FrontendService-954"><span class="linenos"> 954</span></a> <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">task_id</span>
</span><span id="FrontendService-955"><a href="#FrontendService-955"><span class="linenos"> 955</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService-956"><a href="#FrontendService-956"><span class="linenos"> 956</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService-957"><a href="#FrontendService-957"><span class="linenos"> 957</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to create task (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="FrontendService-958"><a href="#FrontendService-958"><span class="linenos"> 958</span></a>
</span><span id="FrontendService-959"><a href="#FrontendService-959"><span class="linenos"> 959</span></a> <span class="k">def</span> <span class="nf">assign_data_to_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">inputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">DataMap</span><span class="p">],</span>
</span><span id="FrontendService-960"><a href="#FrontendService-960"><span class="linenos"> 960</span></a> <span class="n">outputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">DataMap</span><span class="p">]):</span>
</span><span id="FrontendService-961"><a href="#FrontendService-961"><span class="linenos"> 961</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService-962"><a href="#FrontendService-962"><span class="linenos"> 962</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService-963"><a href="#FrontendService-963"><span class="linenos"> 963</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">AssignDataRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">,</span> <span class="n">inputs</span><span class="p">,</span> <span class="n">outputs</span><span class="p">)</span>
</span><span id="FrontendService-964"><a href="#FrontendService-964"><span class="linenos"> 964</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService-965"><a href="#FrontendService-965"><span class="linenos"> 965</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService-966"><a href="#FrontendService-966"><span class="linenos"> 966</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService-967"><a href="#FrontendService-967"><span class="linenos"> 967</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService-968"><a href="#FrontendService-968"><span class="linenos"> 968</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span>
</span><span id="FrontendService-969"><a href="#FrontendService-969"><span class="linenos"> 969</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to assign data to task (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="FrontendService-970"><a href="#FrontendService-970"><span class="linenos"> 970</span></a>
</span><span id="FrontendService-971"><a href="#FrontendService-971"><span class="linenos"> 971</span></a> <span class="k">def</span> <span class="nf">approve_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="FrontendService-972"><a href="#FrontendService-972"><span class="linenos"> 972</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService-973"><a href="#FrontendService-973"><span class="linenos"> 973</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService-974"><a href="#FrontendService-974"><span class="linenos"> 974</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">ApproveTaskRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">)</span>
</span><span id="FrontendService-975"><a href="#FrontendService-975"><span class="linenos"> 975</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService-976"><a href="#FrontendService-976"><span class="linenos"> 976</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService-977"><a href="#FrontendService-977"><span class="linenos"> 977</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService-978"><a href="#FrontendService-978"><span class="linenos"> 978</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService-979"><a href="#FrontendService-979"><span class="linenos"> 979</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to approve task (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="FrontendService-980"><a href="#FrontendService-980"><span class="linenos"> 980</span></a>
</span><span id="FrontendService-981"><a href="#FrontendService-981"><span class="linenos"> 981</span></a> <span class="k">def</span> <span class="nf">invoke_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="FrontendService-982"><a href="#FrontendService-982"><span class="linenos"> 982</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService-983"><a href="#FrontendService-983"><span class="linenos"> 983</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService-984"><a href="#FrontendService-984"><span class="linenos"> 984</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">InvokeTaskRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">)</span>
</span><span id="FrontendService-985"><a href="#FrontendService-985"><span class="linenos"> 985</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService-986"><a href="#FrontendService-986"><span class="linenos"> 986</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService-987"><a href="#FrontendService-987"><span class="linenos"> 987</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService-988"><a href="#FrontendService-988"><span class="linenos"> 988</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService-989"><a href="#FrontendService-989"><span class="linenos"> 989</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to invoke task (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="FrontendService-990"><a href="#FrontendService-990"><span class="linenos"> 990</span></a>
</span><span id="FrontendService-991"><a href="#FrontendService-991"><span class="linenos"> 991</span></a> <span class="k">def</span> <span class="nf">cancel_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="FrontendService-992"><a href="#FrontendService-992"><span class="linenos"> 992</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService-993"><a href="#FrontendService-993"><span class="linenos"> 993</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService-994"><a href="#FrontendService-994"><span class="linenos"> 994</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">CancelTaskRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">)</span>
</span><span id="FrontendService-995"><a href="#FrontendService-995"><span class="linenos"> 995</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService-996"><a href="#FrontendService-996"><span class="linenos"> 996</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService-997"><a href="#FrontendService-997"><span class="linenos"> 997</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService-998"><a href="#FrontendService-998"><span class="linenos"> 998</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService-999"><a href="#FrontendService-999"><span class="linenos"> 999</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to cancel task (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="FrontendService-1000"><a href="#FrontendService-1000"><span class="linenos">1000</span></a>
</span><span id="FrontendService-1001"><a href="#FrontendService-1001"><span class="linenos">1001</span></a> <span class="k">def</span> <span class="nf">get_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="FrontendService-1002"><a href="#FrontendService-1002"><span class="linenos">1002</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService-1003"><a href="#FrontendService-1003"><span class="linenos">1003</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService-1004"><a href="#FrontendService-1004"><span class="linenos">1004</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">GetTaskRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">)</span>
</span><span id="FrontendService-1005"><a href="#FrontendService-1005"><span class="linenos">1005</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService-1006"><a href="#FrontendService-1006"><span class="linenos">1006</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService-1007"><a href="#FrontendService-1007"><span class="linenos">1007</span></a> <span class="k">return</span> <span class="n">MessageToDict</span><span class="p">(</span><span class="n">response</span><span class="p">,</span>
</span><span id="FrontendService-1008"><a href="#FrontendService-1008"><span class="linenos">1008</span></a> <span class="n">preserving_proto_field_name</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="FrontendService-1009"><a href="#FrontendService-1009"><span class="linenos">1009</span></a> <span class="n">use_integers_for_enums</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="FrontendService-1010"><a href="#FrontendService-1010"><span class="linenos">1010</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService-1011"><a href="#FrontendService-1011"><span class="linenos">1011</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService-1012"><a href="#FrontendService-1012"><span class="linenos">1012</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to get task result (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="FrontendService-1013"><a href="#FrontendService-1013"><span class="linenos">1013</span></a>
</span><span id="FrontendService-1014"><a href="#FrontendService-1014"><span class="linenos">1014</span></a> <span class="k">def</span> <span class="nf">get_task_result</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="FrontendService-1015"><a href="#FrontendService-1015"><span class="linenos">1015</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService-1016"><a href="#FrontendService-1016"><span class="linenos">1016</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService-1017"><a href="#FrontendService-1017"><span class="linenos">1017</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">GetTaskRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">)</span>
</span><span id="FrontendService-1018"><a href="#FrontendService-1018"><span class="linenos">1018</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="FrontendService-1019"><a href="#FrontendService-1019"><span class="linenos">1019</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService-1020"><a href="#FrontendService-1020"><span class="linenos">1020</span></a> <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span><span id="FrontendService-1021"><a href="#FrontendService-1021"><span class="linenos">1021</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService-1022"><a href="#FrontendService-1022"><span class="linenos">1022</span></a> <span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="n">TaskStatus</span><span class="o">.</span><span class="n">Finished</span><span class="p">:</span>
</span><span id="FrontendService-1023"><a href="#FrontendService-1023"><span class="linenos">1023</span></a> <span class="k">break</span>
</span><span id="FrontendService-1024"><a href="#FrontendService-1024"><span class="linenos">1024</span></a> <span class="k">elif</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="n">TaskStatus</span><span class="o">.</span><span class="n">Canceled</span><span class="p">:</span>
</span><span id="FrontendService-1025"><a href="#FrontendService-1025"><span class="linenos">1025</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="s2">&quot;Task Canceled, Error: &quot;</span> <span class="o">+</span>
</span><span id="FrontendService-1026"><a href="#FrontendService-1026"><span class="linenos">1026</span></a> <span class="n">response</span><span class="o">.</span><span class="n">result</span><span class="o">.</span><span class="n">Err</span><span class="o">.</span><span class="n">reason</span><span class="p">)</span>
</span><span id="FrontendService-1027"><a href="#FrontendService-1027"><span class="linenos">1027</span></a> <span class="k">elif</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="n">TaskStatus</span><span class="o">.</span><span class="n">Failed</span><span class="p">:</span>
</span><span id="FrontendService-1028"><a href="#FrontendService-1028"><span class="linenos">1028</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="s2">&quot;Task Failed, Error: &quot;</span> <span class="o">+</span>
</span><span id="FrontendService-1029"><a href="#FrontendService-1029"><span class="linenos">1029</span></a> <span class="n">response</span><span class="o">.</span><span class="n">result</span><span class="o">.</span><span class="n">Err</span><span class="o">.</span><span class="n">reason</span><span class="p">)</span>
</span><span id="FrontendService-1030"><a href="#FrontendService-1030"><span class="linenos">1030</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService-1031"><a href="#FrontendService-1031"><span class="linenos">1031</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService-1032"><a href="#FrontendService-1032"><span class="linenos">1032</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span>
</span><span id="FrontendService-1033"><a href="#FrontendService-1033"><span class="linenos">1033</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to get task result (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="FrontendService-1034"><a href="#FrontendService-1034"><span class="linenos">1034</span></a>
</span><span id="FrontendService-1035"><a href="#FrontendService-1035"><span class="linenos">1035</span></a> <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">result</span><span class="o">.</span><span class="n">Ok</span><span class="o">.</span><span class="n">return_value</span>
</span><span id="FrontendService-1036"><a href="#FrontendService-1036"><span class="linenos">1036</span></a>
</span><span id="FrontendService-1037"><a href="#FrontendService-1037"><span class="linenos">1037</span></a> <span class="k">def</span> <span class="nf">get_output_cmac_by_tag</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">tag</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="FrontendService-1038"><a href="#FrontendService-1038"><span class="linenos">1038</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService-1039"><a href="#FrontendService-1039"><span class="linenos">1039</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService-1040"><a href="#FrontendService-1040"><span class="linenos">1040</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">GetTaskRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">)</span>
</span><span id="FrontendService-1041"><a href="#FrontendService-1041"><span class="linenos">1041</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="FrontendService-1042"><a href="#FrontendService-1042"><span class="linenos">1042</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService-1043"><a href="#FrontendService-1043"><span class="linenos">1043</span></a> <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span><span id="FrontendService-1044"><a href="#FrontendService-1044"><span class="linenos">1044</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService-1045"><a href="#FrontendService-1045"><span class="linenos">1045</span></a> <span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="n">TaskStatus</span><span class="o">.</span><span class="n">Finished</span><span class="p">:</span>
</span><span id="FrontendService-1046"><a href="#FrontendService-1046"><span class="linenos">1046</span></a> <span class="k">break</span>
</span><span id="FrontendService-1047"><a href="#FrontendService-1047"><span class="linenos">1047</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService-1048"><a href="#FrontendService-1048"><span class="linenos">1048</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService-1049"><a href="#FrontendService-1049"><span class="linenos">1049</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span>
</span><span id="FrontendService-1050"><a href="#FrontendService-1050"><span class="linenos">1050</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to get task result (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="FrontendService-1051"><a href="#FrontendService-1051"><span class="linenos">1051</span></a> <span class="n">response</span> <span class="o">=</span> <span class="n">MessageToDict</span><span class="p">(</span><span class="n">response</span><span class="p">,</span>
</span><span id="FrontendService-1052"><a href="#FrontendService-1052"><span class="linenos">1052</span></a> <span class="n">preserving_proto_field_name</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="FrontendService-1053"><a href="#FrontendService-1053"><span class="linenos">1053</span></a> <span class="n">use_integers_for_enums</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="FrontendService-1054"><a href="#FrontendService-1054"><span class="linenos">1054</span></a> <span class="k">return</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">response</span><span class="p">[</span><span class="s2">&quot;result&quot;</span><span class="p">][</span><span class="s2">&quot;Ok&quot;</span><span class="p">][</span><span class="s2">&quot;tags_map&quot;</span><span class="p">][</span><span class="n">tag</span><span class="p">])</span>
</span><span id="FrontendService-1055"><a href="#FrontendService-1055"><span class="linenos">1055</span></a>
</span><span id="FrontendService-1056"><a href="#FrontendService-1056"><span class="linenos">1056</span></a> <span class="k">def</span> <span class="nf">query_audit_logs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
</span><span id="FrontendService-1057"><a href="#FrontendService-1057"><span class="linenos">1057</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService-1058"><a href="#FrontendService-1058"><span class="linenos">1058</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService-1059"><a href="#FrontendService-1059"><span class="linenos">1059</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">QueryAuditLogsRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">limit</span><span class="p">)</span>
</span><span id="FrontendService-1060"><a href="#FrontendService-1060"><span class="linenos">1060</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService-1061"><a href="#FrontendService-1061"><span class="linenos">1061</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService-1062"><a href="#FrontendService-1062"><span class="linenos">1062</span></a> <span class="k">return</span> <span class="n">MessageToDict</span><span class="p">(</span><span class="n">response</span><span class="p">,</span>
</span><span id="FrontendService-1063"><a href="#FrontendService-1063"><span class="linenos">1063</span></a> <span class="n">preserving_proto_field_name</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="FrontendService-1064"><a href="#FrontendService-1064"><span class="linenos">1064</span></a> <span class="n">use_integers_for_enums</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="FrontendService-1065"><a href="#FrontendService-1065"><span class="linenos">1065</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService-1066"><a href="#FrontendService-1066"><span class="linenos">1066</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService-1067"><a href="#FrontendService-1067"><span class="linenos">1067</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to get audit logs (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Establish trusted channel with the frontend service and provide
clients to send request through RPC.</p>
<p>Args:</p>
<pre><code>address: The address of the remote services in tuple.
as_root_ca_cert_path: Root CA certification of the attestation services
to verify the attestation report.
enclave_info_path: Path of enclave info to verify the remote service in
the attestation report.
</code></pre>
</div>
<div id="FrontendService.__init__" class="classattr">
<input id="FrontendService.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="name">FrontendService</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">address</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">]</span>,</span><span class="param"> <span class="n">as_root_ca_cert_path</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">enclave_info_path</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">dump_report</span><span class="o">=</span><span class="kc">False</span></span>)</span>
<label class="view-source-button" for="FrontendService.__init__-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FrontendService.__init__"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FrontendService.__init__-793"><a href="#FrontendService.__init__-793"><span class="linenos">793</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="FrontendService.__init__-794"><a href="#FrontendService.__init__-794"><span class="linenos">794</span></a> <span class="n">address</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">],</span>
</span><span id="FrontendService.__init__-795"><a href="#FrontendService.__init__-795"><span class="linenos">795</span></a> <span class="n">as_root_ca_cert_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FrontendService.__init__-796"><a href="#FrontendService.__init__-796"><span class="linenos">796</span></a> <span class="n">enclave_info_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FrontendService.__init__-797"><a href="#FrontendService.__init__-797"><span class="linenos">797</span></a> <span class="n">dump_report</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="FrontendService.__init__-798"><a href="#FrontendService.__init__-798"><span class="linenos">798</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;frontend&quot;</span><span class="p">,</span> <span class="n">address</span><span class="p">,</span> <span class="n">as_root_ca_cert_path</span><span class="p">,</span>
</span><span id="FrontendService.__init__-799"><a href="#FrontendService.__init__-799"><span class="linenos">799</span></a> <span class="n">enclave_info_path</span><span class="p">,</span> <span class="n">dump_report</span><span class="p">)</span>
</span><span id="FrontendService.__init__-800"><a href="#FrontendService.__init__-800"><span class="linenos">800</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">stub</span> <span class="o">=</span> <span class="n">TeaclaveFrontendStub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="p">)</span>
</span></pre></div>
</div>
<div id="FrontendService.register_function" class="classattr">
<input id="FrontendService.register_function-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">register_function</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">executor_type</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">public</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="n">payload</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>,</span><span class="param"> <span class="n">arguments</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n"><a href="#FunctionArgument">python.teaclave.FunctionArgument</a></span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>,</span><span class="param"> <span class="n">inputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n"><a href="#FunctionInput">python.teaclave.FunctionInput</a></span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>,</span><span class="param"> <span class="n">outputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n"><a href="#FunctionOutput">python.teaclave.FunctionOutput</a></span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>,</span><span class="param"> <span class="n">user_allowlist</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>,</span><span class="param"> <span class="n">usage_quota</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="FrontendService.register_function-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FrontendService.register_function"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FrontendService.register_function-802"><a href="#FrontendService.register_function-802"><span class="linenos">802</span></a> <span class="k">def</span> <span class="nf">register_function</span><span class="p">(</span>
</span><span id="FrontendService.register_function-803"><a href="#FrontendService.register_function-803"><span class="linenos">803</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="FrontendService.register_function-804"><a href="#FrontendService.register_function-804"><span class="linenos">804</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FrontendService.register_function-805"><a href="#FrontendService.register_function-805"><span class="linenos">805</span></a> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FrontendService.register_function-806"><a href="#FrontendService.register_function-806"><span class="linenos">806</span></a> <span class="n">executor_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FrontendService.register_function-807"><a href="#FrontendService.register_function-807"><span class="linenos">807</span></a> <span class="n">public</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
</span><span id="FrontendService.register_function-808"><a href="#FrontendService.register_function-808"><span class="linenos">808</span></a> <span class="n">payload</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="FrontendService.register_function-809"><a href="#FrontendService.register_function-809"><span class="linenos">809</span></a> <span class="n">arguments</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionArgument</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="FrontendService.register_function-810"><a href="#FrontendService.register_function-810"><span class="linenos">810</span></a> <span class="n">inputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionInput</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="FrontendService.register_function-811"><a href="#FrontendService.register_function-811"><span class="linenos">811</span></a> <span class="n">outputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionOutput</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="FrontendService.register_function-812"><a href="#FrontendService.register_function-812"><span class="linenos">812</span></a> <span class="n">user_allowlist</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="FrontendService.register_function-813"><a href="#FrontendService.register_function-813"><span class="linenos">813</span></a> <span class="n">usage_quota</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span>
</span><span id="FrontendService.register_function-814"><a href="#FrontendService.register_function-814"><span class="linenos">814</span></a> <span class="p">):</span>
</span><span id="FrontendService.register_function-815"><a href="#FrontendService.register_function-815"><span class="linenos">815</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService.register_function-816"><a href="#FrontendService.register_function-816"><span class="linenos">816</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService.register_function-817"><a href="#FrontendService.register_function-817"><span class="linenos">817</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">RegisterFunctionRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span>
</span><span id="FrontendService.register_function-818"><a href="#FrontendService.register_function-818"><span class="linenos">818</span></a> <span class="n">executor_type</span><span class="p">,</span> <span class="n">public</span><span class="p">,</span> <span class="n">payload</span><span class="p">,</span>
</span><span id="FrontendService.register_function-819"><a href="#FrontendService.register_function-819"><span class="linenos">819</span></a> <span class="n">arguments</span><span class="p">,</span> <span class="n">inputs</span><span class="p">,</span> <span class="n">outputs</span><span class="p">,</span>
</span><span id="FrontendService.register_function-820"><a href="#FrontendService.register_function-820"><span class="linenos">820</span></a> <span class="n">user_allowlist</span><span class="p">,</span> <span class="n">usage_quota</span><span class="p">)</span>
</span><span id="FrontendService.register_function-821"><a href="#FrontendService.register_function-821"><span class="linenos">821</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService.register_function-822"><a href="#FrontendService.register_function-822"><span class="linenos">822</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService.register_function-823"><a href="#FrontendService.register_function-823"><span class="linenos">823</span></a> <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">function_id</span>
</span><span id="FrontendService.register_function-824"><a href="#FrontendService.register_function-824"><span class="linenos">824</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService.register_function-825"><a href="#FrontendService.register_function-825"><span class="linenos">825</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService.register_function-826"><a href="#FrontendService.register_function-826"><span class="linenos">826</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to register function (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span></pre></div>
</div>
<div id="FrontendService.update_function" class="classattr">
<input id="FrontendService.update_function-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">update_function</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">executor_type</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">public</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="n">payload</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>,</span><span class="param"> <span class="n">arguments</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n"><a href="#FunctionArgument">python.teaclave.FunctionArgument</a></span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>,</span><span class="param"> <span class="n">inputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n"><a href="#FunctionInput">python.teaclave.FunctionInput</a></span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>,</span><span class="param"> <span class="n">outputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n"><a href="#FunctionOutput">python.teaclave.FunctionOutput</a></span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>,</span><span class="param"> <span class="n">user_allowlist</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>,</span><span class="param"> <span class="n">usage_quota</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="FrontendService.update_function-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FrontendService.update_function"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FrontendService.update_function-828"><a href="#FrontendService.update_function-828"><span class="linenos">828</span></a> <span class="k">def</span> <span class="nf">update_function</span><span class="p">(</span>
</span><span id="FrontendService.update_function-829"><a href="#FrontendService.update_function-829"><span class="linenos">829</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="FrontendService.update_function-830"><a href="#FrontendService.update_function-830"><span class="linenos">830</span></a> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FrontendService.update_function-831"><a href="#FrontendService.update_function-831"><span class="linenos">831</span></a> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FrontendService.update_function-832"><a href="#FrontendService.update_function-832"><span class="linenos">832</span></a> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FrontendService.update_function-833"><a href="#FrontendService.update_function-833"><span class="linenos">833</span></a> <span class="n">executor_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FrontendService.update_function-834"><a href="#FrontendService.update_function-834"><span class="linenos">834</span></a> <span class="n">public</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
</span><span id="FrontendService.update_function-835"><a href="#FrontendService.update_function-835"><span class="linenos">835</span></a> <span class="n">payload</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="FrontendService.update_function-836"><a href="#FrontendService.update_function-836"><span class="linenos">836</span></a> <span class="n">arguments</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionArgument</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="FrontendService.update_function-837"><a href="#FrontendService.update_function-837"><span class="linenos">837</span></a> <span class="n">inputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionInput</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="FrontendService.update_function-838"><a href="#FrontendService.update_function-838"><span class="linenos">838</span></a> <span class="n">outputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">FunctionOutput</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="FrontendService.update_function-839"><a href="#FrontendService.update_function-839"><span class="linenos">839</span></a> <span class="n">user_allowlist</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="FrontendService.update_function-840"><a href="#FrontendService.update_function-840"><span class="linenos">840</span></a> <span class="n">usage_quota</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span>
</span><span id="FrontendService.update_function-841"><a href="#FrontendService.update_function-841"><span class="linenos">841</span></a> <span class="p">):</span>
</span><span id="FrontendService.update_function-842"><a href="#FrontendService.update_function-842"><span class="linenos">842</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService.update_function-843"><a href="#FrontendService.update_function-843"><span class="linenos">843</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService.update_function-844"><a href="#FrontendService.update_function-844"><span class="linenos">844</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">UpdateFunctionRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span>
</span><span id="FrontendService.update_function-845"><a href="#FrontendService.update_function-845"><span class="linenos">845</span></a> <span class="n">description</span><span class="p">,</span> <span class="n">executor_type</span><span class="p">,</span> <span class="n">public</span><span class="p">,</span>
</span><span id="FrontendService.update_function-846"><a href="#FrontendService.update_function-846"><span class="linenos">846</span></a> <span class="n">payload</span><span class="p">,</span> <span class="n">arguments</span><span class="p">,</span> <span class="n">inputs</span><span class="p">,</span> <span class="n">outputs</span><span class="p">,</span>
</span><span id="FrontendService.update_function-847"><a href="#FrontendService.update_function-847"><span class="linenos">847</span></a> <span class="n">user_allowlist</span><span class="p">,</span> <span class="n">usage_quota</span><span class="p">)</span>
</span><span id="FrontendService.update_function-848"><a href="#FrontendService.update_function-848"><span class="linenos">848</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService.update_function-849"><a href="#FrontendService.update_function-849"><span class="linenos">849</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService.update_function-850"><a href="#FrontendService.update_function-850"><span class="linenos">850</span></a> <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">function_id</span>
</span><span id="FrontendService.update_function-851"><a href="#FrontendService.update_function-851"><span class="linenos">851</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService.update_function-852"><a href="#FrontendService.update_function-852"><span class="linenos">852</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService.update_function-853"><a href="#FrontendService.update_function-853"><span class="linenos">853</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to register function (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span></pre></div>
</div>
<div id="FrontendService.list_functions" class="classattr">
<input id="FrontendService.list_functions-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">list_functions</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="FrontendService.list_functions-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FrontendService.list_functions"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FrontendService.list_functions-855"><a href="#FrontendService.list_functions-855"><span class="linenos">855</span></a> <span class="k">def</span> <span class="nf">list_functions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="FrontendService.list_functions-856"><a href="#FrontendService.list_functions-856"><span class="linenos">856</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService.list_functions-857"><a href="#FrontendService.list_functions-857"><span class="linenos">857</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService.list_functions-858"><a href="#FrontendService.list_functions-858"><span class="linenos">858</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">ListFunctionsRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">)</span>
</span><span id="FrontendService.list_functions-859"><a href="#FrontendService.list_functions-859"><span class="linenos">859</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService.list_functions-860"><a href="#FrontendService.list_functions-860"><span class="linenos">860</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService.list_functions-861"><a href="#FrontendService.list_functions-861"><span class="linenos">861</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService.list_functions-862"><a href="#FrontendService.list_functions-862"><span class="linenos">862</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to list functions (</span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="FrontendService.list_functions-863"><a href="#FrontendService.list_functions-863"><span class="linenos">863</span></a> <span class="k">return</span> <span class="n">MessageToDict</span><span class="p">(</span><span class="n">response</span><span class="p">,</span>
</span><span id="FrontendService.list_functions-864"><a href="#FrontendService.list_functions-864"><span class="linenos">864</span></a> <span class="n">preserving_proto_field_name</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="FrontendService.list_functions-865"><a href="#FrontendService.list_functions-865"><span class="linenos">865</span></a> <span class="n">use_integers_for_enums</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></pre></div>
</div>
<div id="FrontendService.get_function" class="classattr">
<input id="FrontendService.get_function-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">get_function</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="FrontendService.get_function-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FrontendService.get_function"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FrontendService.get_function-867"><a href="#FrontendService.get_function-867"><span class="linenos">867</span></a> <span class="k">def</span> <span class="nf">get_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="FrontendService.get_function-868"><a href="#FrontendService.get_function-868"><span class="linenos">868</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService.get_function-869"><a href="#FrontendService.get_function-869"><span class="linenos">869</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService.get_function-870"><a href="#FrontendService.get_function-870"><span class="linenos">870</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">GetFunctionRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">)</span>
</span><span id="FrontendService.get_function-871"><a href="#FrontendService.get_function-871"><span class="linenos">871</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService.get_function-872"><a href="#FrontendService.get_function-872"><span class="linenos">872</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService.get_function-873"><a href="#FrontendService.get_function-873"><span class="linenos">873</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="FrontendService.get_function-874"><a href="#FrontendService.get_function-874"><span class="linenos">874</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService.get_function-875"><a href="#FrontendService.get_function-875"><span class="linenos">875</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService.get_function-876"><a href="#FrontendService.get_function-876"><span class="linenos">876</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to get function (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span></pre></div>
</div>
<div id="FrontendService.get_function_usage_stats" class="classattr">
<input id="FrontendService.get_function_usage_stats-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">get_function_usage_stats</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="FrontendService.get_function_usage_stats-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FrontendService.get_function_usage_stats"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FrontendService.get_function_usage_stats-878"><a href="#FrontendService.get_function_usage_stats-878"><span class="linenos">878</span></a> <span class="k">def</span> <span class="nf">get_function_usage_stats</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="FrontendService.get_function_usage_stats-879"><a href="#FrontendService.get_function_usage_stats-879"><span class="linenos">879</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService.get_function_usage_stats-880"><a href="#FrontendService.get_function_usage_stats-880"><span class="linenos">880</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService.get_function_usage_stats-881"><a href="#FrontendService.get_function_usage_stats-881"><span class="linenos">881</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">GetFunctionUsageStatsRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">)</span>
</span><span id="FrontendService.get_function_usage_stats-882"><a href="#FrontendService.get_function_usage_stats-882"><span class="linenos">882</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService.get_function_usage_stats-883"><a href="#FrontendService.get_function_usage_stats-883"><span class="linenos">883</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService.get_function_usage_stats-884"><a href="#FrontendService.get_function_usage_stats-884"><span class="linenos">884</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="FrontendService.get_function_usage_stats-885"><a href="#FrontendService.get_function_usage_stats-885"><span class="linenos">885</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService.get_function_usage_stats-886"><a href="#FrontendService.get_function_usage_stats-886"><span class="linenos">886</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService.get_function_usage_stats-887"><a href="#FrontendService.get_function_usage_stats-887"><span class="linenos">887</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span>
</span><span id="FrontendService.get_function_usage_stats-888"><a href="#FrontendService.get_function_usage_stats-888"><span class="linenos">888</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to get function usage statistics (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span></pre></div>
</div>
<div id="FrontendService.delete_function" class="classattr">
<input id="FrontendService.delete_function-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">delete_function</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="FrontendService.delete_function-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FrontendService.delete_function"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FrontendService.delete_function-890"><a href="#FrontendService.delete_function-890"><span class="linenos">890</span></a> <span class="k">def</span> <span class="nf">delete_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="FrontendService.delete_function-891"><a href="#FrontendService.delete_function-891"><span class="linenos">891</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService.delete_function-892"><a href="#FrontendService.delete_function-892"><span class="linenos">892</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService.delete_function-893"><a href="#FrontendService.delete_function-893"><span class="linenos">893</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">DeleteFunctionRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">)</span>
</span><span id="FrontendService.delete_function-894"><a href="#FrontendService.delete_function-894"><span class="linenos">894</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService.delete_function-895"><a href="#FrontendService.delete_function-895"><span class="linenos">895</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService.delete_function-896"><a href="#FrontendService.delete_function-896"><span class="linenos">896</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="FrontendService.delete_function-897"><a href="#FrontendService.delete_function-897"><span class="linenos">897</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService.delete_function-898"><a href="#FrontendService.delete_function-898"><span class="linenos">898</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService.delete_function-899"><a href="#FrontendService.delete_function-899"><span class="linenos">899</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to delete function (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span></pre></div>
</div>
<div id="FrontendService.disable_function" class="classattr">
<input id="FrontendService.disable_function-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">disable_function</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="FrontendService.disable_function-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FrontendService.disable_function"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FrontendService.disable_function-901"><a href="#FrontendService.disable_function-901"><span class="linenos">901</span></a> <span class="k">def</span> <span class="nf">disable_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="FrontendService.disable_function-902"><a href="#FrontendService.disable_function-902"><span class="linenos">902</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService.disable_function-903"><a href="#FrontendService.disable_function-903"><span class="linenos">903</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService.disable_function-904"><a href="#FrontendService.disable_function-904"><span class="linenos">904</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">DisableFunctionRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">)</span>
</span><span id="FrontendService.disable_function-905"><a href="#FrontendService.disable_function-905"><span class="linenos">905</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService.disable_function-906"><a href="#FrontendService.disable_function-906"><span class="linenos">906</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService.disable_function-907"><a href="#FrontendService.disable_function-907"><span class="linenos">907</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="FrontendService.disable_function-908"><a href="#FrontendService.disable_function-908"><span class="linenos">908</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService.disable_function-909"><a href="#FrontendService.disable_function-909"><span class="linenos">909</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService.disable_function-910"><a href="#FrontendService.disable_function-910"><span class="linenos">910</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to disable function (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span></pre></div>
</div>
<div id="FrontendService.register_input_file" class="classattr">
<input id="FrontendService.register_input_file-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">register_input_file</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">url</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">schema</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">key</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span>,</span><span class="param"> <span class="n">iv</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span>,</span><span class="param"> <span class="n">cmac</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="FrontendService.register_input_file-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FrontendService.register_input_file"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FrontendService.register_input_file-912"><a href="#FrontendService.register_input_file-912"><span class="linenos">912</span></a> <span class="k">def</span> <span class="nf">register_input_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">key</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span>
</span><span id="FrontendService.register_input_file-913"><a href="#FrontendService.register_input_file-913"><span class="linenos">913</span></a> <span class="n">iv</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span> <span class="n">cmac</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]):</span>
</span><span id="FrontendService.register_input_file-914"><a href="#FrontendService.register_input_file-914"><span class="linenos">914</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService.register_input_file-915"><a href="#FrontendService.register_input_file-915"><span class="linenos">915</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService.register_input_file-916"><a href="#FrontendService.register_input_file-916"><span class="linenos">916</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">RegisterInputFileRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">cmac</span><span class="p">,</span>
</span><span id="FrontendService.register_input_file-917"><a href="#FrontendService.register_input_file-917"><span class="linenos">917</span></a> <span class="n">CryptoInfo</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">iv</span><span class="p">))</span>
</span><span id="FrontendService.register_input_file-918"><a href="#FrontendService.register_input_file-918"><span class="linenos">918</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService.register_input_file-919"><a href="#FrontendService.register_input_file-919"><span class="linenos">919</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService.register_input_file-920"><a href="#FrontendService.register_input_file-920"><span class="linenos">920</span></a> <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">data_id</span>
</span><span id="FrontendService.register_input_file-921"><a href="#FrontendService.register_input_file-921"><span class="linenos">921</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService.register_input_file-922"><a href="#FrontendService.register_input_file-922"><span class="linenos">922</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService.register_input_file-923"><a href="#FrontendService.register_input_file-923"><span class="linenos">923</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span>
</span><span id="FrontendService.register_input_file-924"><a href="#FrontendService.register_input_file-924"><span class="linenos">924</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to register input file (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span></pre></div>
</div>
<div id="FrontendService.register_output_file" class="classattr">
<input id="FrontendService.register_output_file-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">register_output_file</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">url</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">schema</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">key</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span>, </span><span class="param"><span class="n">iv</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="FrontendService.register_output_file-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FrontendService.register_output_file"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FrontendService.register_output_file-926"><a href="#FrontendService.register_output_file-926"><span class="linenos">926</span></a> <span class="k">def</span> <span class="nf">register_output_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">key</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">],</span>
</span><span id="FrontendService.register_output_file-927"><a href="#FrontendService.register_output_file-927"><span class="linenos">927</span></a> <span class="n">iv</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]):</span>
</span><span id="FrontendService.register_output_file-928"><a href="#FrontendService.register_output_file-928"><span class="linenos">928</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService.register_output_file-929"><a href="#FrontendService.register_output_file-929"><span class="linenos">929</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService.register_output_file-930"><a href="#FrontendService.register_output_file-930"><span class="linenos">930</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">RegisterOutputFileRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span>
</span><span id="FrontendService.register_output_file-931"><a href="#FrontendService.register_output_file-931"><span class="linenos">931</span></a> <span class="n">CryptoInfo</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">iv</span><span class="p">))</span>
</span><span id="FrontendService.register_output_file-932"><a href="#FrontendService.register_output_file-932"><span class="linenos">932</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService.register_output_file-933"><a href="#FrontendService.register_output_file-933"><span class="linenos">933</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService.register_output_file-934"><a href="#FrontendService.register_output_file-934"><span class="linenos">934</span></a> <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">data_id</span>
</span><span id="FrontendService.register_output_file-935"><a href="#FrontendService.register_output_file-935"><span class="linenos">935</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService.register_output_file-936"><a href="#FrontendService.register_output_file-936"><span class="linenos">936</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService.register_output_file-937"><a href="#FrontendService.register_output_file-937"><span class="linenos">937</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span>
</span><span id="FrontendService.register_output_file-938"><a href="#FrontendService.register_output_file-938"><span class="linenos">938</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to register output file (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span></pre></div>
</div>
<div id="FrontendService.create_task" class="classattr">
<input id="FrontendService.create_task-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">create_task</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">function_arguments</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span>,</span><span class="param"> <span class="n">executor</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">inputs_ownership</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n"><a href="#OwnerList">python.teaclave.OwnerList</a></span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>,</span><span class="param"> <span class="n">outputs_ownership</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n"><a href="#OwnerList">python.teaclave.OwnerList</a></span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="FrontendService.create_task-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FrontendService.create_task"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FrontendService.create_task-940"><a href="#FrontendService.create_task-940"><span class="linenos">940</span></a> <span class="k">def</span> <span class="nf">create_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="FrontendService.create_task-941"><a href="#FrontendService.create_task-941"><span class="linenos">941</span></a> <span class="n">function_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FrontendService.create_task-942"><a href="#FrontendService.create_task-942"><span class="linenos">942</span></a> <span class="n">function_arguments</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span>
</span><span id="FrontendService.create_task-943"><a href="#FrontendService.create_task-943"><span class="linenos">943</span></a> <span class="n">executor</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FrontendService.create_task-944"><a href="#FrontendService.create_task-944"><span class="linenos">944</span></a> <span class="n">inputs_ownership</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">OwnerList</span><span class="p">]</span> <span class="o">=</span> <span class="p">[],</span>
</span><span id="FrontendService.create_task-945"><a href="#FrontendService.create_task-945"><span class="linenos">945</span></a> <span class="n">outputs_ownership</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">OwnerList</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]):</span>
</span><span id="FrontendService.create_task-946"><a href="#FrontendService.create_task-946"><span class="linenos">946</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService.create_task-947"><a href="#FrontendService.create_task-947"><span class="linenos">947</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService.create_task-948"><a href="#FrontendService.create_task-948"><span class="linenos">948</span></a> <span class="n">function_arguments</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">function_arguments</span><span class="p">)</span>
</span><span id="FrontendService.create_task-949"><a href="#FrontendService.create_task-949"><span class="linenos">949</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">CreateTaskRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">function_id</span><span class="p">,</span>
</span><span id="FrontendService.create_task-950"><a href="#FrontendService.create_task-950"><span class="linenos">950</span></a> <span class="n">function_arguments</span><span class="p">,</span> <span class="n">executor</span><span class="p">,</span>
</span><span id="FrontendService.create_task-951"><a href="#FrontendService.create_task-951"><span class="linenos">951</span></a> <span class="n">inputs_ownership</span><span class="p">,</span> <span class="n">outputs_ownership</span><span class="p">)</span>
</span><span id="FrontendService.create_task-952"><a href="#FrontendService.create_task-952"><span class="linenos">952</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService.create_task-953"><a href="#FrontendService.create_task-953"><span class="linenos">953</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService.create_task-954"><a href="#FrontendService.create_task-954"><span class="linenos">954</span></a> <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">task_id</span>
</span><span id="FrontendService.create_task-955"><a href="#FrontendService.create_task-955"><span class="linenos">955</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService.create_task-956"><a href="#FrontendService.create_task-956"><span class="linenos">956</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService.create_task-957"><a href="#FrontendService.create_task-957"><span class="linenos">957</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to create task (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span></pre></div>
</div>
<div id="FrontendService.assign_data_to_task" class="classattr">
<input id="FrontendService.assign_data_to_task-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">assign_data_to_task</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">inputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n"><a href="#DataMap">python.teaclave.DataMap</a></span><span class="p">]</span>,</span><span class="param"> <span class="n">outputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n"><a href="#DataMap">python.teaclave.DataMap</a></span><span class="p">]</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="FrontendService.assign_data_to_task-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FrontendService.assign_data_to_task"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FrontendService.assign_data_to_task-959"><a href="#FrontendService.assign_data_to_task-959"><span class="linenos">959</span></a> <span class="k">def</span> <span class="nf">assign_data_to_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">inputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">DataMap</span><span class="p">],</span>
</span><span id="FrontendService.assign_data_to_task-960"><a href="#FrontendService.assign_data_to_task-960"><span class="linenos">960</span></a> <span class="n">outputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">DataMap</span><span class="p">]):</span>
</span><span id="FrontendService.assign_data_to_task-961"><a href="#FrontendService.assign_data_to_task-961"><span class="linenos">961</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService.assign_data_to_task-962"><a href="#FrontendService.assign_data_to_task-962"><span class="linenos">962</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService.assign_data_to_task-963"><a href="#FrontendService.assign_data_to_task-963"><span class="linenos">963</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">AssignDataRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">,</span> <span class="n">inputs</span><span class="p">,</span> <span class="n">outputs</span><span class="p">)</span>
</span><span id="FrontendService.assign_data_to_task-964"><a href="#FrontendService.assign_data_to_task-964"><span class="linenos">964</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService.assign_data_to_task-965"><a href="#FrontendService.assign_data_to_task-965"><span class="linenos">965</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService.assign_data_to_task-966"><a href="#FrontendService.assign_data_to_task-966"><span class="linenos">966</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService.assign_data_to_task-967"><a href="#FrontendService.assign_data_to_task-967"><span class="linenos">967</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService.assign_data_to_task-968"><a href="#FrontendService.assign_data_to_task-968"><span class="linenos">968</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span>
</span><span id="FrontendService.assign_data_to_task-969"><a href="#FrontendService.assign_data_to_task-969"><span class="linenos">969</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to assign data to task (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span></pre></div>
</div>
<div id="FrontendService.approve_task" class="classattr">
<input id="FrontendService.approve_task-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">approve_task</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="FrontendService.approve_task-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FrontendService.approve_task"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FrontendService.approve_task-971"><a href="#FrontendService.approve_task-971"><span class="linenos">971</span></a> <span class="k">def</span> <span class="nf">approve_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="FrontendService.approve_task-972"><a href="#FrontendService.approve_task-972"><span class="linenos">972</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService.approve_task-973"><a href="#FrontendService.approve_task-973"><span class="linenos">973</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService.approve_task-974"><a href="#FrontendService.approve_task-974"><span class="linenos">974</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">ApproveTaskRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">)</span>
</span><span id="FrontendService.approve_task-975"><a href="#FrontendService.approve_task-975"><span class="linenos">975</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService.approve_task-976"><a href="#FrontendService.approve_task-976"><span class="linenos">976</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService.approve_task-977"><a href="#FrontendService.approve_task-977"><span class="linenos">977</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService.approve_task-978"><a href="#FrontendService.approve_task-978"><span class="linenos">978</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService.approve_task-979"><a href="#FrontendService.approve_task-979"><span class="linenos">979</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to approve task (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span></pre></div>
</div>
<div id="FrontendService.invoke_task" class="classattr">
<input id="FrontendService.invoke_task-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">invoke_task</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="FrontendService.invoke_task-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FrontendService.invoke_task"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FrontendService.invoke_task-981"><a href="#FrontendService.invoke_task-981"><span class="linenos">981</span></a> <span class="k">def</span> <span class="nf">invoke_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="FrontendService.invoke_task-982"><a href="#FrontendService.invoke_task-982"><span class="linenos">982</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService.invoke_task-983"><a href="#FrontendService.invoke_task-983"><span class="linenos">983</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService.invoke_task-984"><a href="#FrontendService.invoke_task-984"><span class="linenos">984</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">InvokeTaskRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">)</span>
</span><span id="FrontendService.invoke_task-985"><a href="#FrontendService.invoke_task-985"><span class="linenos">985</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService.invoke_task-986"><a href="#FrontendService.invoke_task-986"><span class="linenos">986</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService.invoke_task-987"><a href="#FrontendService.invoke_task-987"><span class="linenos">987</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService.invoke_task-988"><a href="#FrontendService.invoke_task-988"><span class="linenos">988</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService.invoke_task-989"><a href="#FrontendService.invoke_task-989"><span class="linenos">989</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to invoke task (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span></pre></div>
</div>
<div id="FrontendService.cancel_task" class="classattr">
<input id="FrontendService.cancel_task-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">cancel_task</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="FrontendService.cancel_task-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FrontendService.cancel_task"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FrontendService.cancel_task-991"><a href="#FrontendService.cancel_task-991"><span class="linenos">991</span></a> <span class="k">def</span> <span class="nf">cancel_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="FrontendService.cancel_task-992"><a href="#FrontendService.cancel_task-992"><span class="linenos">992</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService.cancel_task-993"><a href="#FrontendService.cancel_task-993"><span class="linenos">993</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService.cancel_task-994"><a href="#FrontendService.cancel_task-994"><span class="linenos">994</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">CancelTaskRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">)</span>
</span><span id="FrontendService.cancel_task-995"><a href="#FrontendService.cancel_task-995"><span class="linenos">995</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService.cancel_task-996"><a href="#FrontendService.cancel_task-996"><span class="linenos">996</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService.cancel_task-997"><a href="#FrontendService.cancel_task-997"><span class="linenos">997</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService.cancel_task-998"><a href="#FrontendService.cancel_task-998"><span class="linenos">998</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService.cancel_task-999"><a href="#FrontendService.cancel_task-999"><span class="linenos">999</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to cancel task (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span></pre></div>
</div>
<div id="FrontendService.get_task" class="classattr">
<input id="FrontendService.get_task-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">get_task</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="FrontendService.get_task-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FrontendService.get_task"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FrontendService.get_task-1001"><a href="#FrontendService.get_task-1001"><span class="linenos">1001</span></a> <span class="k">def</span> <span class="nf">get_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="FrontendService.get_task-1002"><a href="#FrontendService.get_task-1002"><span class="linenos">1002</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService.get_task-1003"><a href="#FrontendService.get_task-1003"><span class="linenos">1003</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService.get_task-1004"><a href="#FrontendService.get_task-1004"><span class="linenos">1004</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">GetTaskRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">)</span>
</span><span id="FrontendService.get_task-1005"><a href="#FrontendService.get_task-1005"><span class="linenos">1005</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService.get_task-1006"><a href="#FrontendService.get_task-1006"><span class="linenos">1006</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService.get_task-1007"><a href="#FrontendService.get_task-1007"><span class="linenos">1007</span></a> <span class="k">return</span> <span class="n">MessageToDict</span><span class="p">(</span><span class="n">response</span><span class="p">,</span>
</span><span id="FrontendService.get_task-1008"><a href="#FrontendService.get_task-1008"><span class="linenos">1008</span></a> <span class="n">preserving_proto_field_name</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="FrontendService.get_task-1009"><a href="#FrontendService.get_task-1009"><span class="linenos">1009</span></a> <span class="n">use_integers_for_enums</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="FrontendService.get_task-1010"><a href="#FrontendService.get_task-1010"><span class="linenos">1010</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService.get_task-1011"><a href="#FrontendService.get_task-1011"><span class="linenos">1011</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService.get_task-1012"><a href="#FrontendService.get_task-1012"><span class="linenos">1012</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to get task result (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span></pre></div>
</div>
<div id="FrontendService.get_task_result" class="classattr">
<input id="FrontendService.get_task_result-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">get_task_result</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="FrontendService.get_task_result-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FrontendService.get_task_result"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FrontendService.get_task_result-1014"><a href="#FrontendService.get_task_result-1014"><span class="linenos">1014</span></a> <span class="k">def</span> <span class="nf">get_task_result</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="FrontendService.get_task_result-1015"><a href="#FrontendService.get_task_result-1015"><span class="linenos">1015</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService.get_task_result-1016"><a href="#FrontendService.get_task_result-1016"><span class="linenos">1016</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService.get_task_result-1017"><a href="#FrontendService.get_task_result-1017"><span class="linenos">1017</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">GetTaskRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">)</span>
</span><span id="FrontendService.get_task_result-1018"><a href="#FrontendService.get_task_result-1018"><span class="linenos">1018</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="FrontendService.get_task_result-1019"><a href="#FrontendService.get_task_result-1019"><span class="linenos">1019</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService.get_task_result-1020"><a href="#FrontendService.get_task_result-1020"><span class="linenos">1020</span></a> <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span><span id="FrontendService.get_task_result-1021"><a href="#FrontendService.get_task_result-1021"><span class="linenos">1021</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService.get_task_result-1022"><a href="#FrontendService.get_task_result-1022"><span class="linenos">1022</span></a> <span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="n">TaskStatus</span><span class="o">.</span><span class="n">Finished</span><span class="p">:</span>
</span><span id="FrontendService.get_task_result-1023"><a href="#FrontendService.get_task_result-1023"><span class="linenos">1023</span></a> <span class="k">break</span>
</span><span id="FrontendService.get_task_result-1024"><a href="#FrontendService.get_task_result-1024"><span class="linenos">1024</span></a> <span class="k">elif</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="n">TaskStatus</span><span class="o">.</span><span class="n">Canceled</span><span class="p">:</span>
</span><span id="FrontendService.get_task_result-1025"><a href="#FrontendService.get_task_result-1025"><span class="linenos">1025</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="s2">&quot;Task Canceled, Error: &quot;</span> <span class="o">+</span>
</span><span id="FrontendService.get_task_result-1026"><a href="#FrontendService.get_task_result-1026"><span class="linenos">1026</span></a> <span class="n">response</span><span class="o">.</span><span class="n">result</span><span class="o">.</span><span class="n">Err</span><span class="o">.</span><span class="n">reason</span><span class="p">)</span>
</span><span id="FrontendService.get_task_result-1027"><a href="#FrontendService.get_task_result-1027"><span class="linenos">1027</span></a> <span class="k">elif</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="n">TaskStatus</span><span class="o">.</span><span class="n">Failed</span><span class="p">:</span>
</span><span id="FrontendService.get_task_result-1028"><a href="#FrontendService.get_task_result-1028"><span class="linenos">1028</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="s2">&quot;Task Failed, Error: &quot;</span> <span class="o">+</span>
</span><span id="FrontendService.get_task_result-1029"><a href="#FrontendService.get_task_result-1029"><span class="linenos">1029</span></a> <span class="n">response</span><span class="o">.</span><span class="n">result</span><span class="o">.</span><span class="n">Err</span><span class="o">.</span><span class="n">reason</span><span class="p">)</span>
</span><span id="FrontendService.get_task_result-1030"><a href="#FrontendService.get_task_result-1030"><span class="linenos">1030</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService.get_task_result-1031"><a href="#FrontendService.get_task_result-1031"><span class="linenos">1031</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService.get_task_result-1032"><a href="#FrontendService.get_task_result-1032"><span class="linenos">1032</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span>
</span><span id="FrontendService.get_task_result-1033"><a href="#FrontendService.get_task_result-1033"><span class="linenos">1033</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to get task result (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="FrontendService.get_task_result-1034"><a href="#FrontendService.get_task_result-1034"><span class="linenos">1034</span></a>
</span><span id="FrontendService.get_task_result-1035"><a href="#FrontendService.get_task_result-1035"><span class="linenos">1035</span></a> <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">result</span><span class="o">.</span><span class="n">Ok</span><span class="o">.</span><span class="n">return_value</span>
</span></pre></div>
</div>
<div id="FrontendService.get_output_cmac_by_tag" class="classattr">
<input id="FrontendService.get_output_cmac_by_tag-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">get_output_cmac_by_tag</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">tag</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="FrontendService.get_output_cmac_by_tag-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FrontendService.get_output_cmac_by_tag"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FrontendService.get_output_cmac_by_tag-1037"><a href="#FrontendService.get_output_cmac_by_tag-1037"><span class="linenos">1037</span></a> <span class="k">def</span> <span class="nf">get_output_cmac_by_tag</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">task_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">tag</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="FrontendService.get_output_cmac_by_tag-1038"><a href="#FrontendService.get_output_cmac_by_tag-1038"><span class="linenos">1038</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService.get_output_cmac_by_tag-1039"><a href="#FrontendService.get_output_cmac_by_tag-1039"><span class="linenos">1039</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService.get_output_cmac_by_tag-1040"><a href="#FrontendService.get_output_cmac_by_tag-1040"><span class="linenos">1040</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">GetTaskRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">task_id</span><span class="p">)</span>
</span><span id="FrontendService.get_output_cmac_by_tag-1041"><a href="#FrontendService.get_output_cmac_by_tag-1041"><span class="linenos">1041</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="FrontendService.get_output_cmac_by_tag-1042"><a href="#FrontendService.get_output_cmac_by_tag-1042"><span class="linenos">1042</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService.get_output_cmac_by_tag-1043"><a href="#FrontendService.get_output_cmac_by_tag-1043"><span class="linenos">1043</span></a> <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span><span id="FrontendService.get_output_cmac_by_tag-1044"><a href="#FrontendService.get_output_cmac_by_tag-1044"><span class="linenos">1044</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService.get_output_cmac_by_tag-1045"><a href="#FrontendService.get_output_cmac_by_tag-1045"><span class="linenos">1045</span></a> <span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="n">TaskStatus</span><span class="o">.</span><span class="n">Finished</span><span class="p">:</span>
</span><span id="FrontendService.get_output_cmac_by_tag-1046"><a href="#FrontendService.get_output_cmac_by_tag-1046"><span class="linenos">1046</span></a> <span class="k">break</span>
</span><span id="FrontendService.get_output_cmac_by_tag-1047"><a href="#FrontendService.get_output_cmac_by_tag-1047"><span class="linenos">1047</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService.get_output_cmac_by_tag-1048"><a href="#FrontendService.get_output_cmac_by_tag-1048"><span class="linenos">1048</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService.get_output_cmac_by_tag-1049"><a href="#FrontendService.get_output_cmac_by_tag-1049"><span class="linenos">1049</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span>
</span><span id="FrontendService.get_output_cmac_by_tag-1050"><a href="#FrontendService.get_output_cmac_by_tag-1050"><span class="linenos">1050</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to get task result (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="FrontendService.get_output_cmac_by_tag-1051"><a href="#FrontendService.get_output_cmac_by_tag-1051"><span class="linenos">1051</span></a> <span class="n">response</span> <span class="o">=</span> <span class="n">MessageToDict</span><span class="p">(</span><span class="n">response</span><span class="p">,</span>
</span><span id="FrontendService.get_output_cmac_by_tag-1052"><a href="#FrontendService.get_output_cmac_by_tag-1052"><span class="linenos">1052</span></a> <span class="n">preserving_proto_field_name</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="FrontendService.get_output_cmac_by_tag-1053"><a href="#FrontendService.get_output_cmac_by_tag-1053"><span class="linenos">1053</span></a> <span class="n">use_integers_for_enums</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="FrontendService.get_output_cmac_by_tag-1054"><a href="#FrontendService.get_output_cmac_by_tag-1054"><span class="linenos">1054</span></a> <span class="k">return</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">response</span><span class="p">[</span><span class="s2">&quot;result&quot;</span><span class="p">][</span><span class="s2">&quot;Ok&quot;</span><span class="p">][</span><span class="s2">&quot;tags_map&quot;</span><span class="p">][</span><span class="n">tag</span><span class="p">])</span>
</span></pre></div>
</div>
<div id="FrontendService.query_audit_logs" class="classattr">
<input id="FrontendService.query_audit_logs-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">query_audit_logs</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">message</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">limit</span><span class="p">:</span> <span class="nb">int</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="FrontendService.query_audit_logs-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FrontendService.query_audit_logs"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FrontendService.query_audit_logs-1056"><a href="#FrontendService.query_audit_logs-1056"><span class="linenos">1056</span></a> <span class="k">def</span> <span class="nf">query_audit_logs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
</span><span id="FrontendService.query_audit_logs-1057"><a href="#FrontendService.query_audit_logs-1057"><span class="linenos">1057</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="FrontendService.query_audit_logs-1058"><a href="#FrontendService.query_audit_logs-1058"><span class="linenos">1058</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="FrontendService.query_audit_logs-1059"><a href="#FrontendService.query_audit_logs-1059"><span class="linenos">1059</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">QueryAuditLogsRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">limit</span><span class="p">)</span>
</span><span id="FrontendService.query_audit_logs-1060"><a href="#FrontendService.query_audit_logs-1060"><span class="linenos">1060</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="FrontendService.query_audit_logs-1061"><a href="#FrontendService.query_audit_logs-1061"><span class="linenos">1061</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="FrontendService.query_audit_logs-1062"><a href="#FrontendService.query_audit_logs-1062"><span class="linenos">1062</span></a> <span class="k">return</span> <span class="n">MessageToDict</span><span class="p">(</span><span class="n">response</span><span class="p">,</span>
</span><span id="FrontendService.query_audit_logs-1063"><a href="#FrontendService.query_audit_logs-1063"><span class="linenos">1063</span></a> <span class="n">preserving_proto_field_name</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="FrontendService.query_audit_logs-1064"><a href="#FrontendService.query_audit_logs-1064"><span class="linenos">1064</span></a> <span class="n">use_integers_for_enums</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="FrontendService.query_audit_logs-1065"><a href="#FrontendService.query_audit_logs-1065"><span class="linenos">1065</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="FrontendService.query_audit_logs-1066"><a href="#FrontendService.query_audit_logs-1066"><span class="linenos">1066</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="FrontendService.query_audit_logs-1067"><a href="#FrontendService.query_audit_logs-1067"><span class="linenos">1067</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to get audit logs (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span></pre></div>
</div>
<div class="inherited">
<h5>Inherited Members</h5>
<dl>
<div><dt><a href="#TeaclaveService">TeaclaveService</a></dt>
<dd id="FrontendService.call_method" class="function"><a href="#TeaclaveService.call_method">call_method</a></dd>
<dd id="FrontendService.close" class="function"><a href="#TeaclaveService.close">close</a></dd>
<dd id="FrontendService.check_metadata" class="function"><a href="#TeaclaveService.check_metadata">check_metadata</a></dd>
<dd id="FrontendService.check_channel" class="function"><a href="#TeaclaveService.check_channel">check_channel</a></dd>
<dd id="FrontendService.get_metadata" class="function"><a href="#TeaclaveService.get_metadata">get_metadata</a></dd>
</div>
</dl>
</div>
</section>
<section id="AuthenticationService">
<input id="AuthenticationService-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">AuthenticationService</span><wbr>(<span class="base"><a href="#TeaclaveService">TeaclaveService</a></span>):
<label class="view-source-button" for="AuthenticationService-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#AuthenticationService"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="AuthenticationService-432"><a href="#AuthenticationService-432"><span class="linenos">432</span></a><span class="k">class</span> <span class="nc">AuthenticationService</span><span class="p">(</span><span class="n">TeaclaveService</span><span class="p">):</span>
</span><span id="AuthenticationService-433"><a href="#AuthenticationService-433"><span class="linenos">433</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="AuthenticationService-434"><a href="#AuthenticationService-434"><span class="linenos">434</span></a><span class="sd"> Establish trusted channel with the authentication service and provide</span>
</span><span id="AuthenticationService-435"><a href="#AuthenticationService-435"><span class="linenos">435</span></a><span class="sd"> clients to send request through RPC.</span>
</span><span id="AuthenticationService-436"><a href="#AuthenticationService-436"><span class="linenos">436</span></a>
</span><span id="AuthenticationService-437"><a href="#AuthenticationService-437"><span class="linenos">437</span></a><span class="sd"> Args:</span>
</span><span id="AuthenticationService-438"><a href="#AuthenticationService-438"><span class="linenos">438</span></a>
</span><span id="AuthenticationService-439"><a href="#AuthenticationService-439"><span class="linenos">439</span></a><span class="sd"> address: The address of the remote services in tuple.</span>
</span><span id="AuthenticationService-440"><a href="#AuthenticationService-440"><span class="linenos">440</span></a><span class="sd"> as_root_ca_cert_path: Root CA certification of the attestation services</span>
</span><span id="AuthenticationService-441"><a href="#AuthenticationService-441"><span class="linenos">441</span></a><span class="sd"> to verify the attestation report.</span>
</span><span id="AuthenticationService-442"><a href="#AuthenticationService-442"><span class="linenos">442</span></a><span class="sd"> enclave_info_path: Path of enclave info to verify the remote service in</span>
</span><span id="AuthenticationService-443"><a href="#AuthenticationService-443"><span class="linenos">443</span></a><span class="sd"> the attestation report.</span>
</span><span id="AuthenticationService-444"><a href="#AuthenticationService-444"><span class="linenos">444</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationService-445"><a href="#AuthenticationService-445"><span class="linenos">445</span></a>
</span><span id="AuthenticationService-446"><a href="#AuthenticationService-446"><span class="linenos">446</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="AuthenticationService-447"><a href="#AuthenticationService-447"><span class="linenos">447</span></a> <span class="n">address</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">],</span>
</span><span id="AuthenticationService-448"><a href="#AuthenticationService-448"><span class="linenos">448</span></a> <span class="n">as_root_ca_cert_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="AuthenticationService-449"><a href="#AuthenticationService-449"><span class="linenos">449</span></a> <span class="n">enclave_info_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="AuthenticationService-450"><a href="#AuthenticationService-450"><span class="linenos">450</span></a> <span class="n">dump_report</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="AuthenticationService-451"><a href="#AuthenticationService-451"><span class="linenos">451</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;authentication&quot;</span><span class="p">,</span> <span class="n">address</span><span class="p">,</span> <span class="n">as_root_ca_cert_path</span><span class="p">,</span>
</span><span id="AuthenticationService-452"><a href="#AuthenticationService-452"><span class="linenos">452</span></a> <span class="n">enclave_info_path</span><span class="p">,</span> <span class="n">dump_report</span><span class="p">)</span>
</span><span id="AuthenticationService-453"><a href="#AuthenticationService-453"><span class="linenos">453</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">stub</span> <span class="o">=</span> <span class="n">TeaclaveAuthenticationApiStub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="p">)</span>
</span><span id="AuthenticationService-454"><a href="#AuthenticationService-454"><span class="linenos">454</span></a>
</span><span id="AuthenticationService-455"><a href="#AuthenticationService-455"><span class="linenos">455</span></a> <span class="k">def</span> <span class="nf">user_register</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="AuthenticationService-456"><a href="#AuthenticationService-456"><span class="linenos">456</span></a> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="AuthenticationService-457"><a href="#AuthenticationService-457"><span class="linenos">457</span></a> <span class="n">user_password</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="AuthenticationService-458"><a href="#AuthenticationService-458"><span class="linenos">458</span></a> <span class="n">role</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span>
</span><span id="AuthenticationService-459"><a href="#AuthenticationService-459"><span class="linenos">459</span></a> <span class="n">attribute</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">):</span>
</span><span id="AuthenticationService-460"><a href="#AuthenticationService-460"><span class="linenos">460</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Register a new user.</span>
</span><span id="AuthenticationService-461"><a href="#AuthenticationService-461"><span class="linenos">461</span></a>
</span><span id="AuthenticationService-462"><a href="#AuthenticationService-462"><span class="linenos">462</span></a><span class="sd"> Args:</span>
</span><span id="AuthenticationService-463"><a href="#AuthenticationService-463"><span class="linenos">463</span></a>
</span><span id="AuthenticationService-464"><a href="#AuthenticationService-464"><span class="linenos">464</span></a><span class="sd"> user_id: User ID.</span>
</span><span id="AuthenticationService-465"><a href="#AuthenticationService-465"><span class="linenos">465</span></a><span class="sd"> user_password: Password.</span>
</span><span id="AuthenticationService-466"><a href="#AuthenticationService-466"><span class="linenos">466</span></a><span class="sd"> role: Role of user.</span>
</span><span id="AuthenticationService-467"><a href="#AuthenticationService-467"><span class="linenos">467</span></a><span class="sd"> attribute: Attribute related to the role.</span>
</span><span id="AuthenticationService-468"><a href="#AuthenticationService-468"><span class="linenos">468</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationService-469"><a href="#AuthenticationService-469"><span class="linenos">469</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="AuthenticationService-470"><a href="#AuthenticationService-470"><span class="linenos">470</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="AuthenticationService-471"><a href="#AuthenticationService-471"><span class="linenos">471</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">UserRegisterRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">,</span> <span class="n">user_password</span><span class="p">,</span>
</span><span id="AuthenticationService-472"><a href="#AuthenticationService-472"><span class="linenos">472</span></a> <span class="n">role</span><span class="p">,</span> <span class="n">attribute</span><span class="p">)</span>
</span><span id="AuthenticationService-473"><a href="#AuthenticationService-473"><span class="linenos">473</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="AuthenticationService-474"><a href="#AuthenticationService-474"><span class="linenos">474</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="AuthenticationService-475"><a href="#AuthenticationService-475"><span class="linenos">475</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="AuthenticationService-476"><a href="#AuthenticationService-476"><span class="linenos">476</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="AuthenticationService-477"><a href="#AuthenticationService-477"><span class="linenos">477</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to register user </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="AuthenticationService-478"><a href="#AuthenticationService-478"><span class="linenos">478</span></a>
</span><span id="AuthenticationService-479"><a href="#AuthenticationService-479"><span class="linenos">479</span></a> <span class="k">def</span> <span class="nf">user_update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="AuthenticationService-480"><a href="#AuthenticationService-480"><span class="linenos">480</span></a> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="AuthenticationService-481"><a href="#AuthenticationService-481"><span class="linenos">481</span></a> <span class="n">user_password</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="AuthenticationService-482"><a href="#AuthenticationService-482"><span class="linenos">482</span></a> <span class="n">role</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="AuthenticationService-483"><a href="#AuthenticationService-483"><span class="linenos">483</span></a> <span class="n">attribute</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">):</span>
</span><span id="AuthenticationService-484"><a href="#AuthenticationService-484"><span class="linenos">484</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Update an existing user.</span>
</span><span id="AuthenticationService-485"><a href="#AuthenticationService-485"><span class="linenos">485</span></a>
</span><span id="AuthenticationService-486"><a href="#AuthenticationService-486"><span class="linenos">486</span></a><span class="sd"> Args:</span>
</span><span id="AuthenticationService-487"><a href="#AuthenticationService-487"><span class="linenos">487</span></a>
</span><span id="AuthenticationService-488"><a href="#AuthenticationService-488"><span class="linenos">488</span></a><span class="sd"> user_id: User ID.</span>
</span><span id="AuthenticationService-489"><a href="#AuthenticationService-489"><span class="linenos">489</span></a><span class="sd"> user_password: Password.</span>
</span><span id="AuthenticationService-490"><a href="#AuthenticationService-490"><span class="linenos">490</span></a><span class="sd"> role: Role of user.</span>
</span><span id="AuthenticationService-491"><a href="#AuthenticationService-491"><span class="linenos">491</span></a><span class="sd"> attribute: Attribute related to the role.</span>
</span><span id="AuthenticationService-492"><a href="#AuthenticationService-492"><span class="linenos">492</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationService-493"><a href="#AuthenticationService-493"><span class="linenos">493</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="AuthenticationService-494"><a href="#AuthenticationService-494"><span class="linenos">494</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="AuthenticationService-495"><a href="#AuthenticationService-495"><span class="linenos">495</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">UserUpdateRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">,</span> <span class="n">user_password</span><span class="p">,</span>
</span><span id="AuthenticationService-496"><a href="#AuthenticationService-496"><span class="linenos">496</span></a> <span class="n">role</span><span class="p">,</span> <span class="n">attribute</span><span class="p">)</span>
</span><span id="AuthenticationService-497"><a href="#AuthenticationService-497"><span class="linenos">497</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="AuthenticationService-498"><a href="#AuthenticationService-498"><span class="linenos">498</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="AuthenticationService-499"><a href="#AuthenticationService-499"><span class="linenos">499</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="AuthenticationService-500"><a href="#AuthenticationService-500"><span class="linenos">500</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="AuthenticationService-501"><a href="#AuthenticationService-501"><span class="linenos">501</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to update user </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="AuthenticationService-502"><a href="#AuthenticationService-502"><span class="linenos">502</span></a>
</span><span id="AuthenticationService-503"><a href="#AuthenticationService-503"><span class="linenos">503</span></a> <span class="k">def</span> <span class="nf">user_login</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">user_password</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="AuthenticationService-504"><a href="#AuthenticationService-504"><span class="linenos">504</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Login and get a session token.</span>
</span><span id="AuthenticationService-505"><a href="#AuthenticationService-505"><span class="linenos">505</span></a>
</span><span id="AuthenticationService-506"><a href="#AuthenticationService-506"><span class="linenos">506</span></a><span class="sd"> Args:</span>
</span><span id="AuthenticationService-507"><a href="#AuthenticationService-507"><span class="linenos">507</span></a>
</span><span id="AuthenticationService-508"><a href="#AuthenticationService-508"><span class="linenos">508</span></a><span class="sd"> user_id: User ID.</span>
</span><span id="AuthenticationService-509"><a href="#AuthenticationService-509"><span class="linenos">509</span></a><span class="sd"> user_password: Password.</span>
</span><span id="AuthenticationService-510"><a href="#AuthenticationService-510"><span class="linenos">510</span></a>
</span><span id="AuthenticationService-511"><a href="#AuthenticationService-511"><span class="linenos">511</span></a><span class="sd"> Returns:</span>
</span><span id="AuthenticationService-512"><a href="#AuthenticationService-512"><span class="linenos">512</span></a>
</span><span id="AuthenticationService-513"><a href="#AuthenticationService-513"><span class="linenos">513</span></a><span class="sd"> str: User login token.</span>
</span><span id="AuthenticationService-514"><a href="#AuthenticationService-514"><span class="linenos">514</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationService-515"><a href="#AuthenticationService-515"><span class="linenos">515</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="AuthenticationService-516"><a href="#AuthenticationService-516"><span class="linenos">516</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">UserLoginRequest</span><span class="p">(</span><span class="n">user_id</span><span class="p">,</span> <span class="n">user_password</span><span class="p">)</span>
</span><span id="AuthenticationService-517"><a href="#AuthenticationService-517"><span class="linenos">517</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="AuthenticationService-518"><a href="#AuthenticationService-518"><span class="linenos">518</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="AuthenticationService-519"><a href="#AuthenticationService-519"><span class="linenos">519</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">metadata</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="n">user_id</span><span class="p">,</span> <span class="s2">&quot;token&quot;</span><span class="p">:</span> <span class="n">response</span><span class="o">.</span><span class="n">token</span><span class="p">}</span>
</span><span id="AuthenticationService-520"><a href="#AuthenticationService-520"><span class="linenos">520</span></a> <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">token</span>
</span><span id="AuthenticationService-521"><a href="#AuthenticationService-521"><span class="linenos">521</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="AuthenticationService-522"><a href="#AuthenticationService-522"><span class="linenos">522</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to login user </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="AuthenticationService-523"><a href="#AuthenticationService-523"><span class="linenos">523</span></a>
</span><span id="AuthenticationService-524"><a href="#AuthenticationService-524"><span class="linenos">524</span></a> <span class="k">def</span> <span class="nf">user_change_password</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_password</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="AuthenticationService-525"><a href="#AuthenticationService-525"><span class="linenos">525</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Change password.</span>
</span><span id="AuthenticationService-526"><a href="#AuthenticationService-526"><span class="linenos">526</span></a>
</span><span id="AuthenticationService-527"><a href="#AuthenticationService-527"><span class="linenos">527</span></a><span class="sd"> Args:</span>
</span><span id="AuthenticationService-528"><a href="#AuthenticationService-528"><span class="linenos">528</span></a>
</span><span id="AuthenticationService-529"><a href="#AuthenticationService-529"><span class="linenos">529</span></a><span class="sd"> user_password: New password.</span>
</span><span id="AuthenticationService-530"><a href="#AuthenticationService-530"><span class="linenos">530</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationService-531"><a href="#AuthenticationService-531"><span class="linenos">531</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="AuthenticationService-532"><a href="#AuthenticationService-532"><span class="linenos">532</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="AuthenticationService-533"><a href="#AuthenticationService-533"><span class="linenos">533</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">UserChangePasswordRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">user_password</span><span class="p">)</span>
</span><span id="AuthenticationService-534"><a href="#AuthenticationService-534"><span class="linenos">534</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="AuthenticationService-535"><a href="#AuthenticationService-535"><span class="linenos">535</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="AuthenticationService-536"><a href="#AuthenticationService-536"><span class="linenos">536</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="AuthenticationService-537"><a href="#AuthenticationService-537"><span class="linenos">537</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="AuthenticationService-538"><a href="#AuthenticationService-538"><span class="linenos">538</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to change password </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="AuthenticationService-539"><a href="#AuthenticationService-539"><span class="linenos">539</span></a>
</span><span id="AuthenticationService-540"><a href="#AuthenticationService-540"><span class="linenos">540</span></a> <span class="k">def</span> <span class="nf">reset_user_password</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="AuthenticationService-541"><a href="#AuthenticationService-541"><span class="linenos">541</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Reset password of a managed user.</span>
</span><span id="AuthenticationService-542"><a href="#AuthenticationService-542"><span class="linenos">542</span></a>
</span><span id="AuthenticationService-543"><a href="#AuthenticationService-543"><span class="linenos">543</span></a><span class="sd"> Args:</span>
</span><span id="AuthenticationService-544"><a href="#AuthenticationService-544"><span class="linenos">544</span></a>
</span><span id="AuthenticationService-545"><a href="#AuthenticationService-545"><span class="linenos">545</span></a><span class="sd"> user_id: User ID.</span>
</span><span id="AuthenticationService-546"><a href="#AuthenticationService-546"><span class="linenos">546</span></a>
</span><span id="AuthenticationService-547"><a href="#AuthenticationService-547"><span class="linenos">547</span></a><span class="sd"> Returns:</span>
</span><span id="AuthenticationService-548"><a href="#AuthenticationService-548"><span class="linenos">548</span></a>
</span><span id="AuthenticationService-549"><a href="#AuthenticationService-549"><span class="linenos">549</span></a><span class="sd"> str: New password.</span>
</span><span id="AuthenticationService-550"><a href="#AuthenticationService-550"><span class="linenos">550</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationService-551"><a href="#AuthenticationService-551"><span class="linenos">551</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="AuthenticationService-552"><a href="#AuthenticationService-552"><span class="linenos">552</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="AuthenticationService-553"><a href="#AuthenticationService-553"><span class="linenos">553</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">ResetUserPasswordRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">)</span>
</span><span id="AuthenticationService-554"><a href="#AuthenticationService-554"><span class="linenos">554</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="AuthenticationService-555"><a href="#AuthenticationService-555"><span class="linenos">555</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="AuthenticationService-556"><a href="#AuthenticationService-556"><span class="linenos">556</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="AuthenticationService-557"><a href="#AuthenticationService-557"><span class="linenos">557</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="AuthenticationService-558"><a href="#AuthenticationService-558"><span class="linenos">558</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="AuthenticationService-559"><a href="#AuthenticationService-559"><span class="linenos">559</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to reset password </span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="AuthenticationService-560"><a href="#AuthenticationService-560"><span class="linenos">560</span></a>
</span><span id="AuthenticationService-561"><a href="#AuthenticationService-561"><span class="linenos">561</span></a> <span class="k">def</span> <span class="nf">delete_user</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="AuthenticationService-562"><a href="#AuthenticationService-562"><span class="linenos">562</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Delete a user.</span>
</span><span id="AuthenticationService-563"><a href="#AuthenticationService-563"><span class="linenos">563</span></a>
</span><span id="AuthenticationService-564"><a href="#AuthenticationService-564"><span class="linenos">564</span></a><span class="sd"> Args:</span>
</span><span id="AuthenticationService-565"><a href="#AuthenticationService-565"><span class="linenos">565</span></a>
</span><span id="AuthenticationService-566"><a href="#AuthenticationService-566"><span class="linenos">566</span></a><span class="sd"> user_id: User ID.</span>
</span><span id="AuthenticationService-567"><a href="#AuthenticationService-567"><span class="linenos">567</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationService-568"><a href="#AuthenticationService-568"><span class="linenos">568</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="AuthenticationService-569"><a href="#AuthenticationService-569"><span class="linenos">569</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="AuthenticationService-570"><a href="#AuthenticationService-570"><span class="linenos">570</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">DeleteUserRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">)</span>
</span><span id="AuthenticationService-571"><a href="#AuthenticationService-571"><span class="linenos">571</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="AuthenticationService-572"><a href="#AuthenticationService-572"><span class="linenos">572</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="AuthenticationService-573"><a href="#AuthenticationService-573"><span class="linenos">573</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="AuthenticationService-574"><a href="#AuthenticationService-574"><span class="linenos">574</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="AuthenticationService-575"><a href="#AuthenticationService-575"><span class="linenos">575</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="AuthenticationService-576"><a href="#AuthenticationService-576"><span class="linenos">576</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to delete user (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span><span id="AuthenticationService-577"><a href="#AuthenticationService-577"><span class="linenos">577</span></a>
</span><span id="AuthenticationService-578"><a href="#AuthenticationService-578"><span class="linenos">578</span></a> <span class="k">def</span> <span class="nf">list_users</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="AuthenticationService-579"><a href="#AuthenticationService-579"><span class="linenos">579</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;List managed users</span>
</span><span id="AuthenticationService-580"><a href="#AuthenticationService-580"><span class="linenos">580</span></a>
</span><span id="AuthenticationService-581"><a href="#AuthenticationService-581"><span class="linenos">581</span></a><span class="sd"> Args:</span>
</span><span id="AuthenticationService-582"><a href="#AuthenticationService-582"><span class="linenos">582</span></a>
</span><span id="AuthenticationService-583"><a href="#AuthenticationService-583"><span class="linenos">583</span></a><span class="sd"> user_id: User ID.</span>
</span><span id="AuthenticationService-584"><a href="#AuthenticationService-584"><span class="linenos">584</span></a>
</span><span id="AuthenticationService-585"><a href="#AuthenticationService-585"><span class="linenos">585</span></a><span class="sd"> Returns:</span>
</span><span id="AuthenticationService-586"><a href="#AuthenticationService-586"><span class="linenos">586</span></a>
</span><span id="AuthenticationService-587"><a href="#AuthenticationService-587"><span class="linenos">587</span></a><span class="sd"> str: User list</span>
</span><span id="AuthenticationService-588"><a href="#AuthenticationService-588"><span class="linenos">588</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationService-589"><a href="#AuthenticationService-589"><span class="linenos">589</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="AuthenticationService-590"><a href="#AuthenticationService-590"><span class="linenos">590</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="AuthenticationService-591"><a href="#AuthenticationService-591"><span class="linenos">591</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">ListUsersRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">)</span>
</span><span id="AuthenticationService-592"><a href="#AuthenticationService-592"><span class="linenos">592</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="AuthenticationService-593"><a href="#AuthenticationService-593"><span class="linenos">593</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="AuthenticationService-594"><a href="#AuthenticationService-594"><span class="linenos">594</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="AuthenticationService-595"><a href="#AuthenticationService-595"><span class="linenos">595</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="AuthenticationService-596"><a href="#AuthenticationService-596"><span class="linenos">596</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="AuthenticationService-597"><a href="#AuthenticationService-597"><span class="linenos">597</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to list user (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Establish trusted channel with the authentication service and provide
clients to send request through RPC.</p>
<p>Args:</p>
<pre><code>address: The address of the remote services in tuple.
as_root_ca_cert_path: Root CA certification of the attestation services
to verify the attestation report.
enclave_info_path: Path of enclave info to verify the remote service in
the attestation report.
</code></pre>
</div>
<div id="AuthenticationService.__init__" class="classattr">
<input id="AuthenticationService.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="name">AuthenticationService</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">address</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">]</span>,</span><span class="param"> <span class="n">as_root_ca_cert_path</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">enclave_info_path</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">dump_report</span><span class="o">=</span><span class="kc">False</span></span>)</span>
<label class="view-source-button" for="AuthenticationService.__init__-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#AuthenticationService.__init__"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="AuthenticationService.__init__-446"><a href="#AuthenticationService.__init__-446"><span class="linenos">446</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="AuthenticationService.__init__-447"><a href="#AuthenticationService.__init__-447"><span class="linenos">447</span></a> <span class="n">address</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">],</span>
</span><span id="AuthenticationService.__init__-448"><a href="#AuthenticationService.__init__-448"><span class="linenos">448</span></a> <span class="n">as_root_ca_cert_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="AuthenticationService.__init__-449"><a href="#AuthenticationService.__init__-449"><span class="linenos">449</span></a> <span class="n">enclave_info_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="AuthenticationService.__init__-450"><a href="#AuthenticationService.__init__-450"><span class="linenos">450</span></a> <span class="n">dump_report</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="AuthenticationService.__init__-451"><a href="#AuthenticationService.__init__-451"><span class="linenos">451</span></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;authentication&quot;</span><span class="p">,</span> <span class="n">address</span><span class="p">,</span> <span class="n">as_root_ca_cert_path</span><span class="p">,</span>
</span><span id="AuthenticationService.__init__-452"><a href="#AuthenticationService.__init__-452"><span class="linenos">452</span></a> <span class="n">enclave_info_path</span><span class="p">,</span> <span class="n">dump_report</span><span class="p">)</span>
</span><span id="AuthenticationService.__init__-453"><a href="#AuthenticationService.__init__-453"><span class="linenos">453</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">stub</span> <span class="o">=</span> <span class="n">TeaclaveAuthenticationApiStub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="p">)</span>
</span></pre></div>
</div>
<div id="AuthenticationService.user_register" class="classattr">
<input id="AuthenticationService.user_register-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">user_register</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">user_password</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">role</span><span class="o">=</span><span class="s1">&#39;&#39;</span>, </span><span class="param"><span class="n">attribute</span><span class="o">=</span><span class="s1">&#39;&#39;</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="AuthenticationService.user_register-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#AuthenticationService.user_register"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="AuthenticationService.user_register-455"><a href="#AuthenticationService.user_register-455"><span class="linenos">455</span></a> <span class="k">def</span> <span class="nf">user_register</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="AuthenticationService.user_register-456"><a href="#AuthenticationService.user_register-456"><span class="linenos">456</span></a> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="AuthenticationService.user_register-457"><a href="#AuthenticationService.user_register-457"><span class="linenos">457</span></a> <span class="n">user_password</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="AuthenticationService.user_register-458"><a href="#AuthenticationService.user_register-458"><span class="linenos">458</span></a> <span class="n">role</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span>
</span><span id="AuthenticationService.user_register-459"><a href="#AuthenticationService.user_register-459"><span class="linenos">459</span></a> <span class="n">attribute</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">):</span>
</span><span id="AuthenticationService.user_register-460"><a href="#AuthenticationService.user_register-460"><span class="linenos">460</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Register a new user.</span>
</span><span id="AuthenticationService.user_register-461"><a href="#AuthenticationService.user_register-461"><span class="linenos">461</span></a>
</span><span id="AuthenticationService.user_register-462"><a href="#AuthenticationService.user_register-462"><span class="linenos">462</span></a><span class="sd"> Args:</span>
</span><span id="AuthenticationService.user_register-463"><a href="#AuthenticationService.user_register-463"><span class="linenos">463</span></a>
</span><span id="AuthenticationService.user_register-464"><a href="#AuthenticationService.user_register-464"><span class="linenos">464</span></a><span class="sd"> user_id: User ID.</span>
</span><span id="AuthenticationService.user_register-465"><a href="#AuthenticationService.user_register-465"><span class="linenos">465</span></a><span class="sd"> user_password: Password.</span>
</span><span id="AuthenticationService.user_register-466"><a href="#AuthenticationService.user_register-466"><span class="linenos">466</span></a><span class="sd"> role: Role of user.</span>
</span><span id="AuthenticationService.user_register-467"><a href="#AuthenticationService.user_register-467"><span class="linenos">467</span></a><span class="sd"> attribute: Attribute related to the role.</span>
</span><span id="AuthenticationService.user_register-468"><a href="#AuthenticationService.user_register-468"><span class="linenos">468</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationService.user_register-469"><a href="#AuthenticationService.user_register-469"><span class="linenos">469</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="AuthenticationService.user_register-470"><a href="#AuthenticationService.user_register-470"><span class="linenos">470</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="AuthenticationService.user_register-471"><a href="#AuthenticationService.user_register-471"><span class="linenos">471</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">UserRegisterRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">,</span> <span class="n">user_password</span><span class="p">,</span>
</span><span id="AuthenticationService.user_register-472"><a href="#AuthenticationService.user_register-472"><span class="linenos">472</span></a> <span class="n">role</span><span class="p">,</span> <span class="n">attribute</span><span class="p">)</span>
</span><span id="AuthenticationService.user_register-473"><a href="#AuthenticationService.user_register-473"><span class="linenos">473</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="AuthenticationService.user_register-474"><a href="#AuthenticationService.user_register-474"><span class="linenos">474</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="AuthenticationService.user_register-475"><a href="#AuthenticationService.user_register-475"><span class="linenos">475</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="AuthenticationService.user_register-476"><a href="#AuthenticationService.user_register-476"><span class="linenos">476</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="AuthenticationService.user_register-477"><a href="#AuthenticationService.user_register-477"><span class="linenos">477</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to register user </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Register a new user.</p>
<p>Args:</p>
<pre><code>user_id: User ID.
user_password: Password.
role: Role of user.
attribute: Attribute related to the role.
</code></pre>
</div>
</div>
<div id="AuthenticationService.user_update" class="classattr">
<input id="AuthenticationService.user_update-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">user_update</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">user_password</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">role</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">attribute</span><span class="o">=</span><span class="s1">&#39;&#39;</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="AuthenticationService.user_update-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#AuthenticationService.user_update"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="AuthenticationService.user_update-479"><a href="#AuthenticationService.user_update-479"><span class="linenos">479</span></a> <span class="k">def</span> <span class="nf">user_update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="AuthenticationService.user_update-480"><a href="#AuthenticationService.user_update-480"><span class="linenos">480</span></a> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="AuthenticationService.user_update-481"><a href="#AuthenticationService.user_update-481"><span class="linenos">481</span></a> <span class="n">user_password</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="AuthenticationService.user_update-482"><a href="#AuthenticationService.user_update-482"><span class="linenos">482</span></a> <span class="n">role</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="AuthenticationService.user_update-483"><a href="#AuthenticationService.user_update-483"><span class="linenos">483</span></a> <span class="n">attribute</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">):</span>
</span><span id="AuthenticationService.user_update-484"><a href="#AuthenticationService.user_update-484"><span class="linenos">484</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Update an existing user.</span>
</span><span id="AuthenticationService.user_update-485"><a href="#AuthenticationService.user_update-485"><span class="linenos">485</span></a>
</span><span id="AuthenticationService.user_update-486"><a href="#AuthenticationService.user_update-486"><span class="linenos">486</span></a><span class="sd"> Args:</span>
</span><span id="AuthenticationService.user_update-487"><a href="#AuthenticationService.user_update-487"><span class="linenos">487</span></a>
</span><span id="AuthenticationService.user_update-488"><a href="#AuthenticationService.user_update-488"><span class="linenos">488</span></a><span class="sd"> user_id: User ID.</span>
</span><span id="AuthenticationService.user_update-489"><a href="#AuthenticationService.user_update-489"><span class="linenos">489</span></a><span class="sd"> user_password: Password.</span>
</span><span id="AuthenticationService.user_update-490"><a href="#AuthenticationService.user_update-490"><span class="linenos">490</span></a><span class="sd"> role: Role of user.</span>
</span><span id="AuthenticationService.user_update-491"><a href="#AuthenticationService.user_update-491"><span class="linenos">491</span></a><span class="sd"> attribute: Attribute related to the role.</span>
</span><span id="AuthenticationService.user_update-492"><a href="#AuthenticationService.user_update-492"><span class="linenos">492</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationService.user_update-493"><a href="#AuthenticationService.user_update-493"><span class="linenos">493</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="AuthenticationService.user_update-494"><a href="#AuthenticationService.user_update-494"><span class="linenos">494</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="AuthenticationService.user_update-495"><a href="#AuthenticationService.user_update-495"><span class="linenos">495</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">UserUpdateRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">,</span> <span class="n">user_password</span><span class="p">,</span>
</span><span id="AuthenticationService.user_update-496"><a href="#AuthenticationService.user_update-496"><span class="linenos">496</span></a> <span class="n">role</span><span class="p">,</span> <span class="n">attribute</span><span class="p">)</span>
</span><span id="AuthenticationService.user_update-497"><a href="#AuthenticationService.user_update-497"><span class="linenos">497</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="AuthenticationService.user_update-498"><a href="#AuthenticationService.user_update-498"><span class="linenos">498</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="AuthenticationService.user_update-499"><a href="#AuthenticationService.user_update-499"><span class="linenos">499</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="AuthenticationService.user_update-500"><a href="#AuthenticationService.user_update-500"><span class="linenos">500</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="AuthenticationService.user_update-501"><a href="#AuthenticationService.user_update-501"><span class="linenos">501</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to update user </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Update an existing user.</p>
<p>Args:</p>
<pre><code>user_id: User ID.
user_password: Password.
role: Role of user.
attribute: Attribute related to the role.
</code></pre>
</div>
</div>
<div id="AuthenticationService.user_login" class="classattr">
<input id="AuthenticationService.user_login-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">user_login</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">user_password</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="AuthenticationService.user_login-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#AuthenticationService.user_login"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="AuthenticationService.user_login-503"><a href="#AuthenticationService.user_login-503"><span class="linenos">503</span></a> <span class="k">def</span> <span class="nf">user_login</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">user_password</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="AuthenticationService.user_login-504"><a href="#AuthenticationService.user_login-504"><span class="linenos">504</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Login and get a session token.</span>
</span><span id="AuthenticationService.user_login-505"><a href="#AuthenticationService.user_login-505"><span class="linenos">505</span></a>
</span><span id="AuthenticationService.user_login-506"><a href="#AuthenticationService.user_login-506"><span class="linenos">506</span></a><span class="sd"> Args:</span>
</span><span id="AuthenticationService.user_login-507"><a href="#AuthenticationService.user_login-507"><span class="linenos">507</span></a>
</span><span id="AuthenticationService.user_login-508"><a href="#AuthenticationService.user_login-508"><span class="linenos">508</span></a><span class="sd"> user_id: User ID.</span>
</span><span id="AuthenticationService.user_login-509"><a href="#AuthenticationService.user_login-509"><span class="linenos">509</span></a><span class="sd"> user_password: Password.</span>
</span><span id="AuthenticationService.user_login-510"><a href="#AuthenticationService.user_login-510"><span class="linenos">510</span></a>
</span><span id="AuthenticationService.user_login-511"><a href="#AuthenticationService.user_login-511"><span class="linenos">511</span></a><span class="sd"> Returns:</span>
</span><span id="AuthenticationService.user_login-512"><a href="#AuthenticationService.user_login-512"><span class="linenos">512</span></a>
</span><span id="AuthenticationService.user_login-513"><a href="#AuthenticationService.user_login-513"><span class="linenos">513</span></a><span class="sd"> str: User login token.</span>
</span><span id="AuthenticationService.user_login-514"><a href="#AuthenticationService.user_login-514"><span class="linenos">514</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationService.user_login-515"><a href="#AuthenticationService.user_login-515"><span class="linenos">515</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_channel</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="AuthenticationService.user_login-516"><a href="#AuthenticationService.user_login-516"><span class="linenos">516</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">UserLoginRequest</span><span class="p">(</span><span class="n">user_id</span><span class="p">,</span> <span class="n">user_password</span><span class="p">)</span>
</span><span id="AuthenticationService.user_login-517"><a href="#AuthenticationService.user_login-517"><span class="linenos">517</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="AuthenticationService.user_login-518"><a href="#AuthenticationService.user_login-518"><span class="linenos">518</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="AuthenticationService.user_login-519"><a href="#AuthenticationService.user_login-519"><span class="linenos">519</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">metadata</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="n">user_id</span><span class="p">,</span> <span class="s2">&quot;token&quot;</span><span class="p">:</span> <span class="n">response</span><span class="o">.</span><span class="n">token</span><span class="p">}</span>
</span><span id="AuthenticationService.user_login-520"><a href="#AuthenticationService.user_login-520"><span class="linenos">520</span></a> <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">token</span>
</span><span id="AuthenticationService.user_login-521"><a href="#AuthenticationService.user_login-521"><span class="linenos">521</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="AuthenticationService.user_login-522"><a href="#AuthenticationService.user_login-522"><span class="linenos">522</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to login user </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Login and get a session token.</p>
<p>Args:</p>
<pre><code>user_id: User ID.
user_password: Password.
</code></pre>
<p>Returns:</p>
<pre><code>str: User login token.
</code></pre>
</div>
</div>
<div id="AuthenticationService.user_change_password" class="classattr">
<input id="AuthenticationService.user_change_password-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">user_change_password</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">user_password</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="AuthenticationService.user_change_password-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#AuthenticationService.user_change_password"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="AuthenticationService.user_change_password-524"><a href="#AuthenticationService.user_change_password-524"><span class="linenos">524</span></a> <span class="k">def</span> <span class="nf">user_change_password</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_password</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="AuthenticationService.user_change_password-525"><a href="#AuthenticationService.user_change_password-525"><span class="linenos">525</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Change password.</span>
</span><span id="AuthenticationService.user_change_password-526"><a href="#AuthenticationService.user_change_password-526"><span class="linenos">526</span></a>
</span><span id="AuthenticationService.user_change_password-527"><a href="#AuthenticationService.user_change_password-527"><span class="linenos">527</span></a><span class="sd"> Args:</span>
</span><span id="AuthenticationService.user_change_password-528"><a href="#AuthenticationService.user_change_password-528"><span class="linenos">528</span></a>
</span><span id="AuthenticationService.user_change_password-529"><a href="#AuthenticationService.user_change_password-529"><span class="linenos">529</span></a><span class="sd"> user_password: New password.</span>
</span><span id="AuthenticationService.user_change_password-530"><a href="#AuthenticationService.user_change_password-530"><span class="linenos">530</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationService.user_change_password-531"><a href="#AuthenticationService.user_change_password-531"><span class="linenos">531</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="AuthenticationService.user_change_password-532"><a href="#AuthenticationService.user_change_password-532"><span class="linenos">532</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="AuthenticationService.user_change_password-533"><a href="#AuthenticationService.user_change_password-533"><span class="linenos">533</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">UserChangePasswordRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">user_password</span><span class="p">)</span>
</span><span id="AuthenticationService.user_change_password-534"><a href="#AuthenticationService.user_change_password-534"><span class="linenos">534</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="AuthenticationService.user_change_password-535"><a href="#AuthenticationService.user_change_password-535"><span class="linenos">535</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="AuthenticationService.user_change_password-536"><a href="#AuthenticationService.user_change_password-536"><span class="linenos">536</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="AuthenticationService.user_change_password-537"><a href="#AuthenticationService.user_change_password-537"><span class="linenos">537</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="AuthenticationService.user_change_password-538"><a href="#AuthenticationService.user_change_password-538"><span class="linenos">538</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to change password </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Change password.</p>
<p>Args:</p>
<pre><code>user_password: New password.
</code></pre>
</div>
</div>
<div id="AuthenticationService.reset_user_password" class="classattr">
<input id="AuthenticationService.reset_user_password-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">reset_user_password</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="AuthenticationService.reset_user_password-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#AuthenticationService.reset_user_password"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="AuthenticationService.reset_user_password-540"><a href="#AuthenticationService.reset_user_password-540"><span class="linenos">540</span></a> <span class="k">def</span> <span class="nf">reset_user_password</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="AuthenticationService.reset_user_password-541"><a href="#AuthenticationService.reset_user_password-541"><span class="linenos">541</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Reset password of a managed user.</span>
</span><span id="AuthenticationService.reset_user_password-542"><a href="#AuthenticationService.reset_user_password-542"><span class="linenos">542</span></a>
</span><span id="AuthenticationService.reset_user_password-543"><a href="#AuthenticationService.reset_user_password-543"><span class="linenos">543</span></a><span class="sd"> Args:</span>
</span><span id="AuthenticationService.reset_user_password-544"><a href="#AuthenticationService.reset_user_password-544"><span class="linenos">544</span></a>
</span><span id="AuthenticationService.reset_user_password-545"><a href="#AuthenticationService.reset_user_password-545"><span class="linenos">545</span></a><span class="sd"> user_id: User ID.</span>
</span><span id="AuthenticationService.reset_user_password-546"><a href="#AuthenticationService.reset_user_password-546"><span class="linenos">546</span></a>
</span><span id="AuthenticationService.reset_user_password-547"><a href="#AuthenticationService.reset_user_password-547"><span class="linenos">547</span></a><span class="sd"> Returns:</span>
</span><span id="AuthenticationService.reset_user_password-548"><a href="#AuthenticationService.reset_user_password-548"><span class="linenos">548</span></a>
</span><span id="AuthenticationService.reset_user_password-549"><a href="#AuthenticationService.reset_user_password-549"><span class="linenos">549</span></a><span class="sd"> str: New password.</span>
</span><span id="AuthenticationService.reset_user_password-550"><a href="#AuthenticationService.reset_user_password-550"><span class="linenos">550</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationService.reset_user_password-551"><a href="#AuthenticationService.reset_user_password-551"><span class="linenos">551</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="AuthenticationService.reset_user_password-552"><a href="#AuthenticationService.reset_user_password-552"><span class="linenos">552</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="AuthenticationService.reset_user_password-553"><a href="#AuthenticationService.reset_user_password-553"><span class="linenos">553</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">ResetUserPasswordRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">)</span>
</span><span id="AuthenticationService.reset_user_password-554"><a href="#AuthenticationService.reset_user_password-554"><span class="linenos">554</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="AuthenticationService.reset_user_password-555"><a href="#AuthenticationService.reset_user_password-555"><span class="linenos">555</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="AuthenticationService.reset_user_password-556"><a href="#AuthenticationService.reset_user_password-556"><span class="linenos">556</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="AuthenticationService.reset_user_password-557"><a href="#AuthenticationService.reset_user_password-557"><span class="linenos">557</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="AuthenticationService.reset_user_password-558"><a href="#AuthenticationService.reset_user_password-558"><span class="linenos">558</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="AuthenticationService.reset_user_password-559"><a href="#AuthenticationService.reset_user_password-559"><span class="linenos">559</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to reset password </span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Reset password of a managed user.</p>
<p>Args:</p>
<pre><code>user_id: User ID.
</code></pre>
<p>Returns:</p>
<pre><code>str: New password.
</code></pre>
</div>
</div>
<div id="AuthenticationService.delete_user" class="classattr">
<input id="AuthenticationService.delete_user-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">delete_user</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="AuthenticationService.delete_user-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#AuthenticationService.delete_user"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="AuthenticationService.delete_user-561"><a href="#AuthenticationService.delete_user-561"><span class="linenos">561</span></a> <span class="k">def</span> <span class="nf">delete_user</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="AuthenticationService.delete_user-562"><a href="#AuthenticationService.delete_user-562"><span class="linenos">562</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Delete a user.</span>
</span><span id="AuthenticationService.delete_user-563"><a href="#AuthenticationService.delete_user-563"><span class="linenos">563</span></a>
</span><span id="AuthenticationService.delete_user-564"><a href="#AuthenticationService.delete_user-564"><span class="linenos">564</span></a><span class="sd"> Args:</span>
</span><span id="AuthenticationService.delete_user-565"><a href="#AuthenticationService.delete_user-565"><span class="linenos">565</span></a>
</span><span id="AuthenticationService.delete_user-566"><a href="#AuthenticationService.delete_user-566"><span class="linenos">566</span></a><span class="sd"> user_id: User ID.</span>
</span><span id="AuthenticationService.delete_user-567"><a href="#AuthenticationService.delete_user-567"><span class="linenos">567</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationService.delete_user-568"><a href="#AuthenticationService.delete_user-568"><span class="linenos">568</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="AuthenticationService.delete_user-569"><a href="#AuthenticationService.delete_user-569"><span class="linenos">569</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="AuthenticationService.delete_user-570"><a href="#AuthenticationService.delete_user-570"><span class="linenos">570</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">DeleteUserRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">)</span>
</span><span id="AuthenticationService.delete_user-571"><a href="#AuthenticationService.delete_user-571"><span class="linenos">571</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="AuthenticationService.delete_user-572"><a href="#AuthenticationService.delete_user-572"><span class="linenos">572</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="AuthenticationService.delete_user-573"><a href="#AuthenticationService.delete_user-573"><span class="linenos">573</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="AuthenticationService.delete_user-574"><a href="#AuthenticationService.delete_user-574"><span class="linenos">574</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="AuthenticationService.delete_user-575"><a href="#AuthenticationService.delete_user-575"><span class="linenos">575</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="AuthenticationService.delete_user-576"><a href="#AuthenticationService.delete_user-576"><span class="linenos">576</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to delete user (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Delete a user.</p>
<p>Args:</p>
<pre><code>user_id: User ID.
</code></pre>
</div>
</div>
<div id="AuthenticationService.list_users" class="classattr">
<input id="AuthenticationService.list_users-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">list_users</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="AuthenticationService.list_users-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#AuthenticationService.list_users"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="AuthenticationService.list_users-578"><a href="#AuthenticationService.list_users-578"><span class="linenos">578</span></a> <span class="k">def</span> <span class="nf">list_users</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="AuthenticationService.list_users-579"><a href="#AuthenticationService.list_users-579"><span class="linenos">579</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;List managed users</span>
</span><span id="AuthenticationService.list_users-580"><a href="#AuthenticationService.list_users-580"><span class="linenos">580</span></a>
</span><span id="AuthenticationService.list_users-581"><a href="#AuthenticationService.list_users-581"><span class="linenos">581</span></a><span class="sd"> Args:</span>
</span><span id="AuthenticationService.list_users-582"><a href="#AuthenticationService.list_users-582"><span class="linenos">582</span></a>
</span><span id="AuthenticationService.list_users-583"><a href="#AuthenticationService.list_users-583"><span class="linenos">583</span></a><span class="sd"> user_id: User ID.</span>
</span><span id="AuthenticationService.list_users-584"><a href="#AuthenticationService.list_users-584"><span class="linenos">584</span></a>
</span><span id="AuthenticationService.list_users-585"><a href="#AuthenticationService.list_users-585"><span class="linenos">585</span></a><span class="sd"> Returns:</span>
</span><span id="AuthenticationService.list_users-586"><a href="#AuthenticationService.list_users-586"><span class="linenos">586</span></a>
</span><span id="AuthenticationService.list_users-587"><a href="#AuthenticationService.list_users-587"><span class="linenos">587</span></a><span class="sd"> str: User list</span>
</span><span id="AuthenticationService.list_users-588"><a href="#AuthenticationService.list_users-588"><span class="linenos">588</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationService.list_users-589"><a href="#AuthenticationService.list_users-589"><span class="linenos">589</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_channel</span><span class="p">()</span>
</span><span id="AuthenticationService.list_users-590"><a href="#AuthenticationService.list_users-590"><span class="linenos">590</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_metadata</span><span class="p">()</span>
</span><span id="AuthenticationService.list_users-591"><a href="#AuthenticationService.list_users-591"><span class="linenos">591</span></a> <span class="n">request</span> <span class="o">=</span> <span class="n">ListUsersRequest</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="p">,</span> <span class="n">user_id</span><span class="p">)</span>
</span><span id="AuthenticationService.list_users-592"><a href="#AuthenticationService.list_users-592"><span class="linenos">592</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="AuthenticationService.list_users-593"><a href="#AuthenticationService.list_users-593"><span class="linenos">593</span></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call_method</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span><span id="AuthenticationService.list_users-594"><a href="#AuthenticationService.list_users-594"><span class="linenos">594</span></a> <span class="k">return</span> <span class="n">response</span>
</span><span id="AuthenticationService.list_users-595"><a href="#AuthenticationService.list_users-595"><span class="linenos">595</span></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="AuthenticationService.list_users-596"><a href="#AuthenticationService.list_users-596"><span class="linenos">596</span></a> <span class="n">reason</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="AuthenticationService.list_users-597"><a href="#AuthenticationService.list_users-597"><span class="linenos">597</span></a> <span class="k">raise</span> <span class="n">TeaclaveException</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to list user (</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>List managed users</p>
<p>Args:</p>
<pre><code>user_id: User ID.
</code></pre>
<p>Returns:</p>
<pre><code>str: User list
</code></pre>
</div>
</div>
<div class="inherited">
<h5>Inherited Members</h5>
<dl>
<div><dt><a href="#TeaclaveService">TeaclaveService</a></dt>
<dd id="AuthenticationService.call_method" class="function"><a href="#TeaclaveService.call_method">call_method</a></dd>
<dd id="AuthenticationService.close" class="function"><a href="#TeaclaveService.close">close</a></dd>
<dd id="AuthenticationService.check_metadata" class="function"><a href="#TeaclaveService.check_metadata">check_metadata</a></dd>
<dd id="AuthenticationService.check_channel" class="function"><a href="#TeaclaveService.check_channel">check_channel</a></dd>
<dd id="AuthenticationService.get_metadata" class="function"><a href="#TeaclaveService.get_metadata">get_metadata</a></dd>
</div>
</dl>
</div>
</section>
<section id="FunctionArgument">
<input id="FunctionArgument-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">FunctionArgument</span>:
<label class="view-source-button" for="FunctionArgument-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FunctionArgument"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FunctionArgument-310"><a href="#FunctionArgument-310"><span class="linenos">310</span></a><span class="k">class</span> <span class="nc">FunctionArgument</span><span class="p">:</span>
</span><span id="FunctionArgument-311"><a href="#FunctionArgument-311"><span class="linenos">311</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Function argument for registring.</span>
</span><span id="FunctionArgument-312"><a href="#FunctionArgument-312"><span class="linenos">312</span></a>
</span><span id="FunctionArgument-313"><a href="#FunctionArgument-313"><span class="linenos">313</span></a><span class="sd"> Args:</span>
</span><span id="FunctionArgument-314"><a href="#FunctionArgument-314"><span class="linenos">314</span></a><span class="sd"> key: Name of the argument.</span>
</span><span id="FunctionArgument-315"><a href="#FunctionArgument-315"><span class="linenos">315</span></a><span class="sd"> default_value: A default value of the argument. The default value is &quot;&quot;.</span>
</span><span id="FunctionArgument-316"><a href="#FunctionArgument-316"><span class="linenos">316</span></a><span class="sd"> allow_overwrite: If allow_overwrite flag is set to be true. The service</span>
</span><span id="FunctionArgument-317"><a href="#FunctionArgument-317"><span class="linenos">317</span></a><span class="sd"> will allow the task creator to overwrite the arguement</span>
</span><span id="FunctionArgument-318"><a href="#FunctionArgument-318"><span class="linenos">318</span></a><span class="sd"> value when creating tasks.</span>
</span><span id="FunctionArgument-319"><a href="#FunctionArgument-319"><span class="linenos">319</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="FunctionArgument-320"><a href="#FunctionArgument-320"><span class="linenos">320</span></a>
</span><span id="FunctionArgument-321"><a href="#FunctionArgument-321"><span class="linenos">321</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="FunctionArgument-322"><a href="#FunctionArgument-322"><span class="linenos">322</span></a> <span class="n">key</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FunctionArgument-323"><a href="#FunctionArgument-323"><span class="linenos">323</span></a> <span class="n">default_value</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
</span><span id="FunctionArgument-324"><a href="#FunctionArgument-324"><span class="linenos">324</span></a> <span class="n">allow_overwrite</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
</span><span id="FunctionArgument-325"><a href="#FunctionArgument-325"><span class="linenos">325</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">FunctionArgument</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
</span><span id="FunctionArgument-326"><a href="#FunctionArgument-326"><span class="linenos">326</span></a> <span class="n">default_value</span><span class="o">=</span><span class="n">default_value</span><span class="p">,</span>
</span><span id="FunctionArgument-327"><a href="#FunctionArgument-327"><span class="linenos">327</span></a> <span class="n">allow_overwrite</span><span class="o">=</span><span class="n">allow_overwrite</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Function argument for registring.</p>
<p>Args:
key: Name of the argument.
default_value: A default value of the argument. The default value is "".
allow_overwrite: If allow_overwrite flag is set to be true. The service
will allow the task creator to overwrite the arguement
value when creating tasks.</p>
</div>
<div id="FunctionArgument.__init__" class="classattr">
<input id="FunctionArgument.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="name">FunctionArgument</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">key</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">default_value</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>, </span><span class="param"><span class="n">allow_overwrite</span><span class="o">=</span><span class="kc">True</span></span>)</span>
<label class="view-source-button" for="FunctionArgument.__init__-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FunctionArgument.__init__"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FunctionArgument.__init__-321"><a href="#FunctionArgument.__init__-321"><span class="linenos">321</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="FunctionArgument.__init__-322"><a href="#FunctionArgument.__init__-322"><span class="linenos">322</span></a> <span class="n">key</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span><span id="FunctionArgument.__init__-323"><a href="#FunctionArgument.__init__-323"><span class="linenos">323</span></a> <span class="n">default_value</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
</span><span id="FunctionArgument.__init__-324"><a href="#FunctionArgument.__init__-324"><span class="linenos">324</span></a> <span class="n">allow_overwrite</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
</span><span id="FunctionArgument.__init__-325"><a href="#FunctionArgument.__init__-325"><span class="linenos">325</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">FunctionArgument</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
</span><span id="FunctionArgument.__init__-326"><a href="#FunctionArgument.__init__-326"><span class="linenos">326</span></a> <span class="n">default_value</span><span class="o">=</span><span class="n">default_value</span><span class="p">,</span>
</span><span id="FunctionArgument.__init__-327"><a href="#FunctionArgument.__init__-327"><span class="linenos">327</span></a> <span class="n">allow_overwrite</span><span class="o">=</span><span class="n">allow_overwrite</span><span class="p">)</span>
</span></pre></div>
</div>
</section>
<section id="FunctionInput">
<input id="FunctionInput-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">FunctionInput</span>:
<label class="view-source-button" for="FunctionInput-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FunctionInput"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FunctionInput-278"><a href="#FunctionInput-278"><span class="linenos">278</span></a><span class="k">class</span> <span class="nc">FunctionInput</span><span class="p">:</span>
</span><span id="FunctionInput-279"><a href="#FunctionInput-279"><span class="linenos">279</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Function input for registering.</span>
</span><span id="FunctionInput-280"><a href="#FunctionInput-280"><span class="linenos">280</span></a>
</span><span id="FunctionInput-281"><a href="#FunctionInput-281"><span class="linenos">281</span></a><span class="sd"> Args:</span>
</span><span id="FunctionInput-282"><a href="#FunctionInput-282"><span class="linenos">282</span></a>
</span><span id="FunctionInput-283"><a href="#FunctionInput-283"><span class="linenos">283</span></a><span class="sd"> name: Name of input data.</span>
</span><span id="FunctionInput-284"><a href="#FunctionInput-284"><span class="linenos">284</span></a><span class="sd"> description: Description of the input data.</span>
</span><span id="FunctionInput-285"><a href="#FunctionInput-285"><span class="linenos">285</span></a><span class="sd"> optional: [Default: False] Data owners do not need to register the data.</span>
</span><span id="FunctionInput-286"><a href="#FunctionInput-286"><span class="linenos">286</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="FunctionInput-287"><a href="#FunctionInput-287"><span class="linenos">287</span></a>
</span><span id="FunctionInput-288"><a href="#FunctionInput-288"><span class="linenos">288</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="FunctionInput-289"><a href="#FunctionInput-289"><span class="linenos">289</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">FunctionInput</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
</span><span id="FunctionInput-290"><a href="#FunctionInput-290"><span class="linenos">290</span></a> <span class="n">description</span><span class="o">=</span><span class="n">description</span><span class="p">,</span>
</span><span id="FunctionInput-291"><a href="#FunctionInput-291"><span class="linenos">291</span></a> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Function input for registering.</p>
<p>Args:</p>
<pre><code>name: Name of input data.
description: Description of the input data.
optional: [Default: False] Data owners do not need to register the data.
</code></pre>
</div>
<div id="FunctionInput.__init__" class="classattr">
<input id="FunctionInput.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="name">FunctionInput</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">name</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">description</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">optional</span><span class="o">=</span><span class="kc">False</span></span>)</span>
<label class="view-source-button" for="FunctionInput.__init__-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FunctionInput.__init__"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FunctionInput.__init__-288"><a href="#FunctionInput.__init__-288"><span class="linenos">288</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="FunctionInput.__init__-289"><a href="#FunctionInput.__init__-289"><span class="linenos">289</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">FunctionInput</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
</span><span id="FunctionInput.__init__-290"><a href="#FunctionInput.__init__-290"><span class="linenos">290</span></a> <span class="n">description</span><span class="o">=</span><span class="n">description</span><span class="p">,</span>
</span><span id="FunctionInput.__init__-291"><a href="#FunctionInput.__init__-291"><span class="linenos">291</span></a> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span><span class="p">)</span>
</span></pre></div>
</div>
</section>
<section id="FunctionOutput">
<input id="FunctionOutput-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">FunctionOutput</span>:
<label class="view-source-button" for="FunctionOutput-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FunctionOutput"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FunctionOutput-294"><a href="#FunctionOutput-294"><span class="linenos">294</span></a><span class="k">class</span> <span class="nc">FunctionOutput</span><span class="p">:</span>
</span><span id="FunctionOutput-295"><a href="#FunctionOutput-295"><span class="linenos">295</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Function output for registering.</span>
</span><span id="FunctionOutput-296"><a href="#FunctionOutput-296"><span class="linenos">296</span></a>
</span><span id="FunctionOutput-297"><a href="#FunctionOutput-297"><span class="linenos">297</span></a><span class="sd"> Args:</span>
</span><span id="FunctionOutput-298"><a href="#FunctionOutput-298"><span class="linenos">298</span></a>
</span><span id="FunctionOutput-299"><a href="#FunctionOutput-299"><span class="linenos">299</span></a><span class="sd"> name: Name of output data.</span>
</span><span id="FunctionOutput-300"><a href="#FunctionOutput-300"><span class="linenos">300</span></a><span class="sd"> description: Description of the output data.</span>
</span><span id="FunctionOutput-301"><a href="#FunctionOutput-301"><span class="linenos">301</span></a><span class="sd"> optional: [Default: False] Data owners do not need to register the data.</span>
</span><span id="FunctionOutput-302"><a href="#FunctionOutput-302"><span class="linenos">302</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="FunctionOutput-303"><a href="#FunctionOutput-303"><span class="linenos">303</span></a>
</span><span id="FunctionOutput-304"><a href="#FunctionOutput-304"><span class="linenos">304</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="FunctionOutput-305"><a href="#FunctionOutput-305"><span class="linenos">305</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">FunctionOutput</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
</span><span id="FunctionOutput-306"><a href="#FunctionOutput-306"><span class="linenos">306</span></a> <span class="n">description</span><span class="o">=</span><span class="n">description</span><span class="p">,</span>
</span><span id="FunctionOutput-307"><a href="#FunctionOutput-307"><span class="linenos">307</span></a> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Function output for registering.</p>
<p>Args:</p>
<pre><code>name: Name of output data.
description: Description of the output data.
optional: [Default: False] Data owners do not need to register the data.
</code></pre>
</div>
<div id="FunctionOutput.__init__" class="classattr">
<input id="FunctionOutput.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="name">FunctionOutput</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">name</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">description</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">optional</span><span class="o">=</span><span class="kc">False</span></span>)</span>
<label class="view-source-button" for="FunctionOutput.__init__-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#FunctionOutput.__init__"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="FunctionOutput.__init__-304"><a href="#FunctionOutput.__init__-304"><span class="linenos">304</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="FunctionOutput.__init__-305"><a href="#FunctionOutput.__init__-305"><span class="linenos">305</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">FunctionOutput</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
</span><span id="FunctionOutput.__init__-306"><a href="#FunctionOutput.__init__-306"><span class="linenos">306</span></a> <span class="n">description</span><span class="o">=</span><span class="n">description</span><span class="p">,</span>
</span><span id="FunctionOutput.__init__-307"><a href="#FunctionOutput.__init__-307"><span class="linenos">307</span></a> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span><span class="p">)</span>
</span></pre></div>
</div>
</section>
<section id="OwnerList">
<input id="OwnerList-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">OwnerList</span>:
<label class="view-source-button" for="OwnerList-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#OwnerList"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="OwnerList-330"><a href="#OwnerList-330"><span class="linenos">330</span></a><span class="k">class</span> <span class="nc">OwnerList</span><span class="p">:</span>
</span><span id="OwnerList-331"><a href="#OwnerList-331"><span class="linenos">331</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Defines data ownership.</span>
</span><span id="OwnerList-332"><a href="#OwnerList-332"><span class="linenos">332</span></a>
</span><span id="OwnerList-333"><a href="#OwnerList-333"><span class="linenos">333</span></a><span class="sd"> Args:</span>
</span><span id="OwnerList-334"><a href="#OwnerList-334"><span class="linenos">334</span></a>
</span><span id="OwnerList-335"><a href="#OwnerList-335"><span class="linenos">335</span></a><span class="sd"> data_name: Name of output data.</span>
</span><span id="OwnerList-336"><a href="#OwnerList-336"><span class="linenos">336</span></a><span class="sd"> uids: A list of user id which own this data.</span>
</span><span id="OwnerList-337"><a href="#OwnerList-337"><span class="linenos">337</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="OwnerList-338"><a href="#OwnerList-338"><span class="linenos">338</span></a>
</span><span id="OwnerList-339"><a href="#OwnerList-339"><span class="linenos">339</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">uids</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]):</span>
</span><span id="OwnerList-340"><a href="#OwnerList-340"><span class="linenos">340</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">OwnerList</span><span class="p">(</span><span class="n">data_name</span><span class="o">=</span><span class="n">data_name</span><span class="p">,</span> <span class="n">uids</span><span class="o">=</span><span class="n">uids</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Defines data ownership.</p>
<p>Args:</p>
<pre><code>data_name: Name of output data.
uids: A list of user id which own this data.
</code></pre>
</div>
<div id="OwnerList.__init__" class="classattr">
<input id="OwnerList.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="name">OwnerList</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">data_name</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">uids</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span></span>)</span>
<label class="view-source-button" for="OwnerList.__init__-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#OwnerList.__init__"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="OwnerList.__init__-339"><a href="#OwnerList.__init__-339"><span class="linenos">339</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">uids</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]):</span>
</span><span id="OwnerList.__init__-340"><a href="#OwnerList.__init__-340"><span class="linenos">340</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">OwnerList</span><span class="p">(</span><span class="n">data_name</span><span class="o">=</span><span class="n">data_name</span><span class="p">,</span> <span class="n">uids</span><span class="o">=</span><span class="n">uids</span><span class="p">)</span>
</span></pre></div>
</div>
</section>
<section id="DataMap">
<input id="DataMap-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">DataMap</span>:
<label class="view-source-button" for="DataMap-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#DataMap"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="DataMap-343"><a href="#DataMap-343"><span class="linenos">343</span></a><span class="k">class</span> <span class="nc">DataMap</span><span class="p">:</span>
</span><span id="DataMap-344"><a href="#DataMap-344"><span class="linenos">344</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Assign data id to input or output data.</span>
</span><span id="DataMap-345"><a href="#DataMap-345"><span class="linenos">345</span></a>
</span><span id="DataMap-346"><a href="#DataMap-346"><span class="linenos">346</span></a><span class="sd"> Args:</span>
</span><span id="DataMap-347"><a href="#DataMap-347"><span class="linenos">347</span></a>
</span><span id="DataMap-348"><a href="#DataMap-348"><span class="linenos">348</span></a><span class="sd"> data_name: Name of output data.</span>
</span><span id="DataMap-349"><a href="#DataMap-349"><span class="linenos">349</span></a><span class="sd"> data_id: Id for the data name.</span>
</span><span id="DataMap-350"><a href="#DataMap-350"><span class="linenos">350</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="DataMap-351"><a href="#DataMap-351"><span class="linenos">351</span></a>
</span><span id="DataMap-352"><a href="#DataMap-352"><span class="linenos">352</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data_name</span><span class="p">,</span> <span class="n">data_id</span><span class="p">):</span>
</span><span id="DataMap-353"><a href="#DataMap-353"><span class="linenos">353</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">DataMap</span><span class="p">(</span><span class="n">data_name</span><span class="o">=</span><span class="n">data_name</span><span class="p">,</span> <span class="n">data_id</span><span class="o">=</span><span class="n">data_id</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Assign data id to input or output data.</p>
<p>Args:</p>
<pre><code>data_name: Name of output data.
data_id: Id for the data name.
</code></pre>
</div>
<div id="DataMap.__init__" class="classattr">
<input id="DataMap.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="name">DataMap</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">data_name</span>, </span><span class="param"><span class="n">data_id</span></span>)</span>
<label class="view-source-button" for="DataMap.__init__-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#DataMap.__init__"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="DataMap.__init__-352"><a href="#DataMap.__init__-352"><span class="linenos">352</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data_name</span><span class="p">,</span> <span class="n">data_id</span><span class="p">):</span>
</span><span id="DataMap.__init__-353"><a href="#DataMap.__init__-353"><span class="linenos">353</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">fe</span><span class="o">.</span><span class="n">DataMap</span><span class="p">(</span><span class="n">data_name</span><span class="o">=</span><span class="n">data_name</span><span class="p">,</span> <span class="n">data_id</span><span class="o">=</span><span class="n">data_id</span><span class="p">)</span>
</span></pre></div>
</div>
</section>
</main>
</body>
</html>