· 9 years ago · Dec 29, 2016, 09:58 AM
1Python 2.7.4 (default, Apr 19 2013, 18:28:01)
2[GCC 4.7.3] on linux2
3Type "help", "copyright", "credits" or "license" for more information.
4>>> import boto
5>>> print(boto.Version)
62.19.0
7>>>
8
9ubuntu@mailapp.stat.com:~/stat/tools$ python js-dbd-test.py
10DynamoDB table: emails
11{u'Table': {u'AttributeDefinitions': [{u'AttributeName': u'messageid', u'AttributeType': u'S'}], u'ProvisionedThroughput': {u'NumberOfDecreasesToday': 0, u'WriteCapacityUnits': 1, u'ReadCapacityUnits': 1}, u'TableSizeBytes': 153, u'TableName': u'emails', u'TableStatus': u'ACTIVE', u'KeySchema': [{u'KeyType': u'HASH', u'AttributeName': u'messageid'}], u'ItemCount': 1, u'CreationDateTime': 1366430267.719}}
12DynamoDB table: notes
13{u'Table': {u'ProvisionedThroughput': {u'NumberOfDecreasesToday': 0, u'WriteCapacityUnits': 1, u'ReadCapacityUnits': 1}, u'TableSizeBytes': 0, u'ItemCount': 0, u'TableName': u'notes', u'TableStatus': u'DELETING'}}
14DynamoDB table: users
15{u'Table': {u'AttributeDefinitions': [{u'AttributeName': u'submissionid', u'AttributeType': u'S'}, {u'AttributeName': u'userid', u'AttributeType': u'S'}], u'ProvisionedThroughput': {u'NumberOfDecreasesToday': 0, u'WriteCapacityUnits': 1, u'ReadCapacityUnits': 1}, u'TableSizeBytes': 0, u'TableName': u'users', u'TableStatus': u'ACTIVE', u'KeySchema': [{u'KeyType': u'HASH', u'AttributeName': u'submissionid'}, {u'KeyType': u'RANGE', u'AttributeName': u'userid'}], u'ItemCount': 0, u'CreationDateTime': 1386161175.525}}
16Deleting table....
17waiting....
18ACTIVE
19ACTIVE
20Traceback (most recent call last):
21 File "js-dbd-test.py", line 53, in <module>
22 notes.delete()
23 File "/home/ubuntu/stat/local/lib/python2.7/site-packages/boto/dynamodb2/table.py", line 341, in delete
24 self.connection.delete_table(self.table_name)
25 File "/home/ubuntu/stat/local/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 519, in delete_table
26 body=json.dumps(params))
27 File "/home/ubuntu/stat/local/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 1487, in make_request
28 retry_handler=self._retry_handler)
29 File "/home/ubuntu/stat/local/lib/python2.7/site-packages/boto/connection.py", line 899, in _mexe
30 status = retry_handler(response, i, next_sleep)
31 File "/home/ubuntu/stat/local/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 1530, in _retry_handler
32 data)
33boto.exception.JSONResponseError: JSONResponseError: 400 Bad Request
34{u'message': u'Attempt to change a resource which is still in use: Table is being deleted: notes', u'__type': u'com.amazonaws.dynamodb.v20120810#ResourceInUseException'}
35(stat)[~/stat/tools]
36ubuntu@mailapp.stat.com:~/stat/tools$
37
38from boto.dynamodb2 import regions
39from boto.dynamodb2.fields import HashKey, RangeKey, KeysOnlyIndex
40from boto.dynamodb2.layer1 import DynamoDBConnection
41from boto.dynamodb2.table import Table
42from boto.dynamodb2.types import NUMBER, STRING
43import boto
44global config
45import ConfigParser
46import sys
47import uuid
48from time import sleep
49
50config = ConfigParser.ConfigParser()
51config.read('~/status.conf')
52
53connection=DynamoDBConnection(
54 aws_access_key_id=config.get("statusapplication", "accesskeyid"),
55 aws_secret_access_key=config.get("statusapplication", "secretaccesskey"),
56 host='dynamodb.us-west-1.amazonaws.com',
57 region='us-west-1',
58)
59
60#get and print list of tables
61tablenames = connection.list_tables().get('TableNames', None)
62for table in tablenames:
63 print('DynamoDB table: %s' % table)
64 print(connection.describe_table(table))
65
66
67# delete table if it exists
68if 'notes' in tablenames:
69 print('Deleting table....')
70 notes = Table('notes', connection=connection)
71 tablestatus = ''
72 # gotta wait for the table to be ACTIVE before we can delete it
73 count = 0
74 while tablestatus != 'ACTIVE':
75 print('waiting....')
76 sleep(2)
77 tabledescription = connection.describe_table(table)
78 tablestatus = tabledescription['Table']['TableStatus']
79 print(tablestatus)
80 if count == 5:
81 print('Timeout waiting for table to become ACTIVE, exiting.')
82 sys.exit(1)
83 count += 1
84 sleep(5)
85 tablestatus = tabledescription['Table']['TableStatus']
86 print(tablestatus)
87 notes = None
88 notes = Table('notes', connection=connection)
89 notes.delete()
90
91
92 # wait for the table delete to complete
93 count = 0
94 tabledescription = connection.describe_table(table)
95 tablestatus = tabledescription['Table']['TableStatus']
96 while tablestatus == 'DELETING':
97 sleep(2)
98 tabledescription = connection.describe_table(table)
99 tablestatus = tabledescription['Table']['TableStatus']
100 print(tablestatus)
101 print(tabledescription)
102 if count == 5:
103 print('Table did not delete in under 10 seconds, exiting.')
104 sys.exit(1)
105 print('waiting....')
106 count += 1
107
108
109
110# create table if it does not exist
111if 'notes' not in tablenames:
112 print('Creating table....')
113 notes = Table.create('notes', schema=[
114 HashKey('noteid', data_type=STRING),
115 ], throughput={
116 'read': 1,
117 'write': 1,
118 }, connection=connection)
119
120 # wait for the table creation to complete
121 count = 0
122 tablestatus = ''
123 while tablestatus != 'ACTIVE':
124 sleep(2)
125 tabledescription = connection.describe_table(table)
126 tablestatus = tabledescription['Table']['TableStatus']
127 print(tablestatus)
128 print(tabledescription)
129 if count == 5:
130 print('Table did not create in under 10 seconds, exiting.')
131 sys.exit(1)
132 print('waiting....')
133 count += 1
134
135# get the table
136notes = Table('notes', connection=connection)
137
138sys.exit(0)
139
140import boto3
141client = boto3.client('dynamodb')
142
143client.delete_table(TableName='foo')
144
145client.get_waiter('table_not_exists').wait(TableName='foo')
146print ("table deleted")
147
148client.get_waiter('table_exists').wait(TableName='foo')