diff --git a/pyscript/interfaces.py b/pyscript/interfaces.py index 12c8932..87a9590 100644 --- a/pyscript/interfaces.py +++ b/pyscript/interfaces.py @@ -38,9 +38,15 @@ class IPythonScript(Interface): automatically. """ + title = schema.TextLine( + title=_(u"Title"), + description=_(u"A descriptive title of the script."), + required=False, + default=u'' + ) parameters = schema.TextLine( title=_(u"Parameters"), - description=_(u"Space-separated list of parameter names."), + description=_(u"Comma-separated list of parameter names."), required=False, default=u'' ) diff --git a/pyscript/rstat.py b/pyscript/rstat.py index a5a2e42..5e2c599 100644 --- a/pyscript/rstat.py +++ b/pyscript/rstat.py @@ -31,6 +31,8 @@ from zope.traversing.browser import absoluteURL from cybertools.pyscript.plot import registerImage +# not used (yet?): + class RWrapper(object): def __init__(self, context): @@ -45,27 +47,12 @@ class RWrapper(object): value = removeAllProxies(value) return RWrapper(value) - rx = RWrapper(r) with_mode = RWrapper(rpy.with_mode) #as_py = RWrapper(rpy.as_py) -def gdd(**kw): - r.library('GDD') - filename = os.tempnam(None, 'rplot') - robj = r.GDD(filename, type='jpg', **kw) - return filename + '.jpg', robj - -def graphics(**kw): - context = kw.pop('context', None) - request = kw.pop('request', None) - fn, robj = gdd(**kw) - key = registerImage(fn) - return '%s/@@plot?image=%s' % (absoluteURL(context, request), key) - - class RStat(object): def __init__(self, context, request): diff --git a/pyscript/script.py b/pyscript/script.py index 1ff5188..d85e80c 100644 --- a/pyscript/script.py +++ b/pyscript/script.py @@ -89,11 +89,16 @@ class PythonScript(Contained, Persistent): _v_compiled = None + title = u'' parameters = u'' + source = u'' + contentType=u'text/plain' - def __init__(self, source=u'', parameters=u'', contentType=u'text/plain'): + def __init__(self, title=u'', parameters=u'', source=u'', + contentType=u'text/plain'): """Initialize the object.""" super(PythonScript, self).__init__() + self.title = title self.source = source self.contentType = contentType self.parameters = parameters or u'' @@ -164,12 +169,12 @@ class Function(object): """A compiled function. """ - parameters = '' + parameters = [] def __init__(self, source, parameters='', filename=''): lines = [] if parameters: - self.parameters = str(parameters).split() + self.parameters = [str(p).strip() for p in parameters.split(',')] #print '*** Function.parameters:', repr(self.parameters) lines.insert(0, 'def dummy(): \n pass') for line in source.splitlines(): @@ -182,6 +187,7 @@ class Function(object): def __call__(self, args, globals): globals['__builtins__'] = SafeBuiltins for idx, p in enumerate(self.parameters): + # TODO: handle parameters with default values like ``attr=abc`` globals[p] = args[idx] exec self.code in globals, None @@ -198,12 +204,14 @@ class ScriptContainer(BTreeContainer): implements(IScriptContainer) - unrestricted_objects = ('rstat') # not used (yet) + unrestricted_objects = ('rstat',) # not used (yet) + + def getItems(self): + return self.values() def updateGlobals(self, globs): if HAS_R: from cybertools.pyscript import rstat - #globs['rstat'] = rstat context = globs['context'] request = globs['request'] globs['rstat'] = rstat.RStat(context, request)