81 "The Blender version as a tuple of 3 numbers (major, minor, micro). eg. (4, 3, 1)"},
83 "The Blender File version, as a tuple of 3 numbers (major, minor, file sub-version), that "
84 "will be used to save a .blend file. The last item in this tuple indicates the file "
85 "sub-version, which is different from the release micro version (the last item of the "
86 "`bpy.app.version` tuple). The file sub-version can be incremented multiple times while a "
87 "Blender version is under development. This value is, and should be, used for handling "
88 "compatibility changes between Blender versions"},
89 {
"version_string",
"The Blender version formatted as a string"},
90 {
"version_cycle",
"The release status of this build alpha/beta/rc/release"},
92 "Boolean, True when blender is running without a user interface (started with -b)"},
93 {
"module",
"Boolean, True when running Blender as a python module"},
94 {
"factory_startup",
"Boolean, True when blender is running with --factory-startup)"},
95 {
"portable",
"Boolean, True unless blender was built to reference absolute paths (on UNIX)."},
98 {
"build_date",
"The date this blender instance was built"},
99 {
"build_time",
"The time this blender instance was built"},
100 {
"build_commit_timestamp",
"The unix timestamp of commit this blender instance was built"},
101 {
"build_commit_date",
"The date of commit this blender instance was built"},
102 {
"build_commit_time",
"The time of commit this blender instance was built"},
103 {
"build_hash",
"The commit hash this blender instance was built with"},
104 {
"build_branch",
"The branch this blender instance was built from"},
105 {
"build_platform",
"The platform this blender instance was built for"},
106 {
"build_type",
"The type of build (Release, Debug)"},
107 {
"build_cflags",
"C compiler flags"},
108 {
"build_cxxflags",
"C++ compiler flags"},
109 {
"build_linkflags",
"Binary linking flags"},
110 {
"build_system",
"Build system used"},
113 {
"alembic",
"Alembic library information backend"},
114 {
"usd",
"USD library information backend"},
115 {
"ffmpeg",
"FFmpeg library information backend"},
116 {
"ocio",
"OpenColorIO library information backend"},
117 {
"oiio",
"OpenImageIO library information backend"},
118 {
"opensubdiv",
"OpenSubdiv library information backend"},
119 {
"openvdb",
"OpenVDB library information backend"},
120 {
"sdl",
"SDL library information backend"},
121 {
"build_options",
"A set containing most important enabled optional build features"},
122 {
"handlers",
"Application handler callbacks"},
123 {
"translations",
"Application and addons internationalization API"},
126 {
"icons",
"Manage custom icons"},
127 {
"timers",
"Manage timers"},
134 "This module contains application values that remain unchanged during runtime.");
149 if (app_info ==
nullptr) {
152#define SetIntItem(flag) PyStructSequence_SET_ITEM(app_info, pos++, PyLong_FromLong(flag))
153#define SetStrItem(str) PyStructSequence_SET_ITEM(app_info, pos++, PyUnicode_FromString(str))
154#define SetBytesItem(str) PyStructSequence_SET_ITEM(app_info, pos++, PyBytes_FromString(str))
155#define SetObjItem(obj) PyStructSequence_SET_ITEM(app_info, pos++, obj)
165#ifdef WITH_PYTHON_MODULE
172#ifdef WITH_INSTALL_PORTABLE
231 if (PyErr_Occurred()) {
244 "Boolean, for debug info "
245 "(started with ``--debug`` / ``--debug-*`` matching this attribute name)");
249 return PyBool_FromLong(
G.debug &
flag);
255 const int param = PyObject_IsTrue(value);
258 PyErr_SetString(PyExc_TypeError,
"bpy.app.debug can only be True/False");
274 bpy_app_internet_offline_doc,
275 "Boolean, true when internet access is allowed by Blender & 3rd party scripts (read-only)");
278 bpy_app_internet_offline_override_doc,
279 "Boolean, true when internet access preference is overridden by the command line (read-only)");
283 bpy_app_global_flag_doc,
284 "Boolean, for application behavior "
285 "(started with ``--enable-*`` matching this attribute name)");
289 return PyBool_FromLong(
G.f &
flag);
295 const int param = PyObject_IsTrue(value);
298 PyErr_SetString(PyExc_TypeError,
"bpy.app.use_* can only be True/False");
316 const int param = PyObject_IsTrue(value);
318 PyErr_SetString(PyExc_ValueError,
"This bpy.app.use_* option can only be disabled");
326 bpy_app_debug_value_doc,
327 "Short, number which can be set to non-zero values for testing purposes");
330 return PyLong_FromLong(
G.debug_value);
337 if (param == -1 && PyErr_Occurred()) {
339 "bpy.app.debug_value can only be set to a whole number");
343 G.debug_value = param;
353 "String, the temp directory used by blender (read-only)");
361 bpy_app_driver_dict_doc,
362 "Dictionary for drivers namespace, editable in-place, reset on file load (read-only)");
367 PyErr_SetString(PyExc_RuntimeError,
"bpy.app.driver_namespace failed to create dictionary");
377 bpy_app_preview_render_size_doc,
378 "Reference size for icon/preview renders (read-only)");
381 return PyLong_FromLong(
392 bpy_app_python_args_doc,
393 "Leading arguments to use when calling Python directly (via ``sys.executable``). "
394 "These arguments match settings Blender uses to "
395 "ensure Python runs with a compatible environment (read-only).");
402 args[args_num++] =
"-I";
409 bpy_app_binary_path_doc,
410 "The location of Blender's executable, useful for utilities that open new instances. "
411 "Read-only unless Blender is built as a Python module - in this case the value is "
412 "an empty string which script authors may point to a Blender binary.");
420#ifndef WITH_PYTHON_MODULE
421 PyErr_SetString(PyExc_AttributeError,
422 "bpy.app.binary_path is only writable when built as a Python module");
425 PyObject *value_coerce =
nullptr;
427 if (filepath ==
nullptr) {
428 PyErr_Format(PyExc_ValueError,
"expected a string or bytes, got %s", Py_TYPE(value)->tp_name);
432 Py_XDECREF(value_coerce);
469 {
"debug_depsgraph_build",
474 {
"debug_depsgraph_eval",
479 {
"debug_depsgraph_tag",
484 {
"debug_depsgraph_time",
489 {
"debug_depsgraph_pretty",
501 {
"use_event_simulate",
504 bpy_app_global_flag_doc,
507 {
"use_userpref_skip_save_on_exit",
510 bpy_app_global_flag_doc,
516 bpy_app_debug_value_doc,
524 bpy_app_preview_render_size_doc,
526 {
"render_preview_size",
529 bpy_app_preview_render_size_doc,
535 bpy_app_internet_offline_doc,
537 {
"online_access_override",
540 bpy_app_internet_offline_override_doc,
549 {
"autoexec_fail_quiet",
563 bpy_app_binary_path_doc,
566 {
nullptr,
nullptr,
nullptr,
nullptr,
nullptr},
571 bpy_app_is_job_running_doc,
572 ".. staticmethod:: is_job_running(job_type)\n"
574 " Check whether a job of the given type is running.\n"
576 " :arg job_type: job type in :ref:`rna_enum_wm_job_type_items`.\n"
577 " :type job_type: str\n"
578 " :return: Whether a job of the given type is currently running.\n"
584 job_type_enum.
value = 0;
586 static const char *_keywords[] = {
"job_type",
nullptr};
587 static _PyArg_Parser _parser = {
594 if (!_PyArg_ParseTupleAndKeywordsFast(
608char *(*BPY_python_app_help_text_fn)(
bool all) =
nullptr;
612 bpy_app_help_text_doc,
613 ".. staticmethod:: help_text(all=False)\n"
615 " Return the help text as a string.\n"
617 " :arg all: Return all arguments, "
618 "even those which aren't available for the current platform.\n"
619 " :type all: bool\n");
623 static const char *_keywords[] = {
"all",
nullptr};
624 static _PyArg_Parser _parser = {
632 if (!_PyArg_ParseTupleAndKeywordsFast(args, kwds, &_parser,
PyC_ParseBool, &
all)) {
637 PyObject *
result = PyUnicode_FromString(buf);
644# pragma clang diagnostic push
645# pragma clang diagnostic ignored "-Wcast-function-type"
647# pragma GCC diagnostic push
648# pragma GCC diagnostic ignored "-Wcast-function-type"
655 METH_VARARGS | METH_KEYWORDS | METH_STATIC,
656 bpy_app_is_job_running_doc},
659 METH_VARARGS | METH_KEYWORDS | METH_STATIC,
660 bpy_app_help_text_doc},
661 {
nullptr,
nullptr, 0,
nullptr},
666# pragma clang diagnostic pop
668# pragma GCC diagnostic pop
684 for (PyMethodDef *method =
bpy_app_methods; method->ml_name; method++) {
685 BLI_assert_msg(method->ml_flags & METH_STATIC,
"Only static methods make sense for 'bpy.app'");
686 PyObject *item = PyCFunction_New(method,
nullptr);
687 PyDict_SetItemString(
BlenderAppType.tp_dict, method->ml_name, item);
const char * BKE_appdir_program_path() ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL
void BKE_appdir_program_path_init(const char *argv0) ATTR_NONNULL(1)
#define BLENDER_VERSION_PATCH
const char * BKE_blender_version_string(void)
#define BLENDER_VERSION_CYCLE
#define BLENDER_FILE_SUBVERSION
#define BLENDER_FILE_VERSION
@ G_FLAG_SCRIPT_AUTOEXEC_FAIL_QUIET
@ G_FLAG_USERPREF_NO_SAVE_ON_EXIT
@ G_FLAG_SCRIPT_AUTOEXEC_FAIL
#define G_FLAG_INTERNET_OVERRIDE_PREF_ANY
@ G_DEBUG_DEPSGRAPH_PRETTY
@ G_DEBUG_DEPSGRAPH_BUILD
#define BLI_assert_msg(a, msg)
#define POINTER_AS_INT(i)
bool BPY_python_use_system_env_get()
bool GPU_shader_batch_is_compiling()
Read Guarded memory(de)allocation.
int UI_icon_preview_to_render_size(enum eIconSizes size)
@ WM_JOB_TYPE_SHADER_COMPILATION
static int bpy_app_binary_path_set(PyObject *, PyObject *value, void *)
static PyObject * bpy_app_debug_value_get(PyObject *, void *)
static void py_struct_seq_getset_init()
static PyObject * bpy_app_autoexec_fail_message_get(PyObject *, void *)
static PyStructSequence_Field app_info_fields[]
static PyObject * bpy_app_tempdir_get(PyObject *, void *)
static int bpy_app_debug_value_set(PyObject *, PyObject *value, void *)
static PyObject * make_app_info()
static PyObject * bpy_app_preview_render_size_get(PyObject *, void *closure)
static int bpy_app_global_flag_set(PyObject *, PyObject *value, void *closure)
PyObject * BPY_app_struct()
#define SetBytesItem(str)
static PyGetSetDef bpy_app_getsets[]
static PyObject * bpy_app_global_flag_get(PyObject *, void *closure)
static int bpy_app_global_flag_set__only_disable(PyObject *, PyObject *value, void *closure)
ulong build_commit_timestamp
static int bpy_app_debug_set(PyObject *, PyObject *value, void *closure)
static PyObject * bpy_app_python_args_get(PyObject *, void *)
PyDoc_STRVAR(bpy_app_doc, "This module contains application values that remain unchanged during runtime.")
static PyObject * bpy_app_binary_path_get(PyObject *, void *)
char *(* BPY_python_app_help_text_fn)(bool all)
static void py_struct_seq_method_init()
static PyMethodDef bpy_app_methods[]
static PyStructSequence_Desc app_info_desc
static PyObject * bpy_app_driver_dict_get(PyObject *, void *)
static PyObject * bpy_app_debug_get(PyObject *, void *closure)
static PyTypeObject BlenderAppType
static PyObject * bpy_app_help_text(PyObject *, PyObject *args, PyObject *kwds)
static PyObject * bpy_app_is_job_running(PyObject *, PyObject *args, PyObject *kwds)
PyObject * BPY_app_alembic_struct()
PyObject * BPY_app_build_options_struct()
PyObject * BPY_app_ffmpeg_struct()
PyObject * BPY_app_handlers_struct()
PyObject * BPY_app_icons_module()
PyObject * BPY_app_ocio_struct()
PyObject * BPY_app_oiio_struct()
PyObject * BPY_app_opensubdiv_struct()
PyObject * BPY_app_openvdb_struct()
PyObject * BPY_app_sdl_struct()
PyObject * BPY_app_timers_module()
PyObject * BPY_app_translations_struct()
PyObject * BPY_app_usd_struct()
PyObject * bpy_pydriver_Dict
int bpy_pydriver_create_dict()
bool all(VecOp< bool, D >) RET
void MEM_freeN(void *vmemh)
int pyrna_enum_value_parse_string(PyObject *o, void *p)
int16_t PyC_Long_AsI16(PyObject *value)
PyObject * PyC_Err_SetString_Prefix(PyObject *exception_type_prefix, const char *str)
PyObject * PyC_UnicodeFromBytes(const char *str)
PyObject * PyC_Tuple_PackArray_String(const char **array, uint len)
int PyC_ParseBool(PyObject *o, void *p)
const char * PyC_UnicodeAsBytes(PyObject *py_str, PyObject **r_coerce)
PyObject * PyC_Tuple_Pack_I32(const blender::Span< int > values)
header-only compatibility defines.
#define PY_ARG_PARSER_HEAD_COMPAT()
const EnumPropertyItem rna_enum_wm_job_type_items[]
const EnumPropertyItem * items
void * BKE_tempdir_session
void WM_main_add_notifier(uint type, void *reference)
bool WM_jobs_has_running_type(const wmWindowManager *wm, int job_type)