Sculpt Branch:
[blender.git] / release / scripts / modules / bpy / __init__.py
1 # ##### BEGIN GPL LICENSE BLOCK #####
2 #
3 #  This program is free software; you can redistribute it and/or
4 #  modify it under the terms of the GNU General Public License
5 #  as published by the Free Software Foundation; either version 2
6 #  of the License, or (at your option) any later version.
7 #
8 #  This program is distributed in the hope that it will be useful,
9 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
10 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 #  GNU General Public License for more details.
12 #
13 #  You should have received a copy of the GNU General Public License
14 #  along with this program; if not, write to the Free Software Foundation,
15 #  Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
16 #
17 # ##### END GPL LICENSE BLOCK #####
18
19 # <pep8 compliant>
20
21 # internal blender C module
22 import _bpy
23 from _bpy import types, props
24
25 data = _bpy.data
26 context = _bpy.context
27
28 # python modules
29 from bpy import utils
30
31 from bpy import ops as _ops_module
32
33 # fake operator module
34 ops = _ops_module.ops_fake_module
35
36 import sys
37 DEBUG = ("-d" in sys.argv)
38
39 def load_scripts(reload_scripts=False):
40     import os
41     import traceback
42     import time
43
44
45     t_main = time.time()
46
47     def test_import(module_name):
48         try:
49             t = time.time()
50             ret= __import__(module_name)
51             if DEBUG:
52                 print("time %s %.4f" % (module_name, time.time() - t))
53             return ret
54         except:
55             traceback.print_exc()
56             return None
57
58
59     for base_path in utils.script_paths():
60         for path_subdir in ("ui", "op", "io"):
61             path = os.path.join(base_path, path_subdir)
62             if os.path.isdir(path):
63                 sys.path.insert(0, path)
64                 for f in sorted(os.listdir(path)):
65                     if f.endswith(".py"):
66                         # python module
67                         mod = test_import(f[0:-3])
68                     elif "." not in f:
69                         # python package
70                         mod = test_import(f)
71                     else:
72                         mod = None
73
74                     if reload_scripts and mod:
75                         print("Reloading:", mod)
76                         reload(mod)
77
78     if DEBUG:
79         print("Time %.4f" % (time.time() - t_main))
80
81 def _main():
82
83     # a bit nasty but this prevents help() and input() from locking blender
84     # Ideally we could have some way for the console to replace sys.stdin but
85     # python would lock blender while waiting for a return value, not easy :|
86     import sys
87     sys.stdin = None
88
89     # if "-d" in sys.argv: # Enable this to measure startup speed
90     if 0:
91         import cProfile
92         cProfile.run('import bpy; bpy.load_scripts()', 'blender.prof')
93
94         import pstats
95         p = pstats.Stats('blender.prof')
96         p.sort_stats('cumulative').print_stats(100)
97
98     else:
99         load_scripts()
100
101 _main()
102
103