1 new commit in py: https://bitbucket.org/hpk42/py/commits/764221efcef5/ Changeset: 764221efcef5 User: pmoore Date: 2014-09-02 15:53:51 Summary: Add {read,write}_{binary,text} methods to LocalPath instances Affected #: 3 files
diff -r 4927b441e6e93ffa70404cf836d80ccafbb215a7 -r 764221efcef5bbc004e0e7f68ee5230dfa7168dc py/_path/common.py --- a/py/_path/common.py +++ b/py/_path/common.py @@ -115,6 +115,22 @@ """ return self.new(basename='').join(*args, **kwargs) + def read_binary(self): + """ read and return a bytestring from reading the path. """ + f = self.open('rb') + try: + return f.read() + finally: + f.close() + + def read_text(self, encoding=None): + """ read and return a Unicode string from reading the path. """ + f = self.open('r', encoding=encoding) + try: + return f.read() + finally: + f.close() + def read(self, mode='r'): """ read and return a bytestring from reading the path. """ if sys.version_info < (2,3): diff -r 4927b441e6e93ffa70404cf836d80ccafbb215a7 -r 764221efcef5bbc004e0e7f68ee5230dfa7168dc py/_path/local.py --- a/py/_path/local.py +++ b/py/_path/local.py @@ -2,7 +2,7 @@ local path implementation. """ from contextlib import contextmanager -import sys, os, re, atexit +import sys, os, re, atexit, io import py from py._path import common from stat import S_ISLNK, S_ISDIR, S_ISREG @@ -330,13 +330,15 @@ obj.strpath = normpath(strpath) return obj - def open(self, mode='r', ensure=False): + def open(self, mode='r', ensure=False, encoding=None): """ return an opened file with the given mode. If ensure is True, create parent directories if needed. """ if ensure: self.dirpath().ensure(dir=1) + if encoding: + return py.error.checked_call(io.open, self.strpath, mode, encoding=encoding) return py.error.checked_call(open, self.strpath, mode) def _fastjoin(self, name): @@ -434,6 +436,30 @@ py.error.checked_call(os.mkdir, getattr(p, "strpath", p)) return p + def write_binary(self, data, ensure=False): + """ write binary data into path. If ensure is True create + missing parent directories. + """ + if ensure: + self.dirpath().ensure(dir=1) + f = self.open('wb') + try: + f.write(data) + finally: + f.close() + + def write_text(self, data, ensure=False, encoding=None): + """ write binary data into path. If ensure is True create + missing parent directories. + """ + if ensure: + self.dirpath().ensure(dir=1) + f = self.open('w', encoding=encoding) + try: + f.write(data) + finally: + f.close() + def write(self, data, mode='w', ensure=False): """ write data into path. If ensure is True create missing parent directories. diff -r 4927b441e6e93ffa70404cf836d80ccafbb215a7 -r 764221efcef5bbc004e0e7f68ee5230dfa7168dc testing/path/test_local.py --- a/testing/path/test_local.py +++ b/testing/path/test_local.py @@ -801,3 +801,24 @@ x.write(part.encode(sys.getdefaultencoding())) assert x.read() == part.encode(sys.getdefaultencoding()) +class TestBinaryAndTextMethods: + def test_read_binwrite(self, tmpdir): + x = tmpdir.join("hello") + part = py.builtin._totext("hällo", "utf8") + part_utf8 = part.encode("utf8") + x.write_binary(part_utf8) + assert x.read_binary() == part_utf8 + assert x.read_text(encoding="utf8") == part + def test_read_textwrite(self, tmpdir): + x = tmpdir.join("hello") + part = py.builtin._totext("hällo", "utf8") + part_utf8 = part.encode("utf8") + x.write_text(part, encoding="utf8") + assert x.read_binary() == part_utf8 + assert x.read_text(encoding="utf8") == part + def test_default_encoding(self, tmpdir): + x = tmpdir.join("hello") + # Can't use UTF8 as the default encoding (ASCII) doesn't support it + part = py.builtin._totext("hello", "ascii") + x.write_text(part) + assert x.read_text() == part Repository URL: https://bitbucket.org/hpk42/py/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. _______________________________________________ pytest-commit mailing list pytest-commit@python.org https://mail.python.org/mailman/listinfo/pytest-commit