mirror of
https://github.com/Team-Resurgent/XBMC4Xbox.git
synced 2026-08-15 11:18:13 -07:00
If ever adding the XBMC4Xbox source to GitHub use "git add -f -A" or it wont add all the files.
56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
##################################################
|
|
# SPYCE - Python-based HTML Scripting
|
|
# Copyright (c) 2002 Rimon Barr.
|
|
#
|
|
# Refer to spyce.py
|
|
# CVS: $Id: spylambda.py 31144 2012-07-15 15:38:56Z buzz $
|
|
##################################################
|
|
|
|
from spyceModule import spyceModule
|
|
import string
|
|
|
|
__doc__ = """spylambda module produces functions from spyce strings."""
|
|
|
|
class spylambda(spyceModule):
|
|
def define(self, sig, code, memoize=0):
|
|
# compile spyce to cache errors early
|
|
spycecode = self._api.spyceString((code, sig))
|
|
if string.strip(sig): sigcomma = sig + ','
|
|
def processSpyce(args, kwargs, self=self, spycecode=spycecode):
|
|
s = None
|
|
try:
|
|
s = spycecode.newWrapper()
|
|
modules = self._api.getModules()
|
|
for name in modules.keys():
|
|
s.setModule(name, modules[name])
|
|
s.spyceInit(self._api.getRequest(), self._api.getResponse())
|
|
result = apply(s.spyceProcess, args, kwargs)
|
|
finally:
|
|
if s:
|
|
s.spyceDestroy()
|
|
spycecode.returnWrapper(s)
|
|
return result
|
|
if memoize:
|
|
def memoizer(f, id, stdout=self._api.getModule('stdout')):
|
|
def memoized(args, kwargs, f=f, id=id, stdout=stdout):
|
|
key = id, `args, kwargs`
|
|
try: r, s = stdout.memoizeCache[key]
|
|
except:
|
|
r, s = stdout.memoizeCache[key] = apply(stdout.capture, (f, args, kwargs))
|
|
print s
|
|
return r
|
|
return memoized
|
|
processSpyce = memoizer(processSpyce, code)
|
|
def makeArgProcessor(f):
|
|
dict = { 'f': f }
|
|
exec '''
|
|
def processArg(*args, **kwargs):
|
|
return f(args, kwargs)
|
|
''' in dict
|
|
return dict['processArg']
|
|
return makeArgProcessor(processSpyce)
|
|
def __call__(self, sig, code, memoize=0):
|
|
return self.define(sig, code)
|
|
def __repr__(self):
|
|
return ''
|