Launchpad: Handle invalid credentials files better
Metadata
Current evaluation
No evaluation has been recorded for this issue yet.
Issue body
### What needs to get done
If `Launchpad.login` errors out due to `configparser` issues, try deleting the credentials file and logging in again.
### Why it needs to get done
This isn't an acceptable error message:
```
+ charmcraft remote-build --verbose --launchpad-accept-public-upload
Starting charmcraft, version 2.5.5.post102+g0f95a52
Logging execution to '/root/.local/state/charmcraft/log/charmcraft-20240226-125356.635385.log'
remote-build is experimental and is subject to change. Use with caution.
charmcraft internal error: No option 'consumer_key' in section: '1'
Full execution log: '/root/.local/state/charmcraft/log/charmcraft-20240226-125356.635385.log'
Traceback (most recent call last):
File "/snap/charmcraft/x1/usr/lib/python3.10/configparser.py", line 791, in get
value = d[option]
File "/snap/charmcraft/x1/usr/lib/python3.10/collections/__init__.py", line 986, in __getitem__
return self.__missing__(key) # support subclasses that define __missing__
File "/snap/charmcraft/x1/usr/lib/python3.10/collections/__init__.py", line 978, in __missing__
raise KeyError(key)
KeyError: 'consumer_key'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/snap/charmcraft/x1/bin/charmcraft", line 8, in <module>
sys.exit(main())
File "/snap/charmcraft/x1/lib/python3.10/site-packages/charmcraft/application/main.py", line 150, in main
return app.run()
File "/snap/charmcraft/x1/lib/python3.10/site-packages/craft_application/application.py", line 465, in run
return_code = dispatcher.run() or 0
File "/snap/charmcraft/x1/lib/python3.10/site-packages/craft_cli/dispatcher.py", line 487, in run
return self._loaded_command.run(self._parsed_command_args)
File "/snap/charmcraft/x1/lib/python3.10/site-packages/craft_application/commands/base.py", line 171, in run
result = self._run(parsed_args, **kwargs) or result
File "/snap/charmcraft/x1/lib/python3.10/site-packages/charmcraft/application/commands/remote.py", line 110, in _run
builder = self._services.remote_build
File "/snap/charmcraft/x1/lib/python3.10/site-packages/craft_application/services/service_factory.py", line 95, in __getattr__
instance.setup()
File "/snap/charmcraft/x1/lib/python3.10/site-packages/craft_application/services/remotebuild.py", line 69, in setup
self.lp = self._get_lp_client()
File "/snap/charmcraft/x1/lib/python3.10/site-packages/craft_application/services/remotebuild.py", line 202, in _get_lp_client
return launchpad.Launchpad.login(
File "/snap/charmcraft/x1/lib/python3.10/site-packages/craft_application/launchpad/launchpad.py", line 98, in login
launchpadlib.launchpad.Launchpad.login_with(
File "/snap/charmcraft/x1/lib/python3.10/site-packages/launchpadlib/launchpad.py", line 700, in login_with
return cls._authorize_token_and_login(
File "/snap/charmcraft/x1/lib/python3.10/site-packages/launchpadlib/launchpad.py", line 445, in _authorize_token_and_login
cached_credentials = credential_store.load(
File "/snap/charmcraft/x1/lib/python3.10/site-packages/launchpadlib/credentials.py", line 345, in load
return self.do_load(unique_key)
File "/snap/charmcraft/x1/lib/python3.10/site-packages/launchpadlib/credentials.py", line 486, in do_load
return Credentials.load_from_path(self.filename)
File "/snap/charmcraft/x1/lib/python3.10/site-packages/lazr/restfulclient/authorize/oauth.py", line 229, in load_from_path
credentials.load(credentials_file)
File "/snap/charmcraft/x1/lib/python3.10/site-packages/lazr/restfulclient/authorize/oauth.py", line 205, in load
consumer_key = parser.get(CREDENTIALS_FILE_VERSION, "consumer_key")
File "/snap/charmcraft/x1/usr/lib/python3.10/configparser.py", line 794, in get
raise NoOptionError(option, section)
configparser.NoOptionError: No option 'consumer_key' in section: '1'
-----
.
2024-02-26 12:53:56 Restoring multipass:ubuntu-22.04-64:tests/spread/smoketests/remote-build:jammy (multipass:ubuntu-22.04-64)...
```
Evaluation history
No evaluation history available.