diff --git a/atrcopy/ataridos.py b/atrcopy/ataridos.py index 6f89886..c8c98cc 100644 --- a/atrcopy/ataridos.py +++ b/atrcopy/ataridos.py @@ -106,7 +106,7 @@ class AtariDosDirent(Dirent): @property def filename(self): ext = (b'.' + self.ext) if self.ext else b'' - return self.basename + ext + return (self.basename + ext).decode('utf-8') @property def summary(self): diff --git a/atrcopy/diskimages.py b/atrcopy/diskimages.py index 1a214a6..d670e7d 100644 --- a/atrcopy/diskimages.py +++ b/atrcopy/diskimages.py @@ -276,7 +276,6 @@ class DiskImageBase(object): # check if we've been passed a dirent instead of a filename if hasattr(filename, "filename"): return filename - if type(filename) is not bytes: filename = filename.encode("utf-8") for dirent in self.files: if filename == dirent.filename: return dirent diff --git a/atrcopy/dos33.py b/atrcopy/dos33.py index 0dbc961..10ae41f 100644 --- a/atrcopy/dos33.py +++ b/atrcopy/dos33.py @@ -164,7 +164,7 @@ class Dos33Dirent(Dirent): self.deleted = False self.track = 0 self.sector = 0 - self.filename = b'' + self.filename = "" self.num_sectors = 0 self.is_sane = True self.current_sector_index = 0 @@ -174,7 +174,7 @@ class Dos33Dirent(Dirent): self.parse_raw_dirent(image, bytes) def __str__(self): - return "File #%-2d (%s) %03d %-30s %03d %03d" % (self.file_num, self.summary, self.num_sectors, self.filename.decode("ascii", errors='ignore'), self.track, self.sector) + return "File #%-2d (%s) %03d %-30s %03d %03d" % (self.file_num, self.summary, self.num_sectors, self.filename, self.track, self.sector) def __eq__(self, other): return self.__class__ == other.__class__ and self.filename == other.filename and self.track == other.track and self.sector == other.sector and self.num_sectors == other.num_sectors @@ -226,20 +226,20 @@ class Dos33Dirent(Dirent): lines.append("sector map: " + str(self.sector_map)) return "\n".join(lines) - def parse_raw_dirent(self, image, bytes): - if bytes is None: + def parse_raw_dirent(self, image, data): + if data is None: return - values = bytes.view(dtype=self.format)[0] + values = data.view(dtype=self.format)[0] self.track = values[0] if self.track == 0xff: self.deleted = True - self.track = bytes[0x20] + self.track = data[0x20] else: self.deleted = False self.sector = values[1] self._file_type = values[2] & 0x7f self.locked = values[2] & 0x80 - self.filename = (bytes[3:0x20] - 0x80).tobytes().rstrip() + self.filename = (data[3:0x20] - 0x80).tobytes().rstrip().decode("ascii", errors='ignore') self.num_sectors = int(values[4]) self.is_sane = self.sanity_check(image) @@ -250,7 +250,7 @@ class Dos33Dirent(Dirent): values[1] = self.sector values[2] = self.flag n = min(len(self.filename), 30) - data[3:3+n] = np.fromstring(self.filename, dtype=np.uint8) | 0x80 + data[3:3+n] = np.fromstring(self.filename.encode("ascii"), dtype=np.uint8) | 0x80 data[3+n:] = ord(' ') | 0x80 if self.deleted: data[0x20] = self.track @@ -346,8 +346,7 @@ class Dos33Dirent(Dirent): return self.filename def set_values(self, filename, filetype, index): - if type(filename) is not bytes: filename = filename.encode("utf-8") - self.filename = b'%-30s' % filename[0:30] + self.filename = '%-30s' % filename[0:30] self._file_type = self.text_to_type.get(filetype, 0x04) self.locked = False self.deleted = False diff --git a/test/test_add_file.py b/test/test_add_file.py index d755234..5c69c51 100644 --- a/test/test_add_file.py +++ b/test/test_add_file.py @@ -17,13 +17,12 @@ class BaseFilesystemModifyTest(object): rawdata = SegmentData(self.sample_data.copy()) self.image = self.diskimage_type(rawdata) - def check_entries(self, entries, prefix=b"TEST", save=None): - if type(prefix) is not bytes: prefix = prefix.encode("utf-8") + def check_entries(self, entries, prefix="TEST", save=None): orig_num_files = len(self.image.files) filenames = [] count = 1 for data in entries: - filename = b"%s%d.BIN" % (prefix, count) + filename = "%s%d.BIN" % (prefix, count) self.image.write_file(filename, None, data) assert len(self.image.files) == orig_num_files + count data2 = np.fromstring(self.image.find_file(filename), dtype=np.uint8) @@ -33,7 +32,7 @@ class BaseFilesystemModifyTest(object): # loop over them again to make sure data wasn't overwritten count = 1 for data in entries: - filename = b"%s%d.BIN" % (prefix, count) + filename = "%s%d.BIN" % (prefix, count) data2 = np.fromstring(self.image.find_file(filename), dtype=np.uint8) assert np.array_equal(data, data2[0:len(data)]) count += 1 @@ -48,20 +47,20 @@ class BaseFilesystemModifyTest(object): assert len(self.image.files) == self.num_files_in_sample data = np.asarray([0xff, 0xff, 0x00, 0x60, 0x01, 0x60, 1, 2], dtype=np.uint8) - self.image.write_file(b"TEST.XEX", None, data) + self.image.write_file("TEST.XEX", None, data) assert len(self.image.files) == self.num_files_in_sample + 1 - data2 = np.fromstring(self.image.find_file(b"TEST.XEX"), dtype=np.uint8) + data2 = np.fromstring(self.image.find_file("TEST.XEX"), dtype=np.uint8) assert np.array_equal(data, data2[0:len(data)]) def test_50k(self): assert len(self.image.files) == self.num_files_in_sample data = np.arange(50*1024, dtype=np.uint8) - self.image.write_file(b"RAMP50K.BIN", None, data) + self.image.write_file("RAMP50K.BIN", None, data) assert len(self.image.files) == self.num_files_in_sample + 1 - data2 = self.image.find_file(b"RAMP50K.BIN") + data2 = self.image.find_file("RAMP50K.BIN") assert data.tostring() == data2 def test_many_small(self): @@ -78,17 +77,17 @@ class BaseFilesystemModifyTest(object): np.arange(9*1024, dtype=np.uint8), np.arange(10*1024, dtype=np.uint8), ] - self.check_entries(entries, save=b"many_small.atr") + self.check_entries(entries, save="many_small.atr") def test_big_failure(self): assert len(self.image.files) == self.num_files_in_sample data = np.arange(50*1024, dtype=np.uint8) - self.image.write_file(b"RAMP50K.BIN", None, data) + self.image.write_file("RAMP50K.BIN", None, data) assert len(self.image.files) == self.num_files_in_sample + 1 with pytest.raises(NotEnoughSpaceOnDisk): huge = np.arange(500*1024, dtype=np.uint8) - self.image.write_file(b"RAMP500K.BIN", None, huge) + self.image.write_file("RAMP500K.BIN", None, huge) assert len(self.image.files) == self.num_files_in_sample + 1 def test_delete(self): @@ -118,7 +117,7 @@ class BaseFilesystemModifyTest(object): self.image.delete_file(filenames[8]) assert len(self.image.files) == self.num_files_in_sample + 7 - filename = self.check_entries(entries2, b"SECOND", save="test_delete.atr") + filename = self.check_entries(entries2, "SECOND", save="test_delete.atr") assert len(self.image.files) == self.num_files_in_sample + 9 def test_delete_all(self):