def test_put_item(self): """ TableConnection.put_item """ conn = TableConnection(self.test_table_name) with patch(PATCH_METHOD) as req: req.return_value = HttpOK(), DESCRIBE_TABLE_DATA conn.describe_table() with patch(PATCH_METHOD) as req: req.return_value = HttpOK(), {} conn.put_item( 'foo-key', range_key='foo-range-key', attributes={'ForumName': 'foo-value'} ) params = { 'return_consumed_capacity': 'TOTAL', 'table_name': self.test_table_name, 'item': {'ForumName': {'S': 'foo-value'}, 'Subject': {'S': 'foo-range-key'}} } self.assertEqual(req.call_args[1], params) with patch(PATCH_METHOD) as req: req.return_value = HttpOK(), {} conn.put_item( 'foo-key', range_key='foo-range-key', attributes={'ForumName': 'foo-value'} ) params = { 'return_consumed_capacity': 'TOTAL', 'item': { 'ForumName': { 'S': 'foo-value' }, 'Subject': { 'S': 'foo-range-key' } }, 'table_name': self.test_table_name } self.assertEqual(req.call_args[1], params)
def test_put_item(self): """ TableConnection.put_item """ conn = TableConnection(self.test_table_name) with patch(PATCH_METHOD) as req: req.return_value = DESCRIBE_TABLE_DATA conn.describe_table() with patch(PATCH_METHOD) as req: req.return_value = {} conn.put_item("foo-key", range_key="foo-range-key", attributes={"ForumName": "foo-value"}) params = { "ReturnConsumedCapacity": "TOTAL", "TableName": self.test_table_name, "Item": {"ForumName": {"S": "foo-value"}, "Subject": {"S": "foo-range-key"}}, } self.assertEqual(req.call_args[0][1], params) with patch(PATCH_METHOD) as req: req.return_value = {} conn.put_item("foo-key", range_key="foo-range-key", attributes={"ForumName": "foo-value"}) params = { "ReturnConsumedCapacity": "TOTAL", "Item": {"ForumName": {"S": "foo-value"}, "Subject": {"S": "foo-range-key"}}, "TableName": self.test_table_name, } self.assertEqual(req.call_args[0][1], params) with patch(PATCH_METHOD) as req: req.return_value = HttpOK(), {} conn.put_item( "foo-key", range_key="foo-range-key", attributes={"ForumName": "foo-value"}, conditional_operator="and", expected={"ForumName": {"Exists": False}}, ) params = { "ReturnConsumedCapacity": "TOTAL", "Item": {"ForumName": {"S": "foo-value"}, "Subject": {"S": "foo-range-key"}}, "TableName": self.test_table_name, "ConditionalOperator": "AND", "Expected": {"ForumName": {"Exists": False}}, } self.assertEqual(req.call_args[0][1], params)
def test_table_integration(ddb_url): table_name = 'pynamodb-ci-table' # For use with a fake dynamodb connection # See: http://aws.amazon.com/dynamodb/developer-resources/ conn = TableConnection(table_name, host=ddb_url) print(conn) print("conn.describe_table...") table = None try: table = conn.describe_table() except TableDoesNotExist: params = { 'read_capacity_units': 1, 'write_capacity_units': 1, 'attribute_definitions': [{ 'attribute_type': STRING, 'attribute_name': 'Forum' }, { 'attribute_type': STRING, 'attribute_name': 'Thread' }, { 'attribute_type': STRING, 'attribute_name': 'AltKey' }, { 'attribute_type': NUMBER, 'attribute_name': 'number' }], 'key_schema': [{ 'key_type': HASH, 'attribute_name': 'Forum' }, { 'key_type': RANGE, 'attribute_name': 'Thread' }], 'global_secondary_indexes': [{ 'index_name': 'alt-index', 'key_schema': [{ 'KeyType': 'HASH', 'AttributeName': 'AltKey' }], 'projection': { 'ProjectionType': 'KEYS_ONLY' }, 'provisioned_throughput': { 'ReadCapacityUnits': 1, 'WriteCapacityUnits': 1, } }], 'local_secondary_indexes': [{ 'index_name': 'view-index', 'key_schema': [{ 'KeyType': 'HASH', 'AttributeName': 'Forum' }, { 'KeyType': 'RANGE', 'AttributeName': 'AltKey' }], 'projection': { 'ProjectionType': 'KEYS_ONLY' } }] } print("conn.create_table...") conn.create_table(**params) while table is None: time.sleep(2) table = conn.describe_table() while table['TableStatus'] == 'CREATING': time.sleep(5) print(table['TableStatus']) table = conn.describe_table() print("conn.update_table...") conn.update_table(read_capacity_units=table.get( PROVISIONED_THROUGHPUT).get(READ_CAPACITY_UNITS) + 1, write_capacity_units=2) table = conn.describe_table() while table['TableStatus'] != 'ACTIVE': time.sleep(2) table = conn.describe_table() print("conn.put_item") conn.put_item( 'item1-hash', range_key='item1-range', attributes={'foo': { 'S': 'bar' }}, condition=NotExists(Path('Forum')), ) conn.get_item('item1-hash', range_key='item1-range') conn.delete_item('item1-hash', range_key='item1-range') items = [] for i in range(10): items.append({"Forum": "FooForum", "Thread": "thread-{}".format(i)}) print("conn.batch_write_items...") conn.batch_write_item(put_items=items) print("conn.batch_get_items...") data = conn.batch_get_item(items) print("conn.query...") conn.query( "FooForum", range_key_condition=(BeginsWith(Path('Thread'), Value('thread'))), ) print("conn.scan...") conn.scan() print("conn.delete_table...") conn.delete_table()
print("conn.update_table...") conn.update_table( read_capacity_units=table.get(PROVISIONED_THROUGHPUT).get(READ_CAPACITY_UNITS) + 1, write_capacity_units=2 ) table = conn.describe_table() while table['TableStatus'] != 'ACTIVE': time.sleep(2) table = conn.describe_table() print("conn.put_item") conn.put_item( 'item1-hash', range_key='item1-range', attributes={'foo': {'S': 'bar'}}, expected={'Forum': {'Exists': False}} ) conn.get_item( 'item1-hash', range_key='item1-range' ) conn.delete_item( 'item1-hash', range_key='item1-range' ) items = [] for i in range(10): items.append( {"Forum": "FooForum", "Thread": "thread-{0}".format(i)}
def test_put_item(self): """ TableConnection.put_item """ conn = TableConnection(self.test_table_name) with patch(PATCH_METHOD) as req: req.return_value = DESCRIBE_TABLE_DATA conn.describe_table() with patch(PATCH_METHOD) as req: req.return_value = {} conn.put_item('foo-key', range_key='foo-range-key', attributes={'ForumName': 'foo-value'}) params = { 'ReturnConsumedCapacity': 'TOTAL', 'TableName': self.test_table_name, 'Item': { 'ForumName': { 'S': 'foo-value' }, 'Subject': { 'S': 'foo-range-key' } } } self.assertEqual(req.call_args[0][1], params) with patch(PATCH_METHOD) as req: req.return_value = {} conn.put_item('foo-key', range_key='foo-range-key', attributes={'ForumName': 'foo-value'}) params = { 'ReturnConsumedCapacity': 'TOTAL', 'Item': { 'ForumName': { 'S': 'foo-value' }, 'Subject': { 'S': 'foo-range-key' } }, 'TableName': self.test_table_name } self.assertEqual(req.call_args[0][1], params) with patch(PATCH_METHOD) as req: req.return_value = HttpOK(), {} conn.put_item('foo-key', range_key='foo-range-key', attributes={'ForumName': 'foo-value'}, condition=Path('ForumName').does_not_exist()) params = { 'ReturnConsumedCapacity': 'TOTAL', 'Item': { 'ForumName': { 'S': 'foo-value' }, 'Subject': { 'S': 'foo-range-key' } }, 'TableName': self.test_table_name, 'ConditionExpression': 'attribute_not_exists (#0)', 'ExpressionAttributeNames': { '#0': 'ForumName' } } self.assertEqual(req.call_args[0][1], params) with patch(PATCH_METHOD) as req: req.return_value = HttpOK(), {} conn.put_item('foo-key', range_key='foo-range-key', attributes={'ForumName': 'foo-value'}, conditional_operator='and', expected={'ForumName': { 'Exists': False }}) params = { 'ReturnConsumedCapacity': 'TOTAL', 'Item': { 'ForumName': { 'S': 'foo-value' }, 'Subject': { 'S': 'foo-range-key' } }, 'TableName': self.test_table_name, 'ConditionExpression': 'attribute_not_exists (#0)', 'ExpressionAttributeNames': { '#0': 'ForumName' } } self.assertEqual(req.call_args[0][1], params)
def test_put_item(self): """ TableConnection.put_item """ conn = TableConnection(self.test_table_name) with patch(PATCH_METHOD) as req: req.return_value = HttpOK(), DESCRIBE_TABLE_DATA conn.describe_table() with patch(PATCH_METHOD) as req: req.return_value = HttpOK(), {} conn.put_item('foo-key', range_key='foo-range-key', attributes={'ForumName': 'foo-value'}) params = { 'return_consumed_capacity': 'TOTAL', 'table_name': self.test_table_name, 'item': { 'ForumName': { 'S': 'foo-value' }, 'Subject': { 'S': 'foo-range-key' } } } self.assertEqual(req.call_args[1], params) with patch(PATCH_METHOD) as req: req.return_value = HttpOK(), {} conn.put_item('foo-key', range_key='foo-range-key', attributes={'ForumName': 'foo-value'}) params = { 'return_consumed_capacity': 'TOTAL', 'item': { 'ForumName': { 'S': 'foo-value' }, 'Subject': { 'S': 'foo-range-key' } }, 'table_name': self.test_table_name } self.assertEqual(req.call_args[1], params) with patch(PATCH_METHOD) as req: req.return_value = HttpOK(), {} conn.put_item('foo-key', range_key='foo-range-key', attributes={'ForumName': 'foo-value'}, conditional_operator='and', expected={'ForumName': { 'Exists': False }}) params = { 'return_consumed_capacity': 'TOTAL', 'item': { 'ForumName': { 'S': 'foo-value' }, 'Subject': { 'S': 'foo-range-key' } }, 'table_name': self.test_table_name, 'conditional_operator': 'AND', 'expected': { 'ForumName': { 'Exists': False } } } self.assertEqual(req.call_args[1], params)
def test_put_item(self): """ TableConnection.put_item """ conn = TableConnection(self.test_table_name) with patch(PATCH_METHOD) as req: req.return_value = DESCRIBE_TABLE_DATA conn.describe_table() with patch(PATCH_METHOD) as req: req.return_value = {} conn.put_item( 'foo-key', range_key='foo-range-key', attributes={'ForumName': 'foo-value'} ) params = { 'ReturnConsumedCapacity': 'TOTAL', 'TableName': self.test_table_name, 'Item': {'ForumName': {'S': 'foo-value'}, 'Subject': {'S': 'foo-range-key'}} } self.assertEqual(req.call_args[0][1], params) with patch(PATCH_METHOD) as req: req.return_value = {} conn.put_item( 'foo-key', range_key='foo-range-key', attributes={'ForumName': 'foo-value'} ) params = { 'ReturnConsumedCapacity': 'TOTAL', 'Item': { 'ForumName': { 'S': 'foo-value' }, 'Subject': { 'S': 'foo-range-key' } }, 'TableName': self.test_table_name } self.assertEqual(req.call_args[0][1], params) with patch(PATCH_METHOD) as req: req.return_value = HttpOK(), {} conn.put_item( 'foo-key', range_key='foo-range-key', attributes={'ForumName': 'foo-value'}, conditional_operator='and', expected={ 'ForumName': { 'Exists': False } } ) params = { 'ReturnConsumedCapacity': 'TOTAL', 'Item': { 'ForumName': { 'S': 'foo-value' }, 'Subject': { 'S': 'foo-range-key' } }, 'TableName': self.test_table_name, 'ConditionalOperator': 'AND', 'Expected': { 'ForumName': { 'Exists': False } } } self.assertEqual(req.call_args[0][1], params)
""" Example use of the TableConnection API """ from pynamodb.connection import TableConnection # Get a table connection table = TableConnection('Thread', host='http://localhost:8000') # If the table doesn't already exist, the rest of this example will not work. # Describe the table print(table.describe_table()) # Get an item print(table.get_item('hash-key', 'range-key')) # Put an item table.put_item('hash-key', 'range-key', attributes={'forum_name': 'value'}) # Delete an item table.delete_item('hash-key', 'range-key')
""" Example use of the TableConnection API """ from pynamodb.connection import TableConnection # Get a table connection table = TableConnection('table-name', host='http://localhost') # If the table doesn't already exist, the rest of this example will not work. # Describe the table print(table.describe_table()) # Get an item print(table.get_item('hash-key', 'range-key')) # Put an item table.put_item('hash-key', 'range-key', attributes={'name': 'value'}) # Delete an item table.delete_item('hash-key', 'range-key')
print("conn.update_table...") conn.update_table(read_capacity_units=table.get(PROVISIONED_THROUGHPUT).get( READ_CAPACITY_UNITS) + 1, write_capacity_units=2) table = conn.describe_table() while table['TableStatus'] != 'ACTIVE': time.sleep(2) table = conn.describe_table() print("conn.put_item") conn.put_item('item1-hash', range_key='item1-range', attributes={'foo': { 'S': 'bar' }}, expected={'Forum': { 'Exists': False }}) conn.get_item('item1-hash', range_key='item1-range') conn.delete_item('item1-hash', range_key='item1-range') items = [] for i in range(10): items.append({"Forum": "FooForum", "Thread": "thread-{0}".format(i)}) print("conn.batch_write_items...") conn.batch_write_item(put_items=items) print("conn.batch_get_items...") data = conn.batch_get_item(items) print("conn.query...") conn.query("FooForum",
""" Example use of the TableConnection API """ from pynamodb.connection import TableConnection # Get a table connection table = TableConnection("Thread", host="http://localhost:8000") # If the table doesn't already exist, the rest of this example will not work. # Describe the table print(table.describe_table()) # Get an item print(table.get_item("hash-key", "range-key")) # Put an item table.put_item("hash-key", "range-key", attributes={"forum_name": "value"}) # Delete an item table.delete_item("hash-key", "range-key")