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ä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