65bf75b43e928d51dd2c582b542e300a47b8a725
[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
40 def load_scripts(reload_scripts=False):
41     import os
42     import traceback
43     import time
44
45
46     t_main = time.time()
47
48     def test_import(module_name):
49         try:
50             t = time.time()
51             ret = __import__(module_name)
52             if DEBUG:
53                 print("time %s %.4f" % (module_name, time.time() - t))
54             return ret
55         except:
56             traceback.print_exc()
57             return None
58
59
60     for base_path in utils.script_paths():
61         for path_subdir in ("ui", "op", "io"):
62             path = os.path.join(base_path, path_subdir)
63             if os.path.isdir(path):
64                 sys.path.insert(0, path)
65                 for f in sorted(os.listdir(path)):
66                     if f.endswith(".py"):
67                         # python module
68                         mod = test_import(f[0:-3])
69                     elif "." not in f:
70                         # python package
71                         mod = test_import(f)
72                     else:
73                         mod = None
74
75                     if reload_scripts and mod:
76                         print("Reloading:", mod)
77                         reload(mod)
78
79     if DEBUG:
80         print("Time %.4f" % (time.time() - t_main))
81
82
83 def _main():
84
85     # a bit nasty but this prevents help() and input() from locking blender
86     # Ideally we could have some way for the console to replace sys.stdin but
87     # python would lock blender while waiting for a return value, not easy :|
88     sys.stdin = None
89
90     # if "-d" in sys.argv: # Enable this to measure startup speed
91     if 0:
92         import cProfile
93         cProfile.run('import bpy; bpy.load_scripts()', 'blender.prof')
94
95         import pstats
96         p = pstats.Stats('blender.prof')
97         p.sort_stats('cumulative').print_stats(100)
98
99     else:
100         load_scripts()
101
102
103 # constants
104 version = _bpy._VERSION
105 version_string = _bpy._VERSION_STR
106 home = _bpy._HOME
107
108 _main()