elrond-sdk-erdpy
elrond-sdk-erdpy copied to clipboard
staking-provider commands not working (AttributeError). Incomplete migration to pathlib.
Some subcommands under staking-provider
, for instance, erdpy staking-provider add-nodes
, raise an AttributeError
when trying to parse a PEM file.
Versions affected
Version 1.0.23
from PyPi.
Steps to reproduce
Issue the add-nodes
command to add some nodes to a staking pool. Some irrelevant arguments were omitted.
erdpy staking-provider add-nodes --validators-file "$PWD/validators.json" --using-delegation-manager ...
validators.json
:
{
"validators": [
{ "pemFile": "validator1.pem" },
{ "pemFile": "validator2.pem" }
]
}
Expected behaviour
A transaction is put together and printed to stdout.
Actual behaviour
An AttributeError
is raised:
Traceback (most recent call last):
File "/home/ashpool/elrondsdk/erdpy-venv/bin/erdpy", line 8, in <module>
sys.exit(main())
File "/home/ashpool/elrondsdk/erdpy-venv/lib/python3.10/site-packages/erdpy/cli.py", line 32, in main
_do_main()
File "/home/ashpool/elrondsdk/erdpy-venv/lib/python3.10/site-packages/erdpy/cli.py", line 58, in _do_main
args.func(args)
File "/home/ashpool/elrondsdk/erdpy-venv/lib/python3.10/site-packages/erdpy/cli_delegation.py", line 169, in add_new_nodes
staking_provider.prepare_args_for_add_nodes(args)
File "/home/ashpool/elrondsdk/erdpy-venv/lib/python3.10/site-packages/erdpy/delegation/staking_provider.py", line 45, in prepare_args_for_add_nodes
secret_key_bytes, bls_key = parse_validator_pem(validator_pem)
File "/home/ashpool/elrondsdk/erdpy-venv/lib/python3.10/site-packages/erdpy/wallet/pem.py", line 56, in parse_validator_pem
pem_file = pem_file.expanduser()
AttributeError: 'str' object has no attribute 'expanduser'
Cause and possible fix
As of 15a2af32c6ccaf07cd42456c4f64900c20439540, many modules have been changed to use pathlib
instead of os.path
, among them wallet/pem.py
. However, some other modules were overlooked, like delegation/staking_provider.py
, resulting in code that attempts to treat a str
as a pathlib.Path
, e.g. by calling .expanduser()
on it.
I was able to work around the particular error I encountered by "casting" validator_pem
to pathlib.Path
just before passing it to parse_validator_pem()
, however, a more thorough fix would be to use pathlib
universally for working with paths.
Partially fixed by https://github.com/ElrondNetwork/elrond-sdk-erdpy/pull/102.
This issue has been inactive for some time and a solution has already been suggested. If the problem still persists, we kindly ask that you open a new issue or join our Discord channel for further assistance. https://discord.gg/multiversxbuilders