Commit Graph

48 Commits

Author SHA1 Message Date
SomberNight 5b000a871f EventListener follow-ups: adapt left-out classes and minor clean-ups 2022-06-22 02:09:26 +02:00
SomberNight 2c57c78ebe asyncio: stop using get_event_loop(). introduce ~singleton loop.
asyncio.get_event_loop() became deprecated in python3.10. (see https://github.com/python/cpython/issues/83710)
```
.../electrum/electrum/daemon.py:470: DeprecationWarning: There is no current event loop
  self.asyncio_loop = asyncio.get_event_loop()
.../electrum/electrum/network.py:276: DeprecationWarning: There is no current event loop
  self.asyncio_loop = asyncio.get_event_loop()
```
Also, according to that thread, "set_event_loop() [... is] not deprecated by oversight".
So, we stop using get_event_loop() and set_event_loop() in our own code.
Note that libraries we use (such as the stdlib for python <3.10), might call get_event_loop,
which then relies on us having called set_event_loop e.g. for the GUI thread. To work around
this, a custom event loop policy providing a get_event_loop implementation is used.

Previously, we have been using a single asyncio event loop, created with
util.create_and_start_event_loop, and code in many places got a reference to this loop
using asyncio.get_event_loop().
Now, we still use a single asyncio event loop, but it is now stored as a global in
util._asyncio_event_loop (access with util.get_asyncio_loop()).

I believe these changes also fix https://github.com/spesmilo/electrum/issues/5376
2022-04-29 18:49:07 +02:00
SomberNight 583089d57b exchange_rate: normalise some internal types, saner Decimal conversion
fix https://github.com/spesmilo/electrum/issues/7770
2022-04-20 19:01:10 +02:00
SomberNight 81d0928abd exchange_rate: add some type hints 2022-04-20 18:43:24 +02:00
SomberNight 4f102d7752 exchange_rate: don't log full exception trace for timeouts
```
20220222T134125.306163Z |    ERROR | exchange_rate.CoinGecko | failed fx quotes: TimeoutError()
Traceback (most recent call last):
  File "...\electrum\electrum\exchange_rate.py", line 81, in update_safe
    self.quotes = await self.get_rates(ccy)
  File "...\electrum\electrum\exchange_rate.py", line 306, in get_rates
    json = await self.get_json('api.coingecko.com', '/api/v3/exchange_rates')
  File "...\electrum\electrum\exchange_rate.py", line 65, in get_json
    async with session.get(url) as response:
  File "...\Python39\site-packages\aiohttp\client.py", line 1138, in __aenter__
    self._resp = await self._coro
  File "...\Python39\site-packages\aiohttp\client.py", line 634, in _request
    break
  File "...\Python39\site-packages\aiohttp\helpers.py", line 721, in __exit__
    raise asyncio.TimeoutError from None
asyncio.exceptions.TimeoutError
```
2022-02-22 15:04:37 +01:00
SomberNight c9c094cfab requirements: bump min aiorpcx to 0.22.0
aiorpcx 0.20 changed the behaviour/API of TaskGroups.
When used as a context manager, TaskGroups no longer propagate
exceptions raised by their tasks. Instead, the calling code has
to explicitly check the results of tasks and decide whether to re-raise
any exceptions.
This is a significant change, and so this commit introduces "OldTaskGroup",
which should behave as the TaskGroup class of old aiorpcx. All existing
usages of TaskGroup are replaced with OldTaskGroup.

closes https://github.com/spesmilo/electrum/issues/7446
2022-02-15 18:22:44 +01:00
SomberNight 3f3212e94d some clean-ups now that we require python 3.8
In particular, asyncio.CancelledError no longer inherits Exception (it inherits BaseException directly)
2022-02-15 18:22:36 +01:00
Benoit Verret f731c38293 Minor style changes 2021-03-21 00:36:23 -04:00
SomberNight 1ba5997238 qt lightning_tx_dialog: use historical fx rate for fiat amounts 2021-03-12 18:29:00 +01:00
SomberNight 1fb0c28d0a exchange_rate: (fix) rm need to restart app to disable FX rates
Previously if the user disabled FX rates in the settings, the UI
would keep showing the fiat amounts everywhere until the next time
the program was started. (and the rates would not even refresh anymore)
2021-01-29 19:53:04 +01:00
Aldrin P. S. Castro c32ac41c36 Added new brazillian exchange to exchange rates plugin: Walltime. 2020-12-06 23:35:39 -03:00
SomberNight 13563697f5 exchange_rate: log full traceback in case of unexpected exception
related: #6748
2020-11-20 01:45:11 +01:00
ThomasV f49e766b21 Merge pull request #6410 from cointradermonitor/cointradermonitor-new-brazilian-index
Brazilian Bitcoin index source included.
2020-07-29 18:01:22 +02:00
Cointrader Monitor c67eef6e40 Brazilian Bitcoin index source included.
Added Brazilian Bitcoin Index from Cointrader Monitor (https://cointradermonitor.com/api/pbb/v1/ticker) as a "BRL" Fiat source.
The index is calculated from the last price and volume from 30 brazilian exchanges. It is a well-known price index used by bitcoin brazilian users.
More information at https://cointradermonitor.com/
2020-07-19 01:52:31 +00:00
Gustavo 396eabc623 removed scam exchange 2020-07-17 16:23:15 -03:00
Gustavo edef0cd4b6 fix biscoint ticker path 2020-07-17 15:30:48 -03:00
Gustavo a073ea6050 more price sources 2020-07-17 15:27:36 -03:00
SomberNight 52f8aafb60 kivy: fix fx history rates defaults.
In kivy, if the user enabled fx rates but did not touch the fx history settings,
the GUI would show that history rates are enabled but in fact they would be disabled:
the GUI called fx.get_history_config(default=True) when displaying the checkbox,
but exchange_rate.py would not fetch history rates.
(it would only get fixed if the user touched the fx history checkbox)

Note: FxThread.run() calls fx.show_history(), which calls fx.get_history_config() without arguments.
2020-07-16 01:00:51 +02:00
SomberNight cf1f2ba4dc network: replace "server" strings with ServerAddr objects 2020-04-15 17:23:47 +02:00
ThomasV 9224404108 Move callback manager out of Network class 2020-04-14 18:29:51 +02:00
SomberNight 9e57a59615 network: handle main_taskgroup dying better. passthrough CancelledError
Previously if a task running in the main_taskgroup raised,
main_taskgroup might have never finished as fx.run (another task running
in main_taskgroup) could not be cancelled (it was swallowing the CancelledError).

Need to be careful with catching all Exceptions or BaseExceptions,
as that might result in a coroutine not being cancellable.
Note that from python 3.8 onwards, CancelledError will inherit from BaseException
instead of Exception, so catching all Exceptions is somewhat less horrible
but this will only really matter if we raise the min py version to 3.8...

Really, all "except BaseException" lines are suspect and at least should be
considered for replacement with "except Exception".

-----

regarding fx.run not being cancellable before, and relevant lines, see:

https://github.com/spesmilo/electrum/blob/6197cfbb3b00f21fb01fd8ef95a849eb63fc9253/electrum/network.py#L1171
https://github.com/kyuupichan/aiorpcX/blob/0decdffce20aec217e9b4506ea20a0919994cea0/aiorpcx/curio.py#L242
https://github.com/kyuupichan/aiorpcX/blob/0decdffce20aec217e9b4506ea20a0919994cea0/aiorpcx/curio.py#L199
https://github.com/kyuupichan/aiorpcX/blob/0decdffce20aec217e9b4506ea20a0919994cea0/aiorpcx/curio.py#L208
https://github.com/kyuupichan/aiorpcX/blob/0decdffce20aec217e9b4506ea20a0919994cea0/aiorpcx/curio.py#L218
https://github.com/kyuupichan/aiorpcX/blob/0decdffce20aec217e9b4506ea20a0919994cea0/aiorpcx/curio.py#L221
https://github.com/spesmilo/electrum/blob/6197cfbb3b00f21fb01fd8ef95a849eb63fc9253/electrum/daemon.py#L194
https://github.com/spesmilo/electrum/blob/6197cfbb3b00f21fb01fd8ef95a849eb63fc9253/electrum/daemon.py#L203
https://github.com/spesmilo/electrum/blob/6197cfbb3b00f21fb01fd8ef95a849eb63fc9253/electrum/exchange_rate.py#L507
https://github.com/spesmilo/electrum/blob/6197cfbb3b00f21fb01fd8ef95a849eb63fc9253/electrum/exchange_rate.py#L79
2019-08-30 19:46:25 +02:00
ldz1 d17489e971 Removed dead exchange. 2019-07-21 13:15:06 +02:00
SomberNight 40e2b1d6e7 exchange_rate: fix #5495 2019-07-14 14:34:02 +02:00
SomberNight 93d68a4361 exchange_rate: fix #5487 2019-07-04 19:55:03 +02:00
SomberNight 3385a94753 logging: basics 2019-05-02 15:19:03 +02:00
SomberNight 4374b809fa fix-up prev 2019-03-27 19:01:38 +01:00
Francis Pouliot a9c13d6641 exchange_rate: add Bylls BTC/CAD rates 2019-03-27 19:00:40 +01:00
SomberNight 6311aa24a8 follow-up prev 2019-03-22 18:52:57 +01:00
SomberNight c23e949848 exchange_rate: change default provider to CoinGecko
closes #5188
2019-03-22 16:55:57 +01:00
SomberNight 5cbf54d23a exchange_rate: minor clean-up
based on mhsmith/electrum@7ed3f032dd
2019-03-22 16:48:47 +01:00
SomberNight 95a122596e fx: add CoinGecko and CoinCap
somewhat based on
Electron-Cash/Electron-Cash@b3c76cd311
Electron-Cash/Electron-Cash@adf8f943a1
Electron-Cash/Electron-Cash@8879e41fa0
2019-03-22 16:35:02 +01:00
SomberNight 7b4bb19b34 exchange_rate: raise for http status so empty hist rate dicts don't get saved
and if they had already been saved, treat them as if nothing was saved

context: BitcoinAverage started restricting the historical API endpoints.
they now deny unauthenticated requests. :/
2019-03-10 07:41:49 +01:00
SomberNight d6c2a0af94 exchange_rate: small fixups. BitcoinAverage, BitStamp
- BitcoinAverage seems to have historical rates for all currencies it supports
(as in, if there is spot price, there is also history).
- BitStamp now uses v2 API, also has support for EUR.
- Bitcointoyou does not seem to actually offer histories
(and `request_history` was undefined anyway)
- regenerate currencies.json
2019-02-27 23:49:25 +01:00
SomberNight 4b3a285871 exchange_rate: some clean-up and fixes
- generation of currencies.json was broken
- removed some dead exchanges
2019-02-27 21:48:33 +01:00
SomberNight 5a1778b7fe start using util.resource_path 2019-02-04 20:27:03 +01:00
SomberNight c3deb16a7d exchange rate: fix coinbase
closes #4897
2018-12-05 12:26:03 +01:00
Janus 37b009a342 qt history view custom fiat input fixes
previously, when you submitted a fiat value with thousands separator,
it would be discarded.
2018-11-27 17:00:26 +01:00
SomberNight 81cc20039e more type annotations in core lib 2018-10-22 16:41:25 +02:00
SomberNight e3b372946a rm aiosafe decorator. instead: log_exceptions and ignore_exceptions 2018-10-12 18:36:48 +02:00
SomberNight 5e4a4ae16b minor clean-up (prints/types/imports) 2018-09-28 17:58:46 +02:00
SomberNight 2a958499b6 fx: disable checking mime type in get_json
looking at you, CoinDesk..
2018-09-15 00:30:43 +02:00
SomberNight 6ccd83397c fx: asyncio.Event is not thread-safe; also the 'timeout' field was removed 2018-09-14 23:01:28 +02:00
SomberNight fffec71fb3 kivy fx: make sure displayed fiat values get updated 2018-09-10 16:43:04 +02:00
SomberNight 4a88ca1a3a fix --offline option for fx and trustedcoin 2018-09-08 17:56:29 +02:00
Janus 52b877ac3d network: add singleton accessor classmethod, port trustedcoin to aiohttp 2018-09-07 11:35:16 +02:00
SomberNight dc51e82f54 fx: don't dump trace if getting rates fails 2018-09-06 18:25:23 +02:00
Janus 6e80ba7b4f asyncio: labels, crash_reporter, fx: migrate requests use to aiohttp 2018-09-06 16:18:45 +02:00
Janus 097ac144d9 file reorganization with top-level module 2018-07-13 14:01:37 +02:00