1 from logging
import basicConfig
, info
, INFO
, DEBUG
, getLogger
2 from configparser
import ConfigParser
3 from sys
import platform
, argv
4 from json
import load
, dumps
5 #from datetime import datetime
6 from pprint
import pprint
7 from os
import getcwd
, environ
8 from os
.path
import exists
9 from traceback
import print_stack
10 from sys
import version_info
11 # from platform import system, release, architecture, platform, processor, \
13 # from multiprocessing import cpu_count
14 from panda3d
.core
import Filename
, GraphicsWindow
15 from lib
.gameobject
import Colleague
16 from lib
.lib
.builder
import LibP3d
21 if platform
in ['win32', 'linux'] and not exists('main.py'):
22 # it is the deployed version for windows
23 opt_path
= str(Filename
.get_user_appdata_directory()) + '/yocto_racer'
24 opath
= LibP3d
.fixpath(opt_path
+ '/options.ini') if opt_path
else \
27 with
open(opath
) as json_file
:
28 #optfile = load(json_file)
29 optfile
= ConfigParser()
31 # optfile['development']['verbose'] and int(optfile['development']['verbose']) or \
32 if optfile
['development']['verbose_log'] and int(optfile
['development']['verbose_log']):
35 basicConfig(level
=lev
, format
='%(asctime)s %(message)s', datefmt
='%H:%M:%S')
36 getLogger().setLevel(lev
) # it doesn't work otherwise
39 class LogMgrBase(Colleague
): # headless log manager
43 return LogMgr
if base
.win
else LogMgrBase
45 def __init__(self
, mediator
):
46 Colleague
.__init
__(self
, mediator
)
49 def log(self
, msg
, verbose
=False):
50 if verbose
and not self
.eng
.cfg
.dev_cfg
.verbose_log
: return
54 if '--version' in argv
:
55 path
= str(Filename
.get_user_appdata_directory())
56 home
= '/home/flavio' # we must force this for wine
57 if path
.startswith('/c/users/') and exists(home
+ '/.wine/'):
58 path
= home
+ '/.wine/drive_' + path
[1:]
59 info('writing %s' % path
+ '/yocto_racer/obs_version.txt')
60 with
open(path
+ '/yocto_racer/obs_version.txt', 'w') as f
:
61 f
.write(self
.eng
.logic
.version
)
62 if not platform
.startswith('win'):
63 from os
import ttyname
# here because it doesn't work on windows
65 with
open(ttyname(0), 'w') as fout
:
67 print('version: ' + self
.eng
.logic
.version
)
68 messages
= ['version: ' + self
.eng
.logic
.version
]
69 messages
+= ['argv[0]: %s' % argv
[0]]
70 messages
+= ['getcwd: %s' % getcwd()]
71 messages
+= ['__file__: %s' % __file__
]
72 for elm
in environ
.items():
73 messages
+= ['env::%s: %s' % elm
]
74 # os_info = (system(), release(), version())
75 # messages += ['operative system: %s %s %s' % os_info]
76 # messages += ['architecture: ' + str(architecture())]
77 # messages += ['machine: ' + machine()]
78 # messages += ['platform: ' + platform()]
79 # messages += ['processor: ' + processor()]
81 # messages += ['cores: ' + str(cpu_count())]
82 # except NotImplementedError: # on Windows
83 # messages += ['cores: not implemented']
84 lib_ver
= self
.eng
.lib
.version
87 mem
= psutil
.virtual_memory().total
/ 1000000000.0
88 messages
+= ['memory: %s GB' % round(mem
, 2)]
89 except ImportError: info("can't import psutil") # windows
90 lib_commit
= self
.eng
.lib
.lib_commit
91 py_ver
= [str(elm
) for elm
in version_info
[:3]]
92 messages
+= ['python version: %s' % '.'.join(py_ver
)]
93 messages
+= ['panda version: %s %s' % (lib_ver
, lib_commit
)]
94 messages
+= ['bullet version: ' + str(self
.eng
.lib
.phys_version
)]
95 messages
+= ['appdata: ' + str(self
.eng
.lib
.user_appdata_dir
)]
96 if base
.win
and isinstance(base
.win
, GraphicsWindow
): # not headless
97 print(base
.win
.get_keyboard_map())
98 list(map(self
.log
, messages
))
102 info('tasks: %s' % taskMgr
.getAllTasks())
103 info('do-laters: %s' % taskMgr
.getDoLaters())
113 class LogMgr(LogMgrBase
):
116 LogMgrBase
.log_cfg(self
)
117 messages
= [self
.eng
.lib
.driver_vendor
]
118 messages
+= [self
.eng
.lib
.driver_renderer
]
119 shad_maj
= self
.eng
.lib
.driver_shader_version_major
120 shad_min
= self
.eng
.lib
.driver_shader_version_minor
121 messages
+= ['shader: {maj}.{min}'.format(maj
=shad_maj
, min=shad_min
)]
122 messages
+= [self
.eng
.lib
.driver_version
]
123 drv_maj
= self
.eng
.lib
.driver_version_major
124 drv_min
= self
.eng
.lib
.driver_version_minor
125 drv
= 'driver version: {maj}.{min}'
126 messages
+= [drv
.format(maj
=drv_maj
, min=drv_min
)]
127 messages
+= ['fullscreen: ' + str(self
.eng
.lib
.fullscreen
)]
128 res_x
, res_y
= self
.eng
.lib
.resolution
129 res_tmpl
= 'resolution: {res_x}x{res_y}'
130 messages
+= [res_tmpl
.format(res_x
=res_x
, res_y
=res_y
)]
131 list(map(self
.log
, messages
))