mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-25 12:28:09 +01:00
python: add a file abstracting away differences between python 2 and 3
Signed-off-by: Justus Winter <4winter@informatik.uni-hamburg.de>
This commit is contained in:
parent
643719dfce
commit
8e3faa7f18
3 changed files with 70 additions and 40 deletions
67
bindings/python/notmuch/compat.py
Normal file
67
bindings/python/notmuch/compat.py
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
'''
|
||||||
|
This file is part of notmuch.
|
||||||
|
|
||||||
|
This module handles differences between python2.x and python3.x and
|
||||||
|
allows the notmuch bindings to support both version families with one
|
||||||
|
source tree.
|
||||||
|
|
||||||
|
Notmuch 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.
|
||||||
|
|
||||||
|
Notmuch 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 notmuch. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Copyright 2010 Sebastian Spaeth <Sebastian@SSpaeth.de>
|
||||||
|
Copyright 2012 Justus Winter <4winter@informatik.uni-hamburg.de>
|
||||||
|
'''
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
if sys.version_info[0] == 2:
|
||||||
|
from ConfigParser import SafeConfigParser
|
||||||
|
|
||||||
|
class Python3StringMixIn(object):
|
||||||
|
def __str__(self):
|
||||||
|
return unicode(self).encode('utf-8')
|
||||||
|
|
||||||
|
def encode_utf8(value):
|
||||||
|
'''
|
||||||
|
Ensure a nicely utf-8 encoded string to pass to wrapped
|
||||||
|
libnotmuch functions.
|
||||||
|
|
||||||
|
C++ code expects strings to be well formatted and unicode
|
||||||
|
strings to have no null bytes.
|
||||||
|
'''
|
||||||
|
if not isinstance(value, basestring):
|
||||||
|
raise TypeError('Expected str or unicode, got %s' % type(value))
|
||||||
|
|
||||||
|
if isinstance(value, unicode):
|
||||||
|
return value.encode('utf-8', 'replace')
|
||||||
|
|
||||||
|
return value
|
||||||
|
else:
|
||||||
|
from configparser import SafeConfigParser
|
||||||
|
|
||||||
|
class Python3StringMixIn(object):
|
||||||
|
def __str__(self):
|
||||||
|
return self.__unicode__()
|
||||||
|
|
||||||
|
def encode_utf8(value):
|
||||||
|
'''
|
||||||
|
Ensure a nicely utf-8 encoded string to pass to wrapped
|
||||||
|
libnotmuch functions.
|
||||||
|
|
||||||
|
C++ code expects strings to be well formatted and unicode
|
||||||
|
strings to have no null bytes.
|
||||||
|
'''
|
||||||
|
if not isinstance(value, str):
|
||||||
|
raise TypeError('Expected str, got %s' % type(value))
|
||||||
|
|
||||||
|
return value.encode('utf-8', 'replace')
|
|
@ -20,6 +20,7 @@ Copyright 2010 Sebastian Spaeth <Sebastian@SSpaeth.de>
|
||||||
import os
|
import os
|
||||||
import codecs
|
import codecs
|
||||||
from ctypes import c_char_p, c_void_p, c_uint, byref, POINTER
|
from ctypes import c_char_p, c_void_p, c_uint, byref, POINTER
|
||||||
|
from .compat import SafeConfigParser
|
||||||
from .globals import (
|
from .globals import (
|
||||||
nmlib,
|
nmlib,
|
||||||
Enum,
|
Enum,
|
||||||
|
@ -589,13 +590,6 @@ class Database(object):
|
||||||
""" Reads a user's notmuch config and returns his db location
|
""" Reads a user's notmuch config and returns his db location
|
||||||
|
|
||||||
Throws a NotmuchError if it cannot find it"""
|
Throws a NotmuchError if it cannot find it"""
|
||||||
try:
|
|
||||||
# python3.x
|
|
||||||
from configparser import SafeConfigParser
|
|
||||||
except ImportError:
|
|
||||||
# python2.x
|
|
||||||
from ConfigParser import SafeConfigParser
|
|
||||||
|
|
||||||
config = SafeConfigParser()
|
config = SafeConfigParser()
|
||||||
conf_f = os.getenv('NOTMUCH_CONFIG',
|
conf_f = os.getenv('NOTMUCH_CONFIG',
|
||||||
os.path.expanduser('~/.notmuch-config'))
|
os.path.expanduser('~/.notmuch-config'))
|
||||||
|
|
|
@ -16,7 +16,7 @@ along with notmuch. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Copyright 2010 Sebastian Spaeth <Sebastian@SSpaeth.de>
|
Copyright 2010 Sebastian Spaeth <Sebastian@SSpaeth.de>
|
||||||
"""
|
"""
|
||||||
import sys
|
|
||||||
from ctypes import CDLL, Structure, POINTER
|
from ctypes import CDLL, Structure, POINTER
|
||||||
|
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
|
@ -26,38 +26,7 @@ try:
|
||||||
except:
|
except:
|
||||||
raise ImportError("Could not find shared 'notmuch' library.")
|
raise ImportError("Could not find shared 'notmuch' library.")
|
||||||
|
|
||||||
|
from .compat import Python3StringMixIn, encode_utf8 as _str
|
||||||
if sys.version_info[0] == 2:
|
|
||||||
class Python3StringMixIn(object):
|
|
||||||
def __str__(self):
|
|
||||||
return unicode(self).encode('utf-8')
|
|
||||||
|
|
||||||
|
|
||||||
def _str(value):
|
|
||||||
"""Ensure a nicely utf-8 encoded string to pass to libnotmuch
|
|
||||||
|
|
||||||
C++ code expects strings to be well formatted and
|
|
||||||
unicode strings to have no null bytes."""
|
|
||||||
if not isinstance(value, basestring):
|
|
||||||
raise TypeError("Expected str or unicode, got %s" % type(value))
|
|
||||||
if isinstance(value, unicode):
|
|
||||||
return value.encode('UTF-8')
|
|
||||||
return value
|
|
||||||
else:
|
|
||||||
class Python3StringMixIn(object):
|
|
||||||
def __str__(self):
|
|
||||||
return self.__unicode__()
|
|
||||||
|
|
||||||
|
|
||||||
def _str(value):
|
|
||||||
"""Ensure a nicely utf-8 encoded string to pass to libnotmuch
|
|
||||||
|
|
||||||
C++ code expects strings to be well formatted and
|
|
||||||
unicode strings to have no null bytes."""
|
|
||||||
if not isinstance(value, str):
|
|
||||||
raise TypeError("Expected str, got %s" % type(value))
|
|
||||||
return value.encode('UTF-8')
|
|
||||||
|
|
||||||
|
|
||||||
class Enum(object):
|
class Enum(object):
|
||||||
"""Provides ENUMS as "code=Enum(['a','b','c'])" where code.a=0 etc..."""
|
"""Provides ENUMS as "code=Enum(['a','b','c'])" where code.a=0 etc..."""
|
||||||
|
|
Loading…
Reference in a new issue