Exemplo n.º 1
0
def applevel(code, noconvert=False):
    code = '\n'.join(['    ' + line for line in code.split('\n') if line])
    code = 'def anonymous():\n' + code
    py_code = ffi.gc(lib.Py_CompileString(code, 'exec', lib.Py_file_input),
                     lib.Py_DECREF)
    lib.Py_INCREF(py_code)
    py_elem = lib.PyObject_GetAttrString(py_code, 'co_consts')
    lib.Py_INCREF(py_elem)
    py_zero = ffi.gc(lib.PyInt_FromLong(0), lib.Py_DECREF)
    py_item = lib.PyObject_GetItem(py_elem, py_zero)
    py_locals = ffi.gc(lib.PyDict_New(), lib.Py_DECREF)
    py_globals = ffi.gc(lib.PyDict_New(), lib.Py_DECREF)
    py_bltns = lib.PyEval_GetBuiltins()
    lib.PyDict_SetItemString(py_globals, '__builtins__', py_bltns)
    py_res = lib.PyEval_EvalCode(py_item, py_globals, py_locals)
    return MetabiosisWrapper(py_res, noconvert=noconvert)
Exemplo n.º 2
0
 def __iter__(self):
     py_iter = ffi.gc(lib.PyObject_GetIter(self._cpyobj), lib.Py_DECREF)
     while True:
         py_next = lib.PyIter_Next(py_iter)
         if py_next is None:
             break
         yield self._maybe_pypy_convert(py_next)
Exemplo n.º 3
0
 def __iter__(self):
     py_iter = ffi.gc(lib.PyObject_GetIter(self.obj), lib.Py_DECREF)
     while True:
         py_next = lib.PyIter_Next(py_iter)
         if py_next is None:
             break
         yield self._maybe_pypy_convert(py_next)
Exemplo n.º 4
0
def applevel(code, noconvert=False):
    code = '\n'.join(['    ' + line for line in code.split('\n') if line])
    code = 'def anonymous():\n' + code
    py_code = ffi.gc(
            lib.Py_CompileString(code, 'exec', lib.Py_file_input),
            lib.Py_DECREF)
    lib.Py_INCREF(py_code)
    py_elem = lib.PyObject_GetAttrString(py_code, 'co_consts')
    lib.Py_INCREF(py_elem)
    py_zero = ffi.gc(lib.PyInt_FromLong(0), lib.Py_DECREF)
    py_item = lib.PyObject_GetItem(py_elem, py_zero)
    py_locals = ffi.gc(lib.PyDict_New(), lib.Py_DECREF)
    py_globals = ffi.gc(lib.PyDict_New(), lib.Py_DECREF)
    py_bltns = lib.PyEval_GetBuiltins()
    lib.PyDict_SetItemString(py_globals, '__builtins__', py_bltns)
    py_res = lib.PyEval_EvalCode(py_item, py_globals, py_locals)
    return MetabiosisWrapper(py_res, noconvert=noconvert)
Exemplo n.º 5
0
def convert_dict(obj, convert_values=True):
    dict = ffi.gc(lib.PyDict_New(), lib.Py_DECREF)

    for key, value in obj.iteritems():
        if convert_values:
            value = convert(value)
        lib.PyDict_SetItem(dict, convert(key), value)

    return dict
Exemplo n.º 6
0
def convert_dict(obj, convert_values=True):
    dict = ffi.gc(lib.PyDict_New(), lib.Py_DECREF)

    for key, value in obj.iteritems():
        if convert_values:
            value = convert(value)
        lib.PyDict_SetItem(dict, convert(key), value)

    return dict
Exemplo n.º 7
0
    def _call(self, args, kwargs=None, args_kwargs_converted=False):
        convert = not args_kwargs_converted
        arguments_tuple = convert_tuple(args, convert_items=convert)

        keywordargs = ffi.NULL
        if kwargs:
            keywordargs = convert_dict(kwargs, convert_values=convert)

        return_value = ffi.gc(
                lib.PyObject_Call(self.obj, arguments_tuple, keywordargs),
                lib.Py_DECREF)

        return self._maybe_pypy_convert(return_value)
Exemplo n.º 8
0
    def _call(self, args, kwargs=None, args_kwargs_converted=False):
        convert = not args_kwargs_converted
        arguments_tuple = convert_tuple(args, convert_items=convert)

        keywordargs = ffi.NULL
        if kwargs:
            keywordargs = convert_dict(kwargs, convert_values=convert)

        return_value = ffi.gc(
            lib.PyObject_Call(self._cpyobj, arguments_tuple, keywordargs),
            lib.Py_DECREF)

        return self._maybe_pypy_convert(return_value)
Exemplo n.º 9
0
 def __str__(self):
     py_str = ffi.gc(lib.PyObject_Str(self.obj), lib.Py_DECREF)
     return pypy_convert(py_str)
Exemplo n.º 10
0
 def __repr__(self):
     py_str = ffi.gc(lib.PyObject_Repr(self._cpyobj), lib.Py_DECREF)
     return pypy_convert(py_str)
Exemplo n.º 11
0
 def _getattr(self, name):
     c_name = ffi.new("char[]", name)
     py_attr = ffi.gc(lib.PyObject_GetAttrString(self._cpyobj, c_name),
                      lib.Py_DECREF)
     return self._maybe_pypy_convert(py_attr)
Exemplo n.º 12
0
def convert_int(obj):
    return ffi.gc(lib.PyInt_FromLong(obj), lib.Py_DECREF)
Exemplo n.º 13
0
 def __str__(self):
     py_str = ffi.gc(lib.PyObject_Str(self._cpyobj), lib.Py_DECREF)
     return pypy_convert(py_str)
Exemplo n.º 14
0
def convert_string(s):
    return ffi.gc(lib.PyString_FromString(ffi.new("char[]", s)), lib.Py_DECREF)
Exemplo n.º 15
0
 def __getitem__(self, key):
     py_res = ffi.gc(
             lib.PyObject_GetItem(self.obj, convert(key)),
             lib.Py_DECREF)
     return self._maybe_pypy_convert(py_res)
Exemplo n.º 16
0
def convert_tuple(values, convert_items=True):
    if convert_items:
        values = [convert(value) for value in values]

    return ffi.gc(lib.PyTuple_Pack(len(values), *values), lib.Py_DECREF)
Exemplo n.º 17
0
def convert_None(obj):
    lib.Py_INCREF(lib.Py_None)
    return ffi.gc(lib.Py_None, lib.Py_DECREF)
Exemplo n.º 18
0
def pypy_convert_dict(obj):
    items = ffi.gc(lib.PyDict_Items(obj), lib.Py_DECREF)
    return dict(pypy_convert_list(items))
Exemplo n.º 19
0
def convert_bool(obj):
    py_obj = lib.Py_True if obj else lib.Py_False
    lib.Py_INCREF(py_obj)
    return ffi.gc(py_obj, lib.Py_DECREF)
Exemplo n.º 20
0
    def get_type(self):
        typeobject = ffi.cast("PyObject*", self._cpyobj.ob_type)

        lib.Py_INCREF(typeobject)

        return MetabiosisWrapper(ffi.gc(typeobject, lib.Py_DECREF))
Exemplo n.º 21
0
def convert_int(obj):
    return ffi.gc(lib.PyInt_FromLong(obj), lib.Py_DECREF)
Exemplo n.º 22
0
 def __dir__(self):
     py_lst = ffi.gc(lib.PyObject_Dir(self.obj), lib.Py_DECREF)
     return pypy_convert(py_lst)
Exemplo n.º 23
0
def convert_float(obj):
    return ffi.gc(lib.PyFloat_FromDouble(obj), lib.Py_DECREF)
Exemplo n.º 24
0
 def _getattr(self, name):
     c_name = ffi.new("char[]", name)
     py_attr = ffi.gc(
             lib.PyObject_GetAttrString(self.obj, c_name),
             lib.Py_DECREF)
     return self._maybe_pypy_convert(py_attr)
Exemplo n.º 25
0
    def get_type(self):
        typeobject = ffi.cast("PyObject*", self.obj.ob_type)

        lib.Py_INCREF(typeobject)

        return MetabiosisWrapper(ffi.gc(typeobject, lib.Py_DECREF))
Exemplo n.º 26
0
def convert_unicode(u):
    return ffi.gc(
        lib.PyUnicode_FromString(ffi.new("char[]", u.encode('utf-8'))),
        lib.Py_DECREF)
Exemplo n.º 27
0
def pypy_convert_dict(obj):
    items = ffi.gc(lib.PyDict_Items(obj), lib.Py_DECREF)
    return dict(pypy_convert_list(items))
Exemplo n.º 28
0
def convert_bool(obj):
    py_obj = lib.Py_True if obj else lib.Py_False
    lib.Py_INCREF(py_obj)
    return ffi.gc(py_obj, lib.Py_DECREF)
Exemplo n.º 29
0
 def __getitem__(self, key):
     py_res = ffi.gc(lib.PyObject_GetItem(self._cpyobj, convert(key)),
                     lib.Py_DECREF)
     return self._maybe_pypy_convert(py_res)
Exemplo n.º 30
0
def convert_unicode(u):
    return ffi.gc(
            lib.PyUnicode_FromString(ffi.new("char[]", u.encode('utf-8'))),
            lib.Py_DECREF)
Exemplo n.º 31
0
def convert_float(obj):
    return ffi.gc(lib.PyFloat_FromDouble(obj), lib.Py_DECREF)
Exemplo n.º 32
0
def convert_tuple(values, convert_items=True):
    if convert_items:
        values = [convert(value) for value in values]

    return ffi.gc(lib.PyTuple_Pack(len(values), *values), lib.Py_DECREF)
Exemplo n.º 33
0
def convert_list(obj):
    lst = ffi.gc(lib.PyList_New(len(obj)), lib.Py_DECREF)
    for i, x in enumerate(obj):
        lib.PyList_SetItem(lst, i, convert(x))
    return lst
Exemplo n.º 34
0
def convert_string(s):
    return ffi.gc(lib.PyString_FromString(ffi.new("char[]", s)), lib.Py_DECREF)
Exemplo n.º 35
0
 def __dir__(self):
     py_lst = ffi.gc(lib.PyObject_Dir(self._cpyobj), lib.Py_DECREF)
     return pypy_convert(py_lst)
Exemplo n.º 36
0
def convert_None(obj):
    lib.Py_INCREF(lib.Py_None)
    return ffi.gc(lib.Py_None, lib.Py_DECREF)
Exemplo n.º 37
0
def convert_list(obj):
    lst = ffi.gc(lib.PyList_New(len(obj)), lib.Py_DECREF)
    for i, x in enumerate(obj):
        lib.PyList_SetItem(lst, i, convert(x))
    return lst
Exemplo n.º 38
0
def convert_slice(obj):
    return ffi.gc(
        lib.PySlice_New(convert(obj.start), convert(obj.stop),
                        convert(obj.step)), lib.Py_DECREF)
Exemplo n.º 39
0
def import_module(name, noconvert=False):
    module_object = lib.PyImport_ImportModule(name)
    return MetabiosisWrapper(ffi.gc(module_object, lib.Py_DECREF), noconvert)
Exemplo n.º 40
0
def convert_slice(obj):
    return ffi.gc(
            lib.PySlice_New(
                convert(obj.start), convert(obj.stop), convert(obj.step)),
            lib.Py_DECREF)
Exemplo n.º 41
0
def import_module(name, noconvert=False):
    module_object = lib.PyImport_ImportModule(name)
    return MetabiosisWrapper(ffi.gc(module_object, lib.Py_DECREF), noconvert)