diff --git a/atrcopy/__init__.py b/atrcopy/__init__.py index f4f3012..8fe64b3 100644 --- a/atrcopy/__init__.py +++ b/atrcopy/__init__.py @@ -13,7 +13,7 @@ try: except ImportError: raise RuntimeError("atrcopy %s requires numpy" % __version__) -from .errors import * +from . import errors from .ataridos import AtrHeader, AtariDosDiskImage, BootDiskImage, AtariDosFile, XexContainerSegment, get_xex, add_atr_header from .dos33 import Dos33DiskImage from .kboot import KBootImage, add_xexboot_header @@ -74,7 +74,7 @@ def find_diskimage(filename): break if parser is None: print("%s: Unknown disk image type" % filename) - except UnsupportedDiskImage as e: + except errors.UnsupportedDiskImage as e: print("%s: %s" % (filename, e)) return None except IOError as e: @@ -92,7 +92,7 @@ def extract_files(image, files): for name in files: try: dirent = image.find_dirent(name) - except FileNotFound: + except errors.FileNotFound: print("%s not in %s" % (name, image)) continue output = dirent.filename @@ -118,7 +118,7 @@ def save_file(image, name, filetype, data): else: print("skipping %s, use -f to overwrite" % (name)) return False - except FileNotFound: + except errors.FileNotFound: pass print("copying %s to %s" % (name, image.filename)) if not options.dry_run: @@ -145,7 +145,7 @@ def remove_files(image, files): for name in files: try: dirent = image.find_dirent(name) - except FileNotFound: + except errors.FileNotFound: print("%s not in %s" % (name, image)) continue print("removing %s from %s" % (name, image)) @@ -185,14 +185,14 @@ def assemble_segments(source_files, data_files, obj_files, run_addr=""): try: import pyatasm except ImportError: - raise AtrError("Please install pyatasm to compile code.") + raise errors.AtrError("Please install pyatasm to compile code.") changed = False segments = SegmentList() for name in source_files: try: asm = pyatasm.Assemble(name) except SyntaxError as e: - raise AtrError("Assembly error: %s" % e.msg) + raise errors.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) @@ -200,7 +200,7 @@ def assemble_segments(source_files, data_files, obj_files, run_addr=""): 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") + raise errors.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)) @@ -254,7 +254,7 @@ def assemble(image, source_files, data_files, obj_files, run_addr=""): def boot_image(image_name, source_files, data_files, obj_files, run_addr=""): try: image_cls = parsers_for_filename(image_name)[0] - except InvalidDiskImage as e: + except errors.InvalidDiskImage as e: print("%s: %s" % (image_name, e)) return None segments, run_addr = assemble_segments(source_files, data_files, obj_files, run_addr) @@ -339,16 +339,16 @@ def get_template_info(): def get_template_data(template): possibilities = get_template_images(template) if not possibilities: - raise InvalidDiskImage("Unknown template disk image %s" % template) + raise errors.InvalidDiskImage("Unknown template disk image %s" % template) if len(possibilities) > 1: - raise InvalidDiskImage("Name %s is ambiguous (%d matches: %s)" % (template, len(possibilities), ", ".join(sorted(possibilities.keys())))) + raise errors.InvalidDiskImage("Name %s is ambiguous (%d matches: %s)" % (template, len(possibilities), ", ".join(sorted(possibilities.keys())))) name, inf = possibilities.popitem() path = inf['path'] try: with open(path, "rb") as fh: data = fh.read() except IOError: - raise InvalidDiskImage("Failed reading template file %s" % path) + raise errors.InvalidDiskImage("Failed reading template file %s" % path) return data, inf @@ -357,7 +357,7 @@ def create_image(template, name): try: data, inf = get_template_data(template) - except InvalidDiskImage as e: + except errors.InvalidDiskImage as e: info = get_template_info() print("Error: %s\n\n%s" % (e, info)) return diff --git a/atrcopy/ataridos.py b/atrcopy/ataridos.py index d1dc26f..ba4403c 100644 --- a/atrcopy/ataridos.py +++ b/atrcopy/ataridos.py @@ -1,6 +1,6 @@ import numpy as np -from .errors import * +from . import errors from .diskimages import DiskImageBase, BaseHeader from .segments import SegmentData, EmptySegment, ObjSegment, RawSectorsSegment, DefaultSegment, SegmentedFileSegment, SegmentSaver, get_style_bits from .utils import * @@ -197,7 +197,7 @@ class AtariDosDirent(Dirent): def start_read(self, image): if not self.is_sane: - raise InvalidDirent("Invalid directory entry '%s'" % str(self)) + raise errors.InvalidDirent("Invalid directory entry '%s'" % str(self)) self.current_sector = self.starting_sector self.current_read = self.num_sectors self.sectors_seen = set() @@ -210,11 +210,11 @@ class AtariDosDirent(Dirent): def process_raw_sector(self, image, raw): file_num = raw[-3] >> 2 if file_num != self.file_num: - raise FileNumberMismatchError164("Expecting file %d, found %d" % (self.file_num, file_num)) + raise errors.FileNumberMismatchError164("Expecting file %d, found %d" % (self.file_num, file_num)) self.sectors_seen.add(self.current_sector) next_sector = ((raw[-3] & 0x3) << 8) + raw[-2] if next_sector in self.sectors_seen: - raise InvalidFile("Bad sector pointer data: attempting to reread sector %d" % next_sector) + raise errors.InvalidFile("Bad sector pointer data: attempting to reread sector %d" % next_sector) self.current_sector = next_sector num_bytes = raw[-1] return raw[0:num_bytes], num_bytes @@ -299,7 +299,7 @@ class AtariDosFile(object): first = False continue elif first: - raise InvalidBinaryFile("Object file doesn't start with 0xffff") + raise errors.InvalidBinaryFile("Object file doesn't start with 0xffff") if _xd: log.debug("header parsing: header=0x%x" % header) if len(b[pos:pos + 4]) < 4: self.segments.append(ObjSegment(r[pos:pos + 4], 0, 0, 0, len(b[pos:pos + 4]), "Short Segment Header")) @@ -307,7 +307,7 @@ class AtariDosFile(object): start, end = b[pos:pos + 4].view(dtype=' self.calc_vtoc_code(): - raise InvalidDiskImage("Invalid number of VTOC sectors: %d" % num) + raise errors.InvalidDiskImage("Invalid number of VTOC sectors: %d" % num) self.total_sectors = values[1] self.unused_sectors = values[2] @@ -657,7 +657,7 @@ class AtariDosDiskImage(DiskImageBase): try: binary = AtariDosFile(segment.rawdata) segments_out.extend(binary.segments) - except InvalidBinaryFile: + except errors.InvalidBinaryFile: log.debug("%s not a binary file; skipping segment generation" % str(segment)) return segments_out @@ -678,7 +678,7 @@ class BootDiskImage(AtariDosDiskImage): i = self.header.header_offset flag = b[i:i + 2].view(dtype=' max_sectors or nsec < 1: - raise InvalidDiskImage("Number of boot sectors out of range (tried %d, max=%d" % (nsec, max_sectors)) + raise errors.InvalidDiskImage("Number of boot sectors out of range (tried %d, max=%d" % (nsec, max_sectors)) if bload > (0xc000 - (nsec * self.header.sector_size)): - raise InvalidDiskImage("Bad boot load address") + raise errors.InvalidDiskImage("Bad boot load address") def get_boot_sector_info(self): pass @@ -764,7 +764,7 @@ def get_xex(segments, run_addr=None): found = True break if not found: - raise InvalidBinaryFile("Run address points outside data segments") + raise errors.InvalidBinaryFile("Run address points outside data segments") else: run_addr = segments[0].origin words[0] = run_addr diff --git a/atrcopy/cartridge.py b/atrcopy/cartridge.py index 6b780a4..425b6db 100644 --- a/atrcopy/cartridge.py +++ b/atrcopy/cartridge.py @@ -2,7 +2,7 @@ from collections import defaultdict import numpy as np -from .errors import * +from . import errors from .segments import SegmentData, EmptySegment, ObjSegment from .diskimages import DiskImageBase from .utils import to_numpy @@ -108,7 +108,7 @@ def get_cart(cart_type): try: return known_cart_types[known_cart_type_map[cart_type]] except KeyError: - raise InvalidDiskImage("Unsupported cart type %d" % cart_type) + raise errors.InvalidDiskImage("Unsupported cart type %d" % cart_type) class A8CartHeader(object): @@ -146,13 +146,13 @@ class A8CartHeader(object): if len(bytes) == 16: values = bytes.view(dtype=self.format)[0] if values[0] != b'CART': - raise InvalidCartHeader + raise errors.InvalidCartHeader self.cart_type = int(values[1]) self.crc = int(values[2]) self.header_offset = 16 self.set_type(self.cart_type) else: - raise InvalidCartHeader + raise errors.InvalidCartHeader def __str__(self): return "%s Cartridge (atari800 type=%d size=%d, %d banks, crc=%d)" % (self.cart_name, self.cart_type, self.cart_size, self.bank_size, self.crc) @@ -208,13 +208,13 @@ class AtariCartImage(DiskImageBase): data = self.bytes[0:16] try: self.header = A8CartHeader(data) - except InvalidCartHeader: + except errors.InvalidCartHeader: self.header = A8CartHeader() self.header.set_type(self.cart_type) def strict_check(self): if self.header.cart_type != self.cart_type: - raise InvalidDiskImage("Cart type doesn't match type defined in header") + raise errors.InvalidDiskImage("Cart type doesn't match type defined in header") def relaxed_check(self): if self.header.cart_type != self.cart_type: @@ -229,9 +229,9 @@ class AtariCartImage(DiskImageBase): c = get_cart(self.cart_type) log.debug("checking type=%d, k=%d, rem=%d for %s, %s" % (self.cart_type, k, rem, c[1], c[2])) if rem > 0: - raise InvalidDiskImage("Cart not multiple of 1K") + raise errors.InvalidDiskImage("Cart not multiple of 1K") if k != c[2]: - raise InvalidDiskImage("Image size %d doesn't match cart type %d size %d" % (k, self.cart_type, c[2])) + raise errors.InvalidDiskImage("Image size %d doesn't match cart type %d size %d" % (k, self.cart_type, c[2])) def parse_segments(self): r = self.rawdata diff --git a/atrcopy/diskimages.py b/atrcopy/diskimages.py index 19afc33..be6dea0 100644 --- a/atrcopy/diskimages.py +++ b/atrcopy/diskimages.py @@ -1,6 +1,6 @@ import numpy as np -from .errors import * +from . import errors from .segments import SegmentData, EmptySegment, ObjSegment, RawSectorsSegment from .utils import * @@ -80,7 +80,7 @@ class BaseHeader(object): return track, sector def check_size(self, size): - raise InvalidDiskImage("BaseHeader subclasses need custom checks for size") + raise errors.InvalidDiskImage("BaseHeader subclasses need custom checks for size") def strict_check(self, image): pass @@ -168,12 +168,12 @@ class DiskImageBase(object): @classmethod def new_header(cls, diskimage, format="ATR"): - raise NotImplementedError + raise errors.NotImplementedError def as_new_format(self, format="ATR"): """ Create a new disk image in the specified format """ - raise NotImplementedError + raise errors.NotImplementedError def save(self, filename=""): if not filename: @@ -192,7 +192,7 @@ class DiskImageBase(object): def check_sane(self): if not self.all_sane: - raise InvalidDiskImage("Invalid directory entries; may be boot disk") + raise errors.InvalidDiskImage("Invalid directory entries; may be boot disk") def read_header(self): return BaseHeader() @@ -277,7 +277,7 @@ class DiskImageBase(object): for dirent in self.files: if filename == dirent.filename: return dirent - raise FileNotFound("%s not found on disk" % str(filename)) + raise errors.FileNotFound("%s not found on disk" % str(filename)) def find_file(self, filename): dirent = self.find_dirent(filename) @@ -295,17 +295,17 @@ class DiskImageBase(object): for dirent in self.files: try: segment = self.get_file_segment(dirent) - except InvalidFile as e: + except errors.InvalidFile as e: segment = EmptySegment(self.rawdata, name=dirent.filename, error=str(e)) segments.append(segment) return segments def create_executable_file_image(self, segments, run_addr=None): - raise NotImplementedError + raise errors.NotImplementedError @classmethod def create_boot_image(self, segments, run_addr=None): - raise NotImplementedError + raise errors.NotImplementedError # file writing methods @@ -341,7 +341,7 @@ class DiskImageBase(object): self.write_sector_list(sector_list) self.write_sector_list(vtoc) self.write_sector_list(directory) - except AtrError: + except errors.AtrError: self.rollback_transaction(state) raise finally: @@ -375,7 +375,7 @@ class DiskImageBase(object): directory.remove_dirent(self, dirent, vtoc, sector_list) self.write_sector_list(vtoc) self.write_sector_list(directory) - except AtrError: + except errors.AtrError: self.rollback_transaction(state) raise finally: @@ -388,7 +388,7 @@ class DiskImageBase(object): for sector_num, pos, size in vtoc.iter_free_sectors(): if _xd: log.debug("shredding: sector %s at %d, fill value=%d" % (sector_num, pos, fill_value)) self.bytes[pos:pos + size] = fill_value - except AtrError: + except errors.AtrError: self.rollback_transaction(state) raise finally: diff --git a/atrcopy/dos33.py b/atrcopy/dos33.py index 10ae41f..1a23dd5 100644 --- a/atrcopy/dos33.py +++ b/atrcopy/dos33.py @@ -1,6 +1,6 @@ import numpy as np -from .errors import * +from . import errors 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 @@ -320,7 +320,7 @@ class Dos33Dirent(Dirent): def start_read(self, image): if not self.is_sane: - raise InvalidDirent("Invalid directory entry '%s'" % str(self)) + raise errors.InvalidDirent("Invalid directory entry '%s'" % str(self)) self.get_track_sector_list(image) if _xd: log.debug("start_read: %s, t/s list: %s" % (str(self), str(self.sector_map))) self.current_sector_index = 0 @@ -369,7 +369,7 @@ class Dos33Header(BaseHeader): def check_size(self, size): if size != 143360: - raise InvalidDiskImage("Incorrect size for DOS 3.3 image") + raise errors.InvalidDiskImage("Incorrect size for DOS 3.3 image") self.image_size = size self.first_vtoc = 17 * 16 self.num_vtoc = 1 @@ -408,7 +408,7 @@ class Dos33DiskImage(DiskImageBase): data, style = self.get_sectors(0) magic = data[0:4] if (magic == [1, 56, 176, 3]).all(): - raise InvalidDiskImage("ProDOS format found; not DOS 3.3 image") + raise errors.InvalidDiskImage("ProDOS format found; not DOS 3.3 image") swap_order = False data, style = self.get_sectors(self.header.first_vtoc) if data[3] == 3: @@ -418,7 +418,7 @@ class Dos33DiskImage(DiskImageBase): log.warning("DOS 3.3 byte swap needed!") swap_order = True else: - raise InvalidDiskImage("Invalid VTOC location for DOS 3.3") + raise errors.InvalidDiskImage("Invalid VTOC location for DOS 3.3") vtoc_type = np.dtype([ @@ -563,7 +563,7 @@ class Dos33DiskImage(DiskImageBase): next_sector = self.header.sector_from_track(raw[1], raw[2]) if _xd: log.debug("checking catalog sector %d, next catalog sector: %d" % (sector_num, next_sector)) if next_sector == 0: - raise NoSpaceInDirectory("No space left in catalog") + raise errors.NoSpaceInDirectory("No space left in catalog") return sector_num, next_sector def get_file_segment(self, dirent): @@ -609,7 +609,7 @@ class Dos33DiskImage(DiskImageBase): found = True break if not found: - raise InvalidBinaryFile("Run address points outside data segments") + raise errors.InvalidBinaryFile("Run address points outside data segments") origin -= 3 hi, lo = divmod(run_addr, 256) raw = SegmentData([0x4c, lo, hi]) @@ -708,7 +708,7 @@ class ProdosDiskImage(DiskImageBase): # https://github.com/RasppleII/a2server but it seems that # more magic bytes might be acceptable? - #raise InvalidDiskImage("No ProDOS header info found") + #raise errors.InvalidDiskImage("No ProDOS header info found") pass - raise UnsupportedDiskImage("ProDOS format found but not supported") - raise InvalidDiskImage("Not ProDOS format") + raise errors.UnsupportedDiskImage("ProDOS format found but not supported") + raise errors.InvalidDiskImage("Not ProDOS format") diff --git a/atrcopy/kboot.py b/atrcopy/kboot.py index 56e7a0e..2bef847 100644 --- a/atrcopy/kboot.py +++ b/atrcopy/kboot.py @@ -1,6 +1,6 @@ import numpy as np -from .errors import * +from . import errors from .ataridos import AtariDosDirent, AtariDosDiskImage, XexSegment, get_xex from .segments import SegmentData @@ -41,7 +41,7 @@ class KBootImage(AtariDosDiskImage): def check_sane(self): if not self.all_sane: - raise InvalidDiskImage("Doesn't seem to be KBoot header") + raise errors.InvalidDiskImage("Doesn't seem to be KBoot header") def get_vtoc(self): pass diff --git a/atrcopy/mame.py b/atrcopy/mame.py index 76f8ef9..370849a 100644 --- a/atrcopy/mame.py +++ b/atrcopy/mame.py @@ -2,7 +2,7 @@ import zipfile import numpy as np -from .errors import * +from . import errors from .segments import SegmentData, EmptySegment, ObjSegment from .diskimages import DiskImageBase from .utils import to_numpy @@ -20,7 +20,7 @@ class MameZipImage(DiskImageBase): self.check_zip_size(zf) self.create_rawdata(zf) else: - raise InvalidDiskImage("Not a MAME zip file") + raise errors.InvalidDiskImage("Not a MAME zip file") DiskImageBase.__init__(self, self.rawdata, filename) def __str__(self): @@ -39,7 +39,7 @@ class MameZipImage(DiskImageBase): for item in zf.infolist(): _, r = divmod(item.file_size, 16) if r > 0: - raise InvalidDiskImage("zip entry not 16 byte multiple") + raise errors.InvalidDiskImage("zip entry not 16 byte multiple") def create_rawdata(self, zf): roms = [] diff --git a/atrcopy/parsers.py b/atrcopy/parsers.py index 7620714..ff55843 100644 --- a/atrcopy/parsers.py +++ b/atrcopy/parsers.py @@ -8,7 +8,7 @@ from .cartridge import AtariCartImage, get_known_carts from .mame import MameZipImage from .dos33 import Dos33DiskImage, ProdosDiskImage, Dos33BinFile from .standard_delivery import StandardDeliveryImage -from .errors import * +from . import errors from .magic import guess_detail_for_mime import logging @@ -70,10 +70,10 @@ class SegmentParser(object): self.image = self.get_image(r) self.check_image() self.image.parse_segments() - except UnsupportedDiskImage: + except errors.UnsupportedDiskImage: raise - except AtrError as e: - raise InvalidSegmentParser(e) + except errors.AtrError as e: + raise errors.InvalidSegmentParser(e) self.segments.extend(self.image.segments) def get_image(self, r): @@ -83,8 +83,8 @@ class SegmentParser(object): if self.strict: try: self.image.strict_check() - except AtrError as e: - raise InvalidSegmentParser(e) + except errors.AtrError as e: + raise errors.InvalidSegmentParser(e) else: self.image.relaxed_check() @@ -164,7 +164,7 @@ def guess_parser_for_mime(mime, r, verbose=False): try: found = parser(r, True) break - except InvalidSegmentParser as e: + except errors.InvalidSegmentParser as e: if verbose: log.info("parser isn't %s: %s" % (parser.__name__, str(e))) pass @@ -207,7 +207,7 @@ def parsers_for_filename(name): _, name = name.rsplit(".", 1) except ValueError: pass - raise InvalidDiskImage("no disk image formats that match '%s'" % name) + raise errors.InvalidDiskImage("no disk image formats that match '%s'" % name) return matches diff --git a/atrcopy/segments.py b/atrcopy/segments.py index fda0ff3..37f945c 100644 --- a/atrcopy/segments.py +++ b/atrcopy/segments.py @@ -3,7 +3,7 @@ import io import numpy as np -from .errors import * +from . import errors from .utils import to_numpy, to_numpy_list, uuid from functools import reduce @@ -194,7 +194,7 @@ class SegmentData(object): newsize = len(base_raw) oldsize = len(self.data_base) if newsize < oldsize: - raise NotImplementedError("Can't truncate yet") + raise errors.NotImplementedError("Can't truncate yet") if self.is_indexed: self.data.np_data = base_raw.data self.data.base = base_raw.data.base diff --git a/atrcopy/spartados.py b/atrcopy/spartados.py index a3f501e..abd749d 100644 --- a/atrcopy/spartados.py +++ b/atrcopy/spartados.py @@ -1,6 +1,6 @@ import numpy as np -from .errors import * +from . import errors from .ataridos import AtariDosDirent, AtariDosDiskImage, XexSegment from .segments import DefaultSegment, EmptySegment, ObjSegment, RawSectorsSegment, SegmentSaver @@ -90,7 +90,7 @@ class SpartaDosDirent(AtariDosDirent): def start_read(self, image): if not self.is_sane: log.debug("Invalid directory entry '%s', starting_sector=%s" % (str(self), self.starting_sector)) - raise InvalidDirent("Invalid directory entry '%s'" % str(self)) + raise errors.InvalidDirent("Invalid directory entry '%s'" % str(self)) self.sector_map = image.get_sector_map(self.starting_sector) self.sector_map_index = 0 self.length_remaining = self.length @@ -159,7 +159,7 @@ class SpartaDosDiskImage(AtariDosDiskImage): num = self.header.max_sectors self.is_sane = self.total_sectors == num and values['first_free'] <= num and self.first_bitmap <= num and self.root_dir <= num and self.fs_version in [0x11, 0x20, 0x21] and self.sector_size != -1 if not self.is_sane: - raise InvalidDiskImage("Invalid SpartaDos parameters in boot header") + raise errors.InvalidDiskImage("Invalid SpartaDos parameters in boot header") def get_vtoc(self): pass diff --git a/atrcopy/standard_delivery.py b/atrcopy/standard_delivery.py index 93bbbf6..fe2a2f1 100644 --- a/atrcopy/standard_delivery.py +++ b/atrcopy/standard_delivery.py @@ -1,6 +1,6 @@ import numpy as np -from .errors import * +from . import errors from .segments import SegmentData from .diskimages import BaseHeader, DiskImageBase @@ -20,14 +20,14 @@ class StandardDeliveryHeader(BaseHeader): if np.all(data == (0x01, 0xa8, 0xee, 0x06, 0x08)): log.debug("Found 48k loader") else: - raise InvalidDiskImage("No %s boot header" % self.file_format) + raise errors.InvalidDiskImage("No %s boot header" % self.file_format) def __str__(self): return "Standard Delivery Boot Disk (size=%d (%dx%dB)" % (self.file_format, self.image_size, self.max_sectors, self.sector_size) def check_size(self, size): if size != 143360: - raise InvalidDiskImage("Incorrect size for Standard Delivery image") + raise errors.InvalidDiskImage("Incorrect size for Standard Delivery image") self.image_size = size self.tracks_per_disk = 35 self.sectors_per_track = 16 diff --git a/atrcopy/utils.py b/atrcopy/utils.py index 0a1e6dc..f3f4419 100644 --- a/atrcopy/utils.py +++ b/atrcopy/utils.py @@ -3,7 +3,7 @@ import uuid as stdlib_uuid import numpy as np -from .errors import * +from . import errors import logging log = logging.getLogger(__name__) @@ -159,28 +159,28 @@ class Dirent(object): self.file_num = file_num def __eq__(self, other): - raise NotImplementedError + raise errors.NotImplementedError def extra_metadata(self, image): - raise NotImplementedError + raise errors.NotImplementedError def mark_deleted(self): - raise NotImplementedError + raise errors.NotImplementedError def parse_raw_dirent(self, image, bytes): - raise NotImplementedError + raise errors.NotImplementedError def encode_dirent(self): - raise NotImplementedError + raise errors.NotImplementedError def get_sectors_in_vtoc(self, image): - raise NotImplementedError + raise errors.NotImplementedError def start_read(self, image): - raise NotImplementedError + raise errors.NotImplementedError def read_sector(self, image): - raise NotImplementedError + raise errors.NotImplementedError class Directory(BaseSectorList): @@ -205,7 +205,7 @@ class Directory(BaseSectorList): return i used.add(i) if self.num_dirents > 0 and (len(used) >= self.num_dirents): - raise NoSpaceInDirectory() + raise errors.NoSpaceInDirectory() i += 1 else: i = 0 @@ -229,7 +229,7 @@ class Directory(BaseSectorList): for dirent in list(self.dirents.values()): if filename == dirent.filename: return dirent - raise FileNotFound("%s not found on disk" % filename) + raise errors.FileNotFound("%s not found on disk" % filename) def save_dirent(self, image, dirent, vtoc, sector_list): vtoc.assign_sector_numbers(dirent, sector_list) @@ -244,7 +244,7 @@ class Directory(BaseSectorList): @property def dirent_class(self): - raise NotImplementedError + raise errors.NotImplementedError def calc_sectors(self, image): self.sectors = [] @@ -270,10 +270,10 @@ class Directory(BaseSectorList): return self.sector_class(self.sector_size) def encode_empty(self): - raise NotImplementedError + raise errors.NotImplementedError def encode_dirent(self, dirent): - raise NotImplementedError + raise errors.NotImplementedError def store_encoded(self, data): while True: @@ -291,7 +291,7 @@ class Directory(BaseSectorList): self.set_sector_numbers(image) def set_sector_numbers(self, image): - raise NotImplementedError + raise errors.NotImplementedError class VTOC(BaseSectorList): @@ -317,7 +317,7 @@ class VTOC(BaseSectorList): yield i, pos, size def parse_segments(self, segments): - raise NotImplementedError + raise errors.NotImplementedError def assign_sector_numbers(self, dirent, sector_list): """ Map out the sectors and link the sectors together @@ -328,7 +328,7 @@ class VTOC(BaseSectorList): num = len(sector_list) order = self.reserve_space(num) if len(order) != num: - raise InvalidFile("VTOC reserved space for %d sectors. Sectors needed: %d" % (len(order), num)) + raise errors.InvalidFile("VTOC reserved space for %d sectors. Sectors needed: %d" % (len(order), num)) file_length = 0 last_sector = None for sector, sector_num in zip(sector_list.sectors, order): @@ -357,10 +357,10 @@ class VTOC(BaseSectorList): if _xd: log.debug("Found sector %d free" % num) self.sector_map[num] = 0 return num - raise NotEnoughSpaceOnDisk("No space left in VTOC") + raise errors.NotEnoughSpaceOnDisk("No space left in VTOC") def calc_bitmap(self): - raise NotImplementedError + raise errors.NotImplementedError def free_sector_list(self, sector_list): for sector in sector_list: diff --git a/test/test_add_file.py b/test/test_add_file.py index 5c69c51..6458a48 100644 --- a/test/test_add_file.py +++ b/test/test_add_file.py @@ -4,8 +4,8 @@ import numpy as np from mock import * -from atrcopy import SegmentData, AtariDosDiskImage, Dos33DiskImage,InvalidBinaryFile -from atrcopy.errors import * +from atrcopy import SegmentData, AtariDosDiskImage, Dos33DiskImage +from atrcopy import errors class BaseFilesystemModifyTest(object): @@ -85,7 +85,7 @@ class BaseFilesystemModifyTest(object): data = np.arange(50*1024, dtype=np.uint8) self.image.write_file("RAMP50K.BIN", None, data) assert len(self.image.files) == self.num_files_in_sample + 1 - with pytest.raises(NotEnoughSpaceOnDisk): + with pytest.raises(errors.NotEnoughSpaceOnDisk): huge = np.arange(500*1024, dtype=np.uint8) self.image.write_file("RAMP500K.BIN", None, huge) assert len(self.image.files) == self.num_files_in_sample + 1 diff --git a/test/test_ataridos.py b/test/test_ataridos.py index 5940597..b5ab349 100644 --- a/test/test_ataridos.py +++ b/test/test_ataridos.py @@ -2,7 +2,8 @@ from __future__ import print_function from builtins import object from mock import * -from atrcopy import SegmentData, AtariDosFile, InvalidBinaryFile, DefaultSegment, XexContainerSegment +from atrcopy import SegmentData, AtariDosFile, DefaultSegment, XexContainerSegment, errors + class TestAtariDosFile(object): @@ -41,7 +42,7 @@ class TestAtariDosFile(object): bytes = [0xff, 0xff, 0x00, 0x60, 0x00, 0x00, 1, 2] rawdata = SegmentData(bytes) image = AtariDosFile(rawdata) - with pytest.raises(InvalidBinaryFile): + with pytest.raises(errors.InvalidBinaryFile): image.parse_segments() diff --git a/test/test_cart.py b/test/test_cart.py index bc104b7..33b8ff9 100644 --- a/test/test_cart.py +++ b/test/test_cart.py @@ -3,7 +3,8 @@ from __future__ import division from builtins import object from mock import * -from atrcopy import AtariCartImage, SegmentData, InvalidDiskImage +from atrcopy import AtariCartImage, SegmentData +from atrcopy import errors class TestAtariCart(object): @@ -60,16 +61,16 @@ class TestAtariCart(object): # check for error because invalid data in cart image itself data = self.get_cart(k_size, 1337) rawdata = SegmentData(data) - with pytest.raises(InvalidDiskImage): + with pytest.raises(errors.InvalidDiskImage): image = AtariCartImage(rawdata, 1337) - with pytest.raises(InvalidDiskImage): + with pytest.raises(errors.InvalidDiskImage): image = AtariCartImage(rawdata, 12) # check for error with valid cart image, but invalid cart type supplied # to the image parser data = self.get_cart(k_size, 12) rawdata = SegmentData(data) - with pytest.raises(InvalidDiskImage): + with pytest.raises(errors.InvalidDiskImage): image = AtariCartImage(rawdata, 1337) diff --git a/test/test_create.py b/test/test_create.py index 1f03f25..3e1b70b 100644 --- a/test/test_create.py +++ b/test/test_create.py @@ -4,8 +4,8 @@ import numpy as np from mock import * -from atrcopy import SegmentData, AtariDosDiskImage, Dos33DiskImage,InvalidBinaryFile, DefaultSegment -from atrcopy.errors import * +from atrcopy import SegmentData, AtariDosDiskImage, Dos33DiskImage, DefaultSegment +from atrcopy import errors def get_image(file_name, diskimage_type): @@ -39,8 +39,8 @@ class BaseCreateTest(object): image = get_image(sample_file, diskimage_type) segments = self.get_exe_segments() try: - _ = issubclass(AtrError, expected) - with pytest.raises(InvalidBinaryFile) as e: + _ = issubclass(errors.AtrError, expected) + with pytest.raises(errors.InvalidBinaryFile) as e: file_data, filetype = image.create_executable_file_image(segments, run_addr) except TypeError: file_data, filetype = image.create_executable_file_image(segments, run_addr) @@ -53,11 +53,11 @@ class TestAtariDosSDImage(BaseCreateTest): diskimage_type = AtariDosDiskImage @pytest.mark.parametrize("run_addr,expected", [ - (0x2000, InvalidBinaryFile), + (0x2000, errors.InvalidBinaryFile), (None, (2 + 6 + (4 + 0x1000) + (4 + 0x1000))), (0x4000, (2 + 6 + (4 + 0x1000) + (4 + 0x1000))), (0x8000, (2 + 6 + (4 + 0x1000) + (4 + 0x1000))), - (0xffff, InvalidBinaryFile), + (0xffff, errors.InvalidBinaryFile), ]) def test_exe(self, run_addr, expected, sample_file): self.check_exe(sample_file, self.diskimage_type, run_addr, expected) @@ -68,11 +68,11 @@ class TestDos33Image(BaseCreateTest): diskimage_type = Dos33DiskImage @pytest.mark.parametrize("run_addr,expected", [ - (0x2000, InvalidBinaryFile), + (0x2000, errors.InvalidBinaryFile), (None, (4 + (0x9000 - 0x4000))), (0x4000, (4 + (0x9000 - 0x4000))), (0x8000, (4 + 3 + (0x9000 - 0x4000))), - (0xffff, InvalidBinaryFile), + (0xffff, errors.InvalidBinaryFile), ]) def test_exe(self, run_addr, expected, sample_file): self.check_exe(sample_file, self.diskimage_type, run_addr, expected) diff --git a/test/test_segment.py b/test/test_segment.py index bf28058..263df63 100644 --- a/test/test_segment.py +++ b/test/test_segment.py @@ -8,7 +8,7 @@ import numpy as np import pytest from atrcopy import DefaultSegment, SegmentData, get_xex, interleave_segments, user_bit_mask, diff_bit_mask -from atrcopy.errors import * +from atrcopy import errors from functools import reduce @@ -38,7 +38,7 @@ class TestSegment1(object): s[1].set_comment_at(10, "comment 10") s[1].set_comment_at(100, "comment 100") print(list(s[1].iter_comments_in_segment())) - with pytest.raises(InvalidBinaryFile): + with pytest.raises(errors.InvalidBinaryFile): seg, subseg = get_xex(s, 0xbeef) seg, subseg = get_xex(s) assert tuple(seg.data[0:2]) == (0xff, 0xff)