def renderwob(self, md): """RENDER WithOutBatch""" expr=self.expr name=self.__name__ if expr is None: sequence=md[name] cache={ name: sequence } else: sequence=expr(md) cache=None if not sequence: if self.elses: return render_blocks(self.elses, md) return '' if type(sequence) is type(''): raise 'InError', ( 'Strings are not allowed as input to the in tag.') section=self.section mapping=self.mapping if self.sort_expr is not None: self.sort=self.sort_expr.eval(md) sequence=self.sort_sequence(sequence) elif self.sort is not None: sequence=self.sort_sequence(sequence) if self.reverse_expr is not None and self.reverse_expr.eval(md): sequence=self.reverse_sequence(sequence) elif self.reverse is not None: sequence=self.reverse_sequence(sequence) vars=sequence_variables(sequence) kw=vars.data kw['mapping']=mapping l=len(sequence) last=l-1 push=md._push pop=md._pop render=render_blocks if cache: push(cache) push(vars) try: result = [] append=result.append validate=md.validate for index in range(l): if index==last: kw['sequence-end']=1 client=sequence[index] if validate is not None: try: vv=validate(sequence,sequence,None,client,md) except: vv=0 if not vv: if (self.args.has_key('skip_unauthorized') and self.args['skip_unauthorized']): if index==1: kw['sequence-start']=0 continue raise ValidationError, index kw['sequence-index']=index if type(client)==TupleType and len(client)==2: client=client[1] if mapping: push(client) else: push(InstanceDict(client, md)) try: append(render(section, md)) finally: pop() if index==0: kw['sequence-start']=0 result=join(result, '') finally: if cache: pop() pop() return result
def renderwb(self, md): expr=self.expr name=self.__name__ if expr is None: sequence=md[name] cache={ name: sequence } else: sequence=expr(md) cache=None if not sequence: if self.elses: return render_blocks(self.elses, md) return '' if type(sequence) is type(''): raise 'InError', ( 'Strings are not allowed as input to the in tag.') section=self.section params=self.args mapping=self.mapping if self.sort_expr is not None: self.sort=self.sort_expr.eval(md) sequence=self.sort_sequence(sequence) elif self.sort is not None: sequence=self.sort_sequence(sequence) if self.reverse_expr is not None and self.reverse_expr.eval(md): sequence=self.reverse_sequence(sequence) elif self.reverse is not None: sequence=self.reverse_sequence(sequence) next=previous=0 try: start=int_param(params,md,'start',0) except: start=1 end=int_param(params,md,'end',0) size=int_param(params,md,'size',0) overlap=int_param(params,md,'overlap',0) orphan=int_param(params,md,'orphan','3') start,end,sz=opt(start,end,size,orphan,sequence) if params.has_key('next'): next=1 if params.has_key('previous'): previous=1 last=end-1 first=start-1 try: query_string=md['QUERY_STRING'] except: query_string='' vars=sequence_variables(sequence,'?'+query_string,self.start_name_re) kw=vars.data kw['mapping']=mapping kw['sequence-step-size']=sz kw['sequence-step-overlap']=overlap kw['sequence-step-start']=start kw['sequence-step-end']=end kw['sequence-step-start-index']=start-1 kw['sequence-step-end-index']=end-1 kw['sequence-step-orphan']=orphan push=md._push pop=md._pop render=render_blocks if cache: push(cache) push(vars) try: if previous: if first > 0: pstart,pend,psize=opt(0,first+overlap, sz,orphan,sequence) kw['previous-sequence']=1 kw['previous-sequence-start-index']=pstart-1 kw['previous-sequence-end-index']=pend-1 kw['previous-sequence-size']=pend+1-pstart result=render(section,md) elif self.elses: result=render(self.elses, md) else: result='' elif next: try: # The following line is a sneaky way to test whether # there are more items, without actually # computing a length: sequence[end] except IndexError: if self.elses: result=render(self.elses, md) else: result='' else: pstart,pend,psize=opt(end+1-overlap,0, sz,orphan,sequence) kw['next-sequence']=1 kw['next-sequence-start-index']=pstart-1 kw['next-sequence-end-index']=pend-1 kw['next-sequence-size']=pend+1-pstart result=render(section,md) else: result = [] append=result.append validate=md.validate for index in range(first,end): if index==first and index > 0: pstart,pend,psize=opt(0,index+overlap, sz,orphan,sequence) kw['previous-sequence']=1 kw['previous-sequence-start-index']=pstart-1 kw['previous-sequence-end-index']=pend-1 kw['previous-sequence-size']=pend+1-pstart else: kw['previous-sequence']=0 if index==last: try: # The following line is a sneaky way to # test whether there are more items, # without actually computing a length: sequence[end] pstart,pend,psize=opt(end+1-overlap,0, sz,orphan,sequence) kw['previous-sequence']=0 kw['next-sequence']=1 kw['next-sequence-start-index']=pstart-1 kw['next-sequence-end-index']=pend-1 kw['next-sequence-size']=pend+1-pstart except: pass if index==last: kw['sequence-end']=1 client=sequence[index] if validate is not None: try: vv=validate(sequence,sequence,None,client,md) except: vv=0 if not vv: if (params.has_key('skip_unauthorized') and params['skip_unauthorized']): if index==first: kw['sequence-start']=0 continue raise ValidationError, index kw['sequence-index']=index if type(client)==TupleType and len(client)==2: client=client[1] if mapping: push(client) else: push(InstanceDict(client, md)) try: append(render(section, md)) finally: pop(1) if index==first: kw['sequence-start']=0 result=join(result, '') finally: if cache: pop() pop() return result
def renderwob(self, md): """RENDER WithOutBatch""" expr = self.expr name = self.__name__ if expr is None: sequence = md[name] cache = {name: sequence} else: sequence = expr(md) cache = None if not sequence: if self.elses: return render_blocks(self.elses, md) return '' if type(sequence) is type(''): raise ValueError, ( 'Strings are not allowed as input to the in tag.') section = self.section mapping = self.mapping no_push_item = self.no_push_item if self.sort_expr is not None: self.sort = self.sort_expr.eval(md) sequence = self.sort_sequence(sequence, md) elif self.sort is not None: sequence = self.sort_sequence(sequence, md) if self.reverse_expr is not None and self.reverse_expr.eval(md): sequence = self.reverse_sequence(sequence) elif self.reverse is not None: sequence = self.reverse_sequence(sequence) prefix = self.args.get('prefix') vars = sequence_variables(sequence, alt_prefix=prefix) kw = vars.data pkw = add_with_prefix(kw, 'sequence', prefix) for k, v in kw.items(): pkw[k] = v kw['mapping'] = mapping l = len(sequence) last = l - 1 push = md._push pop = md._pop render = render_blocks if cache: push(cache) push(vars) try: result = [] append = result.append guarded_getitem = getattr(md, 'guarded_getitem', None) for index in range(l): if index == last: pkw['sequence-end'] = 1 if guarded_getitem is not None: try: client = guarded_getitem(sequence, index) except ValidationError, vv: if (self.args.has_key('skip_unauthorized') and self.args['skip_unauthorized']): if index == 1: pkw['sequence-start'] = 0 continue raise ValidationError, '(item %s): %s' % ( index, vv), sys.exc_info()[2] else: client = sequence[index] pkw['sequence-index'] = index t = type(client) if t is TupleType and len(client) == 2: client = client[1] if no_push_item: pushed = 0 elif mapping: pushed = 1 push(client) elif t in StringTypes: pushed = 0 else: pushed = 1 push(InstanceDict(client, md)) try: append(render(section, md)) finally: if pushed: pop() if index == 0: pkw['sequence-start'] = 0 result = join_unicode(result)
def renderwb(self, md): expr = self.expr name = self.__name__ if expr is None: sequence = md[name] cache = {name: sequence} else: sequence = expr(md) cache = None if not sequence: if self.elses: return render_blocks(self.elses, md) return '' if type(sequence) is type(''): raise ValueError, ( 'Strings are not allowed as input to the in tag.') section = self.section params = self.args mapping = self.mapping no_push_item = self.no_push_item if self.sort_expr is not None: self.sort = self.sort_expr.eval(md) sequence = self.sort_sequence(sequence, md) elif self.sort is not None: sequence = self.sort_sequence(sequence, md) if self.reverse_expr is not None and self.reverse_expr.eval(md): sequence = self.reverse_sequence(sequence) elif self.reverse is not None: sequence = self.reverse_sequence(sequence) next = previous = 0 try: start = int_param(params, md, 'start', 0) except: start = 1 end = int_param(params, md, 'end', 0) size = int_param(params, md, 'size', 0) overlap = int_param(params, md, 'overlap', 0) orphan = int_param(params, md, 'orphan', '0') start, end, sz = opt(start, end, size, orphan, sequence) if params.has_key('next'): next = 1 if params.has_key('previous'): previous = 1 last = end - 1 first = start - 1 try: query_string = md['QUERY_STRING'] except: query_string = '' prefix = params.get('prefix') vars = sequence_variables(sequence, '?' + query_string, self.start_name_re, prefix) kw = vars.data pkw = add_with_prefix(kw, 'sequence', prefix) for k, v in kw.items(): pkw[k] = v pkw['sequence-step-size'] = sz pkw['sequence-step-overlap'] = overlap pkw['sequence-step-start'] = start pkw['sequence-step-end'] = end pkw['sequence-step-start-index'] = start - 1 pkw['sequence-step-end-index'] = end - 1 pkw['sequence-step-orphan'] = orphan kw['mapping'] = mapping push = md._push pop = md._pop render = render_blocks if cache: push(cache) push(vars) try: if previous: if first > 0: pstart, pend, psize = opt(0, first + overlap, sz, orphan, sequence) pkw['previous-sequence'] = 1 pkw['previous-sequence-start-index'] = pstart - 1 pkw['previous-sequence-end-index'] = pend - 1 pkw['previous-sequence-size'] = pend + 1 - pstart result = render(section, md) elif self.elses: result = render(self.elses, md) else: result = '' elif next: try: # The following line is a sneaky way to test whether # there are more items, without actually # computing a length: sequence[end] except IndexError: if self.elses: result = render(self.elses, md) else: result = '' else: pstart, pend, psize = opt(end + 1 - overlap, 0, sz, orphan, sequence) pkw['next-sequence'] = 1 pkw['next-sequence-start-index'] = pstart - 1 pkw['next-sequence-end-index'] = pend - 1 pkw['next-sequence-size'] = pend + 1 - pstart result = render(section, md) else: result = [] append = result.append guarded_getitem = getattr(md, 'guarded_getitem', None) for index in range(first, end): # preset pkw['previous-sequence'] = 0 pkw['next-sequence'] = 0 # now more often defined then previously # if index == first or index == last: # provide batching information if first > 0: pstart, pend, psize = opt(0, first + overlap, sz, orphan, sequence) if index == first: pkw['previous-sequence'] = 1 pkw['previous-sequence-start-index'] = pstart - 1 pkw['previous-sequence-end-index'] = pend - 1 pkw['previous-sequence-size'] = pend + 1 - pstart try: # The following line is a sneaky way to # test whether there are more items, # without actually computing a length: sequence[end] pstart, pend, psize = opt(end + 1 - overlap, 0, sz, orphan, sequence) if index == last: pkw['next-sequence'] = 1 pkw['next-sequence-start-index'] = pstart - 1 pkw['next-sequence-end-index'] = pend - 1 pkw['next-sequence-size'] = pend + 1 - pstart except: pass if index == last: pkw['sequence-end'] = 1 if guarded_getitem is not None: try: client = guarded_getitem(sequence, index) except ValidationError, vv: if (params.has_key('skip_unauthorized') and params['skip_unauthorized']): if index == first: pkw['sequence-start'] = 0 continue raise ValidationError, '(item %s): %s' % ( index, vv), sys.exc_info()[2] else: client = sequence[index] pkw['sequence-index'] = index t = type(client) if t is TupleType and len(client) == 2: client = client[1] if no_push_item: pushed = 0 elif mapping: pushed = 1 push(client) elif t in StringTypes: pushed = 0 else: pushed = 1 push(InstanceDict(client, md)) try: append(render(section, md)) finally: if pushed: pop() if index == first: pkw['sequence-start'] = 0 result = join_unicode(result) finally: if cache: pop() pop() return result
def renderwob(self, md): """RENDER WithOutBatch""" expr=self.expr name=self.__name__ if expr is None: sequence=md[name] cache={ name: sequence } else: sequence=expr(md) cache=None if not sequence: if self.elses: return render_blocks(self.elses, md) return '' if type(sequence) is type(''): raise 'InError', ( 'Strings are not allowed as input to the in tag.') section=self.section mapping=self.mapping no_push_item=self.no_push_item if self.sort_expr is not None: self.sort=self.sort_expr.eval(md) sequence=self.sort_sequence(sequence, md) elif self.sort is not None: sequence=self.sort_sequence(sequence, md) if self.reverse_expr is not None and self.reverse_expr.eval(md): sequence=self.reverse_sequence(sequence) elif self.reverse is not None: sequence=self.reverse_sequence(sequence) prefix = self.args.get('prefix') vars=sequence_variables(sequence, alt_prefix=prefix) kw=vars.data pkw = add_with_prefix(kw, 'sequence', prefix) for k, v in kw.items(): pkw[k] = v kw['mapping']=mapping l=len(sequence) last=l-1 push=md._push pop=md._pop render=render_blocks if cache: push(cache) push(vars) try: result = [] append=result.append guarded_getitem = getattr(md, 'guarded_getitem', None) for index in range(l): if index==last: pkw['sequence-end']=1 if guarded_getitem is not None: try: client = guarded_getitem(sequence, index) except ValidationError, vv: if (self.args.has_key('skip_unauthorized') and self.args['skip_unauthorized']): if index==1: pkw['sequence-start']=0 continue raise ValidationError, '(item %s): %s' % ( index, vv), sys.exc_info()[2] else: client = sequence[index] pkw['sequence-index']=index t = type(client) if t is TupleType and len(client)==2: client=client[1] if no_push_item: pushed = 0 elif mapping: pushed = 1 push(client) elif t in StringTypes: pushed = 0 else: pushed = 1 push(InstanceDict(client, md)) try: append(render(section, md)) finally: if pushed: pop() if index==0: pkw['sequence-start']=0 result = join_unicode(result)
def renderwb(self, md): expr=self.expr name=self.__name__ if expr is None: sequence=md[name] cache={ name: sequence } else: sequence=expr(md) cache=None if not sequence: if self.elses: return render_blocks(self.elses, md) return '' if type(sequence) is type(''): raise 'InError', ( 'Strings are not allowed as input to the in tag.') section=self.section params=self.args mapping=self.mapping no_push_item=self.no_push_item if self.sort_expr is not None: self.sort=self.sort_expr.eval(md) sequence=self.sort_sequence(sequence, md) elif self.sort is not None: sequence=self.sort_sequence(sequence, md) if self.reverse_expr is not None and self.reverse_expr.eval(md): sequence=self.reverse_sequence(sequence) elif self.reverse is not None: sequence=self.reverse_sequence(sequence) next=previous=0 try: start=int_param(params,md,'start',0) except: start=1 end=int_param(params,md,'end',0) size=int_param(params,md,'size',0) overlap=int_param(params,md,'overlap',0) orphan=int_param(params,md,'orphan','0') start,end,sz=opt(start,end,size,orphan,sequence) if params.has_key('next'): next=1 if params.has_key('previous'): previous=1 last=end-1 first=start-1 try: query_string=md['QUERY_STRING'] except: query_string='' prefix = params.get('prefix') vars = sequence_variables(sequence, '?'+query_string, self.start_name_re, prefix) kw=vars.data pkw = add_with_prefix(kw, 'sequence', prefix) for k, v in kw.items(): pkw[k] = v pkw['sequence-step-size']=sz pkw['sequence-step-overlap']=overlap pkw['sequence-step-start']=start pkw['sequence-step-end']=end pkw['sequence-step-start-index']=start-1 pkw['sequence-step-end-index']=end-1 pkw['sequence-step-orphan']=orphan kw['mapping']=mapping push=md._push pop=md._pop render=render_blocks if cache: push(cache) push(vars) try: if previous: if first > 0: pstart,pend,psize=opt(0,first+overlap, sz,orphan,sequence) pkw['previous-sequence']=1 pkw['previous-sequence-start-index']=pstart-1 pkw['previous-sequence-end-index']=pend-1 pkw['previous-sequence-size']=pend+1-pstart result=render(section,md) elif self.elses: result=render(self.elses, md) else: result='' elif next: try: # The following line is a sneaky way to test whether # there are more items, without actually # computing a length: sequence[end] except IndexError: if self.elses: result=render(self.elses, md) else: result='' else: pstart,pend,psize=opt(end+1-overlap,0, sz,orphan,sequence) pkw['next-sequence']=1 pkw['next-sequence-start-index']=pstart-1 pkw['next-sequence-end-index']=pend-1 pkw['next-sequence-size']=pend+1-pstart result=render(section,md) else: result = [] append=result.append guarded_getitem = getattr(md, 'guarded_getitem', None) for index in range(first,end): # preset pkw['previous-sequence']= 0 pkw['next-sequence']= 0 # now more often defined then previously # if index==first or index==last: # provide batching information if first > 0: pstart,pend,psize=opt(0,first+overlap, sz,orphan,sequence) if index==first: pkw['previous-sequence']=1 pkw['previous-sequence-start-index']=pstart-1 pkw['previous-sequence-end-index']=pend-1 pkw['previous-sequence-size']=pend+1-pstart try: # The following line is a sneaky way to # test whether there are more items, # without actually computing a length: sequence[end] pstart,pend,psize=opt(end+1-overlap,0, sz,orphan,sequence) if index==last: pkw['next-sequence']=1 pkw['next-sequence-start-index']=pstart-1 pkw['next-sequence-end-index']=pend-1 pkw['next-sequence-size']=pend+1-pstart except: pass if index==last: pkw['sequence-end']=1 if guarded_getitem is not None: try: client = guarded_getitem(sequence, index) except ValidationError, vv: if (params.has_key('skip_unauthorized') and params['skip_unauthorized']): if index==first: pkw['sequence-start']=0 continue raise ValidationError, '(item %s): %s' % ( index, vv), sys.exc_info()[2] else: client = sequence[index] pkw['sequence-index']=index t = type(client) if t is TupleType and len(client)==2: client=client[1] if no_push_item: pushed = 0 elif mapping: pushed = 1 push(client) elif t in StringTypes: pushed = 0 else: pushed = 1 push(InstanceDict(client, md)) try: append(render(section, md)) finally: if pushed: pop() if index==first: pkw['sequence-start']=0 result = join_unicode(result) finally: if cache: pop() pop() return result