Hello, I confirm that a search&replace of "r+b" to "rb" in the code makes python3-dbf able to open read only .dbf files.
Patch attached. Enrico -- GPG key: 4096R/634F4BD1E7AD5568 2009-05-08 Enrico Zini <[email protected]>
From cd400e93630b4271d91ec0e4e5da0a7c3e3686ba Mon Sep 17 00:00:00 2001 From: Enrico Zini <[email protected]> Date: Tue, 14 Feb 2017 15:26:59 +0100 Subject: [PATCH] Fixed readonly file opening modes --- dbf/_index.py | 4 ++-- dbf/ver_2.py | 8 ++++---- dbf/ver_32.py | 8 ++++---- dbf/ver_33.py | 8 ++++---- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/dbf/_index.py b/dbf/_index.py index 6894106..7047996 100644 --- a/dbf/_index.py +++ b/dbf/_index.py @@ -8,12 +8,12 @@ class IndexFile(object): filename = os.path.splitext(dbf.filename)[0] filename += '.pdx' if not os.path.exists(filename): - self.index_file = open(filename, 'r+b') + self.index_file = open(filename, 'rb') self.index_file.write('\xea\xaf\x37\xbf' # signature '\x00'*8 # two non-existant lists '\x00'*500) # and no indices return - index_file = self.index_file = open(filename, 'r+b') + index_file = self.index_file = open(filename, 'rb') header = index_file.read(512) if header[:4] != '\xea\xaf\x37\xbf': raise IndexFileError("Wrong signature -- unable to use index file %r" % filename) diff --git a/dbf/ver_2.py b/dbf/ver_2.py index 9b03c64..667080e 100644 --- a/dbf/ver_2.py +++ b/dbf/ver_2.py @@ -3219,7 +3219,7 @@ class _Db3Memo(_DbfMemo): self.meta.mfd.write(pack_long_int(1) + '\x00' * 508) else: try: - self.meta.mfd = open(self.meta.memoname, 'r+b') + self.meta.mfd = open(self.meta.memoname, 'rb') self.meta.mfd.seek(0) next = self.meta.mfd.read(4) self.nextmemo = unpack_long_int(next) @@ -3296,7 +3296,7 @@ class _VfpMemo(_DbfMemo): pack_short_int(self.meta.memo_size, bigendian=True) + '\x00' * 504) else: try: - self.meta.mfd = open(self.meta.memoname, 'r+b') + self.meta.mfd = open(self.meta.memoname, 'rb') self.meta.mfd.seek(0) header = self.meta.mfd.read(512) self.nextmemo = unpack_long_int(header[:4], bigendian=True) @@ -4785,7 +4785,7 @@ class Table(_Navigation): self.add_fields(field_specs) else: try: - dfd = meta.dfd = open(meta.filename, 'r+b') + dfd = meta.dfd = open(meta.filename, 'rb') except IOError: e= sys.exc_info()[1] raise DbfError(str(e)) @@ -5425,7 +5425,7 @@ class Table(_Navigation): return self if '_table' in dir(self): del self._table - dfd = meta.dfd = open(meta.filename, 'r+b') + dfd = meta.dfd = open(meta.filename, 'rb') dfd.seek(0) header = meta.header = self._TableHeader(dfd.read(32), self._pack_date, self._unpack_date) if not header.version in self._supported_tables: diff --git a/dbf/ver_32.py b/dbf/ver_32.py index c5fc698..b71c570 100644 --- a/dbf/ver_32.py +++ b/dbf/ver_32.py @@ -3170,7 +3170,7 @@ class _Db3Memo(_DbfMemo): self.meta.mfd.write(pack_long_int(1) + b'\x00' * 508) else: try: - self.meta.mfd = open(self.meta.memoname, 'r+b') + self.meta.mfd = open(self.meta.memoname, 'rb') self.meta.mfd.seek(0) next = self.meta.mfd.read(4) self.nextmemo = unpack_long_int(next) @@ -3247,7 +3247,7 @@ class _VfpMemo(_DbfMemo): pack_short_int(self.meta.memo_size, bigendian=True) + b'\x00' * 504) else: try: - self.meta.mfd = open(self.meta.memoname, 'r+b') + self.meta.mfd = open(self.meta.memoname, 'rb') self.meta.mfd.seek(0) header = self.meta.mfd.read(512) self.nextmemo = unpack_long_int(header[:4], bigendian=True) @@ -4760,7 +4760,7 @@ class Table(_Navigation): self.add_fields(field_specs) else: try: - dfd = meta.dfd = open(meta.filename, 'r+b') + dfd = meta.dfd = open(meta.filename, 'rb') except IOError: e= sys.exc_info()[1] raise DbfError(str(e)) @@ -5400,7 +5400,7 @@ class Table(_Navigation): return self if '_table' in dir(self): del self._table - dfd = meta.dfd = open(meta.filename, 'r+b') + dfd = meta.dfd = open(meta.filename, 'rb') dfd.seek(0) header = meta.header = self._TableHeader(dfd.read(32), self._pack_date, self._unpack_date) if not header.version in self._supported_tables: diff --git a/dbf/ver_33.py b/dbf/ver_33.py index f687c03..bd93b10 100644 --- a/dbf/ver_33.py +++ b/dbf/ver_33.py @@ -3170,7 +3170,7 @@ class _Db3Memo(_DbfMemo): self.meta.mfd.write(pack_long_int(1) + b'\x00' * 508) else: try: - self.meta.mfd = open(self.meta.memoname, 'r+b') + self.meta.mfd = open(self.meta.memoname, 'rb') self.meta.mfd.seek(0) next = self.meta.mfd.read(4) self.nextmemo = unpack_long_int(next) @@ -3247,7 +3247,7 @@ class _VfpMemo(_DbfMemo): pack_short_int(self.meta.memo_size, bigendian=True) + b'\x00' * 504) else: try: - self.meta.mfd = open(self.meta.memoname, 'r+b') + self.meta.mfd = open(self.meta.memoname, 'rb') self.meta.mfd.seek(0) header = self.meta.mfd.read(512) self.nextmemo = unpack_long_int(header[:4], bigendian=True) @@ -4760,7 +4760,7 @@ class Table(_Navigation): self.add_fields(field_specs) else: try: - dfd = meta.dfd = open(meta.filename, 'r+b') + dfd = meta.dfd = open(meta.filename, 'rb') except IOError: e= sys.exc_info()[1] raise DbfError(str(e)) from None @@ -5400,7 +5400,7 @@ class Table(_Navigation): return self if '_table' in dir(self): del self._table - dfd = meta.dfd = open(meta.filename, 'r+b') + dfd = meta.dfd = open(meta.filename, 'rb') dfd.seek(0) header = meta.header = self._TableHeader(dfd.read(32), self._pack_date, self._unpack_date) if not header.version in self._supported_tables: -- 2.11.0
signature.asc
Description: PGP signature

