From f4293067c1420827ddfa62e62430870c6b790a8a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 31 Jul 2011 03:15:37 +0000 Subject: py api: sphinx doc corrections, pep8 cleanup and style edits, also added __all__ to some modules which were missing it. --- release/scripts/modules/bpy/__init__.py | 7 +-- release/scripts/modules/bpy/path.py | 86 ++++++++++++++++++++++----------- release/scripts/modules/bpy/utils.py | 81 +++++++++++++++++++++++-------- 3 files changed, 122 insertions(+), 52 deletions(-) (limited to 'release/scripts/modules/bpy') diff --git a/release/scripts/modules/bpy/__init__.py b/release/scripts/modules/bpy/__init__.py index 0add2b3e6cd..a43b42e49a1 100644 --- a/release/scripts/modules/bpy/__init__.py +++ b/release/scripts/modules/bpy/__init__.py @@ -16,7 +16,7 @@ # # ##### END GPL LICENSE BLOCK ##### -# +# """ Give access to blender data and utility functions. @@ -31,7 +31,7 @@ __all__ = ( "props", "types", "utils", -) + ) # internal blender C module @@ -49,7 +49,8 @@ def _main(): # Possibly temp. addons path from os.path import join, dirname, normpath - _sys.path.append(normpath(join(dirname(__file__), "..", "..", "addons", "modules"))) + _sys.path.append(normpath(join(dirname(__file__), + "..", "..", "addons", "modules"))) # if "-d" in sys.argv: # Enable this to measure startup speed if 0: diff --git a/release/scripts/modules/bpy/path.py b/release/scripts/modules/bpy/path.py index eb1a5ffc455..a01745fec0a 100644 --- a/release/scripts/modules/bpy/path.py +++ b/release/scripts/modules/bpy/path.py @@ -16,26 +16,44 @@ # # ##### END GPL LICENSE BLOCK ##### -# +# """ This module has a similar scope to os.path, containing utility functions for dealing with paths in Blender. """ +__all__ = ( + "abspath", + "basename", + "clean_name", + "display_name", + "display_name_from_filepath", + "ensure_ext", + "is_subdir", + "module_names", + "relpath", + "resolve_ncase", + ) + import bpy as _bpy import os as _os def abspath(path, start=None): """ - Returns the absolute path relative to the current blend file using the "//" prefix. + Returns the absolute path relative to the current blend file + using the "//" prefix. - :arg start: Relative to this path, when not set the current filename is used. + :arg start: Relative to this path, + when not set the current filename is used. :type start: string """ if path.startswith("//"): - return _os.path.join(_os.path.dirname(_bpy.data.filepath) if start is None else start, path[2:]) + return _os.path.join(_os.path.dirname(_bpy.data.filepath) + if start is None else start, + path[2:], + ) return path @@ -44,7 +62,8 @@ def relpath(path, start=None): """ Returns the path relative to the current blend file using the "//" prefix. - :arg start: Relative to this path, when not set the current filename is used. + :arg start: Relative to this path, + when not set the current filename is used. :type start: string """ if not path.startswith("//"): @@ -68,27 +87,28 @@ def is_subdir(path, directory): def clean_name(name, replace="_"): """ - Returns a name with characters replaced that may cause problems under various circumstances, such as writing to a file. + Returns a name with characters replaced that + may cause problems under various circumstances, + such as writing to a file. All characters besides A-Z/a-z, 0-9 are replaced with "_" or the replace argument if defined. """ - unclean_chars = \ - "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\ - \x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\ - \x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\ - \x2e\x2f\x3a\x3b\x3c\x3d\x3e\x3f\x40\x5b\x5c\x5d\x5e\x60\x7b\ - \x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\ - \x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\ - \x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\ - \xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\ - \xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\ - \xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\ - \xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\ - \xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\ - \xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe" - - for ch in unclean_chars: + bad_chars = ("\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e" + "\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d" + "\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c" + "\x2e\x2f\x3a\x3b\x3c\x3d\x3e\x3f\x40\x5b\x5c\x5d\x5e\x60\x7b" + "\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a" + "\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99" + "\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8" + "\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7" + "\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6" + "\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5" + "\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4" + "\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3" + "\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe") + + for ch in bad_chars: name = name.replace(ch, replace) return name @@ -96,8 +116,9 @@ def clean_name(name, replace="_"): def display_name(name): """ Creates a display string from name to be used menus and the user interface. - Capitalize the first letter in all lowercase names, mixed case names are kept as is. - Intended for use with filenames and module names. + Capitalize the first letter in all lowercase names, + mixed case names are kept as is. Intended for use with + filenames and module names. """ name_base = _os.path.splitext(name)[0] @@ -115,9 +136,11 @@ def display_name(name): def display_name_from_filepath(name): """ - Returns the path stripped of directort and extension, ensured to be utf8 compatible. + Returns the path stripped of directort and extension, + ensured to be utf8 compatible. """ - return _os.path.splitext(basename(name))[0].encode("utf8", "replace").decode("utf8") + name = _os.path.splitext(basename(name))[0] + return name.encode("utf8", "replace").decode("utf8") def resolve_ncase(path): @@ -132,7 +155,8 @@ def resolve_ncase(path): if not path or os.path.exists(path): return path, True - filename = os.path.basename(path) # filename may be a directory or a file + # filename may be a directory or a file + filename = os.path.basename(path) dirpath = os.path.dirname(path) suffix = path[:0] # "" but ensure byte/str match @@ -190,7 +214,9 @@ def ensure_ext(filepath, ext, case_sensitive=False): import os fn_base, fn_ext = os.path.splitext(filepath) if fn_base and fn_ext: - if (case_sensitive and ext == fn_ext) or (ext.lower() == fn_ext.lower()): + if ((case_sensitive and ext == fn_ext) or + (ext.lower() == fn_ext.lower())): + return filepath else: return fn_base + ext @@ -228,7 +254,9 @@ def module_names(path, recursive=False): modules.append((filename, fullpath)) if recursive: for mod_name, mod_path in module_names(directory, True): - modules.append(("%s.%s" % (filename, mod_name), mod_path)) + modules.append(("%s.%s" % (filename, mod_name), + mod_path, + )) return modules diff --git a/release/scripts/modules/bpy/utils.py b/release/scripts/modules/bpy/utils.py index 57d3e6dd703..a6304378cc4 100644 --- a/release/scripts/modules/bpy/utils.py +++ b/release/scripts/modules/bpy/utils.py @@ -16,13 +16,33 @@ # # ##### END GPL LICENSE BLOCK ##### -# +# """ This module contains utility functions specific to blender but not assosiated with blenders internal data. """ +__all__ = ( + "blend_paths", + "keyconfig_set", + "load_scripts", + "modules_from_path", + "preset_find", + "preset_paths", + "refresh_script_paths", + "register_class", + "register_module", + "resource_path", + "script_paths", + "smpte_from_frame", + "smpte_from_seconds", + "unregister_class", + "unregister_module", + "user_resource", + "user_script_path", + ) + from _bpy import register_class, unregister_class, blend_paths, resource_path from _bpy import script_paths as _bpy_script_paths from _bpy import user_resource as _user_resource @@ -42,7 +62,8 @@ def _test_import(module_name, loaded_modules): if module_name in loaded_modules: return None if "." in module_name: - print("Ignoring '%s', can't import files containing multiple periods." % module_name) + print("Ignoring '%s', can't import files containing " + "multiple periods." % module_name) return None if use_time: @@ -74,7 +95,8 @@ def modules_from_path(path, loaded_modules): :arg path: this path is scanned for scripts and packages. :type path: string - :arg loaded_modules: already loaded module names, files matching these names will be ignored. + :arg loaded_modules: already loaded module names, files matching these + names will be ignored. :type loaded_modules: set :return: all loaded modules. :rtype: list @@ -97,13 +119,17 @@ def load_scripts(reload_scripts=False, refresh_scripts=False): """ Load scripts and run each modules register function. - :arg reload_scripts: Causes all scripts to have their unregister method called before loading. + :arg reload_scripts: Causes all scripts to have their unregister method + called before loading. :type reload_scripts: bool - :arg refresh_scripts: only load scripts which are not already loaded as modules. + :arg refresh_scripts: only load scripts which are not already loaded + as modules. :type refresh_scripts: bool """ use_time = _bpy.app.debug + prefs = _bpy.context.user_preferences + if use_time: import time t_main = time.time() @@ -116,10 +142,11 @@ def load_scripts(reload_scripts=False, refresh_scripts=False): if reload_scripts: _bpy_types.TypeMap.clear() - # just unload, dont change user defaults, this means we can sync to reload. - # note that they will only actually reload of the modification time changes. - # this `wont` work for packages so... its not perfect. - for module_name in [ext.module for ext in _bpy.context.user_preferences.addons]: + # just unload, dont change user defaults, this means we can sync + # to reload. note that they will only actually reload of the + # modification time changes. This `wont` work for packages so... + # its not perfect. + for module_name in [ext.module for ext in prefs.addons]: _addon_utils.disable(module_name, default_set=False) def register_module_call(mod): @@ -131,7 +158,9 @@ def load_scripts(reload_scripts=False, refresh_scripts=False): import traceback traceback.print_exc() else: - print("\nWarning! '%s' has no register function, this is now a requirement for registerable scripts." % mod.__file__) + print("\nWarning! '%s' has no register function, " + "this is now a requirement for registerable scripts." % + mod.__file__) def unregister_module_call(mod): unregister = getattr(mod, "unregister", None) @@ -172,7 +201,8 @@ def load_scripts(reload_scripts=False, refresh_scripts=False): if reload_scripts: # module names -> modules - _global_loaded_modules[:] = [_sys.modules[mod_name] for mod_name in _global_loaded_modules] + _global_loaded_modules[:] = [_sys.modules[mod_name] + for mod_name in _global_loaded_modules] # loop over and unload all scripts _global_loaded_modules.reverse() @@ -201,7 +231,8 @@ def load_scripts(reload_scripts=False, refresh_scripts=False): _addon_utils.reset_all(reload_scripts) # run the active integration preset - filepath = preset_find(_bpy.context.user_preferences.inputs.active_keyconfig, "keyconfig") + filepath = preset_find(prefs.inputs.active_keyconfig, "keyconfig") + if filepath: keyconfig_set(filepath) @@ -214,12 +245,16 @@ def load_scripts(reload_scripts=False, refresh_scripts=False): # base scripts -_scripts = _os.path.join(_os.path.dirname(__file__), _os.path.pardir, _os.path.pardir) +_scripts = _os.path.join(_os.path.dirname(__file__), + _os.path.pardir, + _os.path.pardir, + ) _scripts = (_os.path.normpath(_scripts), ) def user_script_path(): - path = _bpy.context.user_preferences.filepaths.script_directory + prefs = _bpy.context.user_preferences + path = prefs.filepaths.script_directory if path: path = _os.path.normpath(path) @@ -236,22 +271,25 @@ def script_paths(subdir=None, user_pref=True, all=False): :type subdir: string :arg user_pref: Include the user preference script path. :type user_pref: bool - :arg all: Include local, user and system paths rather just the paths blender uses. + :arg all: Include local, user and system paths rather just the paths + blender uses. :type all: bool :return: script paths. :rtype: list """ scripts = list(_scripts) + prefs = _bpy.context.user_preferences # add user scripts dir if user_pref: - user_script_path = _bpy.context.user_preferences.filepaths.script_directory + user_script_path = prefs.filepaths.script_directory else: user_script_path = None if all: # all possible paths - base_paths = tuple(_os.path.join(resource_path(res), "scripts") for res in ('LOCAL', 'USER', 'SYSTEM')) + base_paths = tuple(_os.path.join(resource_path(res), "scripts") + for res in ('LOCAL', 'USER', 'SYSTEM')) else: # only paths blender uses base_paths = _bpy_script_paths() @@ -426,7 +464,8 @@ def user_resource(type, path="", create=False): :type type: string :arg subdir: Optional subdirectory. :type subdir: string - :arg create: Treat the path as a directory and create it if its not existing. + :arg create: Treat the path as a directory and create + it if its not existing. :type create: boolean :return: a path. :rtype: string @@ -477,7 +516,8 @@ def register_module(module, verbose=False): try: register_class(cls) except: - print("bpy.utils.register_module(): failed to registering class %r" % cls) + print("bpy.utils.register_module(): " + "failed to registering class %r" % cls) import traceback traceback.print_exc() if verbose: @@ -495,7 +535,8 @@ def unregister_module(module, verbose=False): try: unregister_class(cls) except: - print("bpy.utils.unregister_module(): failed to unregistering class %r" % cls) + print("bpy.utils.unregister_module(): " + "failed to unregistering class %r" % cls) import traceback traceback.print_exc() if verbose: -- cgit v1.2.3