summaryrefslogtreecommitdiff
path: root/weave/common_spec.py
diff options
context:
space:
mode:
Diffstat (limited to 'weave/common_spec.py')
-rwxr-xr-xweave/common_spec.py57
1 files changed, 57 insertions, 0 deletions
diff --git a/weave/common_spec.py b/weave/common_spec.py
new file mode 100755
index 000000000..7464c5532
--- /dev/null
+++ b/weave/common_spec.py
@@ -0,0 +1,57 @@
+from base_spec import base_specification
+import common_info
+from types import *
+import os
+
+class common_base_specification(base_specification):
+ def type_spec(self,name,value):
+ # factory
+ new_spec = self.__class__()
+ new_spec.name = name
+ return new_spec
+ def __repr__(self):
+ msg = "(file:: name: %s)" % self.name
+ return msg
+ def __cmp__(self,other):
+ #only works for equal
+ return cmp(self.name,other.name) or \
+ cmp(self.__class__, other.__class__)
+
+
+class file_specification(common_base_specification):
+ type_name = 'file'
+ _build_information = [common_info.file_info()]
+ def type_match(self,value):
+ return type(value) in [FileType]
+
+ def declaration_code(self,templatize = 0,inline=0):
+ var_name = self.retrieve_py_variable(inline)
+ code = 'PyObject* py_%s = %s;\n' \
+ 'FILE* %s = py_to_file(py_%s,"%s");\n' % \
+ (self.name,var_name,self.name,self.name,self.name)
+ return code
+ def cleanup_code(self):
+ # could use Py_DECREF here I think and save NULL test.
+ code = "Py_XDECREF(py_%s);\n" % self.name
+ return code
+
+class callable_specification(common_base_specification):
+ type_name = 'callable'
+ _build_information = [common_info.callable_info()]
+ def type_match(self,value):
+ # probably should test for callable classes here also.
+ return type(value) in [FunctionType,MethodType,type(len)]
+
+ def declaration_code(self,templatize = 0,inline=0):
+ var_name = self.retrieve_py_variable(inline)
+ code = 'PyObject* %s = py_to_callable(%s,"%s");\n' % \
+ (self.name,var_name,self.name)
+ return code
+
+def test():
+ from scipy_test import module_test
+ module_test(__name__,__file__)
+
+def test_suite():
+ from scipy_test import module_test_suite
+ return module_test_suite(__name__,__file__)