CINXE.COM
B2Handle for Developers - EUDAT Documentation
<!doctype html> <html lang="en" class="no-js"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <link rel="canonical" href="https://docs.eudat.eu/b2handle/fordevelopers_b2handle/"> <link rel="prev" href="../fordevelopers_pyhandle/"> <link rel="next" href="../fordevelopers_api/"> <link rel="icon" href="../../assets/images/favicon.png"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.41"> <title>B2Handle for Developers - EUDAT Documentation</title> <link rel="stylesheet" href="../../assets/stylesheets/main.0253249f.min.css"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback"> <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style> <link rel="stylesheet" href="../../config/extra.css"> <script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> </head> <body dir="ltr"> <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> <label class="md-overlay" for="__drawer"></label> <div data-md-component="skip"> <a href="#b2handle-for-developers" class="md-skip"> Skip to content </a> </div> <div data-md-component="announce"> </div> <header class="md-header" data-md-component="header"> <nav class="md-header__inner md-grid" aria-label="Header"> <a href="../.." title="EUDAT Documentation" class="md-header__button md-logo" aria-label="EUDAT Documentation" data-md-component="logo"> <img src="../../images/EUDAT_Partial_White.png" alt="logo"> </a> <label class="md-header__button md-icon" for="__drawer"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class="md-header__title" data-md-component="header-title"> <div class="md-header__ellipsis"> <div class="md-header__topic"> <span class="md-ellipsis"> EUDAT Documentation </span> </div> <div class="md-header__topic" data-md-component="header-topic"> <span class="md-ellipsis"> B2Handle for Developers </span> </div> </div> </div> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for="__search"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> </label> <div class="md-search" data-md-component="search" role="dialog"> <label class="md-search__overlay" for="__search"></label> <div class="md-search__inner" role="search"> <form class="md-search__form" name="search"> <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required> <label class="md-search__icon md-icon" for="__search"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </label> <nav class="md-search__options" aria-label="Search"> <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> </button> </nav> <div class="md-search__suggest" data-md-component="search-suggest"></div> </form> <div class="md-search__output"> <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix> <div class="md-search-result" data-md-component="search-result"> <div class="md-search-result__meta"> Initializing search </div> <ol class="md-search-result__list" role="presentation"></ol> </div> </div> </div> </div> </div> </nav> </header> <div class="md-container" data-md-component="container"> <nav class="md-tabs" aria-label="Tabs" data-md-component="tabs"> <div class="md-grid"> <ul class="md-tabs__list"> <li class="md-tabs__item"> <a href="../.." class="md-tabs__link"> Documentation </a> </li> <li class="md-tabs__item"> <a href="../../b2access/" class="md-tabs__link"> B2ACCESS </a> </li> <li class="md-tabs__item"> <a href="../../b2drop/" class="md-tabs__link"> B2DROP </a> </li> <li class="md-tabs__item"> <a href="../../b2find/" class="md-tabs__link"> B2FIND </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href="../" class="md-tabs__link"> B2HANDLE </a> </li> <li class="md-tabs__item"> <a href="../../b2inst/" class="md-tabs__link"> B2INST </a> </li> <li class="md-tabs__item"> <a href="../../b2safe/" class="md-tabs__link"> B2SAFE </a> </li> <li class="md-tabs__item"> <a href="../../b2share/overview/" class="md-tabs__link"> B2SHARE </a> </li> <li class="md-tabs__item"> <a href="../../datacite/" class="md-tabs__link"> DataCite </a> </li> <li class="md-tabs__item"> <a href="https://eudat.eu" class="md-tabs__link"> EUDAT website </a> </li> <li class="md-tabs__item"> <a href="https://eudat.eu/contact-support-request" class="md-tabs__link"> Feedback + Support </a> </li> </ul> </div> </nav> <main class="md-main" data-md-component="main"> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" > <div class="md-sidebar__scrollwrap"> <div class="md-sidebar__inner"> <nav class="md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label="Navigation" data-md-level="0"> <label class="md-nav__title" for="__drawer"> <a href="../.." title="EUDAT Documentation" class="md-nav__button md-logo" aria-label="EUDAT Documentation" data-md-component="logo"> <img src="../../images/EUDAT_Partial_White.png" alt="logo"> </a> EUDAT Documentation </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../.." class="md-nav__link"> <span class="md-ellipsis"> Documentation </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" > <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0"> <span class="md-ellipsis"> B2ACCESS </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_2"> <span class="md-nav__icon md-icon"></span> B2ACCESS </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../b2access/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../b2access/assurance/" class="md-nav__link"> <span class="md-ellipsis"> Assurance </span> </a> </li> <li class="md-nav__item"> <a href="../../b2access/concepts/" class="md-nav__link"> <span class="md-ellipsis"> Concepts </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4" > <label class="md-nav__link" for="__nav_2_4" id="__nav_2_4_label" tabindex="0"> <span class="md-ellipsis"> For Users </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_2_4"> <span class="md-nav__icon md-icon"></span> For Users </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../b2access/howto-mfa/" class="md-nav__link"> <span class="md-ellipsis"> Enabling MFA </span> </a> </li> <li class="md-nav__item"> <a href="../../b2access/howto-update-email/" class="md-nav__link"> <span class="md-ellipsis"> Updating Email </span> </a> </li> <li class="md-nav__item"> <a href="../../b2access/list-of-connected-organisations/" class="md-nav__link"> <span class="md-ellipsis"> List of connected organisations </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_4" > <label class="md-nav__link" for="__nav_2_4_4" id="__nav_2_4_4_label" tabindex="0"> <span class="md-ellipsis"> For group administrators </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_2_4_4"> <span class="md-nav__icon md-icon"></span> For group administrators </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../b2access/howto-vos/" class="md-nav__link"> <span class="md-ellipsis"> Requesting a group </span> </a> </li> <li class="md-nav__item"> <a href="../../b2access/howto-vo-management/" class="md-nav__link"> <span class="md-ellipsis"> Managing a group </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_5" > <label class="md-nav__link" for="__nav_2_4_5" id="__nav_2_4_5_label" tabindex="0"> <span class="md-ellipsis"> For Service Providers </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_5_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_2_4_5"> <span class="md-nav__icon md-icon"></span> For Service Providers </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../b2access/howto-services/" class="md-nav__link"> <span class="md-ellipsis"> Registering a services </span> </a> </li> <li class="md-nav__item"> <a href="../../b2access/attributes-sp/" class="md-nav__link"> <span class="md-ellipsis"> Available attributes </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_6" > <label class="md-nav__link" for="__nav_2_4_6" id="__nav_2_4_6_label" tabindex="0"> <span class="md-ellipsis"> For Identity Providers </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_6_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_2_4_6"> <span class="md-nav__icon md-icon"></span> For Identity Providers </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../b2access/howto-idps/" class="md-nav__link"> <span class="md-ellipsis"> Joining as an Identity Provider </span> </a> </li> <li class="md-nav__item"> <a href="../../b2access/attributes-idp/" class="md-nav__link"> <span class="md-ellipsis"> Consumed attributes </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../../b2access/about/" class="md-nav__link"> <span class="md-ellipsis"> About </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" > <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0"> <span class="md-ellipsis"> B2DROP </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3"> <span class="md-nav__icon md-icon"></span> B2DROP </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../b2drop/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2" > <label class="md-nav__link" for="__nav_3_2" id="__nav_3_2_label" tabindex="0"> <span class="md-ellipsis"> For Users </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3_2"> <span class="md-nav__icon md-icon"></span> For Users </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../b2drop/user/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2_2" > <label class="md-nav__link" for="__nav_3_2_2" id="__nav_3_2_2_label" tabindex="0"> <span class="md-ellipsis"> For groups </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_2_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3_2_2"> <span class="md-nav__icon md-icon"></span> For groups </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../b2drop/groups/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3" > <label class="md-nav__link" for="__nav_3_3" id="__nav_3_3_label" tabindex="0"> <span class="md-ellipsis"> For Administrators </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3_3"> <span class="md-nav__icon md-icon"></span> For Administrators </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../b2drop/admin/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../b2drop/b2sharebridge/" class="md-nav__link"> <span class="md-ellipsis"> Enabling the B2SHAREbridge </span> </a> </li> <li class="md-nav__item"> <a href="../../b2drop/setup/" class="md-nav__link"> <span class="md-ellipsis"> Install B2DROP </span> </a> </li> <li class="md-nav__item"> <a href="../../b2drop/integration/" class="md-nav__link"> <span class="md-ellipsis"> Integrate with B2ACCESS </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../../b2drop/about/" class="md-nav__link"> <span class="md-ellipsis"> About </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" > <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0"> <span class="md-ellipsis"> B2FIND </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4"> <span class="md-nav__icon md-icon"></span> B2FIND </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../b2find/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../b2find/forusers/" class="md-nav__link"> <span class="md-ellipsis"> For Users </span> </a> </li> <li class="md-nav__item"> <a href="../../b2find/forproviders/" class="md-nav__link"> <span class="md-ellipsis"> For Providers </span> </a> </li> <li class="md-nav__item"> <a href="../../b2find/about/" class="md-nav__link"> <span class="md-ellipsis"> About </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" checked> <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex=""> <span class="md-ellipsis"> B2HANDLE </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="true"> <label class="md-nav__title" for="__nav_5"> <span class="md-nav__icon md-icon"></span> B2HANDLE </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../foradministrators/" class="md-nav__link"> <span class="md-ellipsis"> For Administrators </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_3" checked> <label class="md-nav__link" for="__nav_5_3" id="__nav_5_3_label" tabindex=""> <span class="md-ellipsis"> For Developers </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_3_label" aria-expanded="true"> <label class="md-nav__title" for="__nav_5_3"> <span class="md-nav__icon md-icon"></span> For Developers </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../fordevelopers/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../fordevelopers_pyhandle/" class="md-nav__link"> <span class="md-ellipsis"> PyHandle for Developers </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc"> <label class="md-nav__link md-nav__link--active" for="__toc"> <span class="md-ellipsis"> B2Handle for Developers </span> <span class="md-nav__icon md-icon"></span> </label> <a href="./" class="md-nav__link md-nav__link--active"> <span class="md-ellipsis"> B2Handle for Developers </span> </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class="md-nav__title" for="__toc"> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> <li class="md-nav__item"> <a href="#start-using-the-library" class="md-nav__link"> <span class="md-ellipsis"> Start using the library </span> </a> </li> <li class="md-nav__item"> <a href="#authentication" class="md-nav__link"> <span class="md-ellipsis"> Authentication </span> </a> <nav class="md-nav" aria-label="Authentication"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#authentication-using-client-certificates" class="md-nav__link"> <span class="md-ellipsis"> Authentication using client certificates </span> </a> </li> <li class="md-nav__item"> <a href="#authentication-using-username-and-password" class="md-nav__link"> <span class="md-ellipsis"> Authentication using username and password </span> </a> </li> <li class="md-nav__item"> <a href="#credentials-json-file" class="md-nav__link"> <span class="md-ellipsis"> Credentials JSON file </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#libraries-to-import" class="md-nav__link"> <span class="md-ellipsis"> Libraries to import </span> </a> </li> <li class="md-nav__item"> <a href="#instantiate-your-client" class="md-nav__link"> <span class="md-ellipsis"> Instantiate your client </span> </a> </li> <li class="md-nav__item"> <a href="#manage-your-handle" class="md-nav__link"> <span class="md-ellipsis"> Manage your handle </span> </a> <nav class="md-nav" aria-label="Manage your handle"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#the-example" class="md-nav__link"> <span class="md-ellipsis"> The Example </span> </a> </li> <li class="md-nav__item"> <a href="#the-data-of-the-test-handle" class="md-nav__link"> <span class="md-ellipsis"> The data of the test handle </span> </a> </li> <li class="md-nav__item"> <a href="#create-a-test-handle" class="md-nav__link"> <span class="md-ellipsis"> Create a test handle </span> </a> </li> <li class="md-nav__item"> <a href="#read-test-handle" class="md-nav__link"> <span class="md-ellipsis"> Read test handle </span> </a> </li> <li class="md-nav__item"> <a href="#modify-test-handle" class="md-nav__link"> <span class="md-ellipsis"> Modify test handle </span> </a> </li> <li class="md-nav__item"> <a href="#delete-test-handle" class="md-nav__link"> <span class="md-ellipsis"> Delete test handle </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#quick-links-to-technical-documentation" class="md-nav__link"> <span class="md-ellipsis"> Quick Links to Technical Documentation </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../fordevelopers_api/" class="md-nav__link"> <span class="md-ellipsis"> API for Developers </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_4" > <label class="md-nav__link" for="__nav_5_4" id="__nav_5_4_label" tabindex=""> <span class="md-ellipsis"> Information </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_5_4"> <span class="md-nav__icon md-icon"></span> Information </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../ownership/" class="md-nav__link"> <span class="md-ellipsis"> Ownership </span> </a> </li> <li class="md-nav__item"> <a href="../security/" class="md-nav__link"> <span class="md-ellipsis"> Security </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../more/" class="md-nav__link"> <span class="md-ellipsis"> More Info </span> </a> </li> <li class="md-nav__item"> <a href="../about/" class="md-nav__link"> <span class="md-ellipsis"> About </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" > <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0"> <span class="md-ellipsis"> B2INST </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_6"> <span class="md-nav__icon md-icon"></span> B2INST </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../b2inst/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_2" > <label class="md-nav__link" for="__nav_6_2" id="__nav_6_2_label" tabindex="0"> <span class="md-ellipsis"> For Users </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_6_2"> <span class="md-nav__icon md-icon"></span> For Users </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../b2inst/forusers/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../b2inst/advancedsearch/" class="md-nav__link"> <span class="md-ellipsis"> Advanced Search </span> </a> </li> <li class="md-nav__item"> <a href="../../b2inst/httpapi/" class="md-nav__link"> <span class="md-ellipsis"> HTTP REST API </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../../b2inst/foradministrators/" class="md-nav__link"> <span class="md-ellipsis"> For Administrators </span> </a> </li> <li class="md-nav__item"> <a href="../../b2inst/fordevelopers/" class="md-nav__link"> <span class="md-ellipsis"> For Developers </span> </a> </li> <li class="md-nav__item"> <a href="../../b2inst/about/" class="md-nav__link"> <span class="md-ellipsis"> About </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" > <label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0"> <span class="md-ellipsis"> B2SAFE </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_7"> <span class="md-nav__icon md-icon"></span> B2SAFE </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../b2safe/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../b2safe/forusers/" class="md-nav__link"> <span class="md-ellipsis"> For Users </span> </a> </li> <li class="md-nav__item"> <a href="../../b2safe/foradministrators/" class="md-nav__link"> <span class="md-ellipsis"> For Administrators </span> </a> </li> <li class="md-nav__item"> <a href="../../b2safe/fordevelopers/" class="md-nav__link"> <span class="md-ellipsis"> For Developers </span> </a> </li> <li class="md-nav__item"> <a href="../../b2safe/about/" class="md-nav__link"> <span class="md-ellipsis"> About </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" > <label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0"> <span class="md-ellipsis"> B2SHARE </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8"> <span class="md-nav__icon md-icon"></span> B2SHARE </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../b2share/overview/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_2" > <label class="md-nav__link" for="__nav_8_2" id="__nav_8_2_label" tabindex="0"> <span class="md-ellipsis"> For Users </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_8_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8_2"> <span class="md-nav__icon md-icon"></span> For Users </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../b2share/forusers/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../b2share/advancedsearch/" class="md-nav__link"> <span class="md-ellipsis"> Advance Search </span> </a> </li> <li class="md-nav__item"> <a href="../../b2share/httpapi/" class="md-nav__link"> <span class="md-ellipsis"> HTTP REST API </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_3" > <label class="md-nav__link" for="__nav_8_3" id="__nav_8_3_label" tabindex="0"> <span class="md-ellipsis"> For Developers </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_8_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8_3"> <span class="md-nav__icon md-icon"></span> For Developers </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../b2share/fordevelopers/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_4" > <label class="md-nav__link" for="__nav_8_4" id="__nav_8_4_label" tabindex="0"> <span class="md-ellipsis"> For Administrators </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_8_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8_4"> <span class="md-nav__icon md-icon"></span> For Administrators </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../b2share/foradministrators/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../b2share/cli/" class="md-nav__link"> <span class="md-ellipsis"> Command Line Interface (CLI) </span> </a> </li> <li class="md-nav__item"> <a href="../../b2share/httpapi/" class="md-nav__link"> <span class="md-ellipsis"> HTTP REST API </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../../b2share/faq/" class="md-nav__link"> <span class="md-ellipsis"> F.A.Q.s </span> </a> </li> <li class="md-nav__item"> <a href="../../b2share/about/" class="md-nav__link"> <span class="md-ellipsis"> About </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_9" > <label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0"> <span class="md-ellipsis"> DataCite </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_9"> <span class="md-nav__icon md-icon"></span> DataCite </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../datacite/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../datacite/forusers/" class="md-nav__link"> <span class="md-ellipsis"> For Users </span> </a> </li> <li class="md-nav__item"> <a href="../../datacite/about/" class="md-nav__link"> <span class="md-ellipsis"> About </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="https://eudat.eu" class="md-nav__link"> <span class="md-ellipsis"> EUDAT website </span> </a> </li> <li class="md-nav__item"> <a href="https://eudat.eu/contact-support-request" class="md-nav__link"> <span class="md-ellipsis"> Feedback + Support </span> </a> </li> </ul> </nav> </div> </div> </div> <div class="md-content" data-md-component="content"> <article class="md-content__inner md-typeset"> <h1 id="b2handle-for-developers">B2HANDLE for developers<a class="headerlink" href="#b2handle-for-developers" title="Permanent link">#</a></h1> <h2 id="start-using-the-library">Start using the library<a class="headerlink" href="#start-using-the-library" title="Permanent link">#</a></h2> <p>Examples on how to <strong>use</strong> the library:</p> <ul> <li>Authentication </li> <li>libraries to use </li> <li>instantiate a client </li> <li>manage your handle</li> </ul> <p>With this example you can start using the B2HANDLE library in 5 minutes. </p> <h2 id="authentication">Authentication<a class="headerlink" href="#authentication" title="Permanent link">#</a></h2> <p>For creating and modifying handles* you need to authenticate at the Handle Server you’d like to write to. Authentication using b2handle is straightforward. There are two possibilities:</p> <ul> <li>Authenticating using username and password</li> <li>Authenticating using client certificates</li> </ul> <p><strong>Important Notice</strong></p> <p>Here we assume that you know your username and password or have your private key file and your certificate file ready. If you need to set these up, please see <a href="https://eudat-b2handle.github.io/B2HANDLE/authentication.html">Authenticate at a Handle Server</a></p> <h3 id="authentication-using-client-certificates">Authentication using client certificates<a class="headerlink" href="#authentication-using-client-certificates" title="Permanent link">#</a></h3> <p>Using client certificates, you need to provide paths to the file containing your private key and to the certificate in a JSON file. The class PIDClientCredentials provides a method load_from_JSON(). This can be read as follows:</p> <div class="highlight"><pre><span></span><code>cred = PIDClientCredentials.load_from_JSON('my_credentials.json') client = EUDATHandleClient.instantiate_with_credentials(cred) </code></pre></div> <p>The JSON file should look like this:</p> <div class="highlight"><pre><span></span><code>{ "baseuri": "https://my.handle.server", "private_key": "my_private_key.pem", "certificate_only": "my_certificate.pem" } </code></pre></div> <h3 id="authentication-using-username-and-password">Authentication using username and password<a class="headerlink" href="#authentication-using-username-and-password" title="Permanent link">#</a></h3> <p>If you have a username (something that looks like 300:foo/bar) and a password, we recommend using this constructor: instantiate_with_username_and_password():</p> <div class="highlight"><pre><span></span><code>client = EUDATHandleClient.instantiate_with_username_and_password( 'https://my.handle.server', '300:foo/bar', 'mypassword123' ) </code></pre></div> <p>Alternatively, you can store your username and password in a JSON file, instead of paths to certificate and key::</p> <div class="highlight"><pre><span></span><code> { “baseuri”: “https://my.handle.server”, “username”: “300:foo/bar”, “password”: “mypassword123” } </code></pre></div> <p>Like above, you can read the JSON like as shown above:</p> <div class="highlight"><pre><span></span><code>cred = PIDClientCredentials.load_from_JSON('my_credentials.json') client = EUDATHandleClient.instantiate_with_credentials(cred) </code></pre></div> <h3 id="credentials-json-file">Credentials JSON file<a class="headerlink" href="#credentials-json-file" title="Permanent link">#</a></h3> <p>The JSON file can contain more information. All items it contains are passed to the client constructor as config. Please see <strong>init</strong>() to find out which configuration items the client constructor understands.</p> <h2 id="libraries-to-import">Libraries to import<a class="headerlink" href="#libraries-to-import" title="Permanent link">#</a></h2> <p>At the beginning of your python code just import </p> <div class="highlight"><pre><span></span><code><span class="gh">#!/usr/bin/env python</span> import sys import b2handle from b2handle.clientcredentials import PIDClientCredentials from b2handle.handleclient import EUDATHandleClient from b2handle.handleexceptions import * from requests.exceptions import SSLError </code></pre></div> <h2 id="instantiate-your-client">Instantiate your client<a class="headerlink" href="#instantiate-your-client" title="Permanent link">#</a></h2> <p>The first thing you have to do is to instantiate your client. </p> <p>But before that you have to create a json file with the necessary data to connect to the handle server. The file uses certificates in order to authenticate with the Handle server. </p> <p>mycredentials.json</p> <div class="highlight"><pre><span></span><code><span class="p">{</span> <span class="w"> </span><span class="nt">"handle_server_url"</span><span class="p">:</span><span class="w"> </span><span class="s2">"https://myserver.com"</span><span class="p">,</span> <span class="w"> </span><span class="nt">"private_key"</span><span class="p">:</span><span class="w"> </span><span class="s2">"privkey.pem"</span><span class="p">,</span> <span class="w"> </span><span class="nt">"certificate_only"</span><span class="p">:</span><span class="w"> </span><span class="s2">"certificate_only.pem"</span><span class="p">,</span> <span class="w"> </span><span class="nt">"prefix"</span><span class="p">:</span><span class="w"> </span><span class="s2">"21.11111"</span><span class="p">,</span> <span class="w"> </span><span class="nt">"handleowner"</span><span class="p">:</span><span class="w"> </span><span class="s2">"301:11239/ADMINUSER"</span><span class="p">,</span> <span class="w"> </span><span class="nt">"HTTPS_verify"</span><span class="p">:</span><span class="w"> </span><span class="s2">"True"</span> <span class="p">}</span> </code></pre></div> <p>Then instantiate your client </p> <div class="highlight"><pre><span></span><code> <span class="nb">print</span> <span class="s2">"Creating credentials"</span> <span class="n">cred</span> <span class="o">=</span> <span class="n">PIDClientCredentials</span><span class="o">.</span><span class="n">load_from_JSON</span><span class="p">(</span><span class="s1">'mycredentials.json'</span><span class="p">)</span> <span class="n">client</span> <span class="o">=</span> <span class="n">EUDATHandleClient</span><span class="o">.</span><span class="n">instantiate_with_credentials</span><span class="p">(</span><span class="n">cred</span><span class="p">)</span> <span class="nb">print</span><span class="p">(</span><span class="s1">'PID prefix '</span> <span class="o">+</span> <span class="n">cred</span><span class="o">.</span><span class="n">get_prefix</span><span class="p">())</span> <span class="nb">print</span><span class="p">(</span><span class="s1">'Server '</span> <span class="o">+</span> <span class="n">cred</span><span class="o">.</span><span class="n">get_server_URL</span><span class="p">())</span> </code></pre></div> <h2 id="manage-your-handle">Manage your handle<a class="headerlink" href="#manage-your-handle" title="Permanent link">#</a></h2> <h3 id="the-example">The Example<a class="headerlink" href="#the-example" title="Permanent link">#</a></h3> <p>The example we are going to follow is to create is as follows - Create a test handle with the name MYTEST-HANDLE with the URL http://www.example.com/1. - Read the test handle - Update the test handle by updating the URL to http://www.example.com/2 - Delete the handle </p> <h3 id="the-data-of-the-test-handle">The data of the test handle<a class="headerlink" href="#the-data-of-the-test-handle" title="Permanent link">#</a></h3> <p>In this section we set the data for the test handle. </p> <div class="highlight"><pre><span></span><code> <span class="n">TEST_SUFFIX</span><span class="o">=</span><span class="s1">'MYTEST-HANDLE'</span> <span class="n">VALUE_ORIG</span><span class="o">=</span><span class="s1">'http://www.example.com/1'</span> <span class="n">VALUE_AFTER</span><span class="o">=</span><span class="s1">'http://www.example.com/2'</span> <span class="n">handle</span> <span class="o">=</span> <span class="n">cred</span><span class="o">.</span><span class="n">get_prefix</span><span class="p">()</span> <span class="o">+</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="n">TEST_SUFFIX</span> </code></pre></div> <p>Now that we have the data lets start managing the handle. </p> <h3 id="create-a-test-handle">Create a test handle<a class="headerlink" href="#create-a-test-handle" title="Permanent link">#</a></h3> <p>The creation of a handle is the first available action which is supported with <code>register_handle</code>. <a href="https://eudat-b2handle.github.io/B2HANDLE/handleclient.html#basic-handle-interaction">Basic interactions</a></p> <p>You may either register a new Handle with a unique random name (random UUID) or with a predefine value. </p> <p>In this example we are creating a handle with the name TEST_SUFFIX=’MYTEST-HANDLE’</p> <div class="highlight"><pre><span></span><code> <span class="c1"># Create test</span> <span class="nb">print</span> <span class="s2">"Creating handle "</span> <span class="o">+</span> <span class="n">handle</span> <span class="n">create_result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">register_handle</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">VALUE_ORIG</span><span class="p">)</span> <span class="k">if</span> <span class="n">create_result</span> <span class="o">==</span> <span class="n">handle</span><span class="p">:</span> <span class="nb">print</span> <span class="s2">"OK: Create handle successful."</span> <span class="k">else</span><span class="p">:</span> <span class="nb">print</span> <span class="s2">"PROBLEM: Create handle returned unexpected response."</span> </code></pre></div> <h3 id="read-test-handle">Read test handle<a class="headerlink" href="#read-test-handle" title="Permanent link">#</a></h3> <p>With the <code>get_value_from_handle</code> you may retrieve a single value from a single Handle. If several entries with this key exist, the methods returns the first one. If the handle does not exist, the method will raise an exception .<a href="https://eudat-b2handle.github.io/B2HANDLE/handleclient.html#basic-handle-interaction">Basic interactions</a></p> <p>In this example we are reading the predefined handle with key=URL. </p> <div class="highlight"><pre><span></span><code> <span class="c1"># Read test</span> <span class="n">key</span> <span class="o">=</span> <span class="s1">'URL'</span> <span class="n">read_value</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_value_from_handle</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span> <span class="k">if</span> <span class="n">read_value</span> <span class="o">==</span> <span class="n">VALUE_ORIG</span><span class="p">:</span> <span class="nb">print</span> <span class="s2">"OK: Read handle successful."</span> <span class="k">else</span><span class="p">:</span> <span class="nb">print</span> <span class="s2">"PROBLEM: Read handle returned unexpected response."</span> </code></pre></div> <h3 id="modify-test-handle">Modify test handle<a class="headerlink" href="#modify-test-handle" title="Permanent link">#</a></h3> <p>The library supports the modification of a value in the handle. <a href="https://eudat-b2handle.github.io/B2HANDLE/handleclient.html#basic-handle-interaction">Basic interactions</a></p> <p>With <code>modify_handle_value()</code> a user can modify any number of values in a specific Handle record. </p> <p>In this example we are going to update the URL of the handle record with the value VALUE_AFTER</p> <div class="highlight"><pre><span></span><code> <span class="c1"># Modify test</span> <span class="n">key</span> <span class="o">=</span> <span class="s1">'URL'</span> <span class="n">client</span><span class="o">.</span><span class="n">modify_handle_value</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="o">**</span><span class="p">{</span><span class="n">key</span><span class="p">:</span> <span class="n">VALUE_AFTER</span><span class="p">}</span> <span class="p">)</span> <span class="n">get_value_result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_value_from_handle</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span> <span class="k">if</span> <span class="n">get_value_result</span> <span class="o">==</span> <span class="n">VALUE_AFTER</span><span class="p">:</span> <span class="nb">print</span> <span class="s2">"OK: Modify handle successful."</span> <span class="k">else</span><span class="p">:</span> <span class="nb">print</span> <span class="s2">"CRITICAL: Modify handle value returned unexpected value."</span> <span class="nb">print</span> <span class="s2">"Expected : "</span> <span class="o">+</span> <span class="n">VALUE_AFTER</span> <span class="nb">print</span> <span class="s2">"Returned : "</span> <span class="o">+</span> <span class="n">get_value_result</span> </code></pre></div> <h3 id="delete-test-handle">Delete test handle<a class="headerlink" href="#delete-test-handle" title="Permanent link">#</a></h3> <p>The library supports the Deletion of the handle and its handle record with the <code>delete_function</code>. <a href="https://eudat-b2handle.github.io/B2HANDLE/handleclient.html#basic-handle-interaction">Basic interactions</a></p> <p>In this example we are going to delete the handle we previously created.</p> <div class="highlight"><pre><span></span><code> <span class="c1"># Delete test</span> <span class="n">delete_result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">delete_handle</span><span class="p">(</span><span class="n">handle</span><span class="p">)</span> <span class="nb">print</span> <span class="s2">"OK: Delete handle successfully."</span> </code></pre></div> <h2 id="quick-links-to-technical-documentation">Quick Links to Technical Documentation<a class="headerlink" href="#quick-links-to-technical-documentation" title="Permanent link">#</a></h2> <ul> <li><a href="http://eudat-b2handle.github.io/B2HANDLE/handleclient.html#instantiation">Instantiate Client</a></li> <li><a href="http://eudat-b2handle.github.io/B2HANDLE/handleclient.html#authentication">Authentication</a></li> <li><a href="http://eudat-b2handle.github.io/B2HANDLE/handleclient.html#authentication-using-client-certificates">Authentication using client certificates</a></li> <li><a href="http://eudat-b2handle.github.io/B2HANDLE/handleclient.html#authentication-using-username-and-password">Authentication using username and password</a></li> <li><a href="http://eudat-b2handle.github.io/B2HANDLE/handleclient.html#basic-handle-interaction">Basic Handle interaction</a></li> <li><a href="http://eudat-b2handle.github.io/B2HANDLE/handleclient.html#managing-multiple-urls-with-10320-loc">Managing multiple URLs with 10320/loc</a></li> <li><a href="http://eudat-b2handle.github.io/B2HANDLE/handleclient.html#full-method-documentation">Full method documentation</a></li> <li><a href="http://eudat-b2handle.github.io/B2HANDLE/handleclient.html#constructors">Constructors</a></li> <li><a href="http://eudat-b2handle.github.io/B2HANDLE/handleclient.html#handle-record-methods">Handle record methods</a></li> <li><a href="http://eudat-b2handle.github.io/B2HANDLE/handleclient.html#methods-for-managing-10320-loc-entries">Methods for managing 10320/loc entries</a></li> <li><a href="http://eudat-b2handle.github.io/B2HANDLE/handleclient.html#helper-methods">Helper methods</a></li> <li><a href="http://eudat-b2handle.github.io/B2HANDLE/handleclient.html#module-b2handle.utilhandle">Utilities</a></li> <li><a href="http://eudat-b2handle.github.io/B2HANDLE/handleclient.html#module-b2handle.clientcredentials">Client credentials</a></li> <li><a href="http://eudat-b2handle.github.io/B2HANDLE/handleclient.html#module-b2handle.handleexceptions">Exceptions</a></li> </ul> <p>Last update: 09.11.2023</p> </article> </div> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type="button" class="md-top md-icon" data-md-component="top" hidden> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Back to top </button> </main> <footer class="md-footer"> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class="md-copyright"> <div class="md-copyright__highlight"> This documentation is licensed under <a href='https://creativecommons.org/licenses/by-sa/3.0/legalcode'>CC BY-SA 3.0 <img src='/images/cc-by-sa_icon.png'></a> <!-- a href=''>Imprint</a --> </div> </div> <div class="md-social"> <a href="https://gitlab.eudat.eu/sa.apweiler/eudat-documentation" target="_blank" rel="noopener" title="gitlab.eudat.eu" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><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.6m-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.3m44.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.9M244.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 8M97.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-1m-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.7m32.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-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </a> </div> </div> </div> </footer> </div> <div class="md-dialog" data-md-component="dialog"> <div class="md-dialog__inner md-typeset"></div> </div> <script id="__config" type="application/json">{"base": "../..", "features": ["navigation.sections", "navigation.tabs", "navigation.top", "toc.integrate", "search.suggest"], "search": "../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script> <script src="../../assets/javascripts/bundle.83f73b43.min.js"></script> </body> </html>