def search_next(session, cls, attr, value, start, pack, **filters): q = session.query(cls).filter(attr.startswith(value)) if filters: q = q.filter_by(**filters) if start: start = force_int("start", start) else: start = 1 entries = set() for (attrvalue,) in q.values(attr): m = int_re.match(attrvalue[len(value):]) if m: n = int(m.group(1)) # Only remember entries that we care about... if n >= start: entries.add(n) if not entries: return start entries = sorted(entries) if pack: expecting = start for current in entries: if current > expecting: return expecting expecting += 1 return entries[-1] + 1
def search_next(session, cls, attr, value, start, pack, **filters): q = session.query(cls).filter(attr.startswith(value)) if filters: q = q.filter_by(**filters) if start: start = force_int("start", start) else: start = 1 entries = set() for (attrvalue, ) in q.values(attr): m = int_re.match(attrvalue[len(value):]) if m: n = int(m.group(1)) # Only remember entries that we care about... if n >= start: entries.add(n) if not entries: return start entries = sorted(entries) if pack: expecting = start for current in entries: if current > expecting: return expecting expecting += 1 return entries[-1] + 1
def validate_value(label, value_type, value): retval = None if value_type == 'string' or value_type == 'list': retval = value elif value_type == 'int': retval = force_int(label, value) elif value_type == 'float': retval = force_float(label, value) elif value_type == 'boolean': retval = force_boolean(label, value) elif value_type == 'json': retval = force_json_dict(label, value) if retval == None: raise ArgumentError("Value %s for path %s has to be of type %s." % (value, label, value_type)) return retval