stable/freqtrade/aws/service/Persistence.py
2018-05-19 17:07:32 -07:00

80 lines
1.8 KiB
Python

import boto3
import simplejson as json
import decimal
class DecimalEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, decimal.Decimal):
if o % 1 > 0:
return float(o)
else:
return int(o)
return super(DecimalEncoder, self).default(o)
class Persistence:
"""
simplistic persistence framework
"""
def __init__(self, table):
"""
creates a new object with the associated table
:param table:
"""
self.table = table
self.db = boto3.resource('dynamodb')
def list(self):
table = self.db.Table(self.table)
response = table.scan()
result = response['Items']
while 'LastEvaluatedKey' in response:
for i in response['Items']:
result.append(i)
response = table.scan(
ExclusiveStartKey=response['LastEvaluatedKey']
)
return result
def load(self, sample):
"""
loads a given object from the database storage
:param sample:
:return:
"""
table = self.db.Table(self.table)
result = table.get_item(
Key={
'id': sample
}
)
if 'Item' in result:
return result['Item']
else:
return None
def save(self, object):
"""
saves and object to the database storage with the specific key
:param object:
:return:
"""
table = self.db.Table(self.table)
# force serialization to deal with decimal number tag
data = json.dumps(object, use_decimal=True)
data = json.loads(data, use_decimal=True)
print(data)
return table.put_item(Item=data)