docs: def sort(self, name, start=None, num=None, by=None, get=None,
               desc=False, alpha=False, store=None, groups=False):
          """
          Sort and return the list, set or sorted set at ``name``.
  
          ``start`` and ``num`` allow for paging through the sorted data
  
          ``by`` allows using an external key to weight and sort the items.
              Use an "*" to indicate where in the key the item value is located
  
          ``get`` allows for returning items from external keys rather than the
              sorted data itself.  Use an "*" to indicate where int he key
              the item value is located
  
          ``desc`` allows for reversing the sort
  
          ``alpha`` allows for sorting lexicographically rather than numerically
  
          ``store`` allows for storing the result of the sort into
              the key ``store``
  
          ``groups`` if set to True and if ``get`` contains at least two
              elements, sort will return a list of tuples, each containing the
              values fetched from the arguments to ``get``.
  
          """
          if (start is not None and num is None) or \
                  (num is not None and start is None):
              raise DataError("``start`` and ``num`` must both be specified")
  
          pieces = [name]
          if by is not None:
              pieces.append(Token.get_token('BY'))
              pieces.append(by)
          if start is not None and num is not None:
              pieces.append(Token.get_token('LIMIT'))
              pieces.append(start)
              pieces.append(num)
          if get is not None:
              # If get is a string assume we want to get a single value.
              # Otherwise assume it's an interable and we want to get multiple
              # values. We can't just iterate blindly because strings are
              # iterable.
              if isinstance(get, (bytes, basestring)):
                  pieces.append(Token.get_token('GET'))
                  pieces.append(get)
              else:
                  for g in get:
                      pieces.append(Token.get_token('GET'))
                      pieces.append(g)
          if desc:
              pieces.append(Token.get_token('DESC'))
          if alpha:
              pieces.append(Token.get_token('ALPHA'))
          if store is not None:
              pieces.append(Token.get_token('STORE'))
              pieces.append(store)
  
          if groups:
              if not get or isinstance(get, (bytes, basestring)) or len(get) < 2:
                  raise DataError('when using "groups" the "get" argument '
                                  'must be specified and contain at least '
                                  'two keys')
  
          options = {'groups': len(get) if groups else None}
          return self.execute_command('SORT', *pieces, **options)