From bddae24cb12d67f41fa876d970247524c387efab Mon Sep 17 00:00:00 2001 From: Rob McMullen Date: Sun, 7 May 2017 13:28:15 -0700 Subject: [PATCH] Futurize --stage1 changes --- atrcopy/__init__.py | 90 +++++++++++++++++----------------- atrcopy/ataridos.py | 9 ++-- atrcopy/cartridge.py | 9 ++-- atrcopy/diskimages.py | 9 ++-- atrcopy/dos33.py | 12 +++-- atrcopy/kboot.py | 5 +- atrcopy/mame.py | 9 ++-- atrcopy/parsers.py | 23 ++++----- atrcopy/segments.py | 13 +++-- atrcopy/spartados.py | 7 +-- atrcopy/utils.py | 7 +-- test/test_add_file.py | 3 +- test/test_ataridos.py | 5 +- test/test_cart.py | 3 +- test/test_create.py | 5 +- test/test_jsonpickle.py | 21 ++++---- test/test_kboot.py | 5 +- test/test_segment.py | 106 ++++++++++++++++++++-------------------- test/test_serialize.py | 5 +- 19 files changed, 185 insertions(+), 161 deletions(-) diff --git a/atrcopy/__init__.py b/atrcopy/__init__.py index 0c1c99f..b5f8127 100644 --- a/atrcopy/__init__.py +++ b/atrcopy/__init__.py @@ -1,3 +1,5 @@ +from __future__ import print_function +from __future__ import absolute_import import os import sys import zlib @@ -5,22 +7,22 @@ import zlib import logging log = logging.getLogger(__name__) -from _metadata import __version__ +from ._metadata import __version__ try: import numpy as np except ImportError: raise RuntimeError("atrcopy %s requires numpy" % __version__) -from errors import * -from ataridos import AtrHeader, AtariDosDiskImage, BootDiskImage, AtariDosFile, XexContainerSegment, get_xex, add_atr_header -from dos33 import Dos33DiskImage -from kboot import KBootImage, add_xexboot_header -from segments import SegmentData, SegmentSaver, DefaultSegment, EmptySegment, ObjSegment, RawSectorsSegment, SegmentedFileSegment, user_bit_mask, match_bit_mask, comment_bit_mask, data_style, selected_bit_mask, diff_bit_mask, not_user_bit_mask, interleave_segments, SegmentList, get_style_mask, get_style_bits -from spartados import SpartaDosDiskImage -from cartridge import A8CartHeader, AtariCartImage -from parsers import SegmentParser, DefaultSegmentParser, guess_parser_for_mime, guess_parser_for_system, iter_parsers, iter_known_segment_parsers, mime_parse_order -from utils import to_numpy, text_to_int +from .errors import * +from .ataridos import AtrHeader, AtariDosDiskImage, BootDiskImage, AtariDosFile, XexContainerSegment, get_xex, add_atr_header +from .dos33 import Dos33DiskImage +from .kboot import KBootImage, add_xexboot_header +from .segments import SegmentData, SegmentSaver, DefaultSegment, EmptySegment, ObjSegment, RawSectorsSegment, SegmentedFileSegment, user_bit_mask, match_bit_mask, comment_bit_mask, data_style, selected_bit_mask, diff_bit_mask, not_user_bit_mask, interleave_segments, SegmentList, get_style_mask, get_style_bits +from .spartados import SpartaDosDiskImage +from .cartridge import A8CartHeader, AtariCartImage +from .parsers import SegmentParser, DefaultSegmentParser, guess_parser_for_mime, guess_parser_for_system, iter_parsers, iter_known_segment_parsers, mime_parse_order +from .utils import to_numpy, text_to_int def process(image, dirent, options): @@ -42,38 +44,38 @@ def process(image, dirent, options): action = "DRY_RUN: %s" % action skip = True if options.extract: - print "%s: %s %s" % (dirent, action, outfilename) + print("%s: %s %s" % (dirent, action, outfilename)) if not skip: bytes = image.get_file(dirent) with open(outfilename, "wb") as fh: fh.write(bytes) else: - print dirent + print(dirent) def find_diskimage(filename): try: with open(filename, "rb") as fh: if options.verbose: - print "Loading file %s" % filename + print("Loading file %s" % filename) rawdata = SegmentData(fh.read()) parser = None for mime in mime_parse_order: if options.verbose: - print "Trying MIME type %s" % mime + print("Trying MIME type %s" % mime) parser = guess_parser_for_mime(mime, rawdata, options.verbose) if parser is None: continue if options.verbose: - print "Found parser %s" % parser.menu_name + print("Found parser %s" % parser.menu_name) break if parser is None: - print "%s: Unknown disk image type" % filename - except UnsupportedDiskImage, e: - print "%s: %s" % (filename, e) + print("%s: Unknown disk image type" % filename) + except UnsupportedDiskImage as e: + print("%s: %s" % (filename, e)) return None - except IOError, e: - print "%s: %s" % (filename, e) + except IOError as e: + print("%s: %s" % (filename, e)) return None else: parser.image.filename = filename @@ -88,7 +90,7 @@ def extract_files(image, files): try: dirent = image.find_dirent(name) except FileNotFound: - print "%s not in %s" % (name, image) + print("%s not in %s" % (name, image)) continue output = dirent.filename if options.lower: @@ -96,13 +98,13 @@ def extract_files(image, files): if not options.dry_run: data = image.get_file(dirent) if os.path.exists(output) and not options.force: - print "skipping %s, file exists. Use -f to overwrite" % output + print("skipping %s, file exists. Use -f to overwrite" % output) continue - print "extracting %s -> %s" % (name, output) + print("extracting %s -> %s" % (name, output)) with open(output, "wb") as fh: fh.write(data) else: - print "extracting %s -> %s" % (name, output) + print("extracting %s -> %s" % (name, output)) def save_file(image, name, filetype, data): @@ -111,11 +113,11 @@ def save_file(image, name, filetype, data): if options.force: image.delete_file(name) else: - print "skipping %s, use -f to overwrite" % (name) + print("skipping %s, use -f to overwrite" % (name)) return False except FileNotFound: pass - print "copying %s to %s" % (name, image.filename) + print("copying %s to %s" % (name, image.filename)) if not options.dry_run: image.write_file(name, filetype, data) return True @@ -141,9 +143,9 @@ def remove_files(image, files): try: dirent = image.find_dirent(name) except FileNotFound: - print "%s not in %s" % (name, image) + print("%s not in %s" % (name, image)) continue - print "removing %s from %s" % (name, image) + print("removing %s from %s" % (name, image)) if not options.dry_run: image.delete_file(name) changed = True @@ -163,7 +165,7 @@ def list_files(image, files, show_crc=False, show_metadata=False): extra = "" print("%s%s" % (dirent, extra)) if show_metadata: - print dirent.extra_metadata(image) + print(dirent.extra_metadata(image)) def crc_files(image, files): @@ -186,20 +188,20 @@ def assemble(image, source_files, data_files, obj_files, run_addr=""): for name in source_files: try: asm = pyatasm.Assemble(name) - except SyntaxError, e: + except SyntaxError as e: raise AtrError("Assembly error: %s" % e.msg) log.debug("Assembled %s into:" % name) for first, last, object_code in asm.segments: s = segments.add_segment(object_code, first) log.debug(" %s" % s.name) - print "adding %s from %s assembly" % (s, name) + print("adding %s from %s assembly" % (s, name)) for name in data_files: if "@" not in name: raise AtrError("Data files must include a load address specified with the @ char") name, addr = name.rsplit("@", 1) first = text_to_int(addr) log.debug("Adding data file %s at $%04x" % (name, first)) - subset = slice(0, sys.maxint) + subset = slice(0, sys.maxsize) if "[" in name and "]" in name: name, slicetext = name.rsplit("[", 1) if ":" in slicetext: @@ -224,11 +226,11 @@ def assemble(image, source_files, data_files, obj_files, run_addr=""): if parser and parser.image: for s in parser.segments: if s.start_addr > 0: - print "adding %s from %s" % (s, name) + print("adding %s from %s" % (s, name)) segments.add_segment(s.data, s.start_addr) if options.verbose: for s in segments: - print "%s - %04x)" % (str(s)[:-1], s.start_addr + len(s)) + print("%s - %04x)" % (str(s)[:-1], s.start_addr + len(s))) if run_addr: try: run_addr = text_to_int(run_addr) @@ -236,14 +238,14 @@ def assemble(image, source_files, data_files, obj_files, run_addr=""): run_addr = None file_data, filetype = image.create_executable_file_image(segments, run_addr) - print "total file size: $%x (%d) bytes" % (len(file_data), len(file_data)) + print("total file size: $%x (%d) bytes" % (len(file_data), len(file_data))) changed = save_file(image, options.output, filetype, file_data) if changed: image.save() def shred_image(image, value=0): - print "shredding: free sectors from %s filled with %d" % (image, value) + print("shredding: free sectors from %s filled with %d" % (image, value)) if not options.dry_run: image.shred() image.save() @@ -266,7 +268,7 @@ def get_template_path(rel_path="templates"): zippath, template_path = template_path.split(".zip/") template_path = os.path.normpath(os.path.join(root, template_path)) else: - print "App packager %s not yet supported for image paths!!!" + print("App packager %s not yet supported for image paths!!!") return template_path @@ -313,18 +315,18 @@ def create_image(template, name): import textwrap data, inf = get_template_data(template) - print "using %s template:\n %s" % (template, "\n ".join(textwrap.wrap(inf, 77))) + print("using %s template:\n %s" % (template, "\n ".join(textwrap.wrap(inf, 77)))) if not options.dry_run: if os.path.exists(name) and not options.force: - print "skipping %s, use -f to overwrite" % (name) + print("skipping %s, use -f to overwrite" % (name)) else: with open(name, "wb") as fh: fh.write(data) parser = find_diskimage(name) - print "created %s: %s" % (name, str(parser.image)) + print("created %s: %s" % (name, str(parser.image))) list_files(parser.image, []) else: - print "creating %s" % name + print("creating %s" % name) def run(): @@ -512,10 +514,10 @@ def run(): parser = find_diskimage(disk_image_name) if parser and parser.image: if command not in skip_diskimage_summary: - print "%s: %s" % (disk_image_name, parser.image) + print("%s: %s" % (disk_image_name, parser.image)) if command == "vtoc": vtoc = parser.image.get_vtoc_object() - print vtoc + print(vtoc) if options.clear_empty: shred_image(parser.image) elif command == "list": @@ -534,6 +536,6 @@ def run(): obj = options.obj[0] if options.obj else [] assemble(parser.image, asm, data, obj, options.run_addr) elif command == "segments": - print "\n".join([str(a) for a in parser.segments]) + print("\n".join([str(a) for a in parser.segments])) else: log.error("Invalid disk image: %s" % disk_image_name) diff --git a/atrcopy/ataridos.py b/atrcopy/ataridos.py index c508227..eb4e454 100644 --- a/atrcopy/ataridos.py +++ b/atrcopy/ataridos.py @@ -1,9 +1,10 @@ +from __future__ import absolute_import import numpy as np -from errors import * -from diskimages import DiskImageBase, BaseHeader -from segments import SegmentData, EmptySegment, ObjSegment, RawSectorsSegment, DefaultSegment, SegmentedFileSegment, SegmentSaver, get_style_bits -from utils import * +from .errors import * +from .diskimages import DiskImageBase, BaseHeader +from .segments import SegmentData, EmptySegment, ObjSegment, RawSectorsSegment, DefaultSegment, SegmentedFileSegment, SegmentSaver, get_style_bits +from .utils import * import logging log = logging.getLogger(__name__) diff --git a/atrcopy/cartridge.py b/atrcopy/cartridge.py index 61e5e41..b8bd323 100644 --- a/atrcopy/cartridge.py +++ b/atrcopy/cartridge.py @@ -1,11 +1,12 @@ +from __future__ import absolute_import from collections import defaultdict import numpy as np -from errors import * -from segments import SegmentData, EmptySegment, ObjSegment -from diskimages import DiskImageBase -from utils import to_numpy +from .errors import * +from .segments import SegmentData, EmptySegment, ObjSegment +from .diskimages import DiskImageBase +from .utils import to_numpy import logging log = logging.getLogger(__name__) diff --git a/atrcopy/diskimages.py b/atrcopy/diskimages.py index 794f436..b24ecf2 100644 --- a/atrcopy/diskimages.py +++ b/atrcopy/diskimages.py @@ -1,8 +1,9 @@ +from __future__ import absolute_import import numpy as np -from errors import * -from segments import SegmentData, EmptySegment, ObjSegment, RawSectorsSegment -from utils import * +from .errors import * +from .segments import SegmentData, EmptySegment, ObjSegment, RawSectorsSegment +from .utils import * import logging log = logging.getLogger(__name__) @@ -290,7 +291,7 @@ class DiskImageBase(object): for dirent in self.files: try: segment = self.get_file_segment(dirent) - except InvalidFile, e: + except InvalidFile as e: segment = EmptySegment(self.rawdata, name=dirent.filename, error=str(e)) segments.append(segment) return segments diff --git a/atrcopy/dos33.py b/atrcopy/dos33.py index b915657..b61104e 100644 --- a/atrcopy/dos33.py +++ b/atrcopy/dos33.py @@ -1,9 +1,11 @@ +from __future__ import print_function +from __future__ import absolute_import import numpy as np -from errors import * -from diskimages import BaseHeader, DiskImageBase -from utils import Directory, VTOC, WriteableSector, BaseSectorList, Dirent -from segments import DefaultSegment, EmptySegment, ObjSegment, RawTrackSectorSegment, SegmentSaver, get_style_bits, SegmentData +from .errors import * +from .diskimages import BaseHeader, DiskImageBase +from .utils import Directory, VTOC, WriteableSector, BaseSectorList, Dirent +from .segments import DefaultSegment, EmptySegment, ObjSegment, RawTrackSectorSegment, SegmentSaver, get_style_bits, SegmentData import logging log = logging.getLogger(__name__) @@ -624,7 +626,7 @@ class Dos33DiskImage(DiskImageBase): words[1] = size for s in all_segments: index = s.start_addr - origin + 4 - print "setting data for $%04x - $%04x at index $%04x" % (s.start_addr, s.start_addr + len(s), index) + print("setting data for $%04x - $%04x at index $%04x" % (s.start_addr, s.start_addr + len(s), index)) image[index:index + len(s)] = s.data return image, 'B' diff --git a/atrcopy/kboot.py b/atrcopy/kboot.py index 311b9c0..b8c18b7 100644 --- a/atrcopy/kboot.py +++ b/atrcopy/kboot.py @@ -1,7 +1,8 @@ +from __future__ import absolute_import import numpy as np -from errors import * -from ataridos import AtariDosDirent, AtariDosDiskImage, XexSegment +from .errors import * +from .ataridos import AtariDosDirent, AtariDosDiskImage, XexSegment class KBootDirent(AtariDosDirent): diff --git a/atrcopy/mame.py b/atrcopy/mame.py index 5d59486..12320f5 100644 --- a/atrcopy/mame.py +++ b/atrcopy/mame.py @@ -1,11 +1,12 @@ +from __future__ import absolute_import import zipfile import numpy as np -from errors import * -from segments import SegmentData, EmptySegment, ObjSegment -from diskimages import DiskImageBase -from utils import to_numpy +from .errors import * +from .segments import SegmentData, EmptySegment, ObjSegment +from .diskimages import DiskImageBase +from .utils import to_numpy import logging log = logging.getLogger(__name__) diff --git a/atrcopy/parsers.py b/atrcopy/parsers.py index 76fb83b..ece30a5 100644 --- a/atrcopy/parsers.py +++ b/atrcopy/parsers.py @@ -1,13 +1,14 @@ +from __future__ import absolute_import import numpy as np -from segments import SegmentData, DefaultSegment -from kboot import KBootImage -from ataridos import AtariDosDiskImage, BootDiskImage, AtariDosFile, XexContainerSegment -from spartados import SpartaDosDiskImage -from cartridge import AtariCartImage, get_known_carts -from mame import MameZipImage -from dos33 import Dos33DiskImage, ProdosDiskImage, Dos33BinFile -from errors import * +from .segments import SegmentData, DefaultSegment +from .kboot import KBootImage +from .ataridos import AtariDosDiskImage, BootDiskImage, AtariDosFile, XexContainerSegment +from .spartados import SpartaDosDiskImage +from .cartridge import AtariCartImage, get_known_carts +from .mame import MameZipImage +from .dos33 import Dos33DiskImage, ProdosDiskImage, Dos33BinFile +from .errors import * import logging log = logging.getLogger(__name__) @@ -60,7 +61,7 @@ class SegmentParser(object): self.image.parse_segments() except UnsupportedDiskImage: raise - except AtrError, e: + except AtrError as e: raise InvalidSegmentParser(e) self.segments.extend(self.image.segments) @@ -71,7 +72,7 @@ class SegmentParser(object): if self.strict: try: self.image.strict_check() - except AtrError, e: + except AtrError as e: raise InvalidSegmentParser(e) else: self.image.relaxed_check() @@ -147,7 +148,7 @@ def guess_parser_for_mime(mime, r, verbose=False): try: found = parser(r, True) break - except InvalidSegmentParser, e: + except InvalidSegmentParser as e: if verbose: log.info("parser isn't %s: %s" % (parser.__name__, str(e))) pass diff --git a/atrcopy/segments.py b/atrcopy/segments.py index f81e83f..8544628 100644 --- a/atrcopy/segments.py +++ b/atrcopy/segments.py @@ -1,11 +1,14 @@ +from __future__ import print_function +from __future__ import absolute_import import bisect import cStringIO import uuid import numpy as np -from errors import * -from utils import to_numpy, to_numpy_list +from .errors import * +from .utils import to_numpy, to_numpy_list +from functools import reduce user_bit_mask = 0x07 data_style = 0x1 @@ -1007,11 +1010,11 @@ class DefaultSegment(object): def compare_segment(self, other_segment): self.clear_style_bits(diff=True) diff = self.rawdata.data != other_segment.rawdata.data - print diff, diff.dtype + print(diff, diff.dtype) d = diff * np.uint8(diff_bit_mask) - print d + print(d) self.style |= (diff * np.uint8(diff_bit_mask)) - print "# entries", len(diff), "# diffs:", len(np.where(diff == True)[0]) + print("# entries", len(diff), "# diffs:", len(np.where(diff == True)[0])) class EmptySegment(DefaultSegment): diff --git a/atrcopy/spartados.py b/atrcopy/spartados.py index 04eb910..47c0348 100644 --- a/atrcopy/spartados.py +++ b/atrcopy/spartados.py @@ -1,8 +1,9 @@ +from __future__ import absolute_import import numpy as np -from errors import * -from ataridos import AtariDosDirent, AtariDosDiskImage, XexSegment -from segments import DefaultSegment, EmptySegment, ObjSegment, RawSectorsSegment, SegmentSaver +from .errors import * +from .ataridos import AtariDosDirent, AtariDosDiskImage, XexSegment +from .segments import DefaultSegment, EmptySegment, ObjSegment, RawSectorsSegment, SegmentSaver import logging log = logging.getLogger(__name__) diff --git a/atrcopy/utils.py b/atrcopy/utils.py index 014351c..786818c 100644 --- a/atrcopy/utils.py +++ b/atrcopy/utils.py @@ -1,8 +1,9 @@ +from __future__ import absolute_import import types import numpy as np -from errors import * +from .errors import * import logging log = logging.getLogger(__name__) @@ -15,9 +16,9 @@ except NameError: def to_numpy(value): if type(value) is np.ndarray: return value - elif type(value) is types.StringType: + elif type(value) is bytes: return np.fromstring(value, dtype=np.uint8) - elif type(value) is types.ListType: + elif type(value) is list: return np.asarray(value, dtype=np.uint8) raise TypeError("Can't convert to numpy data") diff --git a/test/test_add_file.py b/test/test_add_file.py index 1a2652e..a953041 100644 --- a/test/test_add_file.py +++ b/test/test_add_file.py @@ -1,3 +1,4 @@ +from __future__ import print_function import numpy as np from mock import * @@ -161,7 +162,7 @@ class TestDos33Image(BaseFilesystemModifyTest): if __name__ == "__main__": t = TestAtariDosSDImage() for name in dir(t): - print name + print(name) if name.startswith("test_"): t.setup() getattr(t, name)() diff --git a/test/test_ataridos.py b/test/test_ataridos.py index a7775cf..183eb96 100644 --- a/test/test_ataridos.py +++ b/test/test_ataridos.py @@ -1,3 +1,4 @@ +from __future__ import print_function from mock import * from atrcopy import SegmentData, AtariDosFile, InvalidBinaryFile, DefaultSegment, XexContainerSegment @@ -13,7 +14,7 @@ class TestAtariDosFile(object): container = XexContainerSegment(rawdata, 0) image = AtariDosFile(container.rawdata) image.parse_segments() - print image.segments + print(image.segments) assert len(image.segments) == 1 assert len(image.segments[0]) == 2 assert np.all(image.segments[0] == bytes[6:8]) @@ -23,7 +24,7 @@ class TestAtariDosFile(object): new_segment = DefaultSegment(rawdata[8:16]) new_segment[:] = 99 assert np.all(image.segments[0] == bytes[6:8]) - print new_segment[:] + print(new_segment[:]) assert np.all(new_segment[:] == 99) diff --git a/test/test_cart.py b/test/test_cart.py index c16383d..c5b1655 100644 --- a/test/test_cart.py +++ b/test/test_cart.py @@ -1,3 +1,4 @@ +from __future__ import print_function from mock import * from atrcopy import AtariCartImage, SegmentData, InvalidDiskImage @@ -73,7 +74,7 @@ class TestAtariCart(object): if __name__ == "__main__": - print "\n".join(mime_parse_order) + print("\n".join(mime_parse_order)) t = TestAtariCart() t.setup() diff --git a/test/test_create.py b/test/test_create.py index 10a8d51..6beaa47 100644 --- a/test/test_create.py +++ b/test/test_create.py @@ -1,3 +1,4 @@ +from __future__ import print_function import numpy as np from mock import * @@ -42,8 +43,8 @@ class BaseCreateTest(object): file_data, filetype = image.create_executable_file_image(segments, run_addr) except TypeError: file_data, filetype = image.create_executable_file_image(segments, run_addr) - print image - print file_data, filetype + print(image) + print(file_data, filetype) assert len(file_data) == expected @pytest.mark.parametrize("sample_file", ["../test_data/dos_sd_test1.atr"]) diff --git a/test/test_jsonpickle.py b/test/test_jsonpickle.py index 7038854..3c09dc5 100644 --- a/test/test_jsonpickle.py +++ b/test/test_jsonpickle.py @@ -1,3 +1,4 @@ +from __future__ import print_function import os import pytest @@ -14,33 +15,33 @@ class TestJsonPickle(object): self.segment = DefaultSegment(SegmentData(data)) def test_simple(self): - print self.segment.byte_bounds_offset(), len(self.segment) + print(self.segment.byte_bounds_offset(), len(self.segment)) r2 = self.segment.rawdata[100:400] s2 = DefaultSegment(r2) - print s2.byte_bounds_offset(), len(s2), s2.__getstate__() + print(s2.byte_bounds_offset(), len(s2), s2.__getstate__()) r3 = s2.rawdata[100:200] s3 = DefaultSegment(r3) - print s3.byte_bounds_offset(), len(s3), s3.__getstate__() + print(s3.byte_bounds_offset(), len(s3), s3.__getstate__()) order = list(reversed(range(700, 800))) r4 = self.segment.rawdata.get_indexed(order) s4 = DefaultSegment(r4) - print s4.byte_bounds_offset(), len(s4), s4.__getstate__() + print(s4.byte_bounds_offset(), len(s4), s4.__getstate__()) slist = [s2, s3, s4] for s in slist: - print s + print(s) j = jsonpickle.dumps(slist) - print j + print(j) slist2 = jsonpickle.loads(j) - print slist2 + print(slist2) for s in slist2: s.reconstruct_raw(self.segment.rawdata) - print s + print(s) for orig, rebuilt in zip(slist, slist2): - print "orig", orig.data[:] - print "rebuilt", rebuilt.data[:] + print("orig", orig.data[:]) + print("rebuilt", rebuilt.data[:]) assert np.array_equal(orig[:], rebuilt[:]) if __name__ == "__main__": diff --git a/test/test_kboot.py b/test/test_kboot.py index 763c9a8..d17ecb5 100644 --- a/test/test_kboot.py +++ b/test/test_kboot.py @@ -1,3 +1,4 @@ +from __future__ import print_function import os import numpy as np @@ -21,9 +22,9 @@ class TestKbootHeader(object): rawdata = SegmentData(bytes) newatr = KBootImage(rawdata) image = newatr.bytes - print image[0:16] + print(image[0:16]) paragraphs = image_size / 16 - print newatr.header, paragraphs + print(newatr.header, paragraphs) assert int(image[2:4].view(dtype='