| 
									
										
										
										
											2011-03-18 23:58:13 +00:00
										 |  |  | # ##### BEGIN GPL LICENSE BLOCK ##### | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #  This program is free software; you can redistribute it and/or | 
					
						
							|  |  |  | #  modify it under the terms of the GNU General Public License | 
					
						
							|  |  |  | #  as published by the Free Software Foundation; either version 2 | 
					
						
							|  |  |  | #  of the License, or (at your option) any later version. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #  This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  | #  but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  | #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  | #  GNU General Public License for more details. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #  You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  | #  along with this program; if not, write to the Free Software Foundation, | 
					
						
							|  |  |  | #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # ##### END GPL LICENSE BLOCK ##### | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # <pep8 compliant> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # simple script to enable all addons, and disable | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import bpy | 
					
						
							|  |  |  | import addon_utils | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import sys | 
					
						
							|  |  |  | import imp | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-15 23:17:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-20 03:10:30 +00:00
										 |  |  | def disable_addons(): | 
					
						
							|  |  |  |     # first disable all | 
					
						
							|  |  |  |     addons = bpy.context.user_preferences.addons | 
					
						
							|  |  |  |     for mod_name in list(addons.keys()): | 
					
						
							|  |  |  |         addon_utils.disable(mod_name) | 
					
						
							|  |  |  |     assert(bool(addons) is False) | 
					
						
							| 
									
										
										
										
											2011-03-18 23:58:13 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-20 03:10:30 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def test_load_addons(): | 
					
						
							| 
									
										
										
										
											2011-03-18 23:58:13 +00:00
										 |  |  |     modules = addon_utils.modules({}) | 
					
						
							|  |  |  |     modules.sort(key=lambda mod: mod.__name__) | 
					
						
							| 
									
										
										
										
											2012-12-20 03:10:30 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     disable_addons() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-18 23:58:13 +00:00
										 |  |  |     addons = bpy.context.user_preferences.addons | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-20 03:10:30 +00:00
										 |  |  |     addons_fail = [] | 
					
						
							| 
									
										
										
										
											2011-03-18 23:58:13 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-20 03:10:30 +00:00
										 |  |  |     for mod in modules: | 
					
						
							|  |  |  |         mod_name = mod.__name__ | 
					
						
							|  |  |  |         print("\tenabling:", mod_name) | 
					
						
							|  |  |  |         addon_utils.enable(mod_name) | 
					
						
							|  |  |  |         if mod_name not in addons: | 
					
						
							|  |  |  |             addons_fail.append(mod_name) | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     if addons_fail: | 
					
						
							|  |  |  |         print("addons failed to load (%d):" % len(addons_fail)) | 
					
						
							|  |  |  |         for mod_name in addons_fail: | 
					
						
							|  |  |  |             print("    %s" % mod_name) | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         print("addons all loaded without errors!") | 
					
						
							|  |  |  |     print("") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def reload_addons(do_reload=True, do_reverse=True): | 
					
						
							|  |  |  |     modules = addon_utils.modules({}) | 
					
						
							|  |  |  |     modules.sort(key=lambda mod: mod.__name__) | 
					
						
							|  |  |  |     addons = bpy.context.user_preferences.addons | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     disable_addons() | 
					
						
							| 
									
										
										
										
											2011-03-18 23:58:13 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Run twice each time. | 
					
						
							|  |  |  |     for i in (0, 1): | 
					
						
							|  |  |  |         for mod in modules: | 
					
						
							|  |  |  |             mod_name = mod.__name__ | 
					
						
							|  |  |  |             print("\tenabling:", mod_name) | 
					
						
							|  |  |  |             addon_utils.enable(mod_name) | 
					
						
							|  |  |  |             assert(mod_name in addons) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         for mod in addon_utils.modules({}): | 
					
						
							|  |  |  |             mod_name = mod.__name__ | 
					
						
							|  |  |  |             print("\tdisabling:", mod_name) | 
					
						
							|  |  |  |             addon_utils.disable(mod_name) | 
					
						
							|  |  |  |             assert(not (mod_name in addons)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # now test reloading | 
					
						
							|  |  |  |             if do_reload: | 
					
						
							|  |  |  |                 imp.reload(sys.modules[mod_name]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if do_reverse: | 
					
						
							| 
									
										
										
										
											2013-01-19 03:04:51 +00:00
										 |  |  |                 # in case order matters when it shouldn't | 
					
						
							| 
									
										
										
										
											2011-03-18 23:58:13 +00:00
										 |  |  |                 modules.reverse() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def main(): | 
					
						
							| 
									
										
										
										
											2012-12-20 03:10:30 +00:00
										 |  |  |     # first load addons, print a list of all addons that fail | 
					
						
							|  |  |  |     test_load_addons() | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2011-03-18 23:58:13 +00:00
										 |  |  |     reload_addons(do_reload=False, do_reverse=False) | 
					
						
							|  |  |  |     reload_addons(do_reload=False, do_reverse=True) | 
					
						
							|  |  |  |     reload_addons(do_reload=True, do_reverse=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__": | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # So a python error exits(1) | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  |         main() | 
					
						
							|  |  |  |     except: | 
					
						
							|  |  |  |         import traceback | 
					
						
							|  |  |  |         traceback.print_exc() | 
					
						
							|  |  |  |         sys.exit(1) |