'Add a disjunction of several filters and several values to the query.
This is implemented by duplicating queries and combining the
results later.
Args:
operations: a string or list of strings. Each string contains a
property name and an operator to filter by. The operators
themselves must not require multiple queries to evaluate
(currently, this means that \'in\' and \'!=\' are invalid).
values: a value or list of filter values, normalized by
_normalize_query_parameter.'

def __filter_disjunction(self, operations, values):

    if (not isinstance(operations, (list, tuple))):
        operations = [operations]
    if (not isinstance(values, (list, tuple))):
        values = [values]
    new_query_sets = []
    for operation in operations:
        if (operation.lower().endswith('in') or operation.endswith('!=')):
            raise BadQueryError('Cannot    use    "in"    or    "!="    in    a    disjunction.')
        for query_set in self.__query_sets:
            for value in values:
                new_query_set = copy.deepcopy(query_set)
                datastore._AddOrAppend(new_query_set, operation, value)
                new_query_sets.append(new_query_set)
    self.__query_sets = new_query_sets
