2014-03-10 01:18:05 -04:00
# Author: Nic Wolfe <nic@wolfeden.ca>
# URL: http://code.google.com/p/sickbeard/
#
# This file is part of Sick Beard.
#
# Sick Beard is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Sick Beard is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Sick Beard. If not, see <http://www.gnu.org/licenses/>.
import os
from sickbeard import logger
import sickbeard
# This module tries to deal with the apparently random behavior of python when dealing with unicode <-> utf-8
# encodings. It tries to just use unicode, but if that fails then it tries forcing it to utf-8. Any functions
# which return something should always return unicode.
def fixStupidEncodings ( x , silent = False ) :
if type ( x ) == str :
try :
return x . decode ( sickbeard . SYS_ENCODING )
except UnicodeDecodeError :
2014-05-14 05:55:53 -04:00
logger . log ( u " Unable to decode value: " + repr ( x ) , logger . ERROR )
2014-03-10 01:18:05 -04:00
return None
elif type ( x ) == unicode :
return x
else :
2014-05-14 05:55:53 -04:00
logger . log ( u " Unknown value passed in, ignoring it: " + str ( type ( x ) ) + " ( " + repr ( x ) + " : " + repr ( type ( x ) ) + " ) " , logger . DEBUG if silent else logger . ERROR )
2014-03-10 01:18:05 -04:00
return None
2014-05-14 05:55:53 -04:00
return None
2014-03-25 01:57:24 -04:00
2014-03-10 01:18:05 -04:00
def fixListEncodings ( x ) :
if type ( x ) != list and type ( x ) != tuple :
return x
else :
2014-03-20 14:03:22 -04:00
return filter ( lambda x : x != None , map ( fixStupidEncodings , x ) )
2014-03-10 01:18:05 -04:00
def callPeopleStupid ( x ) :
try :
return x . encode ( sickbeard . SYS_ENCODING )
except UnicodeEncodeError :
2014-05-14 05:55:53 -04:00
logger . log ( u " YOUR COMPUTER SUCKS! Your data is being corrupted by a bad locale/encoding setting. Report this error on the forums or IRC please: " + repr ( x ) + " , " + sickbeard . SYS_ENCODING , logger . ERROR )
2014-03-10 01:18:05 -04:00
return x . encode ( sickbeard . SYS_ENCODING , ' ignore ' )
2014-05-14 05:55:53 -04:00
def ek ( func , * args ) :
2014-03-10 01:18:05 -04:00
result = None
if os . name == ' nt ' :
2014-05-14 05:55:53 -04:00
result = func ( * args )
2014-03-10 01:18:05 -04:00
else :
2014-05-14 05:55:53 -04:00
result = func ( * [ callPeopleStupid ( x ) if type ( x ) in ( str , unicode ) else x for x in args ] )
2014-03-10 01:18:05 -04:00
if type ( result ) in ( list , tuple ) :
return fixListEncodings ( result )
elif type ( result ) == str :
return fixStupidEncodings ( result )
else :
2014-05-14 05:55:53 -04:00
return result