|
| 1 | +import hashlib |
| 2 | +import json |
| 3 | +import os |
| 4 | + |
| 5 | +import requests |
| 6 | + |
| 7 | +from .about import version |
| 8 | + |
| 9 | + |
| 10 | +class PipedreamSdkClient: |
| 11 | + def __init__(self, api_key=None, api_secret=None, sdk_host=None, sdk_protocol=None): |
| 12 | + self._sdk_version = '0.3.0' |
| 13 | + self._api_key = api_key or os.getenv('PD_SDK_API_KEY') |
| 14 | + self._api_secret = api_secret or os.getenv('PD_SDK_SECRET_KEY') |
| 15 | + self._sdk_host = ( |
| 16 | + sdk_host |
| 17 | + or os.getenv('PD_SDK_HOST') |
| 18 | + or 'sdk.m.pipedream.net' |
| 19 | + ) |
| 20 | + self._sdk_protocol = ( |
| 21 | + sdk_protocol |
| 22 | + or os.getenv('PD_SDK_PROTO') |
| 23 | + or 'https' |
| 24 | + ) |
| 25 | + |
| 26 | + def send_event(self, raw_event, exports=None, deployment=None): |
| 27 | + """Send an event to the PipedreamHQ SDK |
| 28 | +
|
| 29 | + :return: None |
| 30 | + """ |
| 31 | + # Manually create the payload so a signature can be generated |
| 32 | + event = {'raw_event': raw_event} |
| 33 | + data = json.dumps(event) |
| 34 | + headers = { |
| 35 | + 'content-type': 'application/json', |
| 36 | + 'user-agent': f'pipedream-sdk:python/{version}', |
| 37 | + 'x-pd-sdk-version': self._sdk_version, |
| 38 | + } |
| 39 | + |
| 40 | + if self._api_secret: |
| 41 | + headers['x-pd-sig'] = self._sign(data) |
| 42 | + # TODO: warn if no secret is present |
| 43 | + |
| 44 | + #TODO: raise exception if POST fails |
| 45 | + response = requests.post(self._request_uri(deployment), data=data, headers=headers) |
| 46 | + import pdb; pdb.set_trace() |
| 47 | + |
| 48 | + def _request_uri(self, deployment): |
| 49 | + uri_parts = [ |
| 50 | + f'{self._sdk_protocol}://{self._sdk_host}', |
| 51 | + 'pipelines', |
| 52 | + self._api_key, |
| 53 | + ] |
| 54 | + if deployment: |
| 55 | + uri_parts += ['deployments', deployment] |
| 56 | + uri_parts.append('events') |
| 57 | + return '/'.join(uri_parts) |
| 58 | + |
| 59 | + def _sign(self, data): |
| 60 | + sig = hashlib.sha256(self._api_secret.encode('utf-8')) |
| 61 | + sig.update(data.encode('utf-8')) |
| 62 | + return sig.hexdigest() |
| 63 | + |
0 commit comments