diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-11-10 02:57:35 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-11-10 02:57:35 +0300 |
commit | 0121258770584b495964f5ba241bdead2018eb22 (patch) | |
tree | f8d70746768ccbabd1328d40e462de068e162398 /source/blender/python | |
parent | 2f44ea68d3dcbf60887617255136e659d7edff37 (diff) | |
parent | 7efac2b0b09d9e76d9fc573ec7936a1c6440c067 (diff) |
Merge branch 'master' into blender2.8
Diffstat (limited to 'source/blender/python')
-rw-r--r-- | source/blender/python/BPY_extern.h | 4 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_interface.c | 19 |
2 files changed, 16 insertions, 7 deletions
diff --git a/source/blender/python/BPY_extern.h b/source/blender/python/BPY_extern.h index ff14ba62ed0..5a2f15405c1 100644 --- a/source/blender/python/BPY_extern.h +++ b/source/blender/python/BPY_extern.h @@ -80,8 +80,8 @@ bool BPY_execute_string_as_number(struct bContext *C, const char *imports[], con bool BPY_execute_string_as_intptr(struct bContext *C, const char *imports[], const char *expr, const bool verbose, intptr_t *r_value); bool BPY_execute_string_as_string(struct bContext *C, const char *imports[], const char *expr, const bool verbose, char **r_value); -bool BPY_execute_string_ex(struct bContext *C, const char *expr, bool use_eval); -bool BPY_execute_string(struct bContext *C, const char *expr); +bool BPY_execute_string_ex(struct bContext *C, const char *imports[], const char *expr, bool use_eval); +bool BPY_execute_string(struct bContext *C, const char *imports[], const char *expr); void BPY_text_free_code(struct Text *text); void BPY_modules_update(struct bContext *C); // XXX - annoying, need this for pointers that get out of date diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index d915c13fe54..8ac1d807e38 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -693,7 +693,9 @@ bool BPY_execute_string_as_intptr( return ok; } -bool BPY_execute_string_ex(bContext *C, const char *expr, bool use_eval) +bool BPY_execute_string_ex( + bContext *C, const char *imports[], + const char *expr, bool use_eval) { BLI_assert(expr); PyGILState_STATE gilstate; @@ -715,13 +717,18 @@ bool BPY_execute_string_ex(bContext *C, const char *expr, bool use_eval) bmain_back = bpy_import_main_get(); bpy_import_main_set(CTX_data_main(C)); - retval = PyRun_String(expr, use_eval ? Py_eval_input : Py_file_input, py_dict, py_dict); + if (imports && (!PyC_NameSpace_ImportArray(py_dict, imports))) { + Py_DECREF(py_dict); + retval = NULL; + } + else { + retval = PyRun_String(expr, use_eval ? Py_eval_input : Py_file_input, py_dict, py_dict); + } bpy_import_main_set(bmain_back); if (retval == NULL) { ok = false; - BPy_errors_to_report(CTX_wm_reports(C)); } else { @@ -735,9 +742,11 @@ bool BPY_execute_string_ex(bContext *C, const char *expr, bool use_eval) return ok; } -bool BPY_execute_string(bContext *C, const char *expr) +bool BPY_execute_string( + bContext *C, const char *imports[], + const char *expr) { - return BPY_execute_string_ex(C, expr, true); + return BPY_execute_string_ex(C, imports, expr, true); } void BPY_modules_load_user(bContext *C) |