unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
blob c931329e96972237d5f380ba2270a9dcc2d28d56 2338 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
 
'''
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 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')

# 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 c931329e ...
found c931329e 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).