"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" import requests as requests_http from .sdkconfiguration import SDKConfiguration from airbyte_api import api, errors, models, utils from airbyte_api._hooks import AfterErrorContext, AfterSuccessContext, BeforeRequestContext, HookContext from typing import Optional class Sources: sdk_configuration: SDKConfiguration def __init__(self, sdk_config: SDKConfiguration) -> None: self.sdk_configuration = sdk_config def create_source(self, request: Optional[models.SourceCreateRequest] = None) -> api.CreateSourceResponse: r"""Create a source Creates a source given a name, workspace id, and a json blob containing the configuration for the source. """ hook_ctx = HookContext(operation_id='createSource', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) url = base_url + '/sources' if callable(self.sdk_configuration.security): headers, query_params = utils.get_security(self.sdk_configuration.security()) else: headers, query_params = utils.get_security(self.sdk_configuration.security) req_content_type, data, form = utils.serialize_request_body(request, Optional[models.SourceCreateRequest], "request", False, True, 'json') if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): headers['content-type'] = req_content_type headers['Accept'] = 'application/json' headers['user-agent'] = self.sdk_configuration.user_agent client = self.sdk_configuration.client try: req = client.prepare_request(requests_http.Request('POST', url, params=query_params, data=data, files=form, headers=headers)) req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) if e is not None: raise e if utils.match_status_codes(['400','403','4XX','5XX'], http_res.status_code): result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) if e is not None: raise e if result is not None: http_res = result else: http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) res = api.CreateSourceResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: # pylint: disable=no-else-return if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[models.SourceResponse]) res.source_response = out else: content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code == 400 or http_res.status_code == 403 or http_res.status_code >= 400 and http_res.status_code < 500: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) else: raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res def delete_source(self, request: api.DeleteSourceRequest) -> api.DeleteSourceResponse: r"""Delete a Source""" hook_ctx = HookContext(operation_id='deleteSource', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) url = utils.generate_url(base_url, '/sources/{sourceId}', request) if callable(self.sdk_configuration.security): headers, query_params = utils.get_security(self.sdk_configuration.security()) else: headers, query_params = utils.get_security(self.sdk_configuration.security) headers['Accept'] = '*/*' headers['user-agent'] = self.sdk_configuration.user_agent client = self.sdk_configuration.client try: req = client.prepare_request(requests_http.Request('DELETE', url, params=query_params, headers=headers)) req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) if e is not None: raise e if utils.match_status_codes(['403','404','4XX','5XX'], http_res.status_code): result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) if e is not None: raise e if result is not None: http_res = result else: http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) res = api.DeleteSourceResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 204: pass elif http_res.status_code == 403 or http_res.status_code == 404 or http_res.status_code >= 400 and http_res.status_code < 500: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) else: raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res def get_source(self, request: api.GetSourceRequest) -> api.GetSourceResponse: r"""Get Source details""" hook_ctx = HookContext(operation_id='getSource', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) url = utils.generate_url(base_url, '/sources/{sourceId}', request) if callable(self.sdk_configuration.security): headers, query_params = utils.get_security(self.sdk_configuration.security()) else: headers, query_params = utils.get_security(self.sdk_configuration.security) query_params = { **utils.get_query_params(request), **query_params } headers['Accept'] = 'application/json' headers['user-agent'] = self.sdk_configuration.user_agent client = self.sdk_configuration.client try: req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) if e is not None: raise e if utils.match_status_codes(['403','404','4XX','5XX'], http_res.status_code): result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) if e is not None: raise e if result is not None: http_res = result else: http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) res = api.GetSourceResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: # pylint: disable=no-else-return if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[models.SourceResponse]) res.source_response = out else: content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code == 403 or http_res.status_code == 404 or http_res.status_code >= 400 and http_res.status_code < 500: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) else: raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res def initiate_o_auth(self, request: models.InitiateOauthRequest) -> api.InitiateOAuthResponse: r"""Initiate OAuth for a source Given a source ID, workspace ID, and redirect URL, initiates OAuth for the source. This returns a fully formed URL for performing user authentication against the relevant source identity provider (IdP). Once authentication has been completed, the IdP will redirect to an Airbyte endpoint which will save the access and refresh tokens off as a secret and return the secret ID to the redirect URL specified in the `secret_id` query string parameter. That secret ID can be used to create a source with credentials in place of actual tokens. """ hook_ctx = HookContext(operation_id='initiateOAuth', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) url = base_url + '/sources/initiateOAuth' if callable(self.sdk_configuration.security): headers, query_params = utils.get_security(self.sdk_configuration.security()) else: headers, query_params = utils.get_security(self.sdk_configuration.security) req_content_type, data, form = utils.serialize_request_body(request, models.InitiateOauthRequest, "request", False, False, 'json') if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): headers['content-type'] = req_content_type if data is None and form is None: raise Exception('request body is required') headers['Accept'] = '*/*' headers['user-agent'] = self.sdk_configuration.user_agent client = self.sdk_configuration.client try: req = client.prepare_request(requests_http.Request('POST', url, params=query_params, data=data, files=form, headers=headers)) req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) if e is not None: raise e if utils.match_status_codes(['400','403','4XX','5XX'], http_res.status_code): result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) if e is not None: raise e if result is not None: http_res = result else: http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) res = api.InitiateOAuthResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: pass elif http_res.status_code == 400 or http_res.status_code == 403 or http_res.status_code >= 400 and http_res.status_code < 500: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) else: raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res def list_sources(self, request: api.ListSourcesRequest) -> api.ListSourcesResponse: r"""List sources""" hook_ctx = HookContext(operation_id='listSources', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) url = base_url + '/sources' if callable(self.sdk_configuration.security): headers, query_params = utils.get_security(self.sdk_configuration.security()) else: headers, query_params = utils.get_security(self.sdk_configuration.security) query_params = { **utils.get_query_params(request), **query_params } headers['Accept'] = 'application/json' headers['user-agent'] = self.sdk_configuration.user_agent client = self.sdk_configuration.client try: req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) if e is not None: raise e if utils.match_status_codes(['403','404','4XX','5XX'], http_res.status_code): result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) if e is not None: raise e if result is not None: http_res = result else: http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) res = api.ListSourcesResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: # pylint: disable=no-else-return if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[models.SourcesResponse]) res.sources_response = out else: content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code == 403 or http_res.status_code == 404 or http_res.status_code >= 400 and http_res.status_code < 500: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) else: raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res def patch_source(self, request: api.PatchSourceRequest) -> api.PatchSourceResponse: r"""Update a Source""" hook_ctx = HookContext(operation_id='patchSource', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) url = utils.generate_url(base_url, '/sources/{sourceId}', request) if callable(self.sdk_configuration.security): headers, query_params = utils.get_security(self.sdk_configuration.security()) else: headers, query_params = utils.get_security(self.sdk_configuration.security) req_content_type, data, form = utils.serialize_request_body(request, api.PatchSourceRequest, "source_patch_request", False, True, 'json') if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): headers['content-type'] = req_content_type headers['Accept'] = 'application/json' headers['user-agent'] = self.sdk_configuration.user_agent client = self.sdk_configuration.client try: req = client.prepare_request(requests_http.Request('PATCH', url, params=query_params, data=data, files=form, headers=headers)) req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) if e is not None: raise e if utils.match_status_codes(['403','404','4XX','5XX'], http_res.status_code): result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) if e is not None: raise e if result is not None: http_res = result else: http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) res = api.PatchSourceResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: # pylint: disable=no-else-return if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[models.SourceResponse]) res.source_response = out else: content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code == 403 or http_res.status_code == 404 or http_res.status_code >= 400 and http_res.status_code < 500: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) else: raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res def put_source(self, request: api.PutSourceRequest) -> api.PutSourceResponse: r"""Update a Source and fully overwrite it""" hook_ctx = HookContext(operation_id='putSource', oauth2_scopes=[], security_source=self.sdk_configuration.security) base_url = utils.template_url(*self.sdk_configuration.get_server_details()) url = utils.generate_url(base_url, '/sources/{sourceId}', request) if callable(self.sdk_configuration.security): headers, query_params = utils.get_security(self.sdk_configuration.security()) else: headers, query_params = utils.get_security(self.sdk_configuration.security) req_content_type, data, form = utils.serialize_request_body(request, api.PutSourceRequest, "source_put_request", False, True, 'json') if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): headers['content-type'] = req_content_type headers['Accept'] = 'application/json' headers['user-agent'] = self.sdk_configuration.user_agent client = self.sdk_configuration.client try: req = client.prepare_request(requests_http.Request('PUT', url, params=query_params, data=data, files=form, headers=headers)) req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) http_res = client.send(req) except Exception as e: _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) if e is not None: raise e if utils.match_status_codes(['403','404','4XX','5XX'], http_res.status_code): result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) if e is not None: raise e if result is not None: http_res = result else: http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) res = api.PutSourceResponse(status_code=http_res.status_code, content_type=http_res.headers.get('Content-Type') or '', raw_response=http_res) if http_res.status_code == 200: # pylint: disable=no-else-return if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): out = utils.unmarshal_json(http_res.text, Optional[models.SourceResponse]) res.source_response = out else: content_type = http_res.headers.get('Content-Type') raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) elif http_res.status_code == 403 or http_res.status_code == 404 or http_res.status_code >= 400 and http_res.status_code < 500: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) elif http_res.status_code >= 500 and http_res.status_code < 600: raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) else: raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) return res