Revision aff28f5f

b/snf-common/synnefo/util/text.py
1
# -*- coding: utf-8 -*-
2

  
3
# Copyright 2013 GRNET S.A. All rights reserved.
4
#
5
# Redistribution and use in source and binary forms, with or
6
# without modification, are permitted provided that the following
7
# conditions are met:
8
#
9
#   1. Redistributions of source code must retain the above
10
#      copyright notice, this list of conditions and the following
11
#      disclaimer.
12
#
13
#   2. Redistributions in binary form must reproduce the above
14
#      copyright notice, this list of conditions and the following
15
#      disclaimer in the documentation and/or other materials
16
#      provided with the distribution.
17
#
18
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
19
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
22
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
25
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
26
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
28
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
# POSSIBILITY OF SUCH DAMAGE.
30
#
31
# The views and conclusions contained in the software and
32
# documentation are those of the authors and should not be
33
# interpreted as representing official policies, either expressed
34
# or implied, of GRNET S.A.
35

  
36
uenc_encoding = 'UTF-8'
37

  
38
def uenc_set_encoding(encoding=None):
39
    """Set the default encoding for uenc()
40

  
41
    The encoding specified is saved into a global variable
42
    in this module, and used as a default for uenc()'s
43
    encoding argument.
44

  
45
    If the encoding is not specified, the locale category LC_CTYPE
46
    is queried. If it is not set, then it is set to the user's default.
47
    The resulting preferred encoding is used.
48

  
49
    The "user's default" is implementation specific, but usually
50
    it is initialized from the environment variables LC_ALL, LC_CTYPE.
51

  
52
    It is called once during module importing to initialize the default.
53

  
54
    """
55
    global uenc_encoding
56

  
57
    if encoding is None:
58
        import locale
59
        LC_CTYPE = locale.LC_CTYPE
60
        language, encoding = locale.getlocale(LC_CTYPE)
61
        if encoding is None:
62
            # locale="" means "user's default"
63
            locale.setlocale(locale.LC_CTYPE, locale="")
64
        encoding = locale.getpreferredencoding()
65

  
66
    uenc_encoding = encoding
67

  
68
def uenc(thing, encoding=None):
69
    """Encode the argument into a string.
70

  
71
    If the thing is already a string, nothing happens to it.
72
    If it is a unicode object, it is encoded into a string as
73
    specified by the encoding argument.
74
    If the thing is another type of object, str() is called on it.
75

  
76
    If the encoding argument is not specified, the module's default
77
    is used instead. See uenc_set_encoding() for setting the default.
78

  
79
    """
80
    if encoding is None:
81
        encoding = uenc_encoding
82

  
83
    if isinstance(thing, unicode):
84
        return thing.encode(encoding)
85

  
86
    return str(thing)
87

  
88
uenc_set_encoding()
89

  

Also available in: Unified diff