bool CPythonContext::Import(const std::string& name, object& mod) { handle<> result(allow_null(::PyImport_ImportModule(name.c_str()))); if (result) mod = object(result); return result; }
const_object_slice object_operators<U>::slice(object_cref start, slice_nil) const { object_cref2 x = *static_cast<U const*>(this); return const_object_slice(x, std::make_pair(borrowed(start.ptr()), allow_null((PyObject*)0))); }
const_object_slice object_operators<U>::slice(slice_nil, object_cref finish) const { object_cref2 x = *static_cast<U const*>(this); return const_object_slice(x, std::make_pair(allow_null((PyObject*)0), borrowed(finish.ptr()))); }
void function::add_to_namespace( object const& name_space, char const* name_, object const& attribute, char const* doc) { str const name(name_); PyObject* const ns = name_space.ptr(); if (attribute.ptr()->ob_type == &function_type) { function* new_func = downcast<function>(attribute.ptr()); PyObject* dict = 0; #if PY_VERSION_HEX < 0x03000000 // Old-style class gone in Python 3 if (PyClass_Check(ns)) dict = ((PyClassObject*)ns)->cl_dict; else #endif if (PyType_Check(ns)) dict = ((PyTypeObject*)ns)->tp_dict; else dict = PyObject_GetAttrString(ns, const_cast<char*>("__dict__")); if (dict == 0) throw_error_already_set(); handle<> existing(allow_null(::PyObject_GetItem(dict, name.ptr()))); if (existing) { if (existing->ob_type == &function_type) { new_func->add_overload( handle<function>( borrowed( downcast<function>(existing.get()) ) ) ); } else if (existing->ob_type == &PyStaticMethod_Type) { char const* name_space_name = extract<char const*>(name_space.attr("__name__")); ::PyErr_Format( PyExc_RuntimeError , "Boost.Python - All overloads must be exported " "before calling \'class_<...>(\"%s\").staticmethod(\"%s\")\'" , name_space_name , name_ ); throw_error_already_set(); } } else if (is_binary_operator(name_)) { // Binary operators need an additional overload which // returns NotImplemented, so that Python will try the // __rxxx__ functions on the other operand. We add this // when no overloads for the operator already exist. new_func->add_overload(not_implemented_function()); } // A function is named the first time it is added to a namespace. if (new_func->name().is_none()) new_func->m_name = name; handle<> name_space_name( allow_null(::PyObject_GetAttrString(name_space.ptr(), const_cast<char*>("__name__")))); if (name_space_name) new_func->m_namespace = object(name_space_name); } // The PyObject_GetAttrString() or PyObject_GetItem calls above may // have left an active error PyErr_Clear(); if (PyObject_SetAttr(ns, name.ptr(), attribute.ptr()) < 0) throw_error_already_set(); object mutable_attribute(attribute); /* if (doc != 0 && docstring_options::show_user_defined_) { // Accumulate documentation if ( PyObject_HasAttrString(mutable_attribute.ptr(), "__doc__") && mutable_attribute.attr("__doc__")) { mutable_attribute.attr("__doc__") += "\n\n"; mutable_attribute.attr("__doc__") += doc; } else { mutable_attribute.attr("__doc__") = doc; } } if (docstring_options::show_signatures_) { if ( PyObject_HasAttrString(mutable_attribute.ptr(), "__doc__") && mutable_attribute.attr("__doc__")) { mutable_attribute.attr("__doc__") += ( mutable_attribute.attr("__doc__")[-1] != "\n" ? "\n\n" : "\n"); } else { mutable_attribute.attr("__doc__") = ""; } function* f = downcast<function>(attribute.ptr()); mutable_attribute.attr("__doc__") += str("\n ").join(make_tuple( "C++ signature:", f->signature(true))); } */ str _doc; if (docstring_options::show_py_signatures_) { _doc += str(const_cast<const char*>(detail::py_signature_tag)); } if (doc != 0 && docstring_options::show_user_defined_) _doc += doc; if (docstring_options::show_cpp_signatures_) { _doc += str(const_cast<const char*>(detail::cpp_signature_tag)); } if(_doc) { object mutable_attribute(attribute); mutable_attribute.attr("__doc__")= _doc; } }
object_slice object_operators<U>::slice(object_cref start, slice_nil) { object_cref2 x = *static_cast<U*>(this); return object_slice(x, api::slice_key(borrowed(start.ptr()), allow_null((PyObject*)0))); }
const_object_slice object_operators<U>::slice(slice_nil, slice_nil) const { object_cref2 x = *static_cast<U const*>(this); return const_object_slice(x, api::slice_key(allow_null((PyObject*)0), allow_null((PyObject*)0))); }
object_slice object_operators<U>::slice(slice_nil, object_cref finish) { object_cref2 x = *static_cast<U*>(this); return object_slice(x, api::slice_key(allow_null((PyObject*)0), borrowed(finish.ptr()))); }