Blender V4.5
bpy_interface.cc File Reference
#include <Python.h>
#include <frameobject.h>
#include "../generic/python_compat.hh"
#include "CLG_log.h"
#include "BLI_path_utils.hh"
#include "BLI_string.h"
#include "BLI_threads.h"
#include "BLI_utildefines.h"
#include "BLT_translation.hh"
#include "RNA_types.hh"
#include "bpy.hh"
#include "bpy_capi_utils.hh"
#include "bpy_intern_string.hh"
#include "bpy_path.hh"
#include "bpy_props.hh"
#include "bpy_rna.hh"
#include "bpy_app_translations.hh"
#include "DNA_text_types.h"
#include "BKE_appdir.hh"
#include "BKE_context.hh"
#include "BKE_global.hh"
#include "BKE_main.hh"
#include "BKE_text.h"
#include "BPY_extern.hh"
#include "BPY_extern_python.hh"
#include "BPY_extern_run.hh"
#include "../generic/py_capi_utils.hh"
#include "../bmesh/bmesh_py_api.hh"
#include "../generic/bgl.hh"
#include "../generic/bl_math_py_api.hh"
#include "../generic/blf_py_api.hh"
#include "../generic/idprop_py_api.hh"
#include "../generic/imbuf_py_api.hh"
#include "../gpu/gpu_py_api.hh"
#include "../mathutils/mathutils.hh"

Go to the source code of this file.

Functions

 CLG_LOGREF_DECLARE_GLOBAL (BPY_LOG_CONTEXT, "bpy.context")
 CLG_LOGREF_DECLARE_GLOBAL (BPY_LOG_INTERFACE, "bpy.interface")
 CLG_LOGREF_DECLARE_GLOBAL (BPY_LOG_RNA, "bpy.rna")
void BPY_context_update (bContext *C)
void bpy_context_set (bContext *C, PyGILState_STATE *gilstate)
void bpy_context_clear (bContext *, const PyGILState_STATE *gilstate)
static void bpy_context_end (bContext *C)
void BPY_context_dict_clear_members_array (void **dict_p, void *dict_orig, const char *context_members[], uint context_members_len)
void BPY_text_free_code (Text *text)
void BPY_modules_update ()
bContextBPY_context_get ()
void BPY_context_set (bContext *C)
static void pystatus_exit_on_error (const PyStatus &status)
void BPY_python_start (bContext *C, int argc, const char **argv)
void BPY_python_end (const bool do_python_exit)
void BPY_python_reset (bContext *C)
void BPY_python_use_system_env ()
bool BPY_python_use_system_env_get ()
void BPY_python_backtrace (FILE *fp)
void BPY_DECREF (void *pyob_ptr)
void BPY_DECREF_RNA_INVALIDATE (void *pyob_ptr)
void BPY_modules_load_user (bContext *C)
int BPY_context_member_get (bContext *C, const char *member, bContextDataResult *result)
bool BPY_string_is_keyword (const char *str)
Character Classification

Define text.cc functions here (declared in BKE_text.h), This could be removed if Blender gets its own unicode library.

int text_check_identifier_unicode (const uint ch)
int text_check_identifier_nodigit_unicode (const uint ch)

Variables

static int py_call_level = 0
static bool py_use_system_env = false
static _inittab bpy_internal_modules []

Detailed Description

This file deals with embedding the python interpreter within blender, starting and stopping python and exposing blender/python modules so they can be accesses from scripts.

Definition in file bpy_interface.cc.

Function Documentation

◆ bpy_context_clear()

◆ BPY_context_dict_clear_members_array()

void BPY_context_dict_clear_members_array ( void ** dict_p,
void * dict_orig,
const char * context_members[],
uint context_members_len )

Use for CTX_*_set(..) functions need to set values which are later read back as expected. In this case we don't want the Python context to override the values as it causes problems see #66256.

Parameters
dict_pA pointer to #bContext.data.py_context so we can assign a new value.
dict_origThe value of #bContext.data.py_context_orig to check if we need to copy.

Definition at line 169 of file bpy_interface.cc.

References BLI_assert, BPY_context_dict_clear_members_array(), i, and PyC_IsInterpreterActive().

Referenced by BPY_context_dict_clear_members_array(), CTX_data_scene_set(), CTX_wm_area_set(), CTX_wm_region_set(), CTX_wm_screen_set(), and CTX_wm_window_set().

◆ bpy_context_end()

void bpy_context_end ( bContext * C)
static

Definition at line 161 of file bpy_interface.cc.

References bpy_context_end(), C, CTX_wm_operator_poll_msg_clear(), and UNLIKELY.

Referenced by bpy_context_end(), and BPY_python_end().

◆ BPY_context_get()

◆ BPY_context_member_get()

◆ BPY_context_set()

void BPY_context_set ( bContext * C)

◆ bpy_context_set()

◆ BPY_context_update()

void BPY_context_update ( bContext * C)

Use for updating while a python script runs - in case of file load.

Definition at line 97 of file bpy_interface.cc.

References BLI_thread_is_main(), BPY_context_set(), BPY_context_update(), BPY_modules_update(), and C.

Referenced by bpy_context_set(), BPY_context_update(), BPY_modules_load_user(), and setup_app_data().

◆ BPY_DECREF()

void BPY_DECREF ( void * pyob_ptr)

Acquire the global-interpreter-lock (GIL) and wrap Py_DECREF. as there are some cases when this needs to be called outside the Python API code.

Definition at line 669 of file bpy_interface.cc.

References BPY_DECREF().

Referenced by BPY_DECREF(), fcurve_free_driver(), pyop_poll_message_free_fn(), and RNA_struct_free_extension().

◆ BPY_DECREF_RNA_INVALIDATE()

void BPY_DECREF_RNA_INVALIDATE ( void * pyob_ptr)

◆ BPY_modules_load_user()

◆ BPY_modules_update()

void BPY_modules_update ( )

Needed so the Main pointer in bpy.data doesn't become out of date.

Definition at line 221 of file bpy_interface.cc.

References BPY_modules_update(), BPY_rna_module(), BPY_rna_types(), BPY_update_rna_module(), and mod.

Referenced by BPY_context_update(), BPY_modules_update(), and pyop_call().

◆ BPY_python_backtrace()

void BPY_python_backtrace ( FILE * fp)

◆ BPY_python_end()

◆ BPY_python_reset()

◆ BPY_python_start()

◆ BPY_python_use_system_env()

void BPY_python_use_system_env ( )

◆ BPY_python_use_system_env_get()

bool BPY_python_use_system_env_get ( )

◆ BPY_string_is_keyword()

bool BPY_string_is_keyword ( const char * str)

Avoids duplicating keyword list.

Definition at line 962 of file bpy_interface.cc.

References BPY_string_is_keyword(), i, str, and STREQ.

Referenced by BPY_string_is_keyword(), and driver_variable_name_validate().

◆ BPY_text_free_code()

void BPY_text_free_code ( Text * text)

◆ CLG_LOGREF_DECLARE_GLOBAL() [1/3]

CLG_LOGREF_DECLARE_GLOBAL ( BPY_LOG_CONTEXT ,
"bpy.context"  )

◆ CLG_LOGREF_DECLARE_GLOBAL() [2/3]

CLG_LOGREF_DECLARE_GLOBAL ( BPY_LOG_INTERFACE ,
"bpy.interface"  )

◆ CLG_LOGREF_DECLARE_GLOBAL() [3/3]

CLG_LOGREF_DECLARE_GLOBAL ( BPY_LOG_RNA ,
"bpy.rna"  )

◆ pystatus_exit_on_error()

void pystatus_exit_on_error ( const PyStatus & status)
static

Convenience function for BPY_python_start.

These should happen so rarely that having comprehensive errors isn't needed. For example if sys.argv fails to allocate memory.

Show an error just to avoid silent failure in the unlikely event something goes wrong, in this case a developer will need to track down the root cause.

Definition at line 313 of file bpy_interface.cc.

References pystatus_exit_on_error(), and UNLIKELY.

Referenced by BPY_python_start(), and pystatus_exit_on_error().

◆ text_check_identifier_nodigit_unicode()

◆ text_check_identifier_unicode()

int text_check_identifier_unicode ( const uint ch)

Variable Documentation

◆ bpy_internal_modules

_inittab bpy_internal_modules[]
static

Definition at line 268 of file bpy_interface.cc.

Referenced by BPY_python_start().

◆ py_call_level

int py_call_level = 0
static

Definition at line 79 of file bpy_interface.cc.

Referenced by bpy_context_clear(), bpy_context_set(), and BPY_modules_load_user().

◆ py_use_system_env

bool py_use_system_env = false
static