code: def bucket(self, name, bucket_type='default'):
          
          if not isinstance(name, string_types):
              raise TypeError('Bucket name must be a string')
  
          if isinstance(bucket_type, string_types):
              bucket_type = self.bucket_type(bucket_type)
          elif not isinstance(bucket_type, BucketType):
              raise TypeError('bucket_type must be a string '
                              'or riak.bucket.BucketType')
  
          b = RiakBucket(self, name, bucket_type)
          return self._setdefault_handle_none(
                  self._buckets, (bucket_type, name), b)
docs: Get the bucket by the specified name. Since buckets always exist,
          this will always return a
          :class:`RiakBucket <riak.bucket.RiakBucket>`.
  
          If you are using a bucket that is contained in a bucket type, it is
          preferable to access it from the bucket type object::
  
              # Preferred:
              client.bucket_type("foo").bucket("bar")
  
              # Equivalent, but not preferred:
              client.bucket("bar", bucket_type="foo")
  
          :param name: the bucket name
          :type name: str
          :param bucket_type: the parent bucket-type
          :type bucket_type: :class:`BucketType <riak.bucket.BucketType>`
                or str
          :rtype: :class:`RiakBucket <riak.bucket.RiakBucket>`