diff env/lib/python3.7/site-packages/boto/dynamodb/table.py @ 5:9b1c78e6ba9c draft default tip

"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author shellac
date Mon, 01 Jun 2020 08:59:25 -0400
parents 79f47841a781
children
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/boto/dynamodb/table.py	Thu May 14 16:47:39 2020 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,546 +0,0 @@
-# Copyright (c) 2012 Mitch Garnaat http://garnaat.org/
-# Copyright (c) 2012 Amazon.com, Inc. or its affiliates.  All Rights Reserved
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish, dis-
-# tribute, sublicense, and/or sell copies of the Software, and to permit
-# persons to whom the Software is furnished to do so, subject to the fol-
-# lowing conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
-# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#
-
-from boto.dynamodb.batch import BatchList
-from boto.dynamodb.schema import Schema
-from boto.dynamodb.item import Item
-from boto.dynamodb import exceptions as dynamodb_exceptions
-import time
-
-
-class TableBatchGenerator(object):
-    """
-    A low-level generator used to page through results from
-    batch_get_item operations.
-
-    :ivar consumed_units: An integer that holds the number of
-        ConsumedCapacityUnits accumulated thus far for this
-        generator.
-    """
-
-    def __init__(self, table, keys, attributes_to_get=None,
-                 consistent_read=False):
-        self.table = table
-        self.keys = keys
-        self.consumed_units = 0
-        self.attributes_to_get = attributes_to_get
-        self.consistent_read = consistent_read
-
-    def _queue_unprocessed(self, res):
-        if u'UnprocessedKeys' not in res:
-            return
-        if self.table.name not in res[u'UnprocessedKeys']:
-            return
-
-        keys = res[u'UnprocessedKeys'][self.table.name][u'Keys']
-
-        for key in keys:
-            h = key[u'HashKeyElement']
-            r = key[u'RangeKeyElement'] if u'RangeKeyElement' in key else None
-            self.keys.append((h, r))
-
-    def __iter__(self):
-        while self.keys:
-            # Build the next batch
-            batch = BatchList(self.table.layer2)
-            batch.add_batch(self.table, self.keys[:100],
-                            self.attributes_to_get)
-            res = batch.submit()
-
-            # parse the results
-            if self.table.name not in res[u'Responses']:
-                continue
-            self.consumed_units += res[u'Responses'][self.table.name][u'ConsumedCapacityUnits']
-            for elem in res[u'Responses'][self.table.name][u'Items']:
-                yield elem
-
-            # re-queue un processed keys
-            self.keys = self.keys[100:]
-            self._queue_unprocessed(res)
-
-
-class Table(object):
-    """
-    An Amazon DynamoDB table.
-
-    :ivar name: The name of the table.
-    :ivar create_time: The date and time that the table was created.
-    :ivar status: The current status of the table.  One of:
-        'ACTIVE', 'UPDATING', 'DELETING'.
-    :ivar schema: A :class:`boto.dynamodb.schema.Schema` object representing
-        the schema defined for the table.
-    :ivar item_count: The number of items in the table.  This value is
-        set only when the Table object is created or refreshed and
-        may not reflect the actual count.
-    :ivar size_bytes: Total size of the specified table, in bytes.
-        Amazon DynamoDB updates this value approximately every six hours.
-        Recent changes might not be reflected in this value.
-    :ivar read_units: The ReadCapacityUnits of the tables
-        Provisioned Throughput.
-    :ivar write_units: The WriteCapacityUnits of the tables
-        Provisioned Throughput.
-    :ivar schema: The Schema object associated with the table.
-    """
-
-    def __init__(self, layer2, response):
-        """
-
-        :type layer2: :class:`boto.dynamodb.layer2.Layer2`
-        :param layer2: A `Layer2` api object.
-
-        :type response: dict
-        :param response: The output of
-            `boto.dynamodb.layer1.Layer1.describe_table`.
-
-        """
-        self.layer2 = layer2
-        self._dict = {}
-        self.update_from_response(response)
-
-    @classmethod
-    def create_from_schema(cls, layer2, name, schema):
-        """Create a Table object.
-
-        If you know the name and schema of your table, you can
-        create a ``Table`` object without having to make any
-        API calls (normally an API call is made to retrieve
-        the schema of a table).
-
-        Example usage::
-
-            table = Table.create_from_schema(
-                boto.connect_dynamodb(),
-                'tablename',
-                Schema.create(hash_key=('keyname', 'N')))
-
-        :type layer2: :class:`boto.dynamodb.layer2.Layer2`
-        :param layer2: A ``Layer2`` api object.
-
-        :type name: str
-        :param name: The name of the table.
-
-        :type schema: :class:`boto.dynamodb.schema.Schema`
-        :param schema: The schema associated with the table.
-
-        :rtype: :class:`boto.dynamodb.table.Table`
-        :return: A Table object representing the table.
-
-        """
-        table = cls(layer2, {'Table': {'TableName': name}})
-        table._schema = schema
-        return table
-
-    def __repr__(self):
-        return 'Table(%s)' % self.name
-
-    @property
-    def name(self):
-        return self._dict['TableName']
-
-    @property
-    def create_time(self):
-        return self._dict.get('CreationDateTime', None)
-
-    @property
-    def status(self):
-        return self._dict.get('TableStatus', None)
-
-    @property
-    def item_count(self):
-        return self._dict.get('ItemCount', 0)
-
-    @property
-    def size_bytes(self):
-        return self._dict.get('TableSizeBytes', 0)
-
-    @property
-    def schema(self):
-        return self._schema
-
-    @property
-    def read_units(self):
-        try:
-            return self._dict['ProvisionedThroughput']['ReadCapacityUnits']
-        except KeyError:
-            return None
-
-    @property
-    def write_units(self):
-        try:
-            return self._dict['ProvisionedThroughput']['WriteCapacityUnits']
-        except KeyError:
-            return None
-
-    def update_from_response(self, response):
-        """
-        Update the state of the Table object based on the response
-        data received from Amazon DynamoDB.
-        """
-        # 'Table' is from a describe_table call.
-        if 'Table' in response:
-            self._dict.update(response['Table'])
-        # 'TableDescription' is from a create_table call.
-        elif 'TableDescription' in response:
-            self._dict.update(response['TableDescription'])
-        if 'KeySchema' in self._dict:
-            self._schema = Schema(self._dict['KeySchema'])
-
-    def refresh(self, wait_for_active=False, retry_seconds=5):
-        """
-        Refresh all of the fields of the Table object by calling
-        the underlying DescribeTable request.
-
-        :type wait_for_active: bool
-        :param wait_for_active: If True, this command will not return
-            until the table status, as returned from Amazon DynamoDB, is
-            'ACTIVE'.
-
-        :type retry_seconds: int
-        :param retry_seconds: If wait_for_active is True, this
-            parameter controls the number of seconds of delay between
-            calls to update_table in Amazon DynamoDB.  Default is 5 seconds.
-        """
-        done = False
-        while not done:
-            response = self.layer2.describe_table(self.name)
-            self.update_from_response(response)
-            if wait_for_active:
-                if self.status == 'ACTIVE':
-                    done = True
-                else:
-                    time.sleep(retry_seconds)
-            else:
-                done = True
-
-    def update_throughput(self, read_units, write_units):
-        """
-        Update the ProvisionedThroughput for the Amazon DynamoDB Table.
-
-        :type read_units: int
-        :param read_units: The new value for ReadCapacityUnits.
-
-        :type write_units: int
-        :param write_units: The new value for WriteCapacityUnits.
-        """
-        self.layer2.update_throughput(self, read_units, write_units)
-
-    def delete(self):
-        """
-        Delete this table and all items in it.  After calling this
-        the Table objects status attribute will be set to 'DELETING'.
-        """
-        self.layer2.delete_table(self)
-
-    def get_item(self, hash_key, range_key=None,
-                 attributes_to_get=None, consistent_read=False,
-                 item_class=Item):
-        """
-        Retrieve an existing item from the table.
-
-        :type hash_key: int|long|float|str|unicode|Binary
-        :param hash_key: The HashKey of the requested item.  The
-            type of the value must match the type defined in the
-            schema for the table.
-
-        :type range_key: int|long|float|str|unicode|Binary
-        :param range_key: The optional RangeKey of the requested item.
-            The type of the value must match the type defined in the
-            schema for the table.
-
-        :type attributes_to_get: list
-        :param attributes_to_get: A list of attribute names.
-            If supplied, only the specified attribute names will
-            be returned.  Otherwise, all attributes will be returned.
-
-        :type consistent_read: bool
-        :param consistent_read: If True, a consistent read
-            request is issued.  Otherwise, an eventually consistent
-            request is issued.
-
-        :type item_class: Class
-        :param item_class: Allows you to override the class used
-            to generate the items. This should be a subclass of
-            :class:`boto.dynamodb.item.Item`
-        """
-        return self.layer2.get_item(self, hash_key, range_key,
-                                    attributes_to_get, consistent_read,
-                                    item_class)
-    lookup = get_item
-
-    def has_item(self, hash_key, range_key=None, consistent_read=False):
-        """
-        Checks the table to see if the Item with the specified ``hash_key``
-        exists. This may save a tiny bit of time/bandwidth over a
-        straight :py:meth:`get_item` if you have no intention to touch
-        the data that is returned, since this method specifically tells
-        Amazon not to return anything but the Item's key.
-
-        :type hash_key: int|long|float|str|unicode|Binary
-        :param hash_key: The HashKey of the requested item.  The
-            type of the value must match the type defined in the
-            schema for the table.
-
-        :type range_key: int|long|float|str|unicode|Binary
-        :param range_key: The optional RangeKey of the requested item.
-            The type of the value must match the type defined in the
-            schema for the table.
-
-        :type consistent_read: bool
-        :param consistent_read: If True, a consistent read
-            request is issued.  Otherwise, an eventually consistent
-            request is issued.
-
-        :rtype: bool
-        :returns: ``True`` if the Item exists, ``False`` if not.
-        """
-        try:
-            # Attempt to get the key. If it can't be found, it'll raise
-            # an exception.
-            self.get_item(hash_key, range_key=range_key,
-                          # This minimizes the size of the response body.
-                          attributes_to_get=[hash_key],
-                          consistent_read=consistent_read)
-        except dynamodb_exceptions.DynamoDBKeyNotFoundError:
-            # Key doesn't exist.
-            return False
-        return True
-
-    def new_item(self, hash_key=None, range_key=None, attrs=None,
-                 item_class=Item):
-        """
-        Return an new, unsaved Item which can later be PUT to
-        Amazon DynamoDB.
-
-        This method has explicit (but optional) parameters for
-        the hash_key and range_key values of the item.  You can use
-        these explicit parameters when calling the method, such as::
-
-            >>> my_item = my_table.new_item(hash_key='a', range_key=1,
-                                        attrs={'key1': 'val1', 'key2': 'val2'})
-            >>> my_item
-            {u'bar': 1, u'foo': 'a', 'key1': 'val1', 'key2': 'val2'}
-
-        Or, if you prefer, you can simply put the hash_key and range_key
-        in the attrs dictionary itself, like this::
-
-            >>> attrs = {'foo': 'a', 'bar': 1, 'key1': 'val1', 'key2': 'val2'}
-            >>> my_item = my_table.new_item(attrs=attrs)
-            >>> my_item
-            {u'bar': 1, u'foo': 'a', 'key1': 'val1', 'key2': 'val2'}
-
-        The effect is the same.
-
-        .. note:
-           The explicit parameters take priority over the values in
-           the attrs dict.  So, if you have a hash_key or range_key
-           in the attrs dict and you also supply either or both using
-           the explicit parameters, the values in the attrs will be
-           ignored.
-
-        :type hash_key: int|long|float|str|unicode|Binary
-        :param hash_key: The HashKey of the new item.  The
-            type of the value must match the type defined in the
-            schema for the table.
-
-        :type range_key: int|long|float|str|unicode|Binary
-        :param range_key: The optional RangeKey of the new item.
-            The type of the value must match the type defined in the
-            schema for the table.
-
-        :type attrs: dict
-        :param attrs: A dictionary of key value pairs used to
-            populate the new item.
-
-        :type item_class: Class
-        :param item_class: Allows you to override the class used
-            to generate the items. This should be a subclass of
-            :class:`boto.dynamodb.item.Item`
-        """
-        return item_class(self, hash_key, range_key, attrs)
-
-    def query(self, hash_key, *args, **kw):
-        """
-        Perform a query on the table.
-
-        :type hash_key: int|long|float|str|unicode|Binary
-        :param hash_key: The HashKey of the requested item.  The
-            type of the value must match the type defined in the
-            schema for the table.
-
-        :type range_key_condition: :class:`boto.dynamodb.condition.Condition`
-        :param range_key_condition: A Condition object.
-            Condition object can be one of the following types:
-
-            EQ|LE|LT|GE|GT|BEGINS_WITH|BETWEEN
-
-            The only condition which expects or will accept two
-            values is 'BETWEEN', otherwise a single value should
-            be passed to the Condition constructor.
-
-        :type attributes_to_get: list
-        :param attributes_to_get: A list of attribute names.
-            If supplied, only the specified attribute names will
-            be returned.  Otherwise, all attributes will be returned.
-
-        :type request_limit: int
-        :param request_limit: The maximum number of items to retrieve
-            from Amazon DynamoDB on each request.  You may want to set
-            a specific request_limit based on the provisioned throughput
-            of your table.  The default behavior is to retrieve as many
-            results as possible per request.
-
-        :type max_results: int
-        :param max_results: The maximum number of results that will
-            be retrieved from Amazon DynamoDB in total.  For example,
-            if you only wanted to see the first 100 results from the
-            query, regardless of how many were actually available, you
-            could set max_results to 100 and the generator returned
-            from the query method will only yeild 100 results max.
-
-        :type consistent_read: bool
-        :param consistent_read: If True, a consistent read
-            request is issued.  Otherwise, an eventually consistent
-            request is issued.
-
-        :type scan_index_forward: bool
-        :param scan_index_forward: Specified forward or backward
-            traversal of the index.  Default is forward (True).
-
-        :type exclusive_start_key: list or tuple
-        :param exclusive_start_key: Primary key of the item from
-            which to continue an earlier query.  This would be
-            provided as the LastEvaluatedKey in that query.
-
-        :type count: bool
-        :param count: If True, Amazon DynamoDB returns a total
-            number of items for the Query operation, even if the
-            operation has no matching items for the assigned filter.
-            If count is True, the actual items are not returned and
-            the count is accessible as the ``count`` attribute of
-            the returned object.
-
-
-        :type item_class: Class
-        :param item_class: Allows you to override the class used
-            to generate the items. This should be a subclass of
-            :class:`boto.dynamodb.item.Item`
-        """
-        return self.layer2.query(self, hash_key, *args, **kw)
-
-    def scan(self, *args, **kw):
-        """
-        Scan through this table, this is a very long
-        and expensive operation, and should be avoided if
-        at all possible.
-
-        :type scan_filter: A dict
-        :param scan_filter: A dictionary where the key is the
-            attribute name and the value is a
-            :class:`boto.dynamodb.condition.Condition` object.
-            Valid Condition objects include:
-
-             * EQ - equal (1)
-             * NE - not equal (1)
-             * LE - less than or equal (1)
-             * LT - less than (1)
-             * GE - greater than or equal (1)
-             * GT - greater than (1)
-             * NOT_NULL - attribute exists (0, use None)
-             * NULL - attribute does not exist (0, use None)
-             * CONTAINS - substring or value in list (1)
-             * NOT_CONTAINS - absence of substring or value in list (1)
-             * BEGINS_WITH - substring prefix (1)
-             * IN - exact match in list (N)
-             * BETWEEN - >= first value, <= second value (2)
-
-        :type attributes_to_get: list
-        :param attributes_to_get: A list of attribute names.
-            If supplied, only the specified attribute names will
-            be returned.  Otherwise, all attributes will be returned.
-
-        :type request_limit: int
-        :param request_limit: The maximum number of items to retrieve
-            from Amazon DynamoDB on each request.  You may want to set
-            a specific request_limit based on the provisioned throughput
-            of your table.  The default behavior is to retrieve as many
-            results as possible per request.
-
-        :type max_results: int
-        :param max_results: The maximum number of results that will
-            be retrieved from Amazon DynamoDB in total.  For example,
-            if you only wanted to see the first 100 results from the
-            query, regardless of how many were actually available, you
-            could set max_results to 100 and the generator returned
-            from the query method will only yeild 100 results max.
-
-        :type count: bool
-        :param count: If True, Amazon DynamoDB returns a total
-            number of items for the Scan operation, even if the
-            operation has no matching items for the assigned filter.
-            If count is True, the actual items are not returned and
-            the count is accessible as the ``count`` attribute of
-            the returned object.
-
-        :type exclusive_start_key: list or tuple
-        :param exclusive_start_key: Primary key of the item from
-            which to continue an earlier query.  This would be
-            provided as the LastEvaluatedKey in that query.
-
-        :type item_class: Class
-        :param item_class: Allows you to override the class used
-            to generate the items. This should be a subclass of
-            :class:`boto.dynamodb.item.Item`
-
-        :return: A TableGenerator (generator) object which will iterate
-            over all results
-        :rtype: :class:`boto.dynamodb.layer2.TableGenerator`
-        """
-        return self.layer2.scan(self, *args, **kw)
-
-    def batch_get_item(self, keys, attributes_to_get=None):
-        """
-        Return a set of attributes for a multiple items from a single table
-        using their primary keys. This abstraction removes the 100 Items per
-        batch limitations as well as the "UnprocessedKeys" logic.
-
-        :type keys: list
-        :param keys: A list of scalar or tuple values.  Each element in the
-            list represents one Item to retrieve.  If the schema for the
-            table has both a HashKey and a RangeKey, each element in the
-            list should be a tuple consisting of (hash_key, range_key).  If
-            the schema for the table contains only a HashKey, each element
-            in the list should be a scalar value of the appropriate type
-            for the table schema. NOTE: The maximum number of items that
-            can be retrieved for a single operation is 100. Also, the
-            number of items retrieved is constrained by a 1 MB size limit.
-
-        :type attributes_to_get: list
-        :param attributes_to_get: A list of attribute names.
-            If supplied, only the specified attribute names will
-            be returned.  Otherwise, all attributes will be returned.
-
-        :return: A TableBatchGenerator (generator) object which will
-            iterate over all results
-        :rtype: :class:`boto.dynamodb.table.TableBatchGenerator`
-        """
-        return TableBatchGenerator(self, keys, attributes_to_get)