'Constructs a range filter using start and end properties.
Args:
start: A entity_pb.Property to use as a lower bound or None to indicate
no lower bound.
start_incl: A boolean that indicates if the lower bound is inclusive.
end: A entity_pb.Property to use as an upper bound or None to indicate
no upper bound.
end_incl: A boolean that indicates if the upper bound is inclusive.'

@datastore_rpc._positional(1)
def __init__(self, start=None, start_incl=True, end=None, end_incl=True):

    if ((start is not None) and (not isinstance(start, entity_pb.Property))):
        raise datastore_errors.BadArgumentError(('start    argument    should    be    entity_pb.Property    (%r)' % (start,)))
    if ((end is not None) and (not isinstance(end, entity_pb.Property))):
        raise datastore_errors.BadArgumentError(('start    argument    should    be    entity_pb.Property    (%r)' % (end,)))
    if (start and end and (start.name() != end.name())):
        raise datastore_errors.BadArgumentError(('start    and    end    arguments    must    be    on    the    same    property    (%s    !=    %s)' % (start.name(), end.name())))
    if ((not start) and (not end)):
        raise datastore_errors.BadArgumentError('Unbounded    ranges    are    not    supported.')
    super(_PropertyRangeFilter, self).__init__()
    self._start = start
    self._start_incl = start_incl
    self._end = end
    self._end_incl = end_incl
