Added debug logging with --verbose for command_line.py.

This commit is contained in:
Joey Payne 2015-04-10 11:46:12 -06:00
commit 6dc5a981b3

View file

@ -17,6 +17,7 @@ import zipfile
import traceback import traceback
import subprocess import subprocess
import logging import logging
import logging.handlers as lh
import plistlib import plistlib
from semantic_version import Version from semantic_version import Version
@ -40,6 +41,8 @@ DEFAULT_DOWNLOAD_PATH = os.path.join(CWD,
'files', 'files',
'downloads').replace('\\', 'downloads').replace('\\',
'\\\\') '\\\\')
logger = logging.getLogger('W2E logger')
LOG_FILENAME = os.path.join(CWD, 'files', 'error.log')
if __name__ != '__main__': if __name__ != '__main__':
logging.basicConfig( logging.basicConfig(
filename=os.path.join(CWD, 'files', 'error.log'), filename=os.path.join(CWD, 'files', 'error.log'),
@ -49,6 +52,8 @@ if __name__ != '__main__':
) )
logger = logging.getLogger('W2E logger') logger = logging.getLogger('W2E logger')
handler = lh.RotatingFileHandler(LOG_FILENAME, maxBytes=100000, backupCount=2)
logger.addHandler(handler)
def my_excepthook(type_, value, tback): def my_excepthook(type_, value, tback):
output_err = ''.join(traceback.format_exception(type_, value, tback)) output_err = ''.join(traceback.format_exception(type_, value, tback))
@ -210,7 +215,7 @@ class Setting(object):
elif self.file_ext == '.zip': elif self.file_ext == '.zip':
new_bytes = file.read(extract_p) new_bytes = file.read(extract_p)
except KeyError as e: except KeyError as e:
log(str(e)) logger.error(str(e))
# dirty hack to support old versions of nw # dirty hack to support old versions of nw
if 'no item named' in str(e): if 'no item named' in str(e):
extract_path = '/'.join(extract_path.split('/')[1:]) extract_path = '/'.join(extract_path.split('/')[1:])
@ -220,7 +225,7 @@ class Setting(object):
elif self.file_ext == '.zip': elif self.file_ext == '.zip':
new_bytes = file.read(extract_path) new_bytes = file.read(extract_path)
except KeyError as e: except KeyError as e:
log(str(e)) logger.error(str(e))
if new_bytes is not None: if new_bytes is not None:
fbytes.append((dest_path, new_bytes)) fbytes.append((dest_path, new_bytes))
@ -257,6 +262,7 @@ class CommandBase(object):
self.original_packagejson = {} self.original_packagejson = {}
def init(self): def init(self):
self.logger = logging.getLogger('CMD logger')
self.update_nw_versions(None) self.update_nw_versions(None)
self.setup_nw_versions() self.setup_nw_versions()
@ -329,12 +335,15 @@ class CommandBase(object):
return setting return setting
def show_error(self, error): def show_error(self, error):
print error if self.logger is not None:
self.logger.error(error)
def enable_ui_after_error(self): def enable_ui_after_error(self):
pass pass
def get_versions(self): def get_versions(self):
if self.logger is not None:
self.logger.info('Getting versions...')
response = urllib2.urlopen(self.settings['version_info']['url']) response = urllib2.urlopen(self.settings['version_info']['url'])
html = response.read() html = response.read()
@ -389,6 +398,7 @@ class CommandBase(object):
self.enable_ui_after_error() self.enable_ui_after_error()
def load_package_json(self, json_path=None): def load_package_json(self, json_path=None):
self.logger.info('Loading package.json')
if json_path is not None: if json_path is not None:
p_json = [json_path] p_json = [json_path]
else: else:
@ -402,11 +412,12 @@ class CommandBase(object):
try: try:
setting_list = self.load_from_json(json_str) setting_list = self.load_from_json(json_str)
except ValueError as e: # Json file is invalid except ValueError as e: # Json file is invalid
log('Warning: Json file invalid.') self.logger.warning('Warning: Json file invalid.')
self.progress_text = '{}\n'.format(e) self.progress_text = '{}\n'.format(e)
return setting_list return setting_list
def generate_json(self): def generate_json(self):
self.logger.info('Generating package.json...')
if 'webkit' not in self.original_packagejson: if 'webkit' not in self.original_packagejson:
self.original_packagejson['webkit'] = {} self.original_packagejson['webkit'] = {}
if 'window' not in self.original_packagejson: if 'window' not in self.original_packagejson:
@ -534,6 +545,7 @@ class CommandBase(object):
if os.path.exists(save_file_path): if os.path.exists(save_file_path):
os.remove(save_file_path) os.remove(save_file_path)
self.extract_error = e self.extract_error = e
self.logger.error(str(self.extract_error))
# cannot use GUI in thread to notify user. Save it for later # cannot use GUI in thread to notify user. Save it for later
self.progress_text = '\nDone.\n' self.progress_text = '\nDone.\n'
return True return True
@ -690,6 +702,7 @@ class CommandBase(object):
sys.exc_info()[1], sys.exc_info()[1],
sys.exc_info()[2]) sys.exc_info()[2])
self.output_err += ''.join(exc) self.output_err += ''.join(exc)
self.logger.error(exc)
finally: finally:
shutil.rmtree(temp_dir) shutil.rmtree(temp_dir)
@ -708,6 +721,7 @@ class CommandBase(object):
def copy_files_to_project_folder(self): def copy_files_to_project_folder(self):
old_dir = CWD old_dir = CWD
os.chdir(self.project_dir()) os.chdir(self.project_dir())
self.logger.info('Copying files to {}'.format(self.project_dir()))
for sgroup in self.settings['setting_groups']: for sgroup in self.settings['setting_groups']:
for setting in sgroup.values(): for setting in sgroup.values():
if setting.type == 'file' and setting.value: if setting.type == 'file' and setting.value:
@ -715,8 +729,9 @@ class CommandBase(object):
if os.path.isabs(f_path): if os.path.isabs(f_path):
try: try:
shutil.copy(setting.value, self.project_dir()) shutil.copy(setting.value, self.project_dir())
self.logger.info('Copying file {} to {}'.format(setting.value, self.project_dir()))
except shutil.Error as e: # same file warning except shutil.Error as e: # same file warning
log('Warning: {}'.format(e)) self.logger.warning('Warning: {}'.format(e))
finally: finally:
setting.value = os.path.basename(setting.value) setting.value = os.path.basename(setting.value)
@ -754,6 +769,7 @@ class CommandBase(object):
return self.extract_files() return self.extract_files()
def download_file(self, path, setting): def download_file(self, path, setting):
self.logger.info('Downloading file {}.'.format(path))
location = self.get_setting('download_dir').value location = self.get_setting('download_dir').value
@ -778,6 +794,7 @@ class CommandBase(object):
forced = self.get_setting('force_download').value forced = self.get_setting('force_download').value
if (archive_exists or dest_files_exist) and not forced: if (archive_exists or dest_files_exist) and not forced:
self.logger.info('File {} already downloaded. Continuing...'.format(path))
return self.continue_downloading_or_extract() return self.continue_downloading_or_extract()
elif tmp_exists and (os.stat(tmp_file).st_size > 0): elif tmp_exists and (os.stat(tmp_file).st_size > 0):
tmp_size = os.stat(tmp_file).st_size tmp_size = os.stat(tmp_file).st_size
@ -908,7 +925,7 @@ if __name__ == '__main__':
if args.verbose: if args.verbose:
logging.basicConfig( logging.basicConfig(
stream=sys.stdout, stream=sys.stdout,
format=("%(levelname) -10s %(asctime)s %(module)s.py: " format=("%(levelname) -10s %(module)s.py: "
"%(lineno)s %(funcName)s - %(message)s"), "%(lineno)s %(funcName)s - %(message)s"),
level=logging.DEBUG level=logging.DEBUG
) )
@ -921,6 +938,16 @@ if __name__ == '__main__':
) )
logger = logging.getLogger('CMD Logger') logger = logging.getLogger('CMD Logger')
handler = lh.RotatingFileHandler(LOG_FILENAME, maxBytes=100000, backupCount=2)
logger.addHandler(handler)
def my_excepthook(type_, value, tback):
output_err = ''.join(traceback.format_exception(type_, value, tback))
logger.error('{}'.format(output_err))
sys.__excepthook__(type_, value, tback)
sys.excepthook = my_excepthook
command_base.logger = logger command_base.logger = logger
if args.quiet: if args.quiet: