From c5de793e2c51ea4b37898d339081d077133a45b4 Mon Sep 17 00:00:00 2001 From: helmutm Date: Wed, 12 Sep 2007 08:07:50 +0000 Subject: [PATCH] work in progress: Python scripts with special R support git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2028 fd906abe-77d9-0310-91a1-e0d9ade77398 --- pyscript/browser.py | 25 +++++++++++++--------- pyscript/rstat.py | 51 +++++++++++++++++++++++++++++++++++++++++++++ pyscript/script.py | 2 +- 3 files changed, 67 insertions(+), 11 deletions(-) create mode 100644 pyscript/rstat.py diff --git a/pyscript/browser.py b/pyscript/browser.py index b99e8bb..e26c82c 100644 --- a/pyscript/browser.py +++ b/pyscript/browser.py @@ -1,16 +1,21 @@ -############################################################################## # -# Copyright (c) 2004 Zope Corporation and Contributors. -# All Rights Reserved. +# Copyright (c) 2007 Helmut Merz helmutm@cy55.de # -# This software is subject to the provisions of the Zope Public License, -# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. -# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -# FOR A PARTICULAR PURPOSE. +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. # -############################################################################## +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + """Python Script Browser Views $Id$ diff --git a/pyscript/rstat.py b/pyscript/rstat.py new file mode 100644 index 0000000..5e19cd2 --- /dev/null +++ b/pyscript/rstat.py @@ -0,0 +1,51 @@ +# +# Copyright (c) 2007 Helmut Merz helmutm@cy55.de +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +""" +Working transparently with the R statistics package. + +$Id$ +""" + +import rpy +from rpy import r +from zope.proxy import removeAllProxies + + +class RWrapper(object): + + def __init__(self, context): + self.context = context + + def __getattr__(self, attr): + value = getattr(self.context, attr) + # TODO (Zope 2): return aq_base(value) + return removeAllProxies(value) + + def __call__(self, *args, **kw): + value = self.context.__call__(*args, **kw) + value = removeAllProxies(value) + return RWrapper(value) + # TODO (subclass for Zope 2): return aq_base(value) + + +r = RWrapper(r) + +with_mode = RWrapper(rpy.with_mode) +as_py = RWrapper(rpy.as_py) + diff --git a/pyscript/script.py b/pyscript/script.py index 7bcaa86..57125d7 100644 --- a/pyscript/script.py +++ b/pyscript/script.py @@ -159,7 +159,7 @@ class Function(object): lines.append(' ' + line) lines.append('script_result = dummy()') source = '\n'.join(lines) - #print source + #print '*** source:', source self.code = compile(source, filename, 'exec') def __call__(self, globals):