#ifndef PY_OBJECT_WRAPPER_H #define PY_OBJECT_WRAPPER_H #include #include #include #include "utils.h" using namespace v8; using std::string; class PyObjectWrapper : public node::ObjectWrap { PyObject* mPyObject; public: static Persistent py_function_template; PyObjectWrapper(PyObject* obj) : node::ObjectWrap(), mPyObject(obj) {}; virtual ~PyObjectWrapper() { Py_XDECREF(mPyObject); mPyObject = NULL; } static void Initialize(); static Handle New(PyObject* obj); static Handle New(const Arguments& args); static Handle Get(Local key, const AccessorInfo& info); static Handle Set(Local key, Local value, const AccessorInfo& info); static Handle CallAccessor(Local property, const AccessorInfo& info); static Handle ToStringAccessor(Local property, const AccessorInfo& info); static Handle ValueOfAccessor(Local property, const AccessorInfo& info); static Handle Call(const Arguments& args); static Handle ToString(const Arguments& args); static Handle ValueOf(const Arguments& args); static PyObject* ConvertToPython(const Handle& value); PyObject* InstanceGetPyObject() { return mPyObject; }; Handle InstanceCall(const Arguments& args); string InstanceToString(const Arguments& args); PyObject* InstanceGet(const string& key); }; #endif