def from_json_value(cls, value: JsonValue) -> "BucketFs": value_obj = ensureJsonObject(value) raw_token = value_obj.get("ebrains_user_token") if raw_token is not None: token = UserToken.from_json_value(raw_token) else: token_resut = UserToken.get_global_login_token() if isinstance(token_resut, UsageError): raise token_resut token = token_resut return BucketFs( bucket_name=ensureJsonString(value_obj.get("bucket_name")), prefix=PurePosixPath(ensureJsonString(value_obj.get("prefix"))), ebrains_user_token=token)
def __setstate__(self, value_obj: Dict[str, Any]): raw_token = value_obj.get("ebrains_user_token") if raw_token is not None: token = UserToken.from_json_value(raw_token) else: token_resut = UserToken.get_global_login_token() if isinstance(token_resut, UsageError): raise token_resut token = token_resut self.__init__( bucket_name=ensureJsonString(value_obj.get("bucket_name")), prefix=PurePosixPath(ensureJsonString(value_obj.get("prefix"))), ebrains_user_token=token, )
async def get_user_token( self, *, code: str, redirect_uri: Url, http_client_session: ClientSession) -> "UserToken": if not self.can_redirect_to(redirect_uri): raise ValueError(f"Can't redirect to {redirect_uri.raw}") data = { "grant_type": "authorization_code", "code": code, "redirect_uri": redirect_uri.raw, "client_id": self.clientId, "client_secret": self.secret, } resp = await http_client_session.request( method="post", url= "https://iam.ebrains.eu/auth/realms/hbp/protocol/openid-connect/token", allow_redirects=False, data=data) resp.raise_for_status() data = ensureJsonObject(await resp.json()) return UserToken.from_json_value(data)