def dynamo_table(name): table = Mock() table.name = name def query(**kwargs): if table.name in resources.dynamo: if 'KeyConditionExpression' in kwargs: return { 'Items': filter_dynamo(kwargs['KeyConditionExpression'], resources.dynamo[table.name]) } return {'Items': []} def scan(**kwargs): if table.name in resources.dynamo: if 'FilterExpression' in kwargs: return { 'Items': list( filter( lambda x: x[kwargs['FilterExpression'].name ]['S'] == kwargs[ 'FilterExpression'].value, resources.dynamo[table.name])) } return {'Items': []} table.query = query table.scan = scan return table
def client(self, service_name, region_name=None, api_version=None, use_ssl=True, verify=None, endpoint_url=None, aws_access_key_id=None, aws_secret_access_key=None, aws_session_token=None, config=None): client = Mock() client.name = service_name setattr(resources, service_name, client) def s3list_objects_v2(Bucket, Prefix): parts = Prefix.split('/') log_type = parts[0] batch = parts[1] result = [] if Bucket in resources.buckets and log_type in resources.buckets[Bucket] and \ batch in resources.buckets[Bucket][log_type]: for item in resources.buckets[Bucket][log_type][batch]: for obj in list(item.keys()): result.append(obj) return {'KeyCount': len(result), 'Data': result} def s3put_object(Body, Bucket, Key, ContentType=None): parts = Key.split('/') log_type = parts[0] batch = parts[1] update_dict(resources.buckets, Bucket, log_type, batch) resources.buckets[Bucket][log_type][batch].append({Key: Body}) def dynamo_put_item(TableName, Item): if TableName not in resources.dynamo: resources.dynamo[TableName] = [] if 'uid' in Item: for i in range(len(resources.dynamo[TableName])): if resources.dynamo[TableName][i]['uid']['S'] == Item[ 'uid']['S']: del resources.dynamo[TableName][i] resources.dynamo[TableName].append(Item) if client.name == 's3': client.list_objects_v2 = s3list_objects_v2 client.put_object = s3put_object if client.name == 'dynamodb': client.put_item = dynamo_put_item client.create_table = lambda *args, **kwargs: None return client