History for PlannedBehavior
??changed:- Python Methods Planned Behavior - uses GuardedBlock for security - copies methods from !DocumentTemplate.DT_Util.!TemplateDict into the builtins dictionary - uses the Bindings tab to make the container, context, method object, caller's DTML namespace, and traversal information available through user-chosen names. - recurses into code blocks, allowing lambdas and nested function definitions. GuardedBlock security - 'co_names' is checked for multi-character names beginning with "_". - 'print' statements are replaced with calls to a function that stores the text in a list. The concatenation of these strings is available through global variable 'printed'. If 'printed' is not read, but 'print' statements are used, a warning is printed. - assignments to attributes, items, or slices are replaced with calls to methods of the container. These are named '__guarded_setattr__', '__guarded_setitem__', and '__guarded_setslice__'. - 'del' statements that operate on attributes, items, or slices are replaced with calls to methods of the container. These are named '__guarded_delattr__', '__guarded_delitem__', and '__guarded_delslice__'. - Literal lists and dictionaries are exempted from this wrapping, as are objects which declare that they handle their own write security, by exposing a true '_guarded_writes' attribute. - 'return', 'assert', 'try/finally', 'try/except/else', 'pass', 'raise', 'break', 'global', and 'if/elif/else' are not changed or restricted. - 'for/else', 'while/else', and 'continue' statements have calls to a global iteration counter/termination polling function inserted just before the jump to the start of a loop. - 'import' is restricted by providing an '__import__' function which only succeeds if each module to be imported is already in 'sys.modules'. Access to names within modules is protected by calling the security machinery. - 'exec' statements are not allowed. - The only other statements are expression statements. Expression evaluation is altered so that multiplication operations are replaced with calls to 'careful_mul' from '!DocumentTemplate.!VSEval'. All access to attributes, items, and slices is guarded by calls to the security machinery. - Since CodeBlock compiles a function in an empty global namespace with no builtins, the function is flagged restricted, and cannot access internal attributes such as 'im_func'.