Author: Armin Rigo <[email protected]>
Branch: 
Changeset: r98572:fb95321122db
Date: 2020-01-23 11:51 +0100
http://bitbucket.org/pypy/pypy/changeset/fb95321122db/

Log:    PyCodec_Encoder(), PyCodec_Decoder()

diff --git a/pypy/module/cpyext/codecs.py b/pypy/module/cpyext/codecs.py
--- a/pypy/module/cpyext/codecs.py
+++ b/pypy/module/cpyext/codecs.py
@@ -20,3 +20,12 @@
     else:
         return space.call_method(w_codec, "incrementaldecoder")
 
+@cpython_api([CONST_STRING], PyObject)
+def PyCodec_Encoder(space, encoding):
+    w_codec = interp_codecs.lookup_codec(space, rffi.charp2str(encoding))
+    return space.getitem(w_codec, space.newint(0))
+
+@cpython_api([CONST_STRING], PyObject)
+def PyCodec_Decoder(space, encoding):
+    w_codec = interp_codecs.lookup_codec(space, rffi.charp2str(encoding))
+    return space.getitem(w_codec, space.newint(1))
diff --git a/pypy/module/cpyext/test/test_codecs.py 
b/pypy/module/cpyext/test/test_codecs.py
--- a/pypy/module/cpyext/test/test_codecs.py
+++ b/pypy/module/cpyext/test/test_codecs.py
@@ -2,7 +2,8 @@
 from pypy.module.cpyext.test.test_api import BaseApiTest
 from rpython.rtyper.lltypesystem import rffi
 from pypy.module.cpyext.codecs import (
-    PyCodec_IncrementalEncoder, PyCodec_IncrementalDecoder)
+    PyCodec_IncrementalEncoder, PyCodec_IncrementalDecoder,
+    PyCodec_Encoder, PyCodec_Decoder)
 
 class TestCodecs(BaseApiTest):
     def test_incremental(self, space):
@@ -13,3 +14,13 @@
         w_decoded = space.call_method(w_decoder, 'decode', w_encoded)
         assert space.utf8_w(w_decoded) == u'sp&#228;m'.encode('utf8')
         rffi.free_charp(utf8)
+
+    def test_encoder_decoder(self, space):
+        utf8 = rffi.str2charp('utf-8')
+        w_encoder = PyCodec_Encoder(space, utf8)
+        w_decoder = PyCodec_Decoder(space, utf8)
+        rffi.free_charp(utf8)
+        space.appexec([w_encoder, w_decoder], """(encoder, decoder):
+            assert encoder(u"\u1234") == ('\xe1\x88\xb4', 1)
+            assert decoder("\xe1\x88\xb4") == (u'\u1234', 3)
+        """)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to