mirror of
https://github.com/dgelessus/python-rsrcfork.git
synced 2024-06-16 10:29:31 +00:00
Add missing type annotations on some methods
This commit is contained in:
parent
add22b704a
commit
29ddd21740
|
@ -155,7 +155,7 @@ def _filter_resources(rf: api.ResourceFile, filters: typing.Sequence[str]) -> ty
|
||||||
|
|
||||||
return list(matching.values())
|
return list(matching.values())
|
||||||
|
|
||||||
def _hexdump(data: bytes):
|
def _hexdump(data: bytes) -> None:
|
||||||
last_line = None
|
last_line = None
|
||||||
asterisk_shown = False
|
asterisk_shown = False
|
||||||
for i in range(0, len(data), 16):
|
for i in range(0, len(data), 16):
|
||||||
|
@ -177,7 +177,7 @@ def _hexdump(data: bytes):
|
||||||
if data:
|
if data:
|
||||||
print(f"{len(data):08x}")
|
print(f"{len(data):08x}")
|
||||||
|
|
||||||
def _raw_hexdump(data: bytes):
|
def _raw_hexdump(data: bytes) -> None:
|
||||||
for i in range(0, len(data), 16):
|
for i in range(0, len(data), 16):
|
||||||
print(" ".join(f"{byte:02x}" for byte in data[i:i + 16]))
|
print(" ".join(f"{byte:02x}" for byte in data[i:i + 16]))
|
||||||
|
|
||||||
|
@ -415,7 +415,7 @@ def _list_resource_file(rf: api.ResourceFile, *, sort: bool, group: str, decompr
|
||||||
else:
|
else:
|
||||||
raise AssertionError(f"Unhandled group mode: {group!r}")
|
raise AssertionError(f"Unhandled group mode: {group!r}")
|
||||||
|
|
||||||
def main():
|
def main() -> typing.NoReturn:
|
||||||
ns = _parse_args()
|
ns = _parse_args()
|
||||||
|
|
||||||
if ns.file == "-":
|
if ns.file == "-":
|
||||||
|
|
|
@ -104,7 +104,7 @@ class Resource(object):
|
||||||
_compressed_info: compress.common.CompressedHeaderInfo
|
_compressed_info: compress.common.CompressedHeaderInfo
|
||||||
_data_decompressed: bytes
|
_data_decompressed: bytes
|
||||||
|
|
||||||
def __init__(self, resource_type: bytes, resource_id: int, name: typing.Optional[bytes], attributes: ResourceAttrs, data_raw: bytes):
|
def __init__(self, resource_type: bytes, resource_id: int, name: typing.Optional[bytes], attributes: ResourceAttrs, data_raw: bytes) -> None:
|
||||||
"""Create a new resource with the given type code, ID, name, attributes, and data."""
|
"""Create a new resource with the given type code, ID, name, attributes, and data."""
|
||||||
|
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
@ -115,7 +115,7 @@ class Resource(object):
|
||||||
self.attributes = attributes
|
self.attributes = attributes
|
||||||
self.data_raw = data_raw
|
self.data_raw = data_raw
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self) -> str:
|
||||||
try:
|
try:
|
||||||
data = self.data
|
data = self.data
|
||||||
except compress.DecompressError:
|
except compress.DecompressError:
|
||||||
|
@ -208,7 +208,7 @@ class ResourceFile(collections.abc.Mapping):
|
||||||
_restype: bytes
|
_restype: bytes
|
||||||
_submap: typing.Mapping[int, typing.Tuple[int, ResourceAttrs, int]]
|
_submap: typing.Mapping[int, typing.Tuple[int, ResourceAttrs, int]]
|
||||||
|
|
||||||
def __init__(self, resfile: "ResourceFile", restype: bytes):
|
def __init__(self, resfile: "ResourceFile", restype: bytes) -> None:
|
||||||
"""Create a new _LazyResourceMap "containing" all resources in resfile that have the type code restype."""
|
"""Create a new _LazyResourceMap "containing" all resources in resfile that have the type code restype."""
|
||||||
|
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
@ -217,17 +217,17 @@ class ResourceFile(collections.abc.Mapping):
|
||||||
self._restype = restype
|
self._restype = restype
|
||||||
self._submap = self._resfile._references[self._restype]
|
self._submap = self._resfile._references[self._restype]
|
||||||
|
|
||||||
def __len__(self):
|
def __len__(self) -> int:
|
||||||
"""Get the number of resources with this type code."""
|
"""Get the number of resources with this type code."""
|
||||||
|
|
||||||
return len(self._submap)
|
return len(self._submap)
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self) -> typing.Iterator[int]:
|
||||||
"""Iterate over the IDs of all resources with this type code."""
|
"""Iterate over the IDs of all resources with this type code."""
|
||||||
|
|
||||||
return iter(self._submap)
|
return iter(self._submap)
|
||||||
|
|
||||||
def __contains__(self, key: int):
|
def __contains__(self, key: int) -> bool:
|
||||||
"""Check if a resource with the given ID exists for this type code."""
|
"""Check if a resource with the given ID exists for this type code."""
|
||||||
|
|
||||||
return key in self._submap
|
return key in self._submap
|
||||||
|
@ -250,7 +250,7 @@ class ResourceFile(collections.abc.Mapping):
|
||||||
|
|
||||||
return Resource(self._restype, key, name, attributes, data)
|
return Resource(self._restype, key, name, attributes, data)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self) -> str:
|
||||||
if len(self) == 1:
|
if len(self) == 1:
|
||||||
return f"<{type(self).__module__}.{type(self).__qualname__} at {id(self):#x} containing one resource: {next(iter(self.values()))}>"
|
return f"<{type(self).__module__}.{type(self).__qualname__} at {id(self):#x} containing one resource: {next(iter(self.values()))}>"
|
||||||
else:
|
else:
|
||||||
|
@ -333,7 +333,7 @@ class ResourceFile(collections.abc.Mapping):
|
||||||
else:
|
else:
|
||||||
raise ValueError(f"Unsupported value for the fork parameter: {fork!r}")
|
raise ValueError(f"Unsupported value for the fork parameter: {fork!r}")
|
||||||
|
|
||||||
def __init__(self, stream: typing.BinaryIO, *, close: bool=False):
|
def __init__(self, stream: typing.BinaryIO, *, close: bool=False) -> None:
|
||||||
"""Create a ResourceFile wrapping the given byte stream.
|
"""Create a ResourceFile wrapping the given byte stream.
|
||||||
|
|
||||||
To read resource file data from a bytes object, wrap it in an io.BytesIO.
|
To read resource file data from a bytes object, wrap it in an io.BytesIO.
|
||||||
|
@ -379,7 +379,7 @@ class ResourceFile(collections.abc.Mapping):
|
||||||
except struct.error as e:
|
except struct.error as e:
|
||||||
raise InvalidResourceFileError(str(e))
|
raise InvalidResourceFileError(str(e))
|
||||||
|
|
||||||
def _read_header(self):
|
def _read_header(self) -> None:
|
||||||
"""Read the resource file header, starting at the current stream position."""
|
"""Read the resource file header, starting at the current stream position."""
|
||||||
|
|
||||||
assert self._stream.tell() == 0
|
assert self._stream.tell() == 0
|
||||||
|
@ -396,7 +396,7 @@ class ResourceFile(collections.abc.Mapping):
|
||||||
if self._stream.tell() != self.data_offset:
|
if self._stream.tell() != self.data_offset:
|
||||||
raise InvalidResourceFileError(f"The data offset ({self.data_offset}) should point exactly to the end of the file header ({self._stream.tell()})")
|
raise InvalidResourceFileError(f"The data offset ({self.data_offset}) should point exactly to the end of the file header ({self._stream.tell()})")
|
||||||
|
|
||||||
def _read_map_header(self):
|
def _read_map_header(self) -> None:
|
||||||
"""Read the map header, starting at the current stream position."""
|
"""Read the map header, starting at the current stream position."""
|
||||||
|
|
||||||
assert self._stream.tell() == self.map_offset
|
assert self._stream.tell() == self.map_offset
|
||||||
|
@ -409,7 +409,7 @@ class ResourceFile(collections.abc.Mapping):
|
||||||
|
|
||||||
self.file_attributes = ResourceFileAttrs(_file_attributes)
|
self.file_attributes = ResourceFileAttrs(_file_attributes)
|
||||||
|
|
||||||
def _read_all_resource_types(self):
|
def _read_all_resource_types(self) -> None:
|
||||||
"""Read all resource types, starting at the current stream position."""
|
"""Read all resource types, starting at the current stream position."""
|
||||||
|
|
||||||
self._reference_counts = collections.OrderedDict()
|
self._reference_counts = collections.OrderedDict()
|
||||||
|
@ -426,7 +426,7 @@ class ResourceFile(collections.abc.Mapping):
|
||||||
count = (count_m1 + 1) % 0x10000
|
count = (count_m1 + 1) % 0x10000
|
||||||
self._reference_counts[resource_type] = count
|
self._reference_counts[resource_type] = count
|
||||||
|
|
||||||
def _read_all_references(self):
|
def _read_all_references(self) -> None:
|
||||||
"""Read all resource references, starting at the current stream position."""
|
"""Read all resource references, starting at the current stream position."""
|
||||||
|
|
||||||
self._references = collections.OrderedDict()
|
self._references = collections.OrderedDict()
|
||||||
|
@ -445,7 +445,7 @@ class ResourceFile(collections.abc.Mapping):
|
||||||
|
|
||||||
resmap[resource_id] = (name_offset, ResourceAttrs(attributes), data_offset)
|
resmap[resource_id] = (name_offset, ResourceAttrs(attributes), data_offset)
|
||||||
|
|
||||||
def close(self):
|
def close(self) -> None:
|
||||||
"""Close this ResourceFile.
|
"""Close this ResourceFile.
|
||||||
|
|
||||||
If close=True was passed when this ResourceFile was created, the underlying stream's close method is called as well.
|
If close=True was passed when this ResourceFile was created, the underlying stream's close method is called as well.
|
||||||
|
@ -454,23 +454,23 @@ class ResourceFile(collections.abc.Mapping):
|
||||||
if self._close_stream:
|
if self._close_stream:
|
||||||
self._stream.close()
|
self._stream.close()
|
||||||
|
|
||||||
def __enter__(self):
|
def __enter__(self) -> "ResourceFile":
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def __exit__(self, exc_type, exc_val, exc_tb):
|
def __exit__(self, exc_type, exc_val, exc_tb) -> None:
|
||||||
self.close()
|
self.close()
|
||||||
|
|
||||||
def __len__(self):
|
def __len__(self) -> int:
|
||||||
"""Get the number of resource types in this ResourceFile."""
|
"""Get the number of resource types in this ResourceFile."""
|
||||||
|
|
||||||
return len(self._references)
|
return len(self._references)
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self) -> typing.Iterator[bytes]:
|
||||||
"""Iterate over all resource types in this ResourceFile."""
|
"""Iterate over all resource types in this ResourceFile."""
|
||||||
|
|
||||||
return iter(self._references)
|
return iter(self._references)
|
||||||
|
|
||||||
def __contains__(self, key: bytes):
|
def __contains__(self, key: bytes) -> bool:
|
||||||
"""Check whether this ResourceFile contains any resources of the given type."""
|
"""Check whether this ResourceFile contains any resources of the given type."""
|
||||||
|
|
||||||
return key in self._references
|
return key in self._references
|
||||||
|
@ -480,5 +480,5 @@ class ResourceFile(collections.abc.Mapping):
|
||||||
|
|
||||||
return ResourceFile._LazyResourceMap(self, key)
|
return ResourceFile._LazyResourceMap(self, key)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self) -> str:
|
||||||
return f"<{type(self).__module__}.{type(self).__qualname__} at {id(self):#x}, attributes {self.file_attributes}, containing {len(self)} resource types: {list(self)}>"
|
return f"<{type(self).__module__}.{type(self).__qualname__} at {id(self):#x}, attributes {self.file_attributes}, containing {len(self)} resource types: {list(self)}>"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user