def trace(method):
def method_trace_on(*args, **kwargs):
start = time.time()
result = method(*args, **kwargs)
end = time.time()
log('{name!r} time: {time:2.4f}s args: |{args!r}| kwargs: |{kwargs!r}|'.format(name=method.__name__, time=end - start, args=args, kwargs=kwargs), LOGDEBUG)
return result
def method_trace_off(*args, **kwargs):
return method(*args, **kwargs)
if _is_debugging():
return method_trace_on
else:
return method_trace_off
python类log()的实例源码
def log(message,level):
prefix = b"[%s] " % ADDON_ID
formatter = prefix + b'%(name)s: %(message)s'
try:
xbmc.log(formatter, level)
except UnicodeEncodeError:
xbmc.log(formatter.encode(
'utf-8', 'ignore'), level)
def log_msg(msg, loglevel=xbmc.LOGDEBUG):
'''log to kodi logfile'''
if isinstance(msg, unicode):
msg = msg.encode('utf-8')
xbmc.log("Skin Helper Backup --> %s" % msg, level=loglevel)
def log_exception(modulename, exceptiondetails):
'''helper to properly log exception details'''
log_msg(format_exc(sys.exc_info()), xbmc.LOGNOTICE)
log_msg("ERROR in %s ! --> %s" % (modulename, exceptiondetails), xbmc.LOGERROR)
dialog = xbmcgui.Dialog()
dialog.notification(
"Skin Helper Backup",
"Error while executing, please check your kodi logfile.",
xbmcgui.NOTIFICATION_ERROR)
del dialog
SubEsUtilities.py 文件源码
项目:service.subtitles.tusubtitulo
作者: josecurioso2
项目源码
文件源码
阅读 17
收藏 0
点赞 0
评论 0
def log(module, msg):
xbmc.log((u"### [%s] - %s" % (module,msg,)).encode('utf-8'), level=xbmc.LOGDEBUG)
SubEsUtilities.py 文件源码
项目:service.subtitles.tusubtitulo
作者: josecurioso2
项目源码
文件源码
阅读 18
收藏 0
点赞 0
评论 0
def buildURL(tvshow, season, episode):
episodeFetch = ""
try:
APIKey = "AIzaSyAm6QlezxEd4N2flR2QO6aVYQ3cx_K4xsw"
googleCSE = "https://www.googleapis.com/customsearch/v1?key=" + APIKey + "&cx=" + CSX + "&fields=items(title,link)&q="; #separe spaces with +
searchURL = googleCSE + tvshow.replace(" ", "+")
page = urllib.urlopen(searchURL).read()
data = json.loads(page)
showIdWord = data["items"][0]["title"].strip().strip("TuSubtitulo").strip().strip("-").strip().replace(" ", "-")
episodeFetch = "https://www.tusubtitulo.com/showsub.php?ushow=" + showIdWord.lower() + "&useason=" + str(season) + "&uepisode=" + str(episode)
except:
APIKey = "AIzaSyAdtBdgZnLvZAcskQVYZcMLSnPu57z4HGA"
googleCSE = "https://www.googleapis.com/customsearch/v1?key=" + APIKey + "&cx=" + CSX + "&fields=items(title,link)&q="; #separe spaces with +
searchURL = googleCSE + tvshow.replace(" ", "+")
page = urllib.urlopen(searchURL).read()
data = json.loads(page)
showIdWord = data["items"][0]["title"].strip().strip("TuSubtitulo").strip().strip("-").strip().replace(" ", "-")
episodeFetch = "https://www.tusubtitulo.com/showsub.php?ushow=" + showIdWord.lower() + "&useason=" + str(season) + "&uepisode=" + str(episode)
log(__name__, "EpisodeLink %s" % episodeFetch)
return episodeFetch
SubEsUtilities.py 文件源码
项目:service.subtitles.tusubtitulo
作者: josecurioso2
项目源码
文件源码
阅读 17
收藏 0
点赞 0
评论 0
def clean_subtitles_list(subtitles_list):
seen = set()
subs = []
for sub in subtitles_list:
filename = sub['link']
#log(__name__, "Filename: %s" % filename)
if filename not in seen:
subs.append(sub)
seen.add(filename)
return subs
def log(message,loglevel=xbmc.LOGNOTICE):
""""save message to kodi.log.
Args:
message: has to be unicode, http://wiki.xbmc.org/index.php?title=Add-on_unicode_paths#Logging
loglevel: xbmc.LOGDEBUG, xbmc.LOGINFO, xbmc.LOGNOTICE, xbmc.LOGWARNING, xbmc.LOGERROR, xbmc.LOGFATAL
"""
xbmc.log(encode(__addon_id__ + u": " + message), level=loglevel)
def showNotification(title,message, time=4000):
"""Show Notification
Args:
title: has to be unicode
message: has to be unicode
time: Time that the message is beeing displayed
"""
__addoniconpath__ = os.path.join(addon_dir(),"icon.png")
log(u'Notification. %s: %s' % (title, message) )
xbmc.executebuiltin(encode('Notification("' + title + '","' + message + '",'+(str(time)).decode('utf-8')+',"' + __addoniconpath__ + '")'))
def debug(content):
"""
Outputs content to log file
:param content: content which should be output
:return: None
"""
if type(content) is str:
message = unicode(content, "utf-8")
else:
message = content
log(message, xbmc.LOGDEBUG)
def log_exception(content):
"""
Outputs content to log file
:param content: content which should be output
:return: None
"""
if type(content) is str:
message = unicode(content, "utf-8")
else:
message = content
log(message, xbmc.LOGERROR)
def log_msg(msg, loglevel=xbmc.LOGDEBUG):
'''log message to kodi log'''
if isinstance(msg, unicode):
msg = msg.encode('utf-8')
if DEBUG and loglevel == xbmc.LOGDEBUG:
loglevel = xbmc.LOGNOTICE
xbmc.log("%s --> %s" % (ADDON_ID, msg), level=loglevel)
def log_exception(modulename, exceptiondetails):
'''helper to properly log an exception'''
log_msg(format_exc(sys.exc_info()), xbmc.LOGDEBUG)
log_msg("Exception in %s ! --> %s" % (modulename, exceptiondetails), xbmc.LOGWARNING)
def debugger(self):
try:
remote_debugger = settings.getSetting('remote_debugger')
remote_debugger_host = settings.getSetting('remote_debugger_host')
# append pydev remote debugger
if remote_debugger == 'true':
# Make pydev debugger works for auto reload.
# Note pydevd module need to be copied in XBMC\system\python\Lib\pysrc
import pysrc.pydevd as pydevd
# stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console
pydevd.settrace(remote_debugger_host, stdoutToServer=True, stderrToServer=True)
except ImportError:
xbmc.log(self.addon.getLocalizedString(30016), xbmc.LOGERROR)
sys.exit(1)
except :
return
##
# add a menu to a directory screen
# parameters: url to resolve, title to display, optional: icon, fanart, total_items, instance name
##
def playNext(self, service, package):
(mediaURLs, package) = service.getPlaybackCall(package)
options = []
mediaURLs = sorted(mediaURLs)
for mediaURL in mediaURLs:
options.append(mediaURL.qualityDesc)
if mediaURL.qualityDesc == 'original':
originalURL = mediaURL.url
playbackURL = ''
playbackQuality = ''
if service.settings.promptQuality:
if len(options) > 1:
ret = xbmcgui.Dialog().select(service.addon.getLocalizedString(30033), options)
else:
ret = 0
else:
ret = 0
playbackURL = mediaURLs[ret].url
if self.service.settings:
xbmc.log(self.service.addon.getAddonInfo('name') + ': Play next ' + str(playbackURL), xbmc.LOGNOTICE)
playbackQuality = mediaURLs[ret].quality
item = xbmcgui.ListItem(package.file.displayTitle(), iconImage=package.file.thumbnail,
thumbnailImage=package.file.thumbnail, path=playbackURL+'|' + service.getHeadersEncoded())
item.setInfo( type="Video", infoLabels={ "Title": package.file.title } )
self.PlayStream(playbackURL+'|' + service.getHeadersEncoded(),item,0,package)
def playList(self, service):
while self.current < len(self.mediaItems) and not self.isExit:
self.playNext(service, self.mediaItems[self.current])
current = self.current
while current == self.current and not self.isExit:
xbmc.sleep(3000)
if self.service.settings:
xbmc.log(self.service.addon.getAddonInfo('name') + ': Exit play list', xbmc.LOGNOTICE)
# def onPlayBackSeek(self,offset):
def downloadGeneralFile(self, url, file, force=False):
req = urllib2.Request(url, None, self.getHeadersList())
# already downloaded
if not force and xbmcvfs.exists(file) and xbmcvfs.File(file).size() > 0:
return
f = xbmcvfs.File(file, 'w')
# if action fails, validate login
try:
f.write(urllib2.urlopen(req).read())
f.close()
except urllib2.URLError, e:
self.refreshToken()
req = urllib2.Request(url, None, self.getHeadersList())
try:
f.write(urllib2.urlopen(req).read())
f.close()
except urllib2.URLError, e:
xbmc.log(self.addon.getAddonInfo('name') + ': downloadGeneralFle ' + str(e), xbmc.LOGERROR)
return None
#can't write to cache for some reason
except IOError:
return None
return file
##
# retrieve/download a general file
# parameters: title of video, whether to prompt for quality/format (optional), medial url object, package object, whether to force download (overwrite), whether folder is encrypted, folder name
##
def downloadPicture(self, url, file):
req = urllib2.Request(url, None, self.getHeadersList())
# already downloaded
if xbmcvfs.exists(file) and xbmcvfs.File(file).size() > 0:
return
f = xbmcvfs.File(file, 'w')
# if action fails, validate login
try:
f.write(urllib2.urlopen(req).read())
f.close()
except urllib2.URLError, e:
self.refreshToken()
req = urllib2.Request(url, None, self.getHeadersList())
try:
f.write(urllib2.urlopen(req).read())
f.close()
except urllib2.URLError, e:
xbmc.log(self.addon.getAddonInfo('name') + ': downloadPicture ' + str(e), xbmc.LOGERROR)
return None
#can't write to cache for some reason
except IOError:
return None
return file
def createWorksheet(self,url,title,cols,rows):
header = { 'User-Agent' : self.user_agent, 'Authorization' : 'GoogleLogin auth=%s' % self.authorization.getToken('wise'), 'GData-Version' : '3.0', 'Content-Type': 'application/atom+xml' }
entry = '<?xml version=\'1.0\' encoding=\'UTF-8\'?><entry xmlns="http://www.w3.org/2005/Atom" xmlns:gs="http://schemas.google.com/spreadsheets/2006"><title>A worksheetdadf</title><gs:rowCount>100</gs:rowCount><gs:colCount>20</gs:colCount></entry>'
req = urllib2.Request(url, entry, header)
try:
response = urllib2.urlopen(req)
except urllib2.URLError, e:
if e.code == 403 or e.code == 401:
self.service.refreshToken()
req = urllib2.Request(url, None, self.service.getHeadersList())
try:
response = urllib2.urlopen(req)
except urllib2.URLError, e:
xbmc.log(self.addon.getAddonInfo('name') + ': ' + str(e), xbmc.LOGERROR)
return False
else:
xbmc.log(self.addon.getAddonInfo('name') + ': ' + str(e), xbmc.LOGERROR)
return False
response.read()
response.close()
return True
#
# returns a list of spreadsheets contained in the Google Docs account
#
def createRow(self,url, folderID, folderName, fileID, fileName):
# header = { 'User-Agent' : self.user_agent, 'Authorization' : 'GoogleLogin auth=%s' % self.authorization.getToken('wise'), 'GData-Version' : '3.0', 'Content-Type': 'application/atom+xml'}
header = { 'User-Agent' : self.user_agent, 'Authorization' : 'Bearer ' + self.service.authorization.getToken('auth_access_token'), 'GData-Version' : '3.0', 'Content-Type': 'application/atom+xml'}
entry = '<?xml version=\'1.0\' encoding=\'UTF-8\'?><entry xmlns="http://www.w3.org/2005/Atom" xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended"> <gsx:source>S3E12 - The Red Dot.avi-0002</gsx:source><gsx:nfo>test.nfo</gsx:nfo><gsx:show>Seinfeld</gsx:show><gsx:season>3</gsx:season><gsx:episode>1</gsx:episode><gsx:part>1</gsx:part><gsx:watched>0</gsx:watched><gsx:duration>1</gsx:duration></entry>'
req = urllib2.Request(url, entry, header)
try:
response = urllib2.urlopen(req)
except urllib2.URLError, e:
if e.code == 403 or e.code == 401:
self.service.refreshToken()
req = urllib2.Request(url, None, self.service.getHeadersList())
try:
response = urllib2.urlopen(req)
except urllib2.URLError, e:
xbmc.log(self.addon.getAddonInfo('name') + ': ' + str(e), xbmc.LOGERROR)
return False
else:
xbmc.log(self.addon.getAddonInfo('name') + ': ' + str(e), xbmc.LOGERROR)
return False
response.read()
response.close()
return True
#
# returns a list of spreadsheets contained in the Google Docs account
#