224 lines
5.9 KiB
Python
224 lines
5.9 KiB
Python
'''
|
|
Report tool
|
|
===========
|
|
|
|
This tool is a helper for users. It can be used to dump information
|
|
for help during the debugging process.
|
|
|
|
'''
|
|
|
|
import os
|
|
import sys
|
|
import platform as plf
|
|
from time import ctime
|
|
from configparser import ConfigParser
|
|
from io import StringIO
|
|
|
|
import kivy
|
|
|
|
report = []
|
|
report_dict = {} # One key value pair for each title.
|
|
|
|
|
|
def title(t):
|
|
report.append('')
|
|
report.append('=' * 80)
|
|
report.append(t)
|
|
report.append('=' * 80)
|
|
report.append('')
|
|
|
|
# This method sends report to gist(Different file in a single gist) and
|
|
# returns the URL
|
|
|
|
|
|
def send_report(dict_report):
|
|
import requests
|
|
import json
|
|
|
|
gist_report = {
|
|
"description": "Report",
|
|
"public": "true",
|
|
"files": {
|
|
"Global.txt": {
|
|
"content": "\n".join(dict_report['Global']),
|
|
"type": 'text'
|
|
},
|
|
"OpenGL.txt": {
|
|
"content": "\n".join(dict_report['OpenGL']),
|
|
"type": 'text'
|
|
|
|
},
|
|
"Core selection.txt": {
|
|
"content": "\n".join(dict_report['Core']),
|
|
"type": 'text'
|
|
},
|
|
"Libraries.txt": {
|
|
"content": "\n".join(dict_report['Libraries']),
|
|
"type": 'text'
|
|
},
|
|
"Configuration.txt": {
|
|
"content": "\n".join(dict_report['Configuration']),
|
|
"type": 'text'
|
|
},
|
|
"Input Availability.txt": {
|
|
"content": "\n".join(dict_report['InputAvailability']),
|
|
"type": 'text'
|
|
},
|
|
"Environ.txt": {
|
|
"content": "\n".join(dict_report['Environ']),
|
|
"type": 'text'
|
|
},
|
|
"Options.txt": {
|
|
"content": "\n".join(dict_report['Options']),
|
|
"type": 'text'
|
|
},
|
|
}
|
|
}
|
|
report_json = json.dumps(gist_report)
|
|
response = requests.post("https://api.github.com/gists", report_json)
|
|
return json.loads(response.text)['html_url']
|
|
|
|
# ----------------------------------------------------------
|
|
# Start output debugging
|
|
# ----------------------------------------------------------
|
|
|
|
|
|
title('Global')
|
|
report.append('OS platform : %s | %s' % (plf.platform(), plf.machine()))
|
|
report.append('Python EXE : %s' % sys.executable)
|
|
report.append('Python Version : %s' % sys.version)
|
|
report.append('Python API : %s' % sys.api_version)
|
|
report.append('Kivy Version : %s' % kivy.__version__)
|
|
report.append('Install path : %s' % os.path.dirname(kivy.__file__))
|
|
report.append('Install date : %s' % ctime(os.path.getctime(kivy.__file__)))
|
|
report_dict['Global'] = report
|
|
report = []
|
|
|
|
title('OpenGL')
|
|
from kivy.core import gl
|
|
from kivy.core.window import Window
|
|
report.append('GL Vendor: %s' % gl.glGetString(gl.GL_VENDOR))
|
|
report.append('GL Renderer: %s' % gl.glGetString(gl.GL_RENDERER))
|
|
report.append('GL Version: %s' % gl.glGetString(gl.GL_VERSION))
|
|
ext = None
|
|
try:
|
|
gl.glGetString(gl.GL_EXTENSIONS)
|
|
except AttributeError:
|
|
pass
|
|
if ext is None:
|
|
report.append('GL Extensions: %s' % ext)
|
|
else:
|
|
report.append('GL Extensions:')
|
|
for x in ext.split():
|
|
report.append('\t%s' % x)
|
|
Window.close()
|
|
report_dict['OpenGL'] = report
|
|
report = []
|
|
|
|
title('Core selection')
|
|
from kivy.core.audio import SoundLoader
|
|
report.append('Audio = %s' % SoundLoader._classes)
|
|
from kivy.core.camera import Camera
|
|
report.append('Camera = %s' % Camera)
|
|
from kivy.core.image import ImageLoader
|
|
report.append('Image = %s' % ImageLoader.loaders)
|
|
from kivy.core.text import Label
|
|
report.append('Text = %s' % Label)
|
|
from kivy.core.video import Video
|
|
report.append('Video = %s' % Video)
|
|
report.append('Window = %s' % Window)
|
|
report_dict['Core'] = report
|
|
report = []
|
|
|
|
title('Libraries')
|
|
|
|
|
|
def testimport(libname):
|
|
try:
|
|
lib = __import__(libname)
|
|
report.append('%-20s exist at %s' % (libname, lib.__file__))
|
|
except ImportError:
|
|
report.append('%-20s is missing' % libname)
|
|
|
|
|
|
for x in ('gst',
|
|
'pygame',
|
|
'pygame.midi',
|
|
'squirtle',
|
|
'PIL',
|
|
'sdl2',
|
|
'glew',
|
|
'opencv',
|
|
'opencv.cv',
|
|
'opencv.highgui',
|
|
'cython'):
|
|
testimport(x)
|
|
report_dict['Libraries'] = report
|
|
report = []
|
|
|
|
title('Configuration')
|
|
s = StringIO()
|
|
from kivy.config import Config
|
|
ConfigParser.write(Config, s)
|
|
report.extend(s.getvalue().split('\n'))
|
|
report_dict['Configuration'] = report
|
|
report = []
|
|
|
|
title('Input availability')
|
|
from kivy.input.factory import MotionEventFactory
|
|
for x in MotionEventFactory.list():
|
|
report.append(x)
|
|
report_dict['InputAvailability'] = report
|
|
report = []
|
|
|
|
'''
|
|
title('Log')
|
|
for x in pymt_logger_history.history:
|
|
report.append(x.message)
|
|
'''
|
|
|
|
title('Environ')
|
|
for k, v in os.environ.items():
|
|
report.append('%s = %s' % (k, v))
|
|
report_dict['Environ'] = report
|
|
report = []
|
|
|
|
title('Options')
|
|
for k, v in kivy.kivy_options.items():
|
|
report.append('%s = %s' % (k, v))
|
|
report_dict['Options'] = report
|
|
report = []
|
|
|
|
# Prints the entire Output
|
|
print('\n'.join(report_dict['Global'] + report_dict['OpenGL'] +
|
|
report_dict['Core'] + report_dict['Libraries'] +
|
|
report_dict['Configuration'] +
|
|
report_dict['InputAvailability'] +
|
|
report_dict['Environ'] + report_dict['Options']))
|
|
print('\n')
|
|
print('\n')
|
|
|
|
try:
|
|
print('The report will be sent as an anonymous gist.')
|
|
reply = input(
|
|
'Do you accept to send report to https://gist.github.com/ (Y/n) : ')
|
|
except EOFError:
|
|
sys.exit(0)
|
|
|
|
if reply.lower().strip() in ('', 'y'):
|
|
print('Please wait while sending the report...')
|
|
|
|
paste_url = send_report(report_dict)
|
|
|
|
print('\n')
|
|
print('\n')
|
|
print('REPORT posted at %s' % paste_url)
|
|
print('\n')
|
|
print('\n')
|
|
else:
|
|
print('No report posted.')
|
|
|
|
# On windows system, the console leave directly after the end
|
|
# of the dump. That's not cool if we want get report url
|
|
input('Enter any key to leave.')
|