Completed DynamoDBv2 endpoints
This commit is contained in:
parent
92a0d96101
commit
ab767416fe
6 changed files with 208 additions and 71 deletions
|
|
@ -5,9 +5,11 @@ import decimal
|
|||
import json
|
||||
import re
|
||||
|
||||
import boto3
|
||||
from moto.compat import OrderedDict
|
||||
from moto.core import BaseBackend, BaseModel
|
||||
from moto.core.utils import unix_time
|
||||
from moto.core.exceptions import JsonRESTError
|
||||
from .comparisons import get_comparison_func, get_filter_expression, Op
|
||||
|
||||
|
||||
|
|
@ -271,6 +273,10 @@ class Table(BaseModel):
|
|||
self.items = defaultdict(dict)
|
||||
self.table_arn = self._generate_arn(table_name)
|
||||
self.tags = []
|
||||
self.ttl = {
|
||||
'TimeToLiveStatus': 'DISABLED' # One of 'ENABLING'|'DISABLING'|'ENABLED'|'DISABLED',
|
||||
# 'AttributeName': 'string' # Can contain this
|
||||
}
|
||||
|
||||
def _generate_arn(self, name):
|
||||
return 'arn:aws:dynamodb:us-east-1:123456789011:table/' + name
|
||||
|
|
@ -577,9 +583,16 @@ class Table(BaseModel):
|
|||
|
||||
class DynamoDBBackend(BaseBackend):
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self, region_name=None):
|
||||
self.region_name = region_name
|
||||
self.tables = OrderedDict()
|
||||
|
||||
def reset(self):
|
||||
region_name = self.region_name
|
||||
|
||||
self.__dict__ = {}
|
||||
self.__init__(region_name)
|
||||
|
||||
def create_table(self, name, **params):
|
||||
if name in self.tables:
|
||||
return None
|
||||
|
|
@ -595,6 +608,11 @@ class DynamoDBBackend(BaseBackend):
|
|||
if self.tables[table].table_arn == table_arn:
|
||||
self.tables[table].tags.extend(tags)
|
||||
|
||||
def untag_resource(self, table_arn, tag_keys):
|
||||
for table in self.tables:
|
||||
if self.tables[table].table_arn == table_arn:
|
||||
self.tables[table].tags = [tag for tag in self.tables[table].tags if tag['Key'] not in tag_keys]
|
||||
|
||||
def list_tags_of_resource(self, table_arn):
|
||||
required_table = None
|
||||
for table in self.tables:
|
||||
|
|
@ -796,5 +814,28 @@ class DynamoDBBackend(BaseBackend):
|
|||
hash_key, range_key = self.get_keys_value(table, keys)
|
||||
return table.delete_item(hash_key, range_key)
|
||||
|
||||
def update_ttl(self, table_name, ttl_spec):
|
||||
table = self.tables.get(table_name)
|
||||
if table is None:
|
||||
raise JsonRESTError('ResourceNotFound', 'Table not found')
|
||||
|
||||
dynamodb_backend2 = DynamoDBBackend()
|
||||
if 'Enabled' not in ttl_spec or 'AttributeName' not in ttl_spec:
|
||||
raise JsonRESTError('InvalidParameterValue',
|
||||
'TimeToLiveSpecification does not contain Enabled and AttributeName')
|
||||
|
||||
if ttl_spec['Enabled']:
|
||||
table.ttl['TimeToLiveStatus'] = 'ENABLED'
|
||||
else:
|
||||
table.ttl['TimeToLiveStatus'] = 'DISABLED'
|
||||
table.ttl['AttributeName'] = ttl_spec['AttributeName']
|
||||
|
||||
def describe_ttl(self, table_name):
|
||||
table = self.tables.get(table_name)
|
||||
if table is None:
|
||||
raise JsonRESTError('ResourceNotFound', 'Table not found')
|
||||
|
||||
return table.ttl
|
||||
|
||||
|
||||
available_regions = boto3.session.Session().get_available_regions("dynamodb")
|
||||
dynamodb_backends = {region: DynamoDBBackend(region_name=region) for region in available_regions}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue