diff env/lib/python3.7/site-packages/boto/sdb/connection.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/sdb/connection.py	Thu May 14 16:47:39 2020 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,618 +0,0 @@
-# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/
-#
-# 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.
-import xml.sax
-import threading
-import boto
-from boto import handler
-from boto.connection import AWSQueryConnection
-from boto.sdb.domain import Domain, DomainMetaData
-from boto.sdb.item import Item
-from boto.sdb.regioninfo import SDBRegionInfo
-from boto.exception import SDBResponseError
-
-class ItemThread(threading.Thread):
-    """
-    A threaded :class:`Item <boto.sdb.item.Item>` retriever utility class.
-    Retrieved :class:`Item <boto.sdb.item.Item>` objects are stored in the
-    ``items`` instance variable after :py:meth:`run() <run>` is called.
-
-    .. tip:: The item retrieval will not start until
-        the :func:`run() <boto.sdb.connection.ItemThread.run>` method is called.
-    """
-    def __init__(self, name, domain_name, item_names):
-        """
-        :param str name: A thread name. Used for identification.
-        :param str domain_name: The name of a SimpleDB
-            :class:`Domain <boto.sdb.domain.Domain>`
-        :type item_names: string or list of strings
-        :param item_names: The name(s) of the items to retrieve from the specified
-            :class:`Domain <boto.sdb.domain.Domain>`.
-        :ivar list items: A list of items retrieved. Starts as empty list.
-        """
-        super(ItemThread, self).__init__(name=name)
-        #print 'starting %s with %d items' % (name, len(item_names))
-        self.domain_name = domain_name
-        self.conn = SDBConnection()
-        self.item_names = item_names
-        self.items = []
-
-    def run(self):
-        """
-        Start the threaded retrieval of items. Populates the
-        ``items`` list with :class:`Item <boto.sdb.item.Item>` objects.
-        """
-        for item_name in self.item_names:
-            item = self.conn.get_attributes(self.domain_name, item_name)
-            self.items.append(item)
-
-#boto.set_stream_logger('sdb')
-
-class SDBConnection(AWSQueryConnection):
-    """
-    This class serves as a gateway to your SimpleDB region (defaults to
-    us-east-1). Methods within allow access to SimpleDB
-    :class:`Domain <boto.sdb.domain.Domain>` objects and their associated
-    :class:`Item <boto.sdb.item.Item>` objects.
-
-    .. tip::
-        While you may instantiate this class directly, it may be easier to
-        go through :py:func:`boto.connect_sdb`.
-    """
-    DefaultRegionName = 'us-east-1'
-    DefaultRegionEndpoint = 'sdb.us-east-1.amazonaws.com'
-    APIVersion = '2009-04-15'
-    ResponseError = SDBResponseError
-
-    def __init__(self, aws_access_key_id=None, aws_secret_access_key=None,
-                 is_secure=True, port=None, proxy=None, proxy_port=None,
-                 proxy_user=None, proxy_pass=None, debug=0,
-                 https_connection_factory=None, region=None, path='/',
-                 converter=None, security_token=None, validate_certs=True,
-                 profile_name=None):
-        """
-        For any keywords that aren't documented, refer to the parent class,
-        :py:class:`boto.connection.AWSAuthConnection`. You can avoid having
-        to worry about these keyword arguments by instantiating these objects
-        via :py:func:`boto.connect_sdb`.
-
-        :type region: :class:`boto.sdb.regioninfo.SDBRegionInfo`
-        :keyword region: Explicitly specify a region. Defaults to ``us-east-1``
-            if not specified. You may also specify the region in your ``boto.cfg``:
-
-            .. code-block:: cfg
-
-                [SDB]
-                region = eu-west-1
-
-        """
-        if not region:
-            region_name = boto.config.get('SDB', 'region', self.DefaultRegionName)
-            for reg in boto.sdb.regions():
-                if reg.name == region_name:
-                    region = reg
-                    break
-
-        self.region = region
-        super(SDBConnection, self).__init__(aws_access_key_id,
-                                    aws_secret_access_key,
-                                    is_secure, port, proxy,
-                                    proxy_port, proxy_user, proxy_pass,
-                                    self.region.endpoint, debug,
-                                    https_connection_factory, path,
-                                    security_token=security_token,
-                                    validate_certs=validate_certs,
-                                    profile_name=profile_name)
-        self.box_usage = 0.0
-        self.converter = converter
-        self.item_cls = Item
-
-    def _required_auth_capability(self):
-        return ['sdb']
-
-    def set_item_cls(self, cls):
-        """
-        While the default item class is :py:class:`boto.sdb.item.Item`, this
-        default may be overridden. Use this method to change a connection's
-        item class.
-
-        :param object cls: The new class to set as this connection's item
-            class. See the default item class for inspiration as to what your
-            replacement should/could look like.
-        """
-        self.item_cls = cls
-
-    def _build_name_value_list(self, params, attributes, replace=False,
-                              label='Attribute'):
-        keys = sorted(attributes.keys())
-        i = 1
-        for key in keys:
-            value = attributes[key]
-            if isinstance(value, list):
-                for v in value:
-                    params['%s.%d.Name' % (label, i)] = key
-                    if self.converter:
-                        v = self.converter.encode(v)
-                    params['%s.%d.Value' % (label, i)] = v
-                    if replace:
-                        params['%s.%d.Replace' % (label, i)] = 'true'
-                    i += 1
-            else:
-                params['%s.%d.Name' % (label, i)] = key
-                if self.converter:
-                    value = self.converter.encode(value)
-                params['%s.%d.Value' % (label, i)] = value
-                if replace:
-                    params['%s.%d.Replace' % (label, i)] = 'true'
-            i += 1
-
-    def _build_expected_value(self, params, expected_value):
-        params['Expected.1.Name'] = expected_value[0]
-        if expected_value[1] is True:
-            params['Expected.1.Exists'] = 'true'
-        elif expected_value[1] is False:
-            params['Expected.1.Exists'] = 'false'
-        else:
-            params['Expected.1.Value'] = expected_value[1]
-
-    def _build_batch_list(self, params, items, replace=False):
-        item_names = items.keys()
-        i = 0
-        for item_name in item_names:
-            params['Item.%d.ItemName' % i] = item_name
-            j = 0
-            item = items[item_name]
-            if item is not None:
-                attr_names = item.keys()
-                for attr_name in attr_names:
-                    value = item[attr_name]
-                    if isinstance(value, list):
-                        for v in value:
-                            if self.converter:
-                                v = self.converter.encode(v)
-                            params['Item.%d.Attribute.%d.Name' % (i, j)] = attr_name
-                            params['Item.%d.Attribute.%d.Value' % (i, j)] = v
-                            if replace:
-                                params['Item.%d.Attribute.%d.Replace' % (i, j)] = 'true'
-                            j += 1
-                    else:
-                        params['Item.%d.Attribute.%d.Name' % (i, j)] = attr_name
-                        if self.converter:
-                            value = self.converter.encode(value)
-                        params['Item.%d.Attribute.%d.Value' % (i, j)] = value
-                        if replace:
-                            params['Item.%d.Attribute.%d.Replace' % (i, j)] = 'true'
-                        j += 1
-            i += 1
-
-    def _build_name_list(self, params, attribute_names):
-        i = 1
-        attribute_names.sort()
-        for name in attribute_names:
-            params['Attribute.%d.Name' % i] = name
-            i += 1
-
-    def get_usage(self):
-        """
-        Returns the BoxUsage (in USD) accumulated on this specific SDBConnection
-        instance.
-
-        .. tip:: This can be out of date, and should only be treated as a
-            rough estimate. Also note that this estimate only applies to the
-            requests made on this specific connection instance. It is by
-            no means an account-wide estimate.
-
-        :rtype: float
-        :return: The accumulated BoxUsage of all requests made on the connection.
-        """
-        return self.box_usage
-
-    def print_usage(self):
-        """
-        Print the BoxUsage and approximate costs of all requests made on
-        this specific SDBConnection instance.
-
-        .. tip:: This can be out of date, and should only be treated as a
-            rough estimate. Also note that this estimate only applies to the
-            requests made on this specific connection instance. It is by
-            no means an account-wide estimate.
-        """
-        print('Total Usage: %f compute seconds' % self.box_usage)
-        cost = self.box_usage * 0.14
-        print('Approximate Cost: $%f' % cost)
-
-    def get_domain(self, domain_name, validate=True):
-        """
-        Retrieves a :py:class:`boto.sdb.domain.Domain` object whose name
-        matches ``domain_name``.
-
-        :param str domain_name: The name of the domain to retrieve
-        :keyword bool validate: When ``True``, check to see if the domain
-            actually exists. If ``False``, blindly return a
-            :py:class:`Domain <boto.sdb.domain.Domain>` object with the
-            specified name set.
-
-        :raises:
-            :py:class:`boto.exception.SDBResponseError` if ``validate`` is
-            ``True`` and no match could be found.
-
-        :rtype: :py:class:`boto.sdb.domain.Domain`
-        :return: The requested domain
-        """
-        domain = Domain(self, domain_name)
-        if validate:
-            self.select(domain, """select * from `%s` limit 1""" % domain_name)
-        return domain
-
-    def lookup(self, domain_name, validate=True):
-        """
-        Lookup an existing SimpleDB domain. This differs from
-        :py:meth:`get_domain` in that ``None`` is returned if ``validate`` is
-        ``True`` and no match was found (instead of raising an exception).
-
-        :param str domain_name: The name of the domain to retrieve
-
-        :param bool validate: If ``True``, a ``None`` value will be returned
-            if the specified domain can't be found. If ``False``, a
-            :py:class:`Domain <boto.sdb.domain.Domain>` object will be dumbly
-            returned, regardless of whether it actually exists.
-
-        :rtype: :class:`boto.sdb.domain.Domain` object or ``None``
-        :return: The Domain object or ``None`` if the domain does not exist.
-        """
-        try:
-            domain = self.get_domain(domain_name, validate)
-        except:
-            domain = None
-        return domain
-
-    def get_all_domains(self, max_domains=None, next_token=None):
-        """
-        Returns a :py:class:`boto.resultset.ResultSet` containing
-        all :py:class:`boto.sdb.domain.Domain` objects associated with
-        this connection's Access Key ID.
-
-        :keyword int max_domains: Limit the returned
-            :py:class:`ResultSet <boto.resultset.ResultSet>` to the specified
-            number of members.
-        :keyword str next_token: A token string that was returned in an
-            earlier call to this method as the ``next_token`` attribute
-            on the returned :py:class:`ResultSet <boto.resultset.ResultSet>`
-            object. This attribute is set if there are more than Domains than
-            the value specified in the ``max_domains`` keyword. Pass the
-            ``next_token`` value from you earlier query in this keyword to
-            get the next 'page' of domains.
-        """
-        params = {}
-        if max_domains:
-            params['MaxNumberOfDomains'] = max_domains
-        if next_token:
-            params['NextToken'] = next_token
-        return self.get_list('ListDomains', params, [('DomainName', Domain)])
-
-    def create_domain(self, domain_name):
-        """
-        Create a SimpleDB domain.
-
-        :type domain_name: string
-        :param domain_name: The name of the new domain
-
-        :rtype: :class:`boto.sdb.domain.Domain` object
-        :return: The newly created domain
-        """
-        params = {'DomainName': domain_name}
-        d = self.get_object('CreateDomain', params, Domain)
-        d.name = domain_name
-        return d
-
-    def get_domain_and_name(self, domain_or_name):
-        """
-        Given a ``str`` or :class:`boto.sdb.domain.Domain`, return a
-        ``tuple`` with the following members (in order):
-
-            * In instance of :class:`boto.sdb.domain.Domain` for the requested
-              domain
-            * The domain's name as a ``str``
-
-        :type domain_or_name: ``str`` or :class:`boto.sdb.domain.Domain`
-        :param domain_or_name: The domain or domain name to get the domain
-            and name for.
-
-        :raises: :class:`boto.exception.SDBResponseError` when an invalid
-            domain name is specified.
-
-        :rtype: tuple
-        :return: A ``tuple`` with contents outlined as per above.
-        """
-        if (isinstance(domain_or_name, Domain)):
-            return (domain_or_name, domain_or_name.name)
-        else:
-            return (self.get_domain(domain_or_name), domain_or_name)
-
-    def delete_domain(self, domain_or_name):
-        """
-        Delete a SimpleDB domain.
-
-        .. caution:: This will delete the domain and all items within the domain.
-
-        :type domain_or_name: string or :class:`boto.sdb.domain.Domain` object.
-        :param domain_or_name: Either the name of a domain or a Domain object
-
-        :rtype: bool
-        :return: True if successful
-
-        """
-        domain, domain_name = self.get_domain_and_name(domain_or_name)
-        params = {'DomainName': domain_name}
-        return self.get_status('DeleteDomain', params)
-
-    def domain_metadata(self, domain_or_name):
-        """
-        Get the Metadata for a SimpleDB domain.
-
-        :type domain_or_name: string or :class:`boto.sdb.domain.Domain` object.
-        :param domain_or_name: Either the name of a domain or a Domain object
-
-        :rtype: :class:`boto.sdb.domain.DomainMetaData` object
-        :return: The newly created domain metadata object
-        """
-        domain, domain_name = self.get_domain_and_name(domain_or_name)
-        params = {'DomainName': domain_name}
-        d = self.get_object('DomainMetadata', params, DomainMetaData)
-        d.domain = domain
-        return d
-
-    def put_attributes(self, domain_or_name, item_name, attributes,
-                       replace=True, expected_value=None):
-        """
-        Store attributes for a given item in a domain.
-
-        :type domain_or_name: string or :class:`boto.sdb.domain.Domain` object.
-        :param domain_or_name: Either the name of a domain or a Domain object
-
-        :type item_name: string
-        :param item_name: The name of the item whose attributes are being
-                          stored.
-
-        :type attribute_names: dict or dict-like object
-        :param attribute_names: The name/value pairs to store as attributes
-
-        :type expected_value: list
-        :param expected_value: If supplied, this is a list or tuple consisting
-            of a single attribute name and expected value. The list can be
-            of the form:
-
-                * ['name', 'value']
-
-            In which case the call will first verify that the attribute "name"
-            of this item has a value of "value".  If it does, the delete
-            will proceed, otherwise a ConditionalCheckFailed error will be
-            returned. The list can also be of the form:
-
-                * ['name', True|False]
-
-            which will simply check for the existence (True) or
-            non-existence (False) of the attribute.
-
-        :type replace: bool
-        :param replace: Whether the attribute values passed in will replace
-                        existing values or will be added as addition values.
-                        Defaults to True.
-
-        :rtype: bool
-        :return: True if successful
-        """
-        domain, domain_name = self.get_domain_and_name(domain_or_name)
-        params = {'DomainName': domain_name,
-                  'ItemName': item_name}
-        self._build_name_value_list(params, attributes, replace)
-        if expected_value:
-            self._build_expected_value(params, expected_value)
-        return self.get_status('PutAttributes', params)
-
-    def batch_put_attributes(self, domain_or_name, items, replace=True):
-        """
-        Store attributes for multiple items in a domain.
-
-        :type domain_or_name: string or :class:`boto.sdb.domain.Domain` object.
-        :param domain_or_name: Either the name of a domain or a Domain object
-
-        :type items: dict or dict-like object
-        :param items: A dictionary-like object.  The keys of the dictionary are
-                      the item names and the values are themselves dictionaries
-                      of attribute names/values, exactly the same as the
-                      attribute_names parameter of the scalar put_attributes
-                      call.
-
-        :type replace: bool
-        :param replace: Whether the attribute values passed in will replace
-                        existing values or will be added as addition values.
-                        Defaults to True.
-
-        :rtype: bool
-        :return: True if successful
-        """
-        domain, domain_name = self.get_domain_and_name(domain_or_name)
-        params = {'DomainName': domain_name}
-        self._build_batch_list(params, items, replace)
-        return self.get_status('BatchPutAttributes', params, verb='POST')
-
-    def get_attributes(self, domain_or_name, item_name, attribute_names=None,
-                       consistent_read=False, item=None):
-        """
-        Retrieve attributes for a given item in a domain.
-
-        :type domain_or_name: string or :class:`boto.sdb.domain.Domain` object.
-        :param domain_or_name: Either the name of a domain or a Domain object
-
-        :type item_name: string
-        :param item_name: The name of the item whose attributes are
-            being retrieved.
-
-        :type attribute_names: string or list of strings
-        :param attribute_names: An attribute name or list of attribute names.
-            This parameter is optional.  If not supplied, all attributes will
-            be retrieved for the item.
-
-        :type consistent_read: bool
-        :param consistent_read: When set to true, ensures that the most recent
-            data is returned.
-
-        :type item: :class:`boto.sdb.item.Item`
-        :keyword item: Instead of instantiating a new Item object, you may
-            specify one to update.
-
-        :rtype: :class:`boto.sdb.item.Item`
-        :return: An Item with the requested attribute name/values set on it
-        """
-        domain, domain_name = self.get_domain_and_name(domain_or_name)
-        params = {'DomainName': domain_name,
-                  'ItemName': item_name}
-        if consistent_read:
-            params['ConsistentRead'] = 'true'
-        if attribute_names:
-            if not isinstance(attribute_names, list):
-                attribute_names = [attribute_names]
-            self.build_list_params(params, attribute_names, 'AttributeName')
-        response = self.make_request('GetAttributes', params)
-        body = response.read()
-        if response.status == 200:
-            if item is None:
-                item = self.item_cls(domain, item_name)
-            h = handler.XmlHandler(item, self)
-            xml.sax.parseString(body, h)
-            return item
-        else:
-            raise SDBResponseError(response.status, response.reason, body)
-
-    def delete_attributes(self, domain_or_name, item_name, attr_names=None,
-                          expected_value=None):
-        """
-        Delete attributes from a given item in a domain.
-
-        :type domain_or_name: string or :class:`boto.sdb.domain.Domain` object.
-        :param domain_or_name: Either the name of a domain or a Domain object
-
-        :type item_name: string
-        :param item_name: The name of the item whose attributes are being
-                          deleted.
-
-        :type attributes: dict, list or :class:`boto.sdb.item.Item`
-        :param attributes: Either a list containing attribute names which
-                           will cause all values associated with that attribute
-                           name to be deleted or a dict or Item containing the
-                           attribute names and keys and list of values to
-                           delete as the value.  If no value is supplied,
-                           all attribute name/values for the item will be
-                           deleted.
-
-        :type expected_value: list
-        :param expected_value: If supplied, this is a list or tuple consisting
-            of a single attribute name and expected value. The list can be
-            of the form:
-
-                * ['name', 'value']
-
-            In which case the call will first verify that the attribute "name"
-            of this item has a value of "value".  If it does, the delete
-            will proceed, otherwise a ConditionalCheckFailed error will be
-            returned. The list can also be of the form:
-
-                * ['name', True|False]
-
-            which will simply check for the existence (True) or
-            non-existence (False) of the attribute.
-
-        :rtype: bool
-        :return: True if successful
-        """
-        domain, domain_name = self.get_domain_and_name(domain_or_name)
-        params = {'DomainName': domain_name,
-                  'ItemName': item_name}
-        if attr_names:
-            if isinstance(attr_names, list):
-                self._build_name_list(params, attr_names)
-            elif isinstance(attr_names, dict) or isinstance(attr_names, self.item_cls):
-                self._build_name_value_list(params, attr_names)
-        if expected_value:
-            self._build_expected_value(params, expected_value)
-        return self.get_status('DeleteAttributes', params)
-
-    def batch_delete_attributes(self, domain_or_name, items):
-        """
-        Delete multiple items in a domain.
-
-        :type domain_or_name: string or :class:`boto.sdb.domain.Domain` object.
-        :param domain_or_name: Either the name of a domain or a Domain object
-
-        :type items: dict or dict-like object
-        :param items: A dictionary-like object.  The keys of the dictionary are
-            the item names and the values are either:
-
-                * dictionaries of attribute names/values, exactly the
-                  same as the attribute_names parameter of the scalar
-                  put_attributes call.  The attribute name/value pairs
-                  will only be deleted if they match the name/value
-                  pairs passed in.
-                * None which means that all attributes associated
-                  with the item should be deleted.
-
-        :return: True if successful
-        """
-        domain, domain_name = self.get_domain_and_name(domain_or_name)
-        params = {'DomainName': domain_name}
-        self._build_batch_list(params, items, False)
-        return self.get_status('BatchDeleteAttributes', params, verb='POST')
-
-    def select(self, domain_or_name, query='', next_token=None,
-               consistent_read=False):
-        """
-        Returns a set of Attributes for item names within domain_name that
-        match the query.  The query must be expressed in using the SELECT
-        style syntax rather than the original SimpleDB query language.
-        Even though the select request does not require a domain object,
-        a domain object must be passed into this method so the Item objects
-        returned can point to the appropriate domain.
-
-        :type domain_or_name: string or :class:`boto.sdb.domain.Domain` object
-        :param domain_or_name: Either the name of a domain or a Domain object
-
-        :type query: string
-        :param query: The SimpleDB query to be performed.
-
-        :type consistent_read: bool
-        :param consistent_read: When set to true, ensures that the most recent
-                                data is returned.
-
-        :rtype: ResultSet
-        :return: An iterator containing the results.
-        """
-        domain, domain_name = self.get_domain_and_name(domain_or_name)
-        params = {'SelectExpression': query}
-        if consistent_read:
-            params['ConsistentRead'] = 'true'
-        if next_token:
-            params['NextToken'] = next_token
-        try:
-            return self.get_list('Select', params, [('Item', self.item_cls)],
-                             parent=domain)
-        except SDBResponseError as e:
-            e.body = "Query: %s\n%s" % (query, e.body)
-            raise e