ruff fixes
This commit is contained in:
parent
79c538d676
commit
510537c8a9
14 changed files with 41 additions and 49 deletions
|
|
@ -6,7 +6,7 @@
|
|||
# This is the old, pre-SHA3 version of Keccak used by Ethereum, which is not supported
|
||||
# by hashlib.sha3
|
||||
|
||||
from math import log
|
||||
from math import log2
|
||||
from operator import xor
|
||||
from copy import deepcopy
|
||||
from functools import reduce
|
||||
|
|
@ -98,7 +98,7 @@ def keccak_f(state):
|
|||
# iota
|
||||
A[0][0] ^= RC
|
||||
|
||||
l = int(log(state.lanew, 2))
|
||||
l = int(log2(state.lanew))
|
||||
nr = 12 + 2 * l
|
||||
|
||||
for ir in range(nr):
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ def print_stack_trace(message=None, fh_list=[], sep='\n ', trim=4):
|
|||
res = get_stack_trace(message, ('\n' if fh_list else ''), sep, trim)
|
||||
if not fh_list:
|
||||
import os
|
||||
fh_list.append(open(f'devtools.trace.{os.getpid()}', 'w'))
|
||||
fh_list.append(open(f'devtools.trace.{os.getpid()}', 'w')) # noqa: SIM115
|
||||
sys.stderr.write(res)
|
||||
fh_list[0].write(res)
|
||||
fh_list[0].flush()
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ def encode_raw(item):
|
|||
payload = b''.join(encode_raw(x) for x in item)
|
||||
prefix_offset = 192 # list
|
||||
else:
|
||||
msg = 'Cannot encode object of type {0}'.format(type(item).__name__)
|
||||
msg = 'Cannot encode object of type {}'.format(type(item).__name__)
|
||||
raise EncodingError(msg, item)
|
||||
|
||||
try:
|
||||
|
|
@ -129,7 +129,7 @@ def consume_length_prefix(rlp, start):
|
|||
if rlp[start + 1:start + 2] == b'\x00':
|
||||
raise DecodingError('Length starts with zero bytes', rlp)
|
||||
len_prefix = rlp[start + 1:start + 1 + ll]
|
||||
l = big_endian_to_int(len_prefix) # noqa: E741
|
||||
l = big_endian_to_int(len_prefix)
|
||||
if l < 56:
|
||||
raise DecodingError('Long string prefix used for short string', rlp)
|
||||
return (rlp[start:start + 1] + len_prefix, bytes, l, start + 1 + ll)
|
||||
|
|
@ -140,7 +140,7 @@ def consume_length_prefix(rlp, start):
|
|||
if rlp[start + 1:start + 2] == b'\x00':
|
||||
raise DecodingError('Length starts with zero bytes', rlp)
|
||||
len_prefix = rlp[start + 1:start + 1 + ll]
|
||||
l = big_endian_to_int(len_prefix) # noqa: E741
|
||||
l = big_endian_to_int(len_prefix)
|
||||
if l < 56:
|
||||
raise DecodingError('Long list prefix used for short list', rlp)
|
||||
return (rlp[start:start + 1] + len_prefix, list, l, start + 1 + ll)
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ class EncodingError(RLPException):
|
|||
"""
|
||||
|
||||
def __init__(self, message, obj):
|
||||
super(EncodingError, self).__init__(message)
|
||||
super().__init__(message)
|
||||
self.obj = obj
|
||||
|
||||
|
||||
|
|
@ -20,7 +20,7 @@ class DecodingError(RLPException):
|
|||
"""
|
||||
|
||||
def __init__(self, message, rlp):
|
||||
super(DecodingError, self).__init__(message)
|
||||
super().__init__(message)
|
||||
self.rlp = rlp
|
||||
|
||||
|
||||
|
|
@ -31,7 +31,7 @@ class SerializationError(RLPException):
|
|||
"""
|
||||
|
||||
def __init__(self, message, obj):
|
||||
super(SerializationError, self).__init__(message)
|
||||
super().__init__(message)
|
||||
self.obj = obj
|
||||
|
||||
|
||||
|
|
@ -50,7 +50,7 @@ class ListSerializationError(SerializationError):
|
|||
assert element_exception is not None
|
||||
message = ('Serialization failed because of element at index {} '
|
||||
'("{}")'.format(index, str(element_exception)))
|
||||
super(ListSerializationError, self).__init__(message, obj)
|
||||
super().__init__(message, obj)
|
||||
self.index = index
|
||||
self.element_exception = element_exception
|
||||
|
||||
|
|
@ -79,7 +79,7 @@ class ObjectSerializationError(SerializationError):
|
|||
'("{}")'.format(field, str(list_exception.element_exception)))
|
||||
else:
|
||||
field = None
|
||||
super(ObjectSerializationError, self).__init__(message, obj)
|
||||
super().__init__(message, obj)
|
||||
self.field = field
|
||||
self.list_exception = list_exception
|
||||
|
||||
|
|
@ -91,7 +91,7 @@ class DeserializationError(RLPException):
|
|||
"""
|
||||
|
||||
def __init__(self, message, serial):
|
||||
super(DeserializationError, self).__init__(message)
|
||||
super().__init__(message)
|
||||
self.serial = serial
|
||||
|
||||
|
||||
|
|
@ -110,7 +110,7 @@ class ListDeserializationError(DeserializationError):
|
|||
assert element_exception is not None
|
||||
message = ('Deserialization failed because of element at index {} '
|
||||
'("{}")'.format(index, str(element_exception)))
|
||||
super(ListDeserializationError, self).__init__(message, serial)
|
||||
super().__init__(message, serial)
|
||||
self.index = index
|
||||
self.element_exception = element_exception
|
||||
|
||||
|
|
@ -137,7 +137,7 @@ class ObjectDeserializationError(DeserializationError):
|
|||
field = sedes._meta.field_names[list_exception.index]
|
||||
message = ('Deserialization failed because of field {} '
|
||||
'("{}")'.format(field, str(list_exception.element_exception)))
|
||||
super(ObjectDeserializationError, self).__init__(message, serial)
|
||||
super().__init__(message, serial)
|
||||
self.sedes = sedes
|
||||
self.list_exception = list_exception
|
||||
self.field = field
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ from ...pyethereum.utils import int_to_big_endian,big_endian_to_int
|
|||
from ..exceptions import DeserializationError,SerializationError
|
||||
|
||||
|
||||
class BigEndianInt(object):
|
||||
class BigEndianInt:
|
||||
"""A sedes for big endian integers.
|
||||
|
||||
:param l: the size of the serialized representation in bytes or `None` to
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ from ..exceptions import SerializationError,DeserializationError
|
|||
from ..atomic import Atomic
|
||||
|
||||
|
||||
class Binary(object):
|
||||
class Binary:
|
||||
"""A sedes object for binary data of certain length.
|
||||
|
||||
:param min_length: the minimal length in bytes or `None` for no lower limit
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ class Boolean:
|
|||
elif obj is True:
|
||||
return b'\x01'
|
||||
else:
|
||||
raise Exception("Invariant: no other options for boolean values")
|
||||
raise ValueError("Invariant: no other options for boolean values")
|
||||
|
||||
def deserialize(self, serial):
|
||||
if serial == b'':
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ class List(list):
|
|||
"""
|
||||
|
||||
def __init__(self, elements=None, strict=True):
|
||||
super(List, self).__init__()
|
||||
super().__init__()
|
||||
self.strict = strict
|
||||
|
||||
if elements:
|
||||
|
|
|
|||
|
|
@ -37,22 +37,22 @@ def _get_duplicates(values):
|
|||
def validate_args_and_kwargs(args, kwargs, arg_names, allow_missing=False):
|
||||
duplicate_arg_names = _get_duplicates(arg_names)
|
||||
if duplicate_arg_names:
|
||||
raise TypeError("Duplicate argument names: {0}".format(sorted(duplicate_arg_names)))
|
||||
raise TypeError("Duplicate argument names: {}".format(sorted(duplicate_arg_names)))
|
||||
|
||||
needed_kwargs = arg_names[len(args):]
|
||||
used_kwargs = set(arg_names[:len(args)])
|
||||
|
||||
duplicate_kwargs = used_kwargs.intersection(kwargs.keys())
|
||||
if duplicate_kwargs:
|
||||
raise TypeError("Duplicate kwargs: {0}".format(sorted(duplicate_kwargs)))
|
||||
raise TypeError("Duplicate kwargs: {}".format(sorted(duplicate_kwargs)))
|
||||
|
||||
unknown_kwargs = set(kwargs.keys()).difference(arg_names)
|
||||
if unknown_kwargs:
|
||||
raise TypeError("Unknown kwargs: {0}".format(sorted(unknown_kwargs)))
|
||||
raise TypeError("Unknown kwargs: {}".format(sorted(unknown_kwargs)))
|
||||
|
||||
missing_kwargs = set(needed_kwargs).difference(kwargs.keys())
|
||||
if not allow_missing and missing_kwargs:
|
||||
raise TypeError("Missing kwargs: {0}".format(sorted(missing_kwargs)))
|
||||
raise TypeError("Missing kwargs: {}".format(sorted(missing_kwargs)))
|
||||
|
||||
|
||||
@to_tuple
|
||||
|
|
@ -175,7 +175,7 @@ def Changeset(obj, changes):
|
|||
in obj._meta.field_names
|
||||
}
|
||||
cls = type(
|
||||
"{0}Changeset".format(obj.__class__.__name__),
|
||||
"{}Changeset".format(obj.__class__.__name__),
|
||||
(BaseChangeset,),
|
||||
namespace,
|
||||
)
|
||||
|
|
@ -191,7 +191,7 @@ class BaseSerializable(collections.abc.Sequence):
|
|||
|
||||
if len(field_values) != len(self._meta.field_names):
|
||||
raise TypeError(
|
||||
'Argument count mismatch. expected {0} - got {1} - missing {2}'.format(
|
||||
'Argument count mismatch. expected {} - got {} - missing {}'.format(
|
||||
len(self._meta.field_names),
|
||||
len(field_values),
|
||||
','.join(self._meta.field_names[len(field_values):]),
|
||||
|
|
@ -220,7 +220,7 @@ class BaseSerializable(collections.abc.Sequence):
|
|||
elif isinstance(idx, str):
|
||||
return getattr(self, idx)
|
||||
else:
|
||||
raise IndexError("Unsupported type for __getitem__: {0}".format(type(idx)))
|
||||
raise IndexError("Unsupported type for __getitem__: {}".format(type(idx)))
|
||||
|
||||
def __len__(self):
|
||||
return len(self._meta.fields)
|
||||
|
|
@ -333,7 +333,7 @@ IDENTIFIER_REGEX = re.compile(r"^[^\d\W]\w*\Z", re.UNICODE)
|
|||
|
||||
|
||||
def _is_valid_identifier(value):
|
||||
# Source: https://stackoverflow.com/questions/5474008/regular-expression-to-confirm-whether-a-string-is-a-valid-identifier-in-python # noqa: E501
|
||||
# Source: https://stackoverflow.com/questions/5474008/regular-expression-to-confirm-whether-a-string-is-a-valid-identifier-in-python
|
||||
if not isinstance(value, str):
|
||||
return False
|
||||
return bool(IDENTIFIER_REGEX.match(value))
|
||||
|
|
@ -349,7 +349,7 @@ def _get_class_namespace(cls):
|
|||
|
||||
class SerializableBase(abc.ABCMeta):
|
||||
def __new__(cls, name, bases, attrs):
|
||||
super_new = super(SerializableBase, cls).__new__
|
||||
super_new = super().__new__
|
||||
|
||||
serializable_bases = tuple(b for b in bases if isinstance(b, SerializableBase))
|
||||
has_multiple_serializable_parents = len(serializable_bases) > 1
|
||||
|
|
@ -393,7 +393,7 @@ class SerializableBase(abc.ABCMeta):
|
|||
raise TypeError(
|
||||
"The following fields are duplicated in the `fields` "
|
||||
"declaration: "
|
||||
"{0}".format(",".join(sorted(duplicate_field_names)))
|
||||
"{}".format(",".join(sorted(duplicate_field_names)))
|
||||
)
|
||||
|
||||
# check that field names are valid identifiers
|
||||
|
|
@ -405,8 +405,8 @@ class SerializableBase(abc.ABCMeta):
|
|||
}
|
||||
if invalid_field_names:
|
||||
raise TypeError(
|
||||
"The following field names are not valid python identifiers: {0}".format(
|
||||
",".join("`{0}`".format(item) for item in sorted(invalid_field_names))
|
||||
"The following field names are not valid python identifiers: {}".format(
|
||||
",".join("`{}`".format(item) for item in sorted(invalid_field_names))
|
||||
)
|
||||
)
|
||||
|
||||
|
|
@ -425,7 +425,7 @@ class SerializableBase(abc.ABCMeta):
|
|||
"Subclasses of `Serializable` **must** contain a full superset "
|
||||
"of the fields defined in their parent classes. The following "
|
||||
"fields are missing: "
|
||||
"{0}".format(",".join(sorted(missing_fields)))
|
||||
"{}".format(",".join(sorted(missing_fields)))
|
||||
)
|
||||
|
||||
# the actual field values are stored in separate *private* attributes.
|
||||
|
|
|
|||
|
|
@ -22,6 +22,9 @@ tool.file: Address and transaction file routines for the 'mmgen-tool' utility
|
|||
|
||||
from .common import tool_cmd_base, options_annot_str
|
||||
|
||||
txview_sort_exp = options_annot_str(['addr', 'raw'])
|
||||
txview_filesort_exp = options_annot_str(['mtime', 'ctime', 'atime'])
|
||||
|
||||
class tool_cmd(tool_cmd_base):
|
||||
"utilities for viewing/checking MMGen address and transaction files"
|
||||
|
||||
|
|
@ -84,8 +87,8 @@ class tool_cmd(tool_cmd_base):
|
|||
'mmgen_tx_file(s)': str,
|
||||
'pager': 'send output to pager',
|
||||
'terse': 'produce compact tabular output',
|
||||
'sort': 'sort order for transaction inputs and outputs ' + options_annot_str(['addr', 'raw']),
|
||||
'filesort': 'file sort order ' + options_annot_str(['mtime', 'ctime', 'atime'])}},
|
||||
'sort': f'sort order for transaction inputs and outputs {txview_sort_exp}',
|
||||
'filesort': f'file sort order {txview_filesort_exp}'}},
|
||||
*infiles,
|
||||
**kwargs):
|
||||
"display specified raw or signed MMGen transaction files in human-readable form"
|
||||
|
|
|
|||
|
|
@ -193,8 +193,8 @@ class tool_cmd(tool_cmd_base):
|
|||
return await (await TwCtl(self.cfg, self.proto, mode='w')).rescan_address(mmgen_or_coin_addr)
|
||||
|
||||
async def rescan_blockchain(self, *,
|
||||
start_block: int = None,
|
||||
stop_block: int = None):
|
||||
start_block: int = None, # noqa: RUF013
|
||||
stop_block: int = None): # noqa: RUF013
|
||||
"""
|
||||
rescan the blockchain to update historical transactions in the tracking wallet
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ uargs = namedtuple('xmrwallet_uargs', [
|
|||
'spec',
|
||||
'compat_call'])
|
||||
|
||||
uarg_info = (
|
||||
uarg_info = ( # noqa: PLC3002
|
||||
lambda e, hp: {
|
||||
'daemon': e('HOST:PORT', hp),
|
||||
'tx_relay_daemon': e('HOST:PORT[:PROXY_IP:PROXY_PORT]', rf'({hp})(?::({hp}))?'),
|
||||
|
|
|
|||
|
|
@ -36,19 +36,7 @@ ignore = [
|
|||
[tool.ruff.lint.per-file-ignores]
|
||||
"protobuf.py" = [ "UP045" ] # Use `X | None` for type annotations
|
||||
"mmgen/rpc/backends/curl.py" = [ "ASYNC221" ] # blocking method in async function
|
||||
"mmgen/xmrwallet/__init__.py" = [ "PLC3002" ] # Lambda expression called directly
|
||||
"mmgen/tool/*" = [ "F821" ] # Undefined name `sstr`
|
||||
"mmgen/tool/file.py" = [ "B008" ] # function call in dfl args
|
||||
"mmgen/tool/rpc.py" = [ "RUF013" ] # PEP 484 prohibits implicit `Optional`
|
||||
"mmgen/contrib/keccak.py" = [ "FURB163" ] # `math.log` -> `math.log2(state.lanew)`
|
||||
"mmgen/devtools.py" = [ "SIM115" ] # open() with context manager
|
||||
"mmgen/proto/eth/rlp/*" = [
|
||||
"TRY002", # create your own exception
|
||||
"UP004", # class `Binary` inherits from `object`
|
||||
"UP008", # Use `super()` instead of `super(__class__, self)`
|
||||
"UP030", # Use implicit references for positional format fields
|
||||
"RUF100" # Unused `noqa` directive (non-enabled: `F401`)
|
||||
]
|
||||
|
||||
"examples/*" = [ "ASYNC230" ] # open() in async function
|
||||
|
||||
|
|
@ -58,6 +46,7 @@ ignore = [
|
|||
"test/objattrtest_d/*" = [ "F401" ] # imported but unused
|
||||
"test/objtest_d/*" = [ "F401" ] # imported but unused
|
||||
"test/modtest_d/dep.py" = [ "F401" ] # imported but unused
|
||||
"test/modtest_d/testdep.py" = [ "F401" ] # imported but unused
|
||||
"test/cmdtest_d/*" = [
|
||||
"ASYNC251", # time.sleep() in async function
|
||||
"S102" # Use of `exec` detected
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ class unit_tests:
|
|||
|
||||
def eth_keys(self, name, ut):
|
||||
try:
|
||||
from eth_keys import keys # noqa: F401
|
||||
from eth_keys import keys
|
||||
return True
|
||||
except ImportError:
|
||||
if get_ethkey():
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue