[pypy-svn] r61914 - in pypy/trunk/pypy/module/_locale: . test

getxsick at codespeak.net getxsick at codespeak.net
Sun Feb 15 04:32:17 CET 2009


Author: getxsick
Date: Sun Feb 15 04:32:15 2009
New Revision: 61914

Modified:
   pypy/trunk/pypy/module/_locale/__init__.py
   pypy/trunk/pypy/module/_locale/interp_locale.py
   pypy/trunk/pypy/module/_locale/test/test_locale.py
Log:
(jlg, getxsick) bind_textdomain_codeset() implementation
it should be defined only for some platforms (but now for every)


Modified: pypy/trunk/pypy/module/_locale/__init__.py
==============================================================================
--- pypy/trunk/pypy/module/_locale/__init__.py	(original)
+++ pypy/trunk/pypy/module/_locale/__init__.py	Sun Feb 15 04:32:15 2009
@@ -4,17 +4,18 @@
     """Support for POSIX locales."""
 
     interpleveldefs  = {
-            'setlocale':            'interp_locale.setlocale',
-            'localeconv':           'interp_locale.localeconv',
-            'strcoll':              'interp_locale.strcoll',
-            'strxfrm':              'interp_locale.strxfrm',
-            #'getdefaultlocale':    'interp_locale.getdefaultlocale',
-            'gettext':              'interp_locale.gettext',
-            'dgettext':             'interp_locale.dgettext',
-            'dcgettext':            'interp_locale.dcgettext',
-            'textdomain':           'interp_locale.textdomain',
-            'nl_langinfo':          'interp_locale.nl_langinfo',
-            'bindtextdomain':       'interp_locale.bindtextdomain',
+            'setlocale':                'interp_locale.setlocale',
+            'localeconv':               'interp_locale.localeconv',
+            'strcoll':                  'interp_locale.strcoll',
+            'strxfrm':                  'interp_locale.strxfrm',
+            #'getdefaultlocale':        'interp_locale.getdefaultlocale',
+            'gettext':                  'interp_locale.gettext',
+            'dgettext':                 'interp_locale.dgettext',
+            'dcgettext':                'interp_locale.dcgettext',
+            'textdomain':               'interp_locale.textdomain',
+            'nl_langinfo':              'interp_locale.nl_langinfo',
+            'bindtextdomain':           'interp_locale.bindtextdomain',
+            'bind_textdomain_codeset':  'interp_locale.bind_textdomain_codeset',
             }
 
     appleveldefs  = {

Modified: pypy/trunk/pypy/module/_locale/interp_locale.py
==============================================================================
--- pypy/trunk/pypy/module/_locale/interp_locale.py	(original)
+++ pypy/trunk/pypy/module/_locale/interp_locale.py	Sun Feb 15 04:32:15 2009
@@ -329,3 +329,26 @@
     return space.wrap(rffi.charp2str(dirname))
 
 bindtextdomain.unwrap_spec = [ObjSpace, str, W_Root]
+
+_bind_textdomain_codeset = external('bind_textdomain_codeset',
+                                    [rffi.CCHARP, rffi.CCHARP], rffi.CCHARP)
+
+# TODO: platform dependent
+def bind_textdomain_codeset(space, domain, w_codeset):
+    """bind_textdomain_codeset(domain, codeset) -> string
+    Bind the C library's domain to codeset."""
+
+    if space.is_w(w_codeset, space.w_None):
+        codeset = None
+        result = _bind_textdomain_codeset(rffi.str2charp(domain), codeset)
+    else:
+        codeset = space.str_w(w_codeset)
+        result = _bind_textdomain_codeset(rffi.str2charp(domain),
+                                        rffi.str2charp(codeset))
+    
+    if not result:
+        return space.w_None
+    else:
+        return space.wrap(rffi.charp2str(result))
+
+bind_textdomain_codeset.unwrap_spec = [ObjSpace, str, W_Root]

Modified: pypy/trunk/pypy/module/_locale/test/test_locale.py
==============================================================================
--- pypy/trunk/pypy/module/_locale/test/test_locale.py	(original)
+++ pypy/trunk/pypy/module/_locale/test/test_locale.py	Sun Feb 15 04:32:15 2009
@@ -226,3 +226,12 @@
 
         raises(OSError, _locale.bindtextdomain, '', '')
         raises(OSError, _locale.bindtextdomain, '', '1')
+
+    def test_bind_textdomain_codeset(self):
+        import _locale
+
+        assert _locale.bind_textdomain_codeset('/', None) is None
+        assert _locale.bind_textdomain_codeset('/', 'UTF-8') == 'UTF-8'
+        assert _locale.bind_textdomain_codeset('/', None) == 'UTF-8'
+
+        assert _locale.bind_textdomain_codeset('', '') is None



More information about the Pypy-commit mailing list