code: def from_any(cls, params, **ctor_opts):
          
          if isinstance(params, cls):
              return deepcopy(params)
  
          elif isinstance(params, dict):
              ctor_opts.update(**params)
              if cls is QueryBase:
                  if ('bbox' in params or 'start_range' in params or
                              'end_range' in params):
                      return SpatialQuery(**ctor_opts)
                  else:
                      return ViewQuery(**ctor_opts)
  
          elif isinstance(params, basestring):
              ret = cls()
              ret._base_str = params
              return ret
  
          else:
              raise ArgumentError.pyexc("Params must be Query, dict, or string")
docs: Creates a new Query object from input.
  
          :param params: Parameter to convert to query
          :type params: dict, string, or :class:`Query`
  
          If ``params`` is a :class:`Query` object already, a deep copy is made
          and a new :class:`Query` object is returned.
  
          If ``params`` is a string, then a :class:`Query` object is contructed
          from it. The string itself is not parsed, but rather prepended to
          any additional parameters (defined via the object's methods)
          with an additional ``&`` characted.
  
          If ``params`` is a dictionary, it is passed to the :class:`Query`
          constructor.
  
          :return: a new :class:`Query` object
          :raise: :exc:`ArgumentError` if the input is none of the acceptable
              types mentioned above. Also raises any exceptions possibly thrown
              by the constructor.