unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
blob 4a94e05c805d1a9fc28d035fbde09f3b404ff202 2479 bytes (raw)
name: bindings/python/notmuch/compat.py 	 # note: path name is non-authoritative(*)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
 
'''
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 <https://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 ConfigParser as SafeConfigParser

    if not hasattr(SafeConfigParser, 'readfp'):   # py >= 3.12
        SafeConfigParser.readfp = SafeConfigParser.read_file

    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')

# We import the SafeConfigParser class on behalf of other code to cope
# with the differences between Python 2 and 3.
SafeConfigParser # avoid warning about unused import

debug log:

solving 4a94e05c ...
found 4a94e05c in https://yhetil.org/notmuch.git/

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).