def __init__(self, text): self.text = text if expr_globals is not None: eval = Eval(text, expr_globals) else: eval = Eval(text) self._v_eval = eval
def __call__(self, md): # md is a TemplateDict instance. eval = self._v_eval if eval is None: text = self.text if expr_globals is not None: eval = Eval(text, expr_globals) else: eval = Eval(text) self._v_eval = eval md.validate = self.validate # Zope 2.3.x md.read_guard = self.read_guard # Zope 2.4.x return eval.eval(md)
def __init__(self, blocks): tname, args, section = blocks[0] args = parse_params( args, name=None, expr=None, nowrap=1, expand=None, leaves=None, header=None, footer=None, branches=None, branches_expr=None, sort=None, reverse=1, skip_unauthorized=1, id=None, single=1, url=None, # opened_decoration=None, # closed_decoration=None, # childless_decoration=None, assume_children=1, urlparam=None, prefix=None) has_key = args.has_key if has_key('') or has_key('name') or has_key('expr'): name, expr = name_param(args, 'tree', 1) if expr is not None: args['expr'] = expr elif has_key(''): args['name'] = name else: name = 'a tree tag' if has_key('branches_expr'): if has_key('branches'): raise ParseError, _tm('branches and and branches_expr given', 'tree') args['branches_expr'] = Eval(args['branches_expr']).eval elif not has_key('branches'): args['branches'] = 'tpValues' if not has_key('id'): args['id'] = 'tpId' if not has_key('url'): args['url'] = 'tpURL' if not has_key('childless_decoration'): args['childless_decoration'] = '' prefix = args.get('prefix') if prefix and not simple_name(prefix): raise ParseError, _tm('prefix is not a simple name', 'tree') self.__name__ = name self.section = section.blocks self.args = args
def name_or_expr(mapping, name_attr, expr_attr, default): name = mapping.get(name_attr, None) expr = mapping.get(expr_attr, None) if name is None: if expr is None: return default return Eval(expr) if expr is None: return name raise ParseError, ('%s and %s given' % (name_attr, expr_attr), 'calendar')
def __init__(self, blocks): tname, args, section = blocks[0] self.section = section.blocks args = parse_params(args, lang=None, lang_expr=None, verbatim=1, catalog=None, data=None) self.lang = name_or_expr(args, 'lang', 'lang_expr', None) self.verbatim = args.get('', None) == 'verbatim' \ or args.get('verbatim', None) self.catalog = args.get('catalog', None) self.data = args.get('data', None) if self.data is not None: self.data = Eval(self.data)
def __init__(self, blocks): tname, args, section = blocks[0] self.__name__ = args self.section = section.blocks self.args = args = parse_let_params(args) for i in range(len(args)): name, expr = args[i] if expr[:1] == '"' and expr[-1:] == '"' and len(expr) > 1: # expr shorthand expr = expr[1:-1] try: args[i] = name, Eval(expr).eval except SyntaxError as v: m, (huh, l, c, src) = v raise ParseError( '<strong>Expression (Python) Syntax error</strong>:' '\n<pre>\n%s\n</pre>\n' % v[0], 'let')
def ZopeFindAndApply(self, obj, obj_ids=None, obj_metatypes=None, obj_searchterm=None, obj_expr=None, obj_mtime=None, obj_mspec=None, obj_permission=None, obj_roles=None, search_sub=0, REQUEST=None, result=None, pre='', apply_func=None, apply_path=''): """Zope Find interface and apply This is a *great* hack. Zope find just doesn't do what we need here; the ability to apply a method to all the objects *as they're found* and the need to pass the object's path into that method. """ if result is None: result = [] if obj_metatypes and 'all' in obj_metatypes: obj_metatypes = None if obj_mtime and isinstance(obj_mtime, str): obj_mtime = DateTime(obj_mtime).timeTime() if obj_permission: obj_permission = p_name(obj_permission) if obj_roles and isinstance(obj_roles, str): obj_roles = [obj_roles] if obj_expr: # Setup expr machinations md = td() obj_expr = (Eval(obj_expr), md, md._push, md._pop) base = aq_base(obj) if not hasattr(base, 'objectItems'): return result try: items = obj.objectItems() except Exception: return result try: add_result = result.append except Exception: raise AttributeError(repr(result)) for id, ob in items: if pre: p = "%s/%s" % (pre, id) else: p = id dflag = 0 if hasattr(ob, '_p_changed') and (ob._p_changed == None): dflag = 1 bs = aq_base(ob) if ((not obj_ids or absattr(bs.id) in obj_ids) and (not obj_metatypes or (hasattr(bs, 'meta_type') and bs.meta_type in obj_metatypes)) and (not obj_searchterm or (hasattr(ob, 'PrincipiaSearchSource') and ob.PrincipiaSearchSource().find(obj_searchterm) >= 0)) and (not obj_expr or expr_match(ob, obj_expr)) and (not obj_mtime or mtime_match(ob, obj_mtime, obj_mspec)) and ((not obj_permission or not obj_roles) or role_match(ob, obj_permission, obj_roles))): if apply_func: apply_func(ob, (apply_path + '/' + p)) else: add_result((p, ob)) dflag = 0 if search_sub and hasattr(bs, 'objectItems'): self.ZopeFindAndApply(ob, obj_ids, obj_metatypes, obj_searchterm, obj_expr, obj_mtime, obj_mspec, obj_permission, obj_roles, search_sub, REQUEST, result, p, apply_func, apply_path) if dflag: ob._p_deactivate() return result
def __init__(self, blocks): tname, args, section = blocks[0] args = parse_params(args, name='', start='1', end='-1', size='10', orphan='0', overlap='1', mapping=1, no_push_item=1, skip_unauthorized=1, previous=1, next=1, expr='', sort='', reverse=1, sort_expr='', reverse_expr='', prefix='') self.args = args if 'sort' in args: self.sort = sort = args['sort'] if sort == 'sequence-item': self.sort = '' if 'sort_expr' in args: self.sort_expr = Eval(args['sort_expr']) if 'reverse_expr' in args: self.reverse_expr = Eval(args['reverse_expr']) if 'reverse' in args: self.reverse = args['reverse'] if 'no_push_item' in args: self.no_push_item = args['no_push_item'] if 'mapping' in args: self.mapping = args['mapping'] for n in 'start', 'size', 'end': if n in args: self.batch = 1 prefix = args.get('prefix') if prefix and not simple_name(prefix): raise ParseError('prefix is not a simple name', 'in') for n in ('orphan', 'overlap', 'previous', 'next'): if n in args and not self.batch: raise ParseError( """ The %s attribute was used but neither of the <code>start</code>, <code>end</code>, or <code>size</code> attributes were used. """ % n, 'in') if 'start' in args: v = args['start'] if isinstance(v, str): try: int(v) except Exception: self.start_name_re = re.compile( '&+' + ''.join(["[%s]" % c for c in v]) + '=[0-9]+&+') name, expr = name_param(args, 'in', 1) if expr is not None: expr = expr.eval self.__name__, self.expr = name, expr self.section = section.blocks if len(blocks) > 1: if len(blocks) != 2: raise ParseError('too many else blocks', 'in') tname, args, section = blocks[1] args = parse_params(args, name='') if args: ename = name_param(args) if ename != name: raise ParseError('name in else does not match in', 'in') self.elses = section.blocks
def ZopeFindAndApply(self, obj, obj_ids=None, obj_metatypes=None, obj_searchterm=None, obj_expr=None, obj_mtime=None, obj_mspec=None, obj_permission=None, obj_roles=None, search_sub=0, REQUEST=None, result=None, pre='', apply_func=None, apply_path=''): """Zope Find interface and apply""" if result is None: result = [] if obj_metatypes and 'all' in obj_metatypes: obj_metatypes = None if obj_mtime and isinstance(obj_mtime, str): obj_mtime = DateTime(obj_mtime).timeTime() if obj_permission: obj_permission = getPermissionIdentifier(obj_permission) if obj_roles and isinstance(obj_roles, str): obj_roles = [obj_roles] if obj_expr: # Setup expr machinations md = td() obj_expr = (Eval(obj_expr), md, md._push, md._pop) base = aq_base(obj) if not hasattr(base, 'objectItems'): return result try: items = obj.objectItems() except Exception: return result try: add_result = result.append except Exception: raise AttributeError(repr(result)) for id, ob in items: if pre: p = "%s/%s" % (pre, id) else: p = id dflag = 0 if hasattr(ob, '_p_changed') and (ob._p_changed is None): dflag = 1 bs = aq_base(ob) if ((not obj_ids or absattr(bs.getId()) in obj_ids) and (not obj_metatypes or (hasattr(bs, 'meta_type') and bs.meta_type in obj_metatypes)) and (not obj_searchterm or (hasattr(ob, 'PrincipiaSearchSource') and obj_searchterm in ob.PrincipiaSearchSource()) or (hasattr(ob, 'SearchableText') and obj_searchterm in ob.SearchableText())) and (not obj_expr or expr_match(ob, obj_expr)) and (not obj_mtime or mtime_match(ob, obj_mtime, obj_mspec)) and ((not obj_permission or not obj_roles) or role_match(ob, obj_permission, obj_roles))): if apply_func: apply_func(ob, (apply_path + '/' + p)) else: add_result((p, ob)) dflag = 0 if search_sub and hasattr(bs, 'objectItems'): self.ZopeFindAndApply(ob, obj_ids, obj_metatypes, obj_searchterm, obj_expr, obj_mtime, obj_mspec, obj_permission, obj_roles, search_sub, REQUEST, result, p, apply_func, apply_path) if dflag: ob._p_deactivate() return result
def ZopeFind(self, obj, obj_ids=None, obj_metatypes=None, obj_searchterm=None, obj_expr=None, obj_mtime=None, obj_mspec=None, obj_permission=None, obj_roles=None, search_sub=0, REQUEST=None, result=None, pre=''): """Zope Find interface""" if result is None: result=[] if obj_metatypes and 'all' in obj_metatypes: obj_metatypes=None if obj_mtime and type(obj_mtime)==type('s'): obj_mtime=DateTime(obj_mtime).timeTime() if obj_permission: obj_permission=p_name(obj_permission) if obj_roles and type(obj_roles) is type('s'): obj_roles=[obj_roles] if obj_expr: # Setup expr machinations md=td() obj_expr=(Eval(obj_expr), md, md._push, md._pop) base = aq_base(obj) if hasattr(base, 'objectItems'): try: items=obj.objectItems() except: return result else: return result try: add_result=result.append except: raise AttributeError, `result` for id, ob in items: if pre: p="%s/%s" % (pre, id) else: p=id dflag=0 if hasattr(ob, '_p_changed') and (ob._p_changed == None): dflag=1 bs = aq_base(ob) if ( (not obj_ids or absattr(bs.getId()) in obj_ids) and (not obj_metatypes or (hasattr(bs, 'meta_type') and bs.meta_type in obj_metatypes)) and (not obj_searchterm or (hasattr(ob, 'PrincipiaSearchSource') and ob.PrincipiaSearchSource().find(str(obj_searchterm)) >= 0 ) or (hasattr(ob, 'SearchableText') and ob.SearchableText().find(str(obj_searchterm)) >= 0) ) and (not obj_expr or expr_match(ob, obj_expr)) and (not obj_mtime or mtime_match(ob, obj_mtime, obj_mspec)) and ( (not obj_permission or not obj_roles) or \ role_match(ob, obj_permission, obj_roles) ) ): add_result((p, ob)) dflag=0 if search_sub and (hasattr(bs, 'objectItems')): subob = ob sub_p = p self.ZopeFind(subob, obj_ids, obj_metatypes, obj_searchterm, obj_expr, obj_mtime, obj_mspec, obj_permission, obj_roles, search_sub, REQUEST, result, sub_p) if dflag: ob._p_deactivate() return result
def __init__(self, blocks, encoding=None): self.encoding = encoding self.sections = [] self.multipart = 'mixed' for tname, args, section in blocks: if tname == 'mime': args = parse_params(args, type=None, type_expr=None, disposition=None, disposition_expr=None, encode=None, encode_expr=None, name=None, name_expr=None, filename=None, filename_expr=None, cid=None, cid_expr=None, charset=None, charset_expr=None, skip_expr=None, multipart=None) self.multipart = args.get('multipart', 'mixed') else: args = parse_params(args, type=None, type_expr=None, disposition=None, disposition_expr=None, encode=None, encode_expr=None, name=None, name_expr=None, filename=None, filename_expr=None, cid=None, cid_expr=None, charset=None, charset_expr=None, skip_expr=None) if 'type_expr' in args: if 'type' in args: raise ParseError('dtml-mime: type and type_expr given') args['type_expr'] = Eval(args['type_expr']) elif 'type' not in args: args['type'] = 'application/octet-stream' if 'disposition_expr' in args: if 'disposition' in args: raise ParseError( 'dtml-mime: disposition and disposition_expr given') args['disposition_expr'] = Eval(args['disposition_expr']) elif 'disposition' not in args: args['disposition'] = '' if 'encode_expr' in args: if 'encode' in args: raise ParseError('dtml-mime: encode and encode_expr given') args['encode_expr'] = Eval(args['encode_expr']) elif 'encode' not in args: args['encode'] = 'base64' if 'name_expr' in args: if 'name' in args: raise ParseError('dtml-mime: name and name_expr given') args['name_expr'] = Eval(args['name_expr']) elif 'name' not in args: args['name'] = '' if 'filename_expr' in args: if 'filename' in args: raise ParseError( 'dtml-mime: filename and filename_expr given') args['filename_expr'] = Eval(args['filename_expr']) elif 'filename' not in args: args['filename'] = '' if 'cid_expr' in args: if 'cid' in args: raise ParseError('dtml-mime: cid and cid_expr given') args['cid_expr'] = Eval(args['cid_expr']) elif 'cid' not in args: args['cid'] = '' if 'charset_expr' in args: if 'charset' in args: raise ParseError( 'dtml-mime: charset and charset_expr given') args['charset_expr'] = Eval(args['charset_expr']) elif 'charset' not in args: args['charset'] = 'us-ascii' # Default for text parts if 'skip_expr' in args: args['skip_expr'] = Eval(args['skip_expr']) if args['encode'] not in ENCODINGS: raise MIMEError('An unsupported encoding was specified in tag') self.sections.append((args, section.blocks))