'Constructs a query over instances of the given Model.
Args:
model_class: Model class to build query for.
keys_only: Whether the query should return full entities or only keys.
projection: A tuple of strings representing the property names to include
in the projection this query should produce or None. Setting a
projection is similar to specifying \'SELECT prop1, prop2, ...\' in SQL.
See _BaseQuery.projection for details on projection queries.
distinct: A boolean, true if the projection should be distinct.
See _BaseQuery.is_distinct for details on distinct queries.
cursor: A compiled query from which to resume.
namespace: The namespace to use for this query.'

def __init__(self, model_class=None, keys_only=False, cursor=None, namespace=None, _app=None, distinct=False, projection=None):

    super(Query, self).__init__(model_class)
    if keys_only:
        self._keys_only = True
    if projection:
        self._projection = projection
    if (namespace is not None):
        self._namespace = namespace
    if (_app is not None):
        self._app = _app
    if distinct:
        self._distinct = True
    self.__query_sets = [{}]
    self.__orderings = []
    self.with_cursor(cursor)
