shared.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. """Shared utilities for all Lambda functions."""
  2. import os
  3. import json
  4. import time
  5. import boto3
  6. PROJECT = os.environ.get('PROJECT', 'sp-transcribe')
  7. S3_BUCKET = os.environ.get('S3_BUCKET', '')
  8. USERS_TABLE = os.environ.get('USERS_TABLE', '')
  9. JOBS_TABLE = os.environ.get('JOBS_TABLE', '')
  10. SSM_PREFIX = os.environ.get('SSM_PREFIX', '/sp-transcribe')
  11. _ssm_cache = {}
  12. def get_ssm(name: str) -> str:
  13. if name in _ssm_cache:
  14. return _ssm_cache[name]
  15. ssm = boto3.client('ssm')
  16. resp = ssm.get_parameter(Name=f"{SSM_PREFIX}/{name}", WithDecryption=True)
  17. val = resp['Parameter']['Value']
  18. _ssm_cache[name] = val
  19. return val
  20. def get_user(api_key: str) -> dict | None:
  21. ddb = boto3.resource('dynamodb')
  22. table = ddb.Table(USERS_TABLE)
  23. resp = table.get_item(Key={'api_key': api_key})
  24. return resp.get('Item')
  25. def update_job(job_id: str, **kwargs):
  26. ddb = boto3.resource('dynamodb')
  27. table = ddb.Table(JOBS_TABLE)
  28. expr_parts = []
  29. values = {}
  30. names = {}
  31. for k, v in kwargs.items():
  32. safe = k.replace('.', '_')
  33. expr_parts.append(f"#{safe} = :{safe}")
  34. values[f":{safe}"] = v
  35. names[f"#{safe}"] = k
  36. table.update_item(
  37. Key={'job_id': job_id},
  38. UpdateExpression="SET " + ", ".join(expr_parts),
  39. ExpressionAttributeValues=values,
  40. ExpressionAttributeNames=names,
  41. )
  42. def api_response(status: int, body: dict) -> dict:
  43. return {
  44. 'statusCode': status,
  45. 'headers': {'Content-Type': 'application/json'},
  46. 'body': json.dumps(body),
  47. }