diff options
author | Bastien Montagne <mont29> | 2021-11-29 16:20:58 +0300 |
---|---|---|
committer | Bastien Montagne <bastien@blender.org> | 2021-11-29 16:22:38 +0300 |
commit | e5e8db73df86ee04260c5f2bd2c61dfa8eb7943f (patch) | |
tree | 46a5840efb51a363f17e64b93d5132679a5dbec4 /source/blender/python | |
parent | 6ae34bb0714859d9ef0b7fa2aceb16b4531df48f (diff) |
Refactor BKE_bpath module.
The main goal of this refactor is to make BPath module use `IDTypeInfo`,
and move each ID-specific part of the `foreach_path` looper into their
own IDTypeInfo struct, using a new `foreach_path` callback.
Additionally, following improvements/cleanups are included:
* Attempt to get better, more consistent namings.
** In particular, move from `path_visitor` to more standard `foreach_path`.
* Update and extend documentation.
** API doc was moved to header, according to recent discussions on this
topic.
* Remove `BKE_bpath_relocate_visitor` from API, this is specific
callback that belongs in `lib_id.c` user code.
NOTE: This commit is expected to be 100% non-behavioral-change. This
implies that several potential further changes were only noted as
comments (like using a more generic solution for
`lib_id_library_local_paths`, addressing inconsistencies like path of
packed libraries always being skipped, regardless of the
`BKE_BPATH_FOREACH_PATH_SKIP_PACKED` `eBPathForeachFlag` flag value,
etc.).
NOTE: basic unittests were added to master already in
rBdcc500e5a265093bc9cc.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D13381
Diffstat (limited to 'source/blender/python')
-rw-r--r-- | source/blender/python/intern/bpy.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/source/blender/python/intern/bpy.c b/source/blender/python/intern/bpy.c index 3377b2c283e..22d54ad72ba 100644 --- a/source/blender/python/intern/bpy.c +++ b/source/blender/python/intern/bpy.c @@ -94,10 +94,13 @@ static PyObject *bpy_script_paths(PyObject *UNUSED(self)) return ret; } -static bool bpy_blend_paths_visit_cb(void *userdata, char *UNUSED(path_dst), const char *path_src) +static bool bpy_blend_foreach_path_cb(BPathForeachPathData *bpath_data, + char *UNUSED(path_dst), + const char *path_src) { - PyList_APPEND((PyObject *)userdata, PyC_UnicodeFromByte(path_src)); - return false; /* never edits the path */ + PyObject *py_list = bpath_data->user_data; + PyList_APPEND(py_list, PyC_UnicodeFromByte(path_src)); + return false; /* Never edits the path. */ } PyDoc_STRVAR(bpy_blend_paths_doc, @@ -115,7 +118,7 @@ PyDoc_STRVAR(bpy_blend_paths_doc, " :rtype: list of strings\n"); static PyObject *bpy_blend_paths(PyObject *UNUSED(self), PyObject *args, PyObject *kw) { - int flag = 0; + eBPathForeachFlag flag = 0; PyObject *list; bool absolute = false; @@ -137,18 +140,21 @@ static PyObject *bpy_blend_paths(PyObject *UNUSED(self), PyObject *args, PyObjec } if (absolute) { - flag |= BKE_BPATH_TRAVERSE_ABS; + flag |= BKE_BPATH_FOREACH_PATH_ABSOLUTE; } if (!packed) { - flag |= BKE_BPATH_TRAVERSE_SKIP_PACKED; + flag |= BKE_BPATH_FOREACH_PATH_SKIP_PACKED; } if (local) { - flag |= BKE_BPATH_TRAVERSE_SKIP_LIBRARY; + flag |= BKE_BPATH_FOREACH_PATH_SKIP_LINKED; } list = PyList_New(0); - BKE_bpath_traverse_main(G_MAIN, bpy_blend_paths_visit_cb, flag, (void *)list); + BKE_bpath_foreach_path_main(&(BPathForeachPathData){.bmain = G_MAIN, + .callback_function = bpy_blend_foreach_path_cb, + .flag = flag, + .user_data = list}); return list; } |