Merge branch 'master' into blender2.8
authorCampbell Barton <ideasman42@gmail.com>
Fri, 9 Nov 2018 23:57:35 +0000 (10:57 +1100)
committerCampbell Barton <ideasman42@gmail.com>
Fri, 9 Nov 2018 23:57:35 +0000 (10:57 +1100)
source/blender/editors/space_script/script_edit.c
source/blender/freestyle/intern/system/PythonInterpreter.h
source/blender/python/BPY_extern.h
source/blender/python/intern/bpy_interface.c
source/blender/windowmanager/intern/wm_files.c
source/creator/creator_args.c

index beff7c8211d958b7ed1225c6dca79bf9a0fe1049..ee8dcf0ca9aeb6e647c1d9dda2fa8eba8e9dc33b 100644 (file)
@@ -125,7 +125,7 @@ static int script_reload_exec(bContext *C, wmOperator *op)
        /* TODO, this crashes on netrender and keying sets, need to look into why
         * disable for now unless running in debug mode */
        WM_cursor_wait(1);
-       BPY_execute_string(C, "__import__('bpy').utils.load_scripts(reload_scripts=True)");
+       BPY_execute_string(C, (const char *[]){"bpy", NULL}, "bpy.utils.load_scripts(reload_scripts=True)");
        WM_cursor_wait(0);
        WM_event_add_notifier(C, NC_WINDOW, NULL);
        return OPERATOR_FINISHED;
index 4f5e94ef7a0db13a93af7a831128f117188b729a..cb49e7718a0239a3f6dcbac877db43d19bee1597 100644 (file)
@@ -112,7 +112,7 @@ public:
 
                BKE_reports_clear(reports);
 
-               if (!BPY_execute_string(_context, str.c_str())) {
+               if (!BPY_execute_string(_context, NULL, str.c_str())) {
                        BPy_errors_to_report(reports);
                        cerr << "\nError executing Python script from PythonInterpreter::interpretString" << endl;
                        cerr << "Name: " << name << endl;
index ff14ba62ed0b9f9c4318a62088c5abdaf418906c..5a2f15405c135b7bc16754bca0b0f9034eb93420 100644 (file)
@@ -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
index d915c13fe548ecb22acbde702966c988ea25ed52..8ac1d807e3850ecf54f89c939518c89d11f1ac8a 100644 (file)
@@ -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)
index 60d64e6ea5b5bcce6d8c1849a50057605fb99a15..318147e8c250ba1520d931ed2787334013b4c059 100644 (file)
@@ -500,10 +500,14 @@ static void wm_file_read_post(bContext *C, const bool is_startup_file, const boo
                        if (reset_app_template) {
                                /* Only run when we have a template path found. */
                                if (BKE_appdir_app_template_any()) {
-                                       BPY_execute_string(C, "__import__('bl_app_template_utils').reset()");
+                                       BPY_execute_string(
+                                               C, (const char *[]){"bl_app_template_utils", NULL},
+                                               "bl_app_template_utils.reset()");
                                }
                                /* sync addons, these may have changed from the defaults */
-                               BPY_execute_string(C, "__import__('addon_utils').reset_all()");
+                               BPY_execute_string(
+                                       C, (const char *[]){"addon_utils", NULL},
+                                       "addon_utils.reset_all()");
                        }
                        BPY_python_reset(C);
                        addons_loaded = true;
index 2d24704e09ec3d5c31f8f4cc8343479a069d2c5d..12d8cd1d5b872d9b6dbe2eac42b85ee54324ec32 100644 (file)
@@ -1684,7 +1684,7 @@ static int arg_handle_python_expr_run(int argc, const char **argv, void *data)
        /* workaround for scripts not getting a bpy.context.scene, causes internal errors elsewhere */
        if (argc > 1) {
                bool ok;
-               BPY_CTX_SETUP(ok = BPY_execute_string_ex(C, argv[1], false));
+               BPY_CTX_SETUP(ok = BPY_execute_string_ex(C, NULL, argv[1], false));
                if (!ok && app_state.exit_code_on_error.python) {
                        printf("\nError: script failed, expr: '%s', exiting.\n", argv[1]);
                        exit(app_state.exit_code_on_error.python);
@@ -1710,7 +1710,7 @@ static int arg_handle_python_console_run(int UNUSED(argc), const char **argv, vo
 #ifdef WITH_PYTHON
        bContext *C = data;
 
-       BPY_CTX_SETUP(BPY_execute_string(C, "__import__('code').interact()"));
+       BPY_CTX_SETUP(BPY_execute_string(C, (const char *[]){"code", NULL}, "code.interact()"));
 
        return 0;
 #else
@@ -1766,7 +1766,7 @@ static int arg_handle_addons_set(int argc, const char **argv, void *data)
                BLI_snprintf(str, slen, script_str, argv[1]);
 
                BLI_assert(strlen(str) + 1 == slen);
-               BPY_CTX_SETUP(BPY_execute_string_ex(C, str, false));
+               BPY_CTX_SETUP(BPY_execute_string_ex(C, NULL, str, false));
                free(str);
 #else
                UNUSED_VARS(argv, data);