Given a bucket key, load the corresponding bucket.

        :param key: The bucket key.  This may be either a string or a
                    BucketKey object.

        :returns: A Bucket object.

def load(self, key):
        """
        Given a bucket key, load the corresponding bucket.

        :param key: The bucket key.  This may be either a string or a
                    BucketKey object.

        :returns: A Bucket object.
        """

        # Turn the key into a BucketKey
        if isinstance(key, basestring):
            key = BucketKey.decode(key)

        # Make sure the uuids match
        if key.uuid != self.uuid:
            raise ValueError("%s is not a bucket corresponding to this limit" %
                             key)

        # If the key is a version 1 key, load it straight from the
        # database
        if key.version == 1:
            raw = self.db.get(str(key))
            if raw is None:
                return self.bucket_class(self.db, self, str(key))
            return self.bucket_class.hydrate(self.db, msgpack.loads(raw),
                                             self, str(key))

        # OK, use a BucketLoader
        records = self.db.lrange(str(key), 0, -1)
        loader = BucketLoader(self.bucket_class, self.db, self, str(key),
                              records)

        return loader.bucket