1<!DOCTYPE html> 2 <html><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="ie=edge"/><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/><link rel="preload" href="https://graphene-python.org/component---src-layouts-index-js-20a284362661e4add39f.js" as="script"/><link rel="preload" href="https://graphene-python.org/component---src-pages-docs-js-8f61c8eac84fa7605edc.js" as="script"/><link rel="preload" href="https://graphene-python.org/path---docs-a0e39f21c11f6a62c5ab.js" as="script"/><link rel="preload" href="https://graphene-python.org/app-56509f0fe07de93b65d7.js" as="script"/><link rel="preload" href="https://graphene-python.org/commons-0903ebc8b5cb93b00e4c.js" as="script"/>
2<script id="webpack-manifest"> 3 //<![CDATA[ 4 window.webpackManifest = {"231608221292675":"app-56509f0fe07de93b65d7.js","162898551421021":"component---src-pages-404-js-4503918ea3a16cfcdb75.js","231744625982791":"component---src-pages-docs-example-js-82c60fa47efa4b64ceda.js","220445717415976":"component---src-pages-docs-js-8f61c8eac84fa7605edc.js","35783957827783":"component---src-pages-index-js-1d0fe4c65024f4925746.js","137408898365125":"component---src-pages-team-js-51da40a2faaaf1ca25d4.js","60335399758886":"path----557518bd178906f8d58a.js","254022195166212":"path---404-a0e39f21c11f6a62c5ab.js","60931981336898":"path---docs-example-a0e39f21c11f6a62c5ab.js","131064894521161":"path---docs-a0e39f21c11f6a62c5ab.js","142629428675168":"path---index-a0e39f21c11f6a62c5ab.js","196979586499782":"path---team-a0e39f21c11f6a62c5ab.js","178698757827068":"path---404-html-a0e39f21c11f6a62c5ab.js","114276838955818":"component---src-layouts-index-js-20a284362661e4add39f.js"} 5 //]]> 6 </script>
6<title data-react-helmet="true">Graphene-Python</title><meta data-react-helmet="true" name="description" content="Graphene framework for Python"/><meta data-react-helmet="true" name="keywords" content="graphene, graphql, python, framework"/>
6<script data-react-helmet="true" src="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js"></script>
6<style id="__jsx-style-3652023954">@import url("https://fonts.googleapis.com/css?family=Fira+Mono|Open+Sans:400,600");.nonexisting[data-jsx="3652023954"]{content:""}.graphene-header[data-jsx="3652023954"]{background:#000000;width:100%;font-family:"klavika-web";font-weight:300;font-size:18px;color:#ffffff;-webkit-letter-spacing:0;-moz-letter-spacing:0;-ms-letter-spacing:0;letter-spacing:0}#menu[data-jsx="3652023954"]{position:absolute;top:0}.graphene-logo{vertical-align:middle}.graphene-header[data-jsx="3652023954"] .container[data-jsx="3652023954"]{height:48px;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.tagline[data-jsx="3652023954"]{margin-left:auto;color:#a4b1b2;font-size:14px;-webkit-letter-spacing:0;-moz-letter-spacing:0;-ms-letter-spacing:0;letter-spacing:0;margin-bottom:0;margin-top:0;text-transform:none;font-weight:normal}.tagline[data-jsx="3652023954"] b[data-jsx="3652023954"]{font-weight:400;-webkit-letter-spacing:0.3px;-moz-letter-spacing:0.3px;-ms-letter-spacing:0.3px;letter-spacing:0.3px;color:white}svg.arrow{margin-left:8px;position:relative;top:2px}#search-docs{padding:5px 5px 5px 29px;margin-top:-2px;vertical-align:middle;font-size:14px;width:180px;background:transparent;border:none;background-image:url("/search.svg");background-size:16px 16px;background-repeat:no-repeat;background-position-y:center;background-position-x:5px;border-bottom:1px solid rgba(0,0,0,0.1)}.background-mobile-menu[data-jsx="3652023954"]{position:fixed;z-index:9999;background:rgba(200,200,200,0.3);top:0;bottom:0;right:0;left:0;display:none}.mobile-menu[data-jsx="3652023954"]{display:none;color:black}#search-docs:focus{outline:none;border-bottom-color:rgba(0,0,0,0.6)}.navbar-header-contrast[data-jsx="3652023954"] #search-docs{background-image:url("https://graphene-python.org/search-white.svg");color:white;border-bottom-color:rgba(255,255,255,0.5)}.navbar-header-contrast[data-jsx="3652023954"] #search-docs:focus{border-bottom-color:#ffffff}.navbar-header-contrast[data-jsx="3652023954"] #search-docs::-webkit-input-placeholder{color:rgba(255,255,255,0.6)}.navbar-header-contrast[data-jsx="3652023954"] #search-docs::-moz-placeholder{color:rgba(255,255,255,0.6)}.navbar-header-contrast[data-jsx="3652023954"] #search-docs:-ms-input-placeholder{color:rgba(255,255,255,0.6)}.navbar-header-contrast[data-jsx="3652023954"] #search-docs::placeholder{color:rgba(255,255,255,0.6)}.navbar-header-contrast[data-jsx="3652023954"]{background-image:linear-gradient( -180deg, #f67049 0%, #e14b2e 100% )}.navbar-header[data-jsx="3652023954"]{height:94px}.navbar-header[data-jsx="3652023954"] .container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:94px}.navbar-header[data-jsx="3652023954"] nav[data-jsx="3652023954"]{height:100%;display:block;margin-left:auto}.nav-link{height:100%;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#555555;font-size:13px;font-family:"Open Sans",sans-serif;font-weight:600;height:94px;line-height:94px;padding:0 10px;margin:0;text-decoration:none;font-weight:600;position:relative}@media (max-width:992px){#search-docs{width:120px}}.nav-link-active{color:black}.nav-link-active:before{position:absolute;content:"";bottom:-10px;width:4px;height:4px;left:50%;margin-left:-2px;border-radius:2px;background:black}.navbar-header-contrast[data-jsx="3652023954"] .nav-link-active:before{background:white}.nav-link:hover{color:black}.navbar-header-contrast[data-jsx="3652023954"] .nav-link{color:white}.navbar-header-contrast[data-jsx="3652023954"] .nav-link:hover{color:#eee}@media (max-width:768px){#search-docs{display:none}.mobile-menu[data-jsx="3652023954"]{display:block;position:absolute;right:20px;font-size:20px}.navbar-header-contrast[data-jsx="3652023954"] .mobile-menu[data-jsx="3652023954"]{color:white}.tagline[data-jsx="3652023954"] .hide-mobile[data-jsx="3652023954"]{display:none}.navbar-header[data-jsx="3652023954"] nav[data-jsx="3652023954"]{height:auto;color:black;position:fixed;top:0;bottom:0;right:0;width:280px;
6display:block;background:white;z-index:10000;-webkit-transform:translateX(305px);-ms-transform:translateX(305px);transform:translateX(305px);box-shadow:0px 2px 25px rgba(0,0,0,0.15);-webkit-transition:all 0.5s cubic-bezier(0.55,0,0.1,1);transition:all 0.5s cubic-bezier(0.55,0,0.1,1)}.navbar-header-contrast[data-jsx="3652023954"] .nav-link{color:black}.navbar-header-contrast[data-jsx="3652023954"] .nav-link:hover{color:#333}.mobile-menu[data-jsx="3652023954"]{display:block}#menu[data-jsx="3652023954"]:target~.background-mobile-menu[data-jsx="3652023954"]{display:block;cursor:default}#menu[data-jsx="3652023954"]:target~nav[data-jsx="3652023954"]{-webkit-transform:translateX(0px);-ms-transform:translateX(0px);transform:translateX(0px)}.navbar-header[data-jsx="3652023954"] .nav-link{height:auto;display:block;width:100%;text-align:center;padding:0;margin:18px 0;line-height:20px}}.nonexisting[data-jsx="3652023954"]{content:""} 7/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9sYXlvdXRzL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXdIb0IsQUFHaUMsQUFHRCxBQVVELEFBSUksQUFLVixBQUtLLEFBVUQsQUFNQSxBQUtTLEFBZVYsQUFVRixBQUlBLEFBSXdELEFBS3pDLEFBR0csQUFPOUIsQUFJVyxBQUdDLEFBTUQsQUFLQSxBQWdCRSxBQUlGLEFBR00sQUFXRCxBQUdMLEFBR0EsQUFHRCxBQUtJLEFBR0MsQUFNRixBQUdDLEFBR0QsQUFlQSxBQUdELEFBR0csQUFHQSxBQUlZLEFBR2QsQUFVa0UsQUFFekQsV0E5RHpCLEFBc0NFLENBN0ttQixBQThFckIsQUFTZ0IsQUFLSyxBQWdCbkIsQUFJRixBQWlCQSxBQUdBLEFBaUJFLEFBTWMsQUFlZCxBQWdCZ0IsQ0F2SUosQUFJMkIsQUFxRnZDLEFBWUEsQ0FUb0IsQUFpQ3BCLEFBR2lCLENBMUlKLENBMUJRLEFBTUgsQ0FoQkosQUF5SGhCLENBdklRLEFBNEhLLENBdElBLENBSGIsRUFpQkEsQ0EyTUEsQ0E5TUEsQUFvS21CLENBbElELEFBMEJsQixDQW9DbUIsQUFtR0osRUFqSnVCLEFBc0J0QyxBQUdBLENBaURlLEFBZ0ViLENBck0wQixDQXVCWCxDQTBJRixFQTFITCxHQXNLWSxFQS9CWixFQWxJYyxDQUp4QixBQThGWSxDQTVCWixBQXdEbUIsRUFhTixDQXZKTSxHQWlEbkIsR0E4RGEsRUF5Q0QsQ0E4QkUsQ0E3TUksRUFrS2hCLEdBdkdNLENBcUhRLENBcElDLEFBMkZOLEVBdUVPLEVBbEpQLEVBZUcsQ0FlZCxFQXpGaUIsQUF1SUUsRUF2Q0UsQUFnRkgsRUFwSFIsRUFoQkksQ0FrS08sRUFuSTBCLEdBZHRDLEdBNURPLENBZ0xLLENBekNELENBM0ZLLEFBeUp2QixDQXhJYSxLQWlKYixLQTdNaUIsR0E2RG5CLENBL0NlLEFBNEZDLEFBc0VFLEVBekNDLE1BM0ZMLElBZkEsRUE4RUcsQUFzRWUsSUF2R2hDLENBOERBLENBM0ZzQyxJQWZ0QyxFQVRrQixHQXVGb0IsYUF0RnZCLGFBQ08sQ0F1Qk0sTUFpRGQsRUFjSSxVQTlGbEIsQUFpRkEsQ0F4RXFCLEtBc0ZQLENBN0dkLENBOEM4QixVQWdFWCxFQXRGbkIsZUF1RmlCLENBaEVjLEFBa0lpQixjQWpFckMsU0FDWSxNQWpFSyxZQWtJMEIsR0FoRXBDLFdBakUyQixLQWtFekIsa0JBQ3BCLGlCQWxFQSxnREFpSUUiLCJmaWxlIjoic3JjL2xheW91dHMvaW5kZXguanMiLCJzb3VyY2VSb290IjoiL29wdC9idWlsZC9yZXBvIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IExpbmsgZnJvbSBcImdhdHNieS1saW5rXCI7XG5pbXBvcnQgSGVsbWV0IGZyb20gXCJyZWFjdC1oZWxtZXRcIjtcbmltcG9ydCBHcmFwaGVuZUxvZ28gZnJvbSBcIi4vZ3JhcGhlbmUtbG9nby5zdmdcIjtcbmltcG9ydCBBcnJvdyBmcm9tIFwiLi9hcnJvdy5zdmdcIjtcbmltcG9ydCBMb2dvT25XaGl0ZSBmcm9tIFwiLi9sb2dvLW9uLXdoaXRlLnN2Z1wiO1xuaW1wb3J0IEdyYXBoZW5lTG9nb1doaXRlIGZyb20gXCIuL2dyYXBoZW5lLWxvZ28td2hpdGUuc3ZnXCI7XG5pbXBvcnQgeyBGYUdpdGh1YiwgRmFCYXJzIH0gZnJvbSBcInJlYW
7N0LWljb25zL2ZhXCI7XG5cbmltcG9ydCBcImRvY3NlYXJjaC5qcy9kaXN0L2Nkbi9kb2NzZWFyY2gubWluLmNzc1wiO1xuaW1wb3J0IFwiLi9pbmRleC5jc3NcIjtcblxuY29uc3QgU0VBUkNIX0RPQ1MgPSB0cnVlO1xuXG4vLyBsZXQgZG9jc2VhcmNoO1xuLy8gaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgU0VBUkNIX0RPQ1MpIHtcbi8vICAgZG9jc2VhcmNoID0gcmVxdWlyZShcImRvY3NlYXJjaC5qcy9kaXN0L2Nkbi9kb2NzZWFyY2gubWluXCIpO1xuLy8gICB0cnkge1xuLy8gICAgIGRvY3NlYXJjaCh7XG4vLyAgICAgICBhcGlLZXk6IFwiNGI2ZDBhZmE4MDE5N2RiMzU4ODY1NTViNWVmNDcyMWZcIixcbi8vICAgICAgIGlucHV0U2VsZWN0b3I6IFwiI3NlYXJjaC1kb2NzXCIsXG4vLyAgICAgICBpbmRleE5hbWU6IFwiZ3JhcGhlbmVfcHl0aG9uXCIsXG4vLyAgICAgICB0cmFuc2Zvcm1EYXRhOiBmdW5jdGlvbihzdWdnZXN0aW9ucykge1xuLy8gICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbnMubWFwKGZ1bmN0aW9uKHN1Z2dlc3Rpb24pIHtcbi8vICAgICAgICAgICBzdWdnZXN0aW9uLnVybC5yZXBsYWNlKFwiaHR0cDpcIiwgXCJodHRwczpcIik7XG4vLyAgICAgICAgICAgcmV0dXJuIHN1Z2dlc3Rpb247XG4vLyAgICAgICAgIH0pO1xuLy8gICAgICAgfSxcbi8vICAgICAgIC8vIFwic3RhcnRfdXJsc1wiOiBbXCJodHRwczovL3d3dy5leGFtcGxlLmNvbS9kb2NzXCJdLFxuLy8gICAgICAgZGVidWc6IGZhbHNlXG4vLyAgICAgfSk7XG4vLyAgIH0gY2F0Y2ggKGUpIHt9XG4vLyB9IGVsc2Uge1xuLy8gICBkb2
7NzZWFyY2ggPSBmYWxzZTtcbi8vIH1cblxuY29uc3QgSGVhZGVyTGluayA9ICh7IHRvLCBjaGlsZHJlbiwgZG9jcywgLi4uZXh0cmEgfSkgPT4ge1xuICBpZiAoZG9jcykge1xuICAgIHJldHVybiAoXG4gICAgICA8YSBocmVmPXtgaHR0cHM6Ly9ncmFwaGVuZS1weXRob24ub3JnJHt0b31gfSB7Li4uZXh0cmF9PlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L2E+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxMaW5rIHRvPXt0b30gey4uLmV4dHJhfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0xpbms+XG4gICk7XG59O1xuXG5jbGFzcyBIZWFkZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKFNFQVJDSF9ET0NTICYmIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgbGV0IGRvY3NlYXJjaCA9IHJlcXVpcmUoXCJkb2NzZWFyY2guanMvZGlzdC9jZG4vZG9jc2VhcmNoLm1pblwiKTtcbiAgICAgICAgZG9jc2VhcmNoKHtcbiAgICAgICAgICBhcGlLZXk6IFwiNGI2ZDBhZmE4MDE5N2RiMzU4ODY1NTViNWVmNDcyMWZcIixcbiAgICAgICAgICBpbnB1dFNlbGVjdG9yOiBcIiNzZWFyY2gtZG9jc1wiLFxuICAgICAgICAgIGluZGV4TmFtZTogXCJncmFwaGVuZV9weXRob25cIixcbiAgICAgICAgICB0cmFuc2Zvcm1EYXRhOiBmdW5jdGlvbihzdWdnZXN0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zLm1hcChmdW5jdGlvbihzdWdnZXN0aW9uKSB7XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24udXJsID0gc3VnZ2VzdGlvbi51cmwucmVwbGFjZShcImh0dHA6XCIsIFwiaHR0cHM6XCIpO1xuICAgICAgICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBkZWJ1ZzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJlbmRlcigpIHtcbiAgICBsZXQgeyBkb2NzIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2PlxuICAgICAgICA8aGVhZGVyXG4gICAgICAgICAgY2xhc3NOYW1lPXtgbmF2YmFyLWhlYWRlciAgJHtkb2NzID8gXCJuYXZiYXItaGVhZGVyLWNvbnRyYXN0XCIgOiBcIlwifWB9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPEhlYWRlckxpbmsgdG89XCIvXCIgY2xhc3NOYW1lPVwibG9nby1saW5rXCI+XG4gICAgICAgICAgICAgIHtkb2NzID8gPEdyYXBoZW5lTG9nb1doaXRlIC8+IDogPExvZ29PbldoaXRlIC8+fVxuICAgICAgICAgICAgPC9IZWFkZXJMaW5rPlxuICAgICAgICAgICAgPGEgaWQ9XCJtZW51XCIgLz5cbiAgICAgICAgICAgIDxhIGhyZWY9XCIjbWVudVwiIGNsYXNzTmFtZT1cIm1vYmlsZS1tZW51XCI+XG4gICAgICAgICAgICAgIDxGYUJhcnMgLz5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDxhIGNsYXNzTmFtZT1cImJhY2tncm91bmQtbW9iaWxlLW1lbnVcIiBocmVmPVwiI1wiIC8+XG4gICAgICAgICAgICA8bmF2PlxuICAgICAgICAgICAgICB7U0VBUkNIX0RPQ1MgPyAoXG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBpZD1cInNlYXJjaC1kb2NzXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIHRoZSBkb2NzLi4uXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBocmVmPVwiaHR0cHM6Ly9kb2NzLmdyYXBoZW5lLXB5dGhvbi5vcmcvXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BuYXYtbGluayAke2RvY3MgPyBcIm5hdi1saW5rLWFjdGl2ZVwiIDogXCJcIn1gfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgRG9jdW1lbnRhdGlvblxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDxIZWFkZXJMaW5rXG4gICAgICAgICAgICAgICAgdG89XCIvdGVhbVwiXG4gICAgICAgICAgICAgICAgZG9jcz17ZG9jc31cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJuYXYtbGlua1wiXG4gICAgICAgICAgICAgICAgYWN0aXZlQ2xhc3NOYW1lPVwibmF2LWxpbmstYWN0aXZlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFRlYW1cbiAgICAgICAgICAgICAgPC9IZWFkZXJMaW5rPlxuICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm5hdi1saW5rXCJcbiAgICAgICAgICAgICAgICBocmVmPVwiaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtcHl0aG9uL2dyYXBoZW5lXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGYUdpdGh1YiAvPiBHaXRodWJcbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9uYXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIDxzdHlsZSBqc3g+e2BcbiAgICAgICAgICAubm9uZXhpc3Rpbmcge1xuICAgICAgICAgICAgY29udGVudDogXCJ7JSByYXcgJX1cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLmdyYXBoZW5lLWhlYWRlciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAvKiBHcmFwaGVuZTogKi9cbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBcImtsYXZpa2Etd2ViXCI7XG4gICAgICAgICAgICBmb250LXdlaWdodDogMzAwO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgI21lbnUge1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICA6Z2xvYmFsKC5ncmFwaGVuZS1sb2dvKSB7XG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgI
7H1cbiAgICAgICAgICAuZ3JhcGhlbmUtaGVhZGVyIHtcbiAgICAgICAgICB9XG4gICAgICAgICAgLmdyYXBoZW5lLWhlYWRlciAuY29udGFpbmVyIHtcbiAgICAgICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAudGFnbGluZSB7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICAgICAgICAgIGNvbG9yOiAjYTRiMWIyO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLnRhZ2xpbmUgYiB7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuM3B4O1xuICAgICAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgICA6Z2xvYmFsKHN2Zy5hcnJvdykge1xuICAgICAgICAgICAgLyp2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyovXG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogOHB4O1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgdG9wOiAycHg7XG4gICAgICAgICAgfVxuICAgICAgICAgIDpnbG9iYWwoI3NlYXJjaC1kb2NzKSB7XG4gICAgICAgICAgICBwYWRkaW5nOiA1cHggNXB4IDVweCAyOXB4O1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogLTJweDtcbiAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgICAgICB3aWR0aDogMTgwcHg7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9zZWFyY2guc3ZnXCIpO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxNnB4IDE2cHg7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiBjZW50ZXI7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IDVweDtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC5iYWNrZ3JvdW5kLW1vYmlsZS1tZW51IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgICAgIHotaW5kZXg6IDk5OTk7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIwMCwgMjAwLCAyMDAsIDAuMyk7XG4gICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgIH1cbiAgICAgICAgICAubW9iaWxlLW1lbnUge1xuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIGNvbG9yOiBibGFjaztcbiAgICAgICAgICB9XG4gICAgICAgICAgOmdsb2JhbCgjc2VhcmNoLWRvY3MpOmZvY3VzIHtcbiAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNik7XG4gICAgICAgICAgfVxuICAgICAgICAgIC5uYXZiYXItaGVhZGVyLWNvbnRyYXN0IDpnbG9iYWwoI3NlYXJjaC1kb2NzKSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJodHRwczovL2dyYXBoZW5lLXB5dGhvbi5vcmcvc2VhcmNoLXdoaXRlLnN2Z1wiKTtcbiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLm5hdmJhci1oZWFkZXItY29udHJhc3QgOmdsb2JhbCgjc2VhcmNoLWRvY3MpOmZvY3VzIHtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmZmZmY7XG4gICAgICAgICAgfVxuICAgICAgICAgIC5uYXZiYXItaGVhZGVyLWNvbnRyYXN0IDpnbG9iYWwoI3NlYXJjaC1kb2NzKTo6cGxhY2Vob2xkZXIge1xuICAgICAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLm5hdmJhci1oZWFkZXItY29udHJhc3Qge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxuICAgICAgICAgICAgICAtMTgwZGVnLFxuICAgICAgICAgICAgICAjZjY3MDQ5IDAlLFxuICAgICAgICAgICAgICAjZTE0YjJlIDEwMCVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLm5hdmJhci1oZWFkZXIge1xuICAgICAgICAgICAgaGVpZ2h0OiA5NHB4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAubmF2YmFyLWhlYWRlciA6Z2xvYmFsKC5jb250YWluZXIpIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgICAgaGVpZ2h0OiA5NHB4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC5uYXZiYXItaGVhZGVyIG5hdiB7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgICAgIH1cbiAgICAgICAgICA6Z2xvYmFsKC5uYXYtbGluaykge1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIGNvbG9yOiAjNTU1NTU1O1xuICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6IFwiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWY7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICAgICAgaGVpZ2h0OiA5NHB4O1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDk0cHg7XG4gICAgICAgICAgICBwYWRkaW5nOiAwIDEwcHg7XG4gICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgI
7H1cbiAgICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgICAgICAgICAgIDpnbG9iYWwoI3NlYXJjaC1kb2NzKSB7XG4gICAgICAgICAgICAgIHdpZHRoOiAxMjBweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgOmdsb2JhbCgubmF2LWxpbmstYWN0aXZlKSB7XG4gICAgICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgICAgfVxuICAgICAgICAgIDpnbG9iYWwoLm5hdi1saW5rLWFjdGl2ZSk6YmVmb3JlIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICAgICAgICBib3R0b206IC0xMHB4O1xuICAgICAgICAgICAgd2lkdGg6IDRweDtcbiAgICAgICAgICAgIGhlaWdodDogNHB4O1xuICAgICAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC0ycHg7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBibGFjaztcbiAgICAgICAgICB9XG4gICAgICAgICAgLm5hdmJhci1oZWFkZXItY29udHJhc3QgOmdsb2JhbCgubmF2LWxpbmstYWN0aXZlKTpiZWZvcmUge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIDpnbG9iYWwoLm5hdi1saW5rKTpob3ZlciB7XG4gICAgICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgICAgfVxuICAgICAgICAgIC5uYXZiYXItaGVhZGVyLWNvbnRyYXN0IDpnbG9iYWwoLm5hdi1saW5rKSB7XG4gICAgICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC5uYXZiYXItaGVhZGVyLWNvbnRyYXN0IDpnbG9iYWwoLm5hdi1saW5rKTpob3ZlciB7XG4gICAgICAgICAgICBjb2xvcjogI2VlZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAgICAgICAgIDpnbG9iYWwoI3NlYXJjaC1kb2NzKSB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAubW9iaWxlLW1lbnUge1xuICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICByaWdodDogMjBweDtcbiAgICAgICAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLm5hdmJhci1oZWFkZXItY29udHJhc3QgLm1vYmlsZS1tZW51IHtcbiAgICAgICAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLnRhZ2xpbmUgLmhpZGUtbW9iaWxlIHtcbiAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC5uYXZiYXItaGVhZGVyIG5hdiB7XG4gICAgICAgICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgICAgICAgY29sb3I6IGJsYWNrO1xuICAgICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICAgICAgd2lkdGg6IDI4MHB4O1xuICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICAgICAgICAgIHotaW5kZXg6IDEwMDAwO1xuICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMzA1cHgpO1xuICAgICAgICAgICAgICBib3gtc2hhZG93OiAwcHggMnB4IDI1cHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgICAgICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuNXMgY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDAuMSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAubmF2YmFyLWhlYWRlci1jb250cmFzdCA6Z2xvYmFsKC5uYXYtbGluaykge1xuICAgICAgICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAubmF2YmFyLWhlYWRlci1jb250cmFzdCA6Z2xvYmFsKC5uYXYtbGluayk6aG92ZXIge1xuICAgICAgICAgICAgICBjb2xvcjogIzMzMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC5tb2JpbGUtbWVudSB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgI21lbnU6dGFyZ2V0IH4gLmJhY2tncm91bmQtbW9iaWxlLW1lbnUge1xuICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgI21lbnU6dGFyZ2V0IH4gbmF2IHtcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDBweCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAubmF2YmFyLWhlYWRlciA6Z2xvYmFsKC5uYXYtbGluaykge1xuICAgICAgICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICBtYXJnaW46IDE4cHggMDtcbiAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGltcG9ydCB1cmwoXCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9RmlyYStNb25vfE9wZW4rU2Fuczo0MDAsNjAwXCIpO1xuICAgICAgICAgIC5ub25leGlzdGluZyB7XG4gICAgICAgICAgICBjb250ZW50OiBcInslIGVuZHJhdyAlfVwiO1xuICAgICAgICAgIH1cbiAgICAgICAgYH08L3N0eWxlPlxuICAgICAgICA8c2NyaXB0XG4gICAgICAgICAgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiXG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tcbiAgICAgICAgICAgIF9faHRtbDogYFxuICAgICAgICAgICAgZG9jc2VhcmNoKHtcbiAgICAgICAgICAgICAgYXBpS2V5OiBcIjRiNmQwYWZhODAxOTdkYjM1ODg2NTU1YjVlZjQ3MjFmXCIsXG4gICAgICAgICAgICAgIGlucHV0U2VsZWN0b3I6IFwiI3NlYXJjaC1kb2NzXCIsXG4gICAgICAgICAgICAgIGluZGV4TmFtZTogXCJncmFwaGVuZV9weXRob25cIixcbiAgICAgICAgICAgICAgdHJhbnNmb3JtRGF0YTogZnVuY3Rpb24oc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbnMubWFwKGZ1bmN0aW9uKHN1Z2dlc3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgI
7HN1Z2dlc3Rpb24udXJsID0gc3VnZ2VzdGlvbi51cmwucmVwbGFjZShcImh0dHA6XCIsIFwiaHR0cHM6XCIpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1Z2dlc3Rpb247XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO2BcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBUZW1wbGF0ZVdyYXBwZXIgPSAoeyBjaGlsZHJlbiwgLi4ub3RoZXJQcm9wcyB9KSA9PiB7XG4gIGNvbnN0IGRvY3MgPSBvdGhlclByb3BzLmxvY2F0aW9uLnBhdGhuYW1lLmluZGV4T2YoXCIvZG9jc1wiKSA+IC0xO1xuICByZXR1cm4gKFxuICAgIDxkaXY+XG4gICAgICA8SGVsbWV0XG4gICAgICAgIHRpdGxlPVwiR3JhcGhlbmUtUHl0aG9uXCJcbiAgICAgICAgbWV0YT17W1xuICAgICAgICAgIHsgbmFtZTogXCJkZXNjcmlwdGlvblwiLCBjb250ZW50OiBcIkdyYXBoZW5lIGZyYW1ld29yayBmb3IgUHl0aG9uXCIgfSxcbiAgICAgICAgICB7IG5hbWU6IFwia2V5d29yZHNcIiwgY29udGVudDogXCJncmFwaGVuZSwgZ3JhcGhxbCwgcHl0aG9uLCBmcmFtZXdvcmtcIiB9XG4gICAgICAgIF19XG4gICAgICA+XG4gICAgICAgIDxzY3JpcHQgc3JjPVwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9kb2NzZWFyY2guanNAMi9kaXN0L2Nkbi9kb2NzZWFyY2gubWluLmpzXCIgLz5cbiAgICAgICAgey8qPHNjcmlwdD5cbiAgICAgICAgICB7YFxuICAgICAgZG9jc2VhcmNoKHtcbiAgICAgICAgYXBpS2V5OiBcIjRiNmQwYWZhODAxOTdkYjM1ODg2NTU1YjVlZjQ3MjFmXCIsXG4gICAgICAgIGlucHV0U2VsZWN0b3I6IFwiI3NlYXJjaC1kb2NzXCIsXG4gICAgICAgIGluZGV4TmFtZTogXCJncmFwaGVuZV9weXRob25cIixcbiAgICAgICAgdHJhbnNmb3JtRGF0YTogZnVuY3Rpb24oc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbnMubWFwKGZ1bmN0aW9uKHN1Z2dlc3Rpb24pIHtcbiAgICAgICAgICAgIHN1Z2dlc3Rpb24udXJsID0gc3VnZ2VzdGlvbi51cmwucmVwbGFjZShcImh0dHA6XCIsIFwiaHR0cHM6XCIpO1xuICAgICAgICAgICAgcmV0dXJuIHN1Z2dlc3Rpb247XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO2B9XG4gICAgPC9zY3JpcHQ+Ki99XG4gICAgICA8L0hlbG1ldD5cbiAgICAgIDxIZWFkZXIgZG9jcz17ZG9jc30gLz5cbiAgICAgIDxkaXY+e2NoaWxkcmVuKCl9PC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5UZW1wbGF0ZVdyYXBwZXIucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRlbXBsYXRlV3JhcHBlcjtcbiJdfQ== */ 8/*@ sourceURL=src/layouts/index.js */</style>
8<script> 9 !function(e,t,r){function n(){for(;d[0]&&"loaded"==d[0][f];)c=d.shift(),c[o]=!i.parentNode.insertBefore(c,i)}for(var s,a,c,d=[],i=e.scripts[0],o="onreadystatechange",f="readyState";s=r.shift();)a=e.createElement(t),"async"in i?(a.async=!1,e.head.appendChild(a)):i[f]?(d.push(a),a[o]=n):e.write("<"+t+' src="'+s+'" defer></'+t+">"),a.src=s}(document,"script",[ 10 "https://graphene-python.org/commons-0903ebc8b5cb93b00e4c.js","https://graphene-python.org/app-56509f0fe07de93b65d7.js","https://graphene-python.org/path---docs-a0e39f21c11f6a62c5ab.js","https://graphene-python.org/component---src-pages-docs-js-8f61c8eac84fa7605edc.js","https://graphene-python.org/component---src-layouts-index-js-20a284362661e4add39f.js" 11]) 12 </script>
12<style id="gatsby-inlined-css">.docs-container{margin-top:54px;display:flex;margin-bottom:80px;color:#333}p{line-height:1.5}.callout a{color:#fff}.docs-side-nav{width:25%;margin-right:40px;min-width:200px;max-width:260px}.docs-main{flex:1}.sphinxsidebarwrapper ul{list-style:none;margin:0;padding:0}.sphinxsidebarwrapperlinks{margin-top:24px}.sphinxsidebarwrapperlinks a{font-size:16px;letter-spacing:0;color:#333}.sphinxsidebarwrapperlinks a.current{font-weight:700;color:#e14b2e}.documentwrapper h1,.documentwrapper h2,.documentwrapper h3,.documentwrapper h4,.documentwrapper h5{font-weight:500}.documentwrapper h1{font-size:36px}.documentwrapper h2{font-size:30px}.documentwrapper h3{font-size:26px}.documentwrapper h4{font-size:22px}.headerlink{display:none}.documentwrapper h1:hover .headerlink,.documentwrapper h2:hover .headerlink,.documentwrapper h3:hover .headerlink,.documentwrapper h4:hover .headerlink,.documentwrapper h5:hover .headerlink{margin-left:8px;display:inline}.go-buttons{margin-top:60px}.go-buttons .go-previous{float:left}.go-buttons .go-next{float:right}.sphinxsidebar li{padding:6px 0}.sphinxsidebar ul{list-style:none}.sphinxsidebar ul>li{font-size:15px;color:#e14b2e;letter-spacing:.2px}.sphinxsidebar ul>li>ul{margin-top:10px;border-left:2px solid #999;padding-left:16px}.sphinxsidebar ul>li>ul>li{font-size:14px;font-weight:400;color:#343434}.sphinxsidebar .toctree-l1>a{font-weight:400}.sphinxsidebar .sphinxsidebarwrapper li.current>a{color:#e14b2e;font-weight:500}.sphinxsidebar .sphinxsidebarwrapper li.current a:hover{color:#e14b2e}.sphinxsidebar .sphinxsidebarwrapper li.current>ul{border-left:2px solid #e14b2e}.wy-breadcrumbs{list-style:none}.wy-breadcrumbs li{display:inline-block;margin-right:5px;color:#606060}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px;color:#606060}.wy-breadcrumbs li a:first-child{padding-left:0}.rst-content .wy-breadcrumbs li tt,.wy-breadcrumbs li .rst-content tt,.wy-breadcrumbs li code{padding:5px;border:none;background:none}.fa-github,.rst-content .wy-breadcrumbs li tt.literal,.wy-breadcrumbs li .rst-content tt.literal,.wy-breadcrumbs li code.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}.section ul,.toctree-wrapper ul,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.section ul li,.toctree-wrapper ul li,article ul li{list-style:disc;margin-left:24px}.section ul li p:last-child,.section ul li ul,.toctree-wrapper ul li p:last-child,.toctree-wrapper ul li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.section ul li li,.toctree-wrapper ul li li,article ul li li{list-style:circle}.section ul li li li,.toctree-wrapper ul li li li,article ul li li li{list-style:square}.section ul li ol li,.toctree-wrapper ul li ol li,article ul li ol li{list-style:decimal}.highlight .hll{background-color:#49483e}.code{box-sizing:border-box;max-width:100%;white-space:pre}pre{font-size:16px}.docutils.literal{border:1px solid #666;background:#eee;padding:3px 6px;border-radius:2px}.highlight{background:#272822;color:#f8f8f2;padding:8px 16px}.highlight pre{white-space:pre;overflow-x:auto}.highlight .c{color:#75715e}.highlight .err{color:#960050;background-color:#1e0010}.highlight .k{color:#66d9ef}.highlight .l{color:#ae81ff}.highlight .n{color:#f8f8f2}.highlight .o{color:#f92672}.highlight .p{color:#f8f8f2}.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cp,.highlight .cpf,.highlight .cs{color:#75715e}.highlight .gd{color:#f92672}.highlight .ge{font-style:italic}.highlight .gi{color:#a6e22e}.highlight .gs{font-weight:700}.highlight .gu{color:#75715e}.highlight .kc,.highlight .kd{color:#66d9ef}.highlight .kn{color:#f92672}.highlight .kp,.highlight .kr,.highlight .kt{color:#66d9ef}.highlight .ld{color:#e6db74}.highlight .m{color:#ae81ff}.highlight .s{color:#e6db74}.highlight .na{color:#a6e22e}.highlight .nb{color:#f8f8f2}.highlight .nc{color:#a6e22e}.highlight .no{color:#66d9ef}.highlight .nd{color:#a6e22e}.highlight .ni{color:#f8f8f2}.highlight .ne,.highlight .nf{color:#a6e22e}.highlight .nl,.highlight .nn{color:#f8f8f2}.highlight .nx{color:#a6e22e}.highlight .py{color:#f8f8f2}.highlight .nt{color:#f92672}.highlight .nv{color:#f8f8f2}.highlight .ow{color:#f92672}.highlight .w{color:#f8f8f2}.highlight .mb,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .mo{color:#ae81ff}.highlight .dl,.highlight .s2,.highlight .sa,.highlight .sb,.highlight .sc,.highlight .sd{color:#e6db74}.highlight .se{color:#ae81ff}.highlight .s1,.highlight .sh,.highlight .si,.highlight .sr,.highlight .ss,.highlight .sx{color:#e6db74}.highlight .bp{color:#f8f8f2}.highlight .fm{color:#a6e22e}.highlight .vc,.highlight .vg,.highlight .vi,.highlight .vm{color:#f8f8f2}.highlight .il{color:#ae81ff}.searchbox{display:inline-block;position:relative;
12width:200px;height:32px!important;white-space:nowrap;box-sizing:border-box;visibility:visible!important}.searchbox .algolia-autocomplete{display:block;width:100%;height:100%}.searchbox__wrapper{width:100%;height:100%;z-index:1;position:relative}.searchbox__input{display:inline-block;box-sizing:border-box;transition:box-shadow .4s ease,background .4s ease;border:0;border-radius:16px;box-shadow:inset 0 0 0 1px #ccc;background:#fff!important;padding:0;padding-right:26px;padding-left:32px;width:100%;height:100%;vertical-align:middle;white-space:normal;font-size:12px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.searchbox__input::-webkit-search-cancel-button,.searchbox__input::-webkit-search-decoration,.searchbox__input::-webkit-search-results-button,.searchbox__input::-webkit-search-results-decoration{display:none}.searchbox__input:hover{box-shadow:inset 0 0 0 1px #b3b3b3}.searchbox__input:active,.searchbox__input:focus{outline:0;box-shadow:inset 0 0 0 1px #aaa;background:#fff}.searchbox__input::-webkit-input-placeholder{color:#aaa}.searchbox__input:-ms-input-placeholder,.searchbox__input::-ms-input-placeholder{color:#aaa}.searchbox__input::placeholder{color:#aaa}.searchbox__submit{position:absolute;top:0;margin:0;border:0;border-radius:16px 0 0 16px;background-color:rgba(69,142,225,0);padding:0;width:32px;height:100%;vertical-align:middle;text-align:center;font-size:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;right:inherit;left:0}.searchbox__submit:before{display:inline-block;margin-right:-4px;height:100%;vertical-align:middle;content:""}.searchbox__submit:active,.searchbox__submit:hover{cursor:pointer}.searchbox__submit:focus{outline:0}.searchbox__submit svg{width:14px;height:14px;vertical-align:middle;fill:#6d7e96}.searchbox__reset{display:block;position:absolute;top:8px;right:8px;margin:0;border:0;background:none;cursor:pointer;padding:0;font-size:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;fill:rgba(0,0,0,.5)}.searchbox__reset.hide{display:none}.searchbox__reset:focus{outline:0}.searchbox__reset svg{display:block;margin:4px;width:8px;height:8px}.searchbox__input:valid~.searchbox__reset{display:block;-webkit-animation-name:a;animation-name:a;-webkit-animation-duration:.15s;animation-duration:.15s}@-webkit-keyframes a{0%{-webkit-transform:translate3d(-20%,0,0);transform:translate3d(-20%,0,0);opacity:0}to{-webkit-transform:none;transform:none;opacity:1}}@keyframes a{0%{-webkit-transform:translate3d(-20%,0,0);transform:translate3d(-20%,0,0);opacity:0}to{-webkit-transform:none;transform:none;opacity:1}}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:0!important;left:inherit!important}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{right:48px}.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu{left:0!important;right:inherit!important}.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu:before{left:48px}.algolia-autocomplete .ds-dropdown-menu{top:-6px;border-radius:4px;margin:6px 0 0;padding:0;text-align:left;height:auto;position:relative;background:transparent;border:none;z-index:1;max-width:600px;min-width:500px;box-shadow:0 1px 0 0 rgba(0,0,0,.2),0 2px 3px 0 rgba(0,0,0,.1)}.algolia-autocomplete .ds-dropdown-menu:before{display:block;position:absolute;content:"";width:14px;height:14px;background:#fff;z-index:2;top:-7px;border-top:1px solid #d9d9d9;border-right:1px solid #d9d9d9;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);border-radius:2px}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions{position:relative;z-index:2;margin-top:8px}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion{cursor:pointer}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion.suggestion-layout-simple,.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion:not(.suggestion-layout-simple) .algolia-docsearch-suggestion--content{background-color:rgba(69,142,225,.05)}.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-]{position:relative;border:1px solid #d9d9d9;background:#fff;border-radius:4px;overflow:auto;padding:0 8px 8px}.algolia-autocomplete .ds-dropdown-menu *{box-sizing:border-box}.algolia-autocomplete .algolia-docsearch-suggestion{position:relative;padding:0 8px;background:#fff;color:#02060c;overflow:hidden}.algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#174d8c;background:rgba(143,187,237,.1);padding:.1em .05em}.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl0 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl1 .algolia-docsearch-suggestion--highlight{color:inherit;background:inherit}.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{padding:0 0 1px;background:inherit;box-shadow:inset 0 -2px 0 0 rgba(69,142,225,.8);color:inherit}.algolia-autocomplete .algolia-docsearch-suggestion--content{display:block;float:right;width:70%;position:relative;padding:5.33333px 0 5.33333px 10.66667px;cursor:pointer}.algolia-autocomplete .algolia-docsearch-suggestion--content:before{content:"";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;left:-1px}.algolia-autocomplete .algolia-docsearch-suggestion--category-header{position:relative;border-bottom:1px solid #ddd;display:none;margin-top:8px;padding:4px 0;font-size:1em;color:#33363d}.algolia-autocomplete .algolia-docsearch-suggestion--wrapper{width:100%;float:left;padding:8px 0 0}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column{float:left;width:30%;padding-left:0;text-align:right;position:relative;padding:5.33333px 10.66667px;color:#a4a7ae;font-size:.9em;word-wrap:break-word}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column:before{content:"";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;right:0}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column .algolia-docsearch-suggestion--highlight{background-color:inherit;color:inherit}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-inline{display:none}.algolia-autocomplete .algolia-docsearch-suggestion--title{margin-bottom:4px;color:#02060c;font-size:.9em;font-weight:700}.algolia-autocomplete .algolia-docsearch-suggestion--text{display:block;line-height:1.2em;font-size:.85em;color:#63676d}.algolia-autocomplete .algolia-docsearch-suggestion--no-results{width:100%;padding:8px 0;text-align:center;font-size:1.2em}.algolia-autocomplete .algolia-docsearch-suggestion--no-results:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion code{padding:1px 5px;font-size:90%;border:none;color:#222;background-color:#ebebeb;border-radius:3px;font-family:Menlo,Monaco,Consolas,Courier New,monospace}.algolia-autocomplete .algolia-docsearch-suggestion code .algolia-docsearch-suggestion--highlight{background:none}.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--category-header,.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__secondary{display:block}@media (min-width:768px){.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:block}}@media (max-width:768px){.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:inline-block;width:auto;float:left;color:#02060c;font-size:.9em;font-weight:700;text-align:left;padding:0;opacity:.5}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:after{content:"|"}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{display:inline-block;width:auto;text-align:left;float:left;padding:0}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content:before{display:none}}.algolia-autocomplete .suggestion-layout-simple.algolia-docsearch-suggestion{border-bottom:1px solid #eee;padding:8px;margin:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content{width:100%;padding:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content:before{display:none}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header{margin:0;padding:0;display:block;width:100%;border:none}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl0,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1{opacity:.6;font-size:.85em}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1:before{background-image:url('data:image/svg+xml;
12utf8,<svg width="10" height="10" viewBox="0 0 20 38" xmlns="http://www.w3.org/2000/svg"><path d="M1.49 4.31l14 16.126.002-2.624-14 16.074-1.314 1.51 3.017 2.626 1.313-1.508 14-16.075 1.142-1.313-1.14-1.313-14-16.125L3.2.18.18 2.8l1.31 1.51z" fill-rule="evenodd" fill="%231D3657" /></svg>');content:"";width:10px;height:10px;display:inline-block}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--wrapper{width:100%;float:left;margin:0;padding:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--duplicate-content,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--subcategory-inline{display:none!important}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title{margin:0;color:#458ee1;font-size:.9em;font-weight:400}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title:before{content:"#";font-weight:700;color:#458ee1;display:inline-block}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text{margin:4px 0 0;display:block;line-height:1.4em;padding:5.33333px 8px;background:#f8f8f8;font-size:.85em;opacity:.8}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{color:#3f4145;font-weight:700;box-shadow:none}.algolia-autocomplete .algolia-docsearch-footer{width:110px;height:20px;z-index:3;margin-top:10.66667px;float:right;font-size:0;line-height:0}.algolia-autocomplete .algolia-docsearch-footer--logo{background-image:url("data:image/svg+xml;utf8,<svg viewBox='0 0 130 18' xmlns='http://www.w3.org/2000/svg'><defs><linearGradient x1='-36.868%' y1='134.936%' x2='129.432%' y2='-27.7%' id='a'><stop stop-color='%2300AEFF' offset='0%'/><stop stop-color='%233369E7' offset='100%'/></linearGradient></defs><g fill='none' fill-rule='evenodd'><path d='M59.399.022h13.299a2.372 2.372 0 0 1 2.377 2.364V15.62a2.372 2.372 0 0 1-2.377 2.364H59.399a2.372 2.372 0 0 1-2.377-2.364V2.381A2.368 2.368 0 0 1 59.399.022z' fill='url(%23a)'/><path d='M66.257 4.56c-2.815 0-5.1 2.272-5.1 5.078 0 2.806 2.284 5.072 5.1 5.072 2.815 0 5.1-2.272 5.1-5.078 0-2.806-2.279-5.072-5.1-5.072zm0 8.652c-1.983 0-3.593-1.602-3.593-3.574 0-1.972 1.61-3.574 3.593-3.574 1.983 0 3.593 1.602 3.593 3.574a3.582 3.582 0 0 1-3.593 3.574zm0-6.418v2.664c0 .076.082.131.153.093l2.377-1.226c.055-.027.071-.093.044-.147a2.96 2.96 0 0 0-2.465-1.487c-.055 0-.11.044-.11.104l.001-.001zm-3.33-1.956l-.312-.311a.783.783 0 0 0-1.106 0l-.372.37a.773.773 0 0 0 0 1.101l.307.305c.049.049.121.038.164-.011.181-.245.378-.479.597-.697.225-.223.455-.42.707-.599.055-.033.06-.109.016-.158h-.001zm5.001-.806v-.616a.781.781 0 0 0-.783-.779h-1.824a.78.78 0 0 0-.783.779v.632c0 .071.066.12.137.104a5.736 5.736 0 0 1 1.588-.223c.52 0 1.035.071 1.534.207a.106.106 0 0 0 .131-.104z' fill='%23FFF'/><path d='M102.162 13.762c0 1.455-.372 2.517-1.123 3.193-.75.676-1.895 1.013-3.44 1.013-.564 0-1.736-.109-2.673-.316l.345-1.689c.783.163 1.819.207 2.361.207.86 0 1.473-.174 1.84-.523.367-.349.548-.866.548-1.553v-.349a6.374 6.374 0 0 1-.838.316 4.151 4.151 0 0 1-1.194.158 4.515 4.515 0 0 1-1.616-.278 3.385 3.385 0 0 1-1.254-.817 3.744 3.744 0 0 1-.811-1.351c-.192-.539-.29-1.504-.29-2.212 0-.665.104-1.498.307-2.054a3.925 3.925 0 0 1 .904-1.433 4.124 4.124 0 0 1 1.441-.926 5.31 5.31 0 0 1 1.945-.365c.696 0 1.337.087 1.961.191a15.86 15.86 0 0 1 1.588.332v8.456h-.001zm-5.954-4.206c0 .893.197 1.885.592 2.299.394.414.904.621 1.528.621.34 0 .663-.049.964-.142a2.75 2.75 0 0 0 .734-.332v-5.29a8.531 8.531 0 0 0-1.413-.18c-.778-.022-1.369.294-1.786.801-.411.507-.619 1.395-.619 2.223zm16.12 0c0 .719-.104 1.264-.318 1.858a4.389 4.389 0 0 1-.904 1.52c-.389.42-.854.746-1.402.975-.548.229-1.391.36-1.813.36-.422-.005-1.26-.125-1.802-.36a4.088 4.088 0 0 1-1.397-.975 4.486 4.486 0 0 1-.909-1.52 5.037 5.037 0 0 1-.329-1.858c0-.719.099-1.411.318-1.999.219-.588.526-1.09.92-1.509.394-.42.865-.741 1.402-.97a4.547 4.547 0 0 1 1.786-.338 4.69 4.69 0 0 1 1.791.338c.548.229 1.019.55 1.402.97.389.42.69.921.909 1.509.23.588.345 1.28.345 1.999h.001zm-2.191.005c0-.921-.203-1.689-.597-2.223-.394-.539-.948-.806-1.654-.806-.707 0-1.26.267-1.654.806-.394.539-.586 1.302-.586 2.223 0 .932.197 1.558.592 2.098.394.545.948.812 1.654.812.707 0 1.26-.272 1.654-.812.394-.545.592-1.166.592-2.098h-.001zm6.962 4.707c-3.511.016-3.511-2.822-3.511-3.274L113.583.926l2.142-.338v10.003c0 .256 0 1.88 1.375 1.885v1.792h-.001zm3.774 0h-2.153V5.072l2.153-.338v9.534zm-1.079-10.542c.718 0 1.304-.578 1.304-1.291 0-.714-.581-1.291-1.304-1.291-.723 0-1.304.578-1.304 1.291 0 .714.586 1.291 1.304 1.291zm6.431 1.013c.707 0 1.304.087 1.786.262.482.174.871.42 1.156.73.285.311.488.735.608 1.182.126.447.186.937.186 1.476v5.481a25.24 25.24 0 0 1-1.495.251c-.668.098-1.419.147-2.251.147a6.829 6.829 0 0 1-1.517-.158 3.213 3.213 0 0 1-1.178-.507 2.455 2.455 0 0 1-.761-.904c-.181-.37-.274-.893-.274-1.438 0-.523.104-.855.307-1.215.208-.36.487-.654.838-.883a3.609 3.609 0 0 1 1.227-.49 7.073 7.073 0 0 1 2.202-.103c.263.027.537.076.833.147v-.349c0-.245-.027-.479-.088-.697a1.486 1.486 0 0 0-.307-.583c-.148-.169-.34-.3-.581-.392a2.536 2.536 0 0 0-.915-.163c-.493 0-.942.06-1.353.131-.411.071-.75.153-1.008.245l-.257-1.749c.268-.093.668-.185 1.183-.278a9.335 9.335 0 0 1 1.66-.142l-.001-.001zm.181 7.731c.657 0 1.145-.038 1.484-.104v-2.168a5.097 5.097 0 0 0-1.978-.104c-.241.033-.46.098-.652.191a1.167 1.167 0 0 0-.466.392c-.121.169-.175.267-.175.523 0 .501.175.79.493.981.323.196.75.289 1.293.289h.001zM84.109 4.794c.707 0 1.304.087 1.786.262.482.174.871.42 1.156.73.29.316.487.735.608 1.182.126.447.186.937.186 1.476v5.481a25.24 25.24 0 0 1-1.495.251c-.668.098-1.419.147-2.251.147a6.829 6.829 0 0 1-1.517-.158 3.213 3.213 0 0 1-1.178-.507 2.455 2.455 0 0 1-.761-.904c-.181-.37-.274-.893-.274-1.438 0-.523.104-.855.307-1.215.208-.36.487-.654.838-.883a3.609 3.609 0 0 1 1.227-.49 7.073 7.073 0 0 1 2.202-.103c.257.027.537.076.833.147v-.349c0-.245-.027-.479-.088-.697a1.486 1.486 0 0 0-.307-.583c-.148-.169-.34-.3-.581-.392a2.536 2.536 0 0 0-.915-.163c-.493 0-.942.06-1.353.131-.411.071-.75.153-1.008.245l-.257-1.749c.268-.093.668-.185 1.183-.278a8.89 8.89 0 0 1 1.66-.142l-.001-.001zm.186 7.736c.657 0 1.145-.038 1.484-.104v-2.168a5.097 5.097 0 0 0-1.978-.104c-.241.033-.46.098-.652.191a1.167 1.167 0 0 0-.466.392c-.121.169-.175.267-.175.523 0 .501.175.79.493.981.318.191.75.289 1.293.289h.001zm8.682 1.738c-3.511.016-3.511-2.822-3.511-3.274L89.461.926l2.142-.338v10.003c0 .256 0 1.88 1.375 1.885v1.792h-.001z' fill='%23182359'/><path d='M5.027 11.025c0 .698-.252 1.246-.757 1.644-.505.397-1.201.596-2.089.596-.888 0-1.615-.138-2.181-.414v-1.214c.358.168.739.301 1.141.397.403.097.778.145 1.125.145.508 0 .884-.097 1.125-.29a.945.945 0 0 0 .363-.779.978.978 0 0 0-.333-.747c-.222-.204-.68-.446-1.375-.725-.716-.29-1.221-.621-1.515-.994-.294-.372-.44-.82-.44-1.343 0-.655.233-1.171.698-1.547.466-.376 1.09-.564 1.875-.564.752 0 1.5.165 2.245.494l-.408 1.047c-.698-.294-1.321-.44-1.869-.44-.415 0-.73.09-.945.271a.89.89 0 0 0-.322.717c0 .204.043.379.129.524.086.145.227.282.424.411.197.129.551.299 1.063.51.577.24.999.464 1.268.671.269.208.466.442.591.704.125.261.188.569.188.924l-.001.002zm3.98 2.24c-.924 0-1.646-.269-2.167-.808-.521-.539-.782-1.281-.782-2.226 0-.97.242-1.733.725-2.288.483-.555 1.148-.833 1.993-.833.784 0 1.404.238 1.858.714.455.476.682 1.132.682 1.966v.682H7.357c.018.577.174 1.02.467 1.329.294.31.707.465 1.241.465.351 0 .678
12-.033.98-.099a5.1 5.1 0 0 0 .975-.33v1.026a3.865 3.865 0 0 1-.935.312 5.723 5.723 0 0 1-1.08.091l.002-.001zm-.231-5.199c-.401 0-.722.127-.964.381s-.386.625-.432 1.112h2.696c-.007-.491-.125-.862-.354-1.115-.229-.252-.544-.379-.945-.379l-.001.001zm7.692 5.092l-.252-.827h-.043c-.286.362-.575.608-.865.739-.29.131-.662.196-1.117.196-.584 0-1.039-.158-1.367-.473-.328-.315-.491-.761-.491-1.337 0-.612.227-1.074.682-1.386.455-.312 1.148-.482 2.079-.51l1.026-.032v-.317c0-.38-.089-.663-.266-.851-.177-.188-.452-.282-.824-.282-.304 0-.596.045-.876.134a6.68 6.68 0 0 0-.806.317l-.408-.902a4.414 4.414 0 0 1 1.058-.384 4.856 4.856 0 0 1 1.085-.132c.756 0 1.326.165 1.711.494.385.329.577.847.577 1.552v4.002h-.902l-.001-.001zm-1.88-.859c.458 0 .826-.128 1.104-.384.278-.256.416-.615.416-1.077v-.516l-.763.032c-.594.021-1.027.121-1.297.298s-.406.448-.406.814c0 .265.079.47.236.615.158.145.394.218.709.218h.001zm7.557-5.189c.254 0 .464.018.628.054l-.124 1.176a2.383 2.383 0 0 0-.559-.064c-.505 0-.914.165-1.227.494-.313.329-.47.757-.47 1.284v3.105h-1.262V7.218h.988l.167 1.047h.064c.197-.354.454-.636.771-.843a1.83 1.83 0 0 1 1.023-.312h.001zm4.125 6.155c-.899 0-1.582-.262-2.049-.787-.467-.525-.701-1.277-.701-2.259 0-.999.244-1.767.733-2.304.489-.537 1.195-.806 2.119-.806.627 0 1.191.116 1.692.349l-.381 1.015c-.534-.208-.974-.312-1.321-.312-1.028 0-1.542.682-1.542 2.046 0 .666.128 1.166.384 1.501.256.335.631.502 1.125.502a3.23 3.23 0 0 0 1.595-.419v1.101a2.53 2.53 0 0 1-.722.285 4.356 4.356 0 0 1-.932.086v.002zm8.277-.107h-1.268V9.506c0-.458-.092-.8-.277-1.026-.184-.226-.477-.338-.878-.338-.53 0-.919.158-1.168.475-.249.317-.373.848-.373 1.593v2.949h-1.262V4.801h1.262v2.122c0 .34-.021.704-.064 1.09h.081a1.76 1.76 0 0 1 .717-.666c.306-.158.663-.236 1.072-.236 1.439 0 2.159.725 2.159 2.175v3.873l-.001-.001zm7.649-6.048c.741 0 1.319.269 1.732.806.414.537.62 1.291.62 2.261 0 .974-.209 1.732-.628 2.275-.419.542-1.001.814-1.746.814-.752 0-1.336-.27-1.751-.811h-.086l-.231.704h-.945V4.801h1.262v1.987l-.021.655-.032.553h.054c.401-.591.992-.886 1.772-.886zm-.328 1.031c-.508 0-.875.149-1.098.448-.224.299-.339.799-.346 1.501v.086c0 .723.115 1.247.344 1.571.229.324.603.486 1.123.486.448 0 .787-.177 1.018-.532.231-.354.346-.867.346-1.536 0-1.35-.462-2.025-1.386-2.025l-.001.001zm3.244-.924h1.375l1.209 3.368c.183.48.304.931.365 1.354h.043c.032-.197.091-.436.177-.717.086-.281.541-1.616 1.364-4.004h1.364l-2.541 6.73c-.462 1.235-1.232 1.853-2.31 1.853-.279 0-.551-.03-.816-.091v-.999c.19.043.406.064.65.064.609 0 1.037-.353 1.284-1.058l.22-.559-2.385-5.941h.001z' fill='%231D3657'/></g></svg>");background-repeat:no-repeat;background-position:50%;background-size:100%;overflow:hidden;text-indent:-9000px;padding:0!important;width:100%;height:100%;display:block}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0;font-family:Open Sans}.container,.small-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container:after,.container:before,.small-container:after,.small-container:before{content:" ";display:table}.container:after,.small-container:after{clear:both}.small-container{max-width:600px}.small-container h1,.small-container h2,.small-container h3,.small-container h4,.small-container h5,.small-container h6{color:#555;font-weight:400;margin:1.25em 0 .75em}.sphinxsidebar a,h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:400}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container-fluid:after,.container-fluid:before{content:" ";display:table}.container-fluid:after{clear:both}.callout{background:#000;color:#fff;display:inline-block;font-family:klavika-web,Helvetica,sans-serif;font-size:18px;font-weight:400;line-height:1;margin:0;padding:5px;letter-spacing:.05em;text-transform:uppercase}.callout.inverse{color:#000;background:#fff}.half{box-sizing:border-box;position:relative;min-height:1px}@media (min-width:992px){.half{width:50%;float:left;padding-left:15px;padding-right:15px}.container .half:first-child{padding-left:0}.container .half:last-child{padding-right:0}}h1,h2,h3,h4,h5,h6{font-family:klavika-web,Open Sans,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600}@font-face{font-family:klavika-web;src:url(https://graphene-python.org/static/l.11afc327.woff2) format("woff2");font-weight:700}@font-face{font-family:klavika-web;src:url(https://graphene-python.org/static/l1.ecfd3bfd.woff2) format("woff2");font-weight:600}@font-face{font-family:klavika-web;src:url(https://graphene-python.org/static/l2.ce43ec01.woff2) format("woff2");font-weight:400}@font-face{font-family:klavika-web;src:url(https://graphene-python.org/static/l3.a36a267d.woff2) format("woff2");font-weight:300}.button.primary{background:#f25f3f;border:1px solid #eb1919;color:#fff}.button{background:#fff;box-shadow:3px 4px 0 rgba(0,0,0,.1);color:#7b8a8e;display:inline-block;font-family:klavika-web,Helvetica,sans-serif;font-size:15px;font-weight:600;letter-spacing:1px;margin-bottom:4px;padding:10px 30px;text-transform:uppercase;text-decoration:none}.button,.button:hover{border:1px solid #7b8a8e}.button:hover{background:#7b8a8e;color:#fff}.button.primary:hover{background:#df4a2e;border:1px solid #eb1919}.flat-button.primary{border:1px solid #e14b2e;color:#e14b2e}.flat-button{border:1px solid #7b8a8e;color:#7b8a8e;display:inline-block;font-family:klavika-web,Helvetica,sans-serif;font-size:15px;font-weight:600;letter-spacing:1px;margin-bottom:4px;padding:10px 30px;text-transform:uppercase;text-decoration:none}.flat-button:hover{border:1px solid #333;color:#333}.flat-button.primary:hover{color:#df4a2e;border:1px solid #df4a2e}a{color:#337ab7;font-weight:700;text-decoration:none}.algolia-autocomplete .ds-dropdown-menu{border-radius:0;box-shadow:0 8px 12px 0 rgba(0,0,0,.2)}.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-]{border-radius:0}.algolia-autocomplete .algolia-docsearch-suggestion--category-header{border:none!important}.algolia-autocomplete .algolia-docsearch-suggestion--category-header>*{background:#000;color:#fff;display:inline-block;font-family:klavika-web,Helvetica,sans-serif;font-size:16px;font-weight:400;line-height:1;margin:0;padding:4px;letter-spacing:.04em;text-transform:uppercase}.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{box-shadow:inset 0 -2px 0 0 #e55234}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion.suggestion-layout-simple,.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion:not(.suggestion-layout-simple) .algolia-docsearch-suggestion--content{background:rgba(230,93,29,.1)}.algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#e65d1d;background:rgba(230,93,29,.08);padding:.1em .05em}</style> 13<!-- RTD Extra Head --> 14 15 <!-- 16 Always link to the latest version, as canonical. 17 http://docs.readthedocs.org/en/latest/canonical.html 18 --> 19 <link rel="canonical" href="https://docs.graphene-python.org/en/latest/quickstart/" /> 20 21 22
23<script type="application/json" id="READTHEDOCS_DATA">{"ad_free": false, "api_host": "https://readthedocs.org", "build_date": "2022-12-25T21:59:41Z", "builder": "sphinx", "canonical_url": "https://docs.graphene-python.org/en/latest/", "commit": "52143473", "docroot": "/docs/", "features": {"docsearch_disabled": false}, "global_analytics_code": "UA-17997319-1", "language": "en", "page": "quickstart", "programming_language": "py", "project": "graphene-python", "proxied_api_host": "/_", "source_suffix": ".rst", "subprojects": {"graphene-django": "https://docs.graphene-python.org/projects/django/en/latest/", "graphene-gae": "https://docs.graphene-python.org/projects/gae/en/latest/", "graphene-sqlalchemy": "https://docs.graphene-python.org/projects/sqlalchemy/en/latest/"}, "theme": "sphinx_graphene_theme", "user_analytics_code": "", "version": "latest"}</script>
23 24 25<!-- 26Using this variable directly instead of using `JSON.parse` is deprecated. 27The READTHEDOCS_DATA global variable will be removed in the future. 28-->
29<script type="text/javascript"> 30READTHEDOCS_DATA = JSON.parse(document.getElementById('READTHEDOCS_DATA').innerHTML); 31</script>
31 32 33 34 35<!-- end RTD <extrahead> -->
36<script async type="text/javascript" src="/_/static/javascript/readthedocs-addons.js"></script>
36<meta name="readthedocs-project-slug" content="graphene-python" /><meta name="readthedocs-version-slug" content="latest" /><meta name="readthedocs-resolver-filename" content="/quickstart/" /><meta name="readthedocs-http-status" content="200" /></head><body><div id="___gatsby"><div data-reactroot="" data-reactid="1" data-react-checksum="-727049081"><!-- react-empty: 2 --><div data-jsx="3652023954" data-reactid="3"><header class="navbar-header navbar-header-contrast" data-jsx="3652023954" data-reactid="4"><div class="container" data-jsx="3652023954" data-reactid="5"><a class="logo-link" href="https://graphene-python.org/" data-reactid="6"><svg width="186px" height="61px" viewBox="0 0 186 61" version="1.1" data-reactid="7"><title data-reactid="8">Group</title><desc data-reactid="9">Created with Sketch.</desc><defs data-reactid="10"></defs><g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" data-reactid="11"><g id="Artboard" transform="translate(-270.000000, -72.000000)" fill="#FFFFFF" data-reactid="12"><g id="Group" transform="translate(270.000000, 72.000000)" data-reactid="13"><g id="Group-16" data-reactid="14"><path d="M21.4488247,27.9674541 L21.3573585,27.8552044 L47.14298,12.7141762 L51.6950341,15.2342435 L51.7044486,15.2292464 L51.7044486,15.2394555 L51.708606,15.2417571 L51.7044486,15.2446105 L51.7044486,45.7148148 L25.9864791,60.8988586 L25.9864791,60.9820711 L25.9161942,60.9403553 L25.8392024,60.9858117 L25.8269915,60.8874114 L-1.77635684e-15,45.5584764 L-1.77635684e-15,15.1448276 L0.0472738011,15.1448276 L0.0457331016,15.1410282 L25.8313547,0 L30.2812929,2.60409584 L30.2453675,2.63093886 L30.3470901,2.57088123 L30.3470901,7.82931846 L8.90955617,20.4482595 L8.90955617,40.4855563 L8.9305381,40.4761386 L25.7305699,50.2424262 L45.6007316,38.7557953 L47.2767364,23.1109129 L25.8392024,35.7491621 L25.8330765,35.7034045 L21.4488247,33.0931485 L21.4488247,27.9674541 Z" id="Combined-Shape" data-reactid="15"></path><polyline id="Path-11" points="42.8061831 20.5670498 42.8061831 40.4367325 47.318118 42.9890124 47.318118 21.5279801 42.8061831 20.5670498" data-reactid="16"></polyline></g><path d="M70.575,15.694 L81.235,15.694 C84.3783335,15.694 86.606,16.3226665 87.918,17.58 C89.23,18.8373335 89.886,20.6686665 89.886,23.074 L89.886,26.805 C89.886,29.183 89.1958335,31.0006665 87.8155,32.258 C86.4351665,33.5153335 84.1596665,34.144 80.989,34.144 L75.741,34.144 L75.741,43 L70.575,43 L70.575,15.694 Z M84.72,23.484 C84.72,22.336 84.4466665,21.5091665 83.9,21.0035 C83.3533335,20.4978335 82.3693335,20.245 80.948,20.245 L75.741,20.245 L75.741,29.593 L80.948,29.593 C82.3966665,29.593 83.3875,29.3196665 83.9205,28.773 C84.4535,28.2263335 84.72,27.3926665 84.72,26.272 L84.72,23.484 Z M104.183,43 L110.579,23.033 L105.454,23.033 L100.862,38.203 L96.311,23.033 L91.186,23.033 L97.5,43 L99.263,43 L96.762,51.077 L101.518,51.077 L104.183,43 Z M124.138,42.631 L123.564,38.818 C123.126666,38.9546665 122.696166,39.0571665 122.2725,39.1255 C121.848834,39.1938335 121.445666,39.228 121.063,39.228 C120.407,39.228 119.942334,39.0708335 119.669,38.7565 C119.395666,38.4421665 119.259,38.0116665 119.259,37.465 L119.259,27.01 L124.056,27.01 L124.384,23.033 L119.259,23.033 L119.259,17.375 L114.257,18.072 L114.257,23.033 L111.264,23.033 L111.264,27.01 L114.257,27.01 L114.257,38.121 C114.257,41.647 116.088334,43.41 119.751,43.41 C120.079,43.41 120.441166,43.3895 120.8375,43.3485 C121.233834,43.3075 121.630166,43.2528335 122.0265,43.1845 C122.422834,43.1161665 122.8055,43.0341665 123.1745,42.9385 C123.5435,42.8428335 123.864666,42.7403335 124.138,42.631 Z M139.132,43 L144.134,43 L144.134,28.527 C144.134,26.723 143.799166,25.288 143.1295,24.222 C142.459834,23.156 141.291334,22.623 139.624,22.623 C138.558,22.623 137.355334,22.8006665 136.016,23.156 C134.676666,23.5113335 133.446666,23.976 132.326,24.55 L132.326,14.177 L127.324,14.874 L127.324,43 L132.326,43 L132.326,29.142 C133.228,28.6773335 134.164166,28.281 135.1345,27.953 C136.104834,27.625 136.904334,27.461 137.533,27.461 C138.107,27.461 138.517,27.5908335 138.763,27.8505 C139.009,28.1101665 139.132,28.5133335 139.132,29.06 L139.132,43 Z M165.401,35.538
36C165.401,36.5766665 165.271166,37.5675 165.0115,38.5105 C164.751834,39.4535 164.294,40.2871665 163.638,41.0115 C162.982,41.7358335 162.093666,42.3166665 160.973,42.754 C159.852334,43.1913335 158.431,43.41 156.709,43.41 C154.987,43.41 153.565666,43.1913335 152.445,42.754 C151.324334,42.3166665 150.436,41.7358335 149.78,41.0115 C149.124,40.2871665 148.666166,39.4535 148.4065,38.5105 C148.146834,37.5675 148.017,36.5766665 148.017,35.538 L148.017,30.495 C148.017,29.4836665 148.146834,28.4996665 148.4065,27.543 C148.666166,26.5863335 149.124,25.7458335 149.78,25.0215 C150.436,24.2971665 151.324334,23.7163335 152.445,23.279 C153.565666,22.8416665 154.987,22.623 156.709,22.623 C158.431,22.623 159.852334,22.8416665 160.973,23.279 C162.093666,23.7163335 162.982,24.2971665 163.638,25.0215 C164.294,25.7458335 164.751834,26.5863335 165.0115,27.543 C165.271166,28.4996665 165.401,29.4836665 165.401,30.495 L165.401,35.538 Z M160.399,30.331 C160.399,29.183 160.118834,28.322 159.5585,27.748 C158.998166,27.174 158.048334,26.887 156.709,26.887 C155.369666,26.887 154.419834,27.174 153.8595,27.748 C153.299166,28.322 153.019,29.183 153.019,30.331 L153.019,35.702 C153.019,36.85 153.299166,37.711 153.8595,38.285 C154.419834,38.859 155.369666,39.146 156.709,39.146 C158.048334,39.146 158.998166,38.859 159.5585,38.285 C160.118834,37.711 160.399,36.85 160.399,35.702 L160.399,30.331 Z M181.297,43 L186.299,43 L186.299,28.527 C186.299,26.723 185.964166,25.288 185.2945,24.222 C184.624834,23.156 183.456334,22.623 181.789,22.623 C180.613666,22.623 179.301666,22.8143335 177.853,23.197 C176.404334,23.5796665 175.051334,24.0853335 173.794,24.714 L173.302,23.033 L169.489,23.033 L169.489,43 L174.491,43 L174.491,29.142 C175.393,28.6773335 176.329166,28.281 177.2995,27.953 C178.269834,27.625 179.069334,27.461 179.698,27.461 C180.272,27.461 180.682,27.5908335 180.928,27.8505 C181.174,28.1101665 181.297,28.5133335 181.297,29.06 L181.297,43 Z" id="Python" data-reactid="17"></path></g></g></g></svg></a><a id="menu" data-jsx="3652023954" data-reactid="18"></a><a href="#menu" class="mobile-menu" data-jsx="3652023954" data-reactid="19"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" height="1em" width="1em" data-reactid="20"><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z" data-reactid="21"></path></svg></a><a class="background-mobile-menu" href="#" data-jsx="3652023954" data-reactid="22"></a><nav data-jsx="3652023954" data-reactid="23"><input type="text" id="search-docs" placeholder="Search the docs..." data-jsx="3652023954" data-reactid="24"/><a href="https://docs.graphene-python.org/" class="nav-link nav-link-active" data-jsx="3652023954" data-reactid="25">Documentation</a><a href="https://graphene-python.org/team" class="nav-link" data-reactid="26">Team</a><a class="nav-link" href="https://github.com/graphql-python/graphene" data-jsx="3652023954" data-reactid="27"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 496 512" height="1em" width="1em" data-reactid="28"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z" data-reactid="29"></path></svg><!-- react-text: 30 --> Github<!-- /react-text --></a></nav></div></header><!-- react-empty: 31 -->
36<script type="text/javascript" data-jsx="3652023954" data-reactid="32"> 37 docsearch({ 38 apiKey: "4b6d0afa80197db35886555b5ef4721f", 39 inputSelector: "#search-docs", 40 indexName: "graphene_python", 41 transformData: function(suggestions) { 42 return suggestions.map(function(suggestion) { 43 suggestion.url = suggestion.url.replace("http:", "https:"); 44 return suggestion; 45 }); 46 } 47 });</script>
47</div><div data-reactid="33"><div class="container docs-container" data-reactid="34"><div class="docs-side-nav" data-reactid="35"><div class="sphinxsidebar" role="navigation" aria-label="main navigation" data-reactid="36"><div class="sphinxsidebarwrapper" data-reactid="37"><h3 class="callout" data-reactid="38"><a href="../" data-reactid="39">Table Of Contents</a></h3><div class="sphinxsidebarwrapperlinks" data-reactid="40"><ul class="current"> 48<li class="toctree-l1 current"><a class="current reference internal" href="#">Getting started</a><ul> 49<li class="toctree-l2"><a class="reference internal" href="#introduction">Introduction</a></li> 50<li class="toctree-l2"><a class="reference internal" href="#an-example-in-graphene">An example in Graphene</a></li> 51</ul> 52</li> 53<li class="toctree-l1"><a class="reference internal" href="../types/">Types Reference</a></li> 54<li class="toctree-l1"><a class="reference internal" href="../execution/">Execution</a></li> 55<li class="toctree-l1"><a class="reference internal" href="../relay/">Relay</a></li> 56<li class="toctree-l1"><a class="reference internal" href="../testing/">Testing in Graphene</a></li> 57<li class="toctree-l1"><a class="reference internal" href="../api/">API Reference</a></li> 58</ul> 59</div><a href="https://readthedocs.org/projects/graphene-python/versions/" data-reactid="41">Older versions</a></div></div><!-- react-text: 42 --> <!-- /react-text --></div><div class="docs-main" data-reactid="43"><div class="docs-breadcrumbs" role="navigation" aria-label="breadcrumbs navigation" data-reactid="44"><ul class="wy-breadcrumbs" data-reactid="45"><!-- react-text: 46 --><!-- /react-text --><li data-reactid="47"><a href="../" data-reactid="48">Docs</a><!-- react-text: 49 --> »<!-- /react-text --></li><!-- react-text: 50 --><!-- /react-text --><li data-reactid="55">Getting started</li><!-- react-text: 56 --><!-- /react-text --></ul></div><div class="documentwrapper" data-reactid="57"><div class="bodywrapper" data-reactid="58"><div class="body" role="main" data-reactid="59"><!-- react-text: 60 --><div class="section" id="getting-started"> 60<h1>Getting started<a class="headerlink" href="#getting-started" title="Permalink to this headline">¶</a></h1> 61<div class="section" id="introduction"> 62<h2>Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline">¶</a></h2> 63<div class="section" id="what-is-graphql"> 64<h3>What is GraphQL?<a class="headerlink" href="#what-is-graphql" title="Permalink to this headline">¶</a></h3> 65<p>GraphQL is a query language for your API.</p> 66<p>It provides a standard way to:</p> 67<ul class="simple"> 68<li><em>describe data provided by a server</em> in a statically typed <strong>Schema</strong></li> 69<li><em>request data</em> in a <strong>Query</strong> which exactly describes your data requirements and</li> 70<li><em>receive data</em> in a <strong>Response</strong> containing only the data you requested.</li> 71</ul> 72<p>For an introduction to GraphQL and an overview of its concepts, please refer to <a class="reference external" href="http://graphql.org/learn/">the official GraphQL documentation</a>.</p> 73</div> 74<div class="section" id="what-is-graphene"> 75<h3>What is Graphene?<a class="headerlink" href="#what-is-graphene" title="Permalink to this headline">¶</a></h3> 76<p>Graphene is a library that provides tools to implement a GraphQL API in Python using a <em>code-first</em> approach.</p> 77<p>Compare Graphene’s <em>code-first</em> approach to building a GraphQL API with <em>schema-first</em> approaches like <a class="reference external" href="https://www.apollographql.com/docs/apollo-server/">Apollo Server</a> (JavaScript) or <a class="reference external" href="https://ariadnegraphql.org/">Ariadne</a> (Python). Instead of writing GraphQL <strong>Schema Definition Language (SDL)</strong>, we write Python code to describe the data provided by your server.</p> 78<p>Graphene is fully featured with integrations for the most popular web frameworks and ORMs. Graphene produces schemas that are fully compliant with the GraphQL spec and provides tools and patterns for building a Relay-Compliant API as well.</p> 79</div> 80</div> 81<div class="section" id="an-example-in-graphene"> 82<h2>An example in Graphene<a class="headerlink" href="#an-example-in-graphene" title="Permalink to this headline">¶</a></h2> 83<p>Letâs build a basic GraphQL schema to say “hello” and “goodbye” in Graphene.</p> 84<p>When we send a <strong>Query</strong> requesting only one <strong>Field</strong>, <code class="docutils literal"><span class="pre">hello</span></code>, and specify a value for the <code class="docutils literal"><span class="pre">firstName</span></code> <strong>Argument</strong>...</p> 85<div class="code highlight-default"><div class="highlight"><pre><span></span><span class="p">{</span> 86 <span class="n">hello</span><span class="p">(</span><span class="n">firstName</span><span class="p">:</span> <span class="s2">"friend"</span><span class="p">)</span> 87<span class="p">}</span> 88</pre></div> 89</div> 90<p>...we would expect the following Response containing only the data requested (the <code class="docutils literal"><span class="pre">goodbye</span></code> field is not resolved).</p> 91<div class="code highlight-default"><div class="highlight"><pre><span></span><span class="p">{</span> 92 <span class="s2">"data"</span><span class="p">:</span> <span class="p">{</span> 93 <span class="s2">"hello"</span><span class="p">:</span> <span class="s2">"Hello friend!"</span> 94 <span class="p">}</span> 95<span class="p">}</span> 96</pre></div> 97</div> 98<div class="section" id="requirements"> 99<h3>Requirements<a class="headerlink" href="#requirements" title="Permalink to this headline">¶</a></h3> 100<ul class="simple"> 101<li>Python (3.6, 3.7, 3.8, 3.9, 3.10, pypy)</li> 102<li>Graphene (3.0)</li> 103</ul> 104</div> 105<div class="section" id="project-setup"> 106<h3>Project setup<a class="headerlink" href="#project-setup" title="Permalink to this headline">¶</a></h3> 107<div class="code bash highlight-default"><div class="highlight"><pre><span></span><span class="n">pip</span> <span class="n">install</span> <span class="s2">"graphene>=3.0"</span> 108</pre></div> 109</div> 110</div> 111<div class="section" id="creating-a-basic-schema"> 112<h3>Creating a basic Schema<a class="headerlink" href="#creating-a-basic-schema" title="Permalink to this headline">¶</a></h3> 113<p>In Graphene, we can define a simple schema using the following code:</p> 114<div class="code python highlight-default"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">graphene</span> <span class="kn">
114import</span> <span class="n">ObjectType</span><span class="p">,</span> <span class="n">String</span><span class="p">,</span> <span class="n">Schema</span> 115 116<span class="k">class</span> <span class="nc">Query</span><span class="p">(</span><span class="n">ObjectType</span><span class="p">):</span> 117 <span class="c1"># this defines a Field `hello` in our Schema with a single Argument `first_name`</span> 118 <span class="c1"># By default, the argument name will automatically be camel-based into firstName in the generated schema</span> 119 <span class="n">hello</span> <span class="o">=</span> <span class="n">String</span><span class="p">(</span><span class="n">first_name</span><span class="o">=</span><span class="n">String</span><span class="p">(</span><span class="n">default_value</span><span class="o">=</span><span class="s2">"stranger"</span><span class="p">))</span> 120 <span class="n">goodbye</span> <span class="o">=</span> <span class="n">String</span><span class="p">()</span> 121 122 <span class="c1"># our Resolver method takes the GraphQL context (root, info) as well as</span> 123 <span class="c1"># Argument (first_name) for the Field and returns data for the query Response</span> 124 <span class="k">def</span> <span class="nf">resolve_hello</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">info</span><span class="p">,</span> <span class="n">first_name</span><span class="p">):</span> 125 <span class="k">return</span> <span class="sa">f</span><span class="s1">'Hello </span><span class="si">{</span><span class="n">first_name</span><span class="si">}</span><span class="s1">!'</span> 126 127 <span class="k">def</span> <span class="nf">resolve_goodbye</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">info</span><span class="p">):</span> 128 <span class="k">return</span> <span class="s1">'See ya!'</span> 129 130<span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">(</span><span class="n">query</span><span class="o">=</span><span class="n">Query</span><span class="p">)</span> 131</pre></div> 132</div> 133<p>A GraphQL <strong>Schema</strong> describes each <strong>Field</strong> in the data model provided by the server using scalar types like <em>String</em>, <em>Int</em> and <em>Enum</em> and compound types like <em>List</em> and <em>Object</em>. For more details refer to the Graphene <a class="reference internal" href="../types/#typesreference"><span class="std std-ref">Types Reference</span></a>.</p> 134<p>Our schema can also define any number of <strong>Arguments</strong> for our <strong>Fields</strong>. This is a powerful way for a <strong>Query</strong> to describe the exact data requirements for each <strong>Field</strong>.</p> 135<p>For each <strong>Field</strong> in our <strong>Schema</strong>, we write a <strong>Resolver</strong> method to fetch data requested by a client’s <strong>Query</strong> using the current context and <strong>Arguments</strong>. For more details, refer to this section on <a class="reference internal" href="../types/objecttypes/#resolvers"><span class="std std-ref">Resolvers</span></a>.</p> 136</div> 137<div class="section" id="schema-definition-language-sdl"> 138<h3>Schema Definition Language (SDL)<a class="headerlink" href="#schema-definition-language-sdl" title="Permalink to this headline">¶</a></h3> 139<p>In the <a class="reference external" href="https://graphql.org/learn/schema/">GraphQL Schema Definition Language</a>, we could describe the fields defined by our example code as shown below.</p> 140<div class="code highlight-default"><div class="highlight"><pre><span></span><span class="nb">type</span> <span class="n">Query</span> <span class="p">{</span> 141 <span class="n">hello</span><span class="p">(</span><span class="n">firstName</span><span class="p">:</span> <span class="n">String</span> <span class="o">=</span> <span class="s2">"stranger"</span><span class="p">):</span> <span class="n">String</span> 142 <span class="n">goodbye</span><span class="p">:</span> <span class="n">String</span> 143<span class="p">}</span> 144</pre></div> 145</div> 146<p>Further examples in this documentation will use SDL to describe schema created by ObjectTypes and other fields.
146</p> 147</div> 148<div class="section" id="querying"> 149<h3>Querying<a class="headerlink" href="#querying" title="Permalink to this headline">¶</a></h3> 150<p>Then we can start querying our <strong>Schema</strong> by passing a GraphQL query string to <code class="docutils literal"><span class="pre">execute</span></code>:</p> 151<div class="code python highlight-default"><div class="highlight"><pre><span></span><span class="c1"># we can query for our field (with the default argument)</span> 152<span class="n">query_string</span> <span class="o">=</span> <span class="s1">'{ hello }'</span> 153<span class="n">result</span> <span class="o">=</span> <span class="n">schema</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">query_string</span><span class="p">)</span> 154<span class="nb">print</span><span class="p">(</span><span class="n">result</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="s1">'hello'</span><span class="p">])</span> 155<span class="c1"># "Hello stranger!"</span> 156 157<span class="c1"># or passing the argument in the query</span> 158<span class="n">query_with_argument</span> <span class="o">=</span> <span class="s1">'{ hello(firstName: "GraphQL") }'</span> 159<span class="n">result</span> <span class="o">=</span> <span class="n">schema</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">query_with_argument</span><span class="p">)</span> 160<span class="nb">print</span><span class="p">(</span><span class="n">result</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="s1">'hello'</span><span class="p">])</span> 161<span class="c1"># "Hello GraphQL!"</span> 162</pre></div> 163</div> 164</div> 165<div class="section" id="next-steps"> 166<h3>Next steps<a class="headerlink" href="#next-steps" title="Permalink to this headline">¶</a></h3> 167<p>Congrats! You got your first Graphene schema working!</p> 168<p>Normally, we don’t need to directly execute a query string against our schema as Graphene provides many useful Integrations with popular web frameworks like Flask and Django. Check out <a class="reference internal" href="../#integrations"><span class="std std-ref">Integrations</span></a> for more information on how to get started serving your GraphQL API.</p> 169</div> 170</div> 171</div> 172<!-- /react-text --><div class="go-buttons" data-reactid="61"><!-- react-text: 62 --><!-- /react-text --><a href="../" class="go-previous flat-button" data-reactid="63"><!-- react-text: 64 -->Previous: <!-- /react-text --><!-- react-text: 65 -->Graphene<!-- /react-text --></a><!-- react-text: 66 --><!-- /react-text --><a href="../types/" class="go-next flat-button primary" data-reactid="67"><!-- react-text: 68 -->Next: <!-- /react-text --><!-- react-text: 69 -->Types Reference<!-- /react-text --></a><!-- react-text: 70 --><!-- /react-text --></div></div></div></div></div></div></div></div></div>
172<script> 173 174 if(true) { 175 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 176 (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 177 m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 178 })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 179 } 180 if (typeof ga === "function") { 181 ga('create', 'UA-12613282-7', 'auto'); 182 } 183 </script>
183</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.