Avoid monkeypatching PySocks

This commit is contained in:
tecnovert 2023-02-26 22:42:44 +02:00
parent f33629f2a5
commit 724e7f0ffc
No known key found for this signature in database
GPG key ID: 8ED6D8750C4E3F93
3 changed files with 141 additions and 146 deletions

View file

@ -15,6 +15,8 @@ import threading
import traceback import traceback
import subprocess import subprocess
from sockshandler import SocksiPyHandler
import basicswap.config as cfg import basicswap.config as cfg
from .rpc import ( from .rpc import (
@ -172,6 +174,15 @@ class BaseApp:
socket.getaddrinfo = self.default_socket_getaddrinfo socket.getaddrinfo = self.default_socket_getaddrinfo
socket.setdefaulttimeout(self.default_socket_timeout) socket.setdefaulttimeout(self.default_socket_timeout)
def readURL(self, url: str, timeout: int = 120, headers=None) -> bytes:
open_handler = None
if self.use_tor_proxy:
open_handler = SocksiPyHandler(socks.PROXY_TYPE_SOCKS5, self.tor_proxy_host, self.tor_proxy_port)
opener = urllib.request.build_opener(open_handler) if self.use_tor_proxy else urllib.request.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
request = urllib.request.Request(url, headers=headers)
return opener.open(request, timeout=timeout).read()
def logException(self, message) -> None: def logException(self, message) -> None:
self.log.error(message) self.log.error(message)
if self.debug: if self.debug:

View file

@ -16,7 +16,6 @@ import random
import shutil import shutil
import string import string
import struct import struct
import urllib.request
import hashlib import hashlib
import secrets import secrets
import datetime as dt import datetime as dt
@ -6397,8 +6396,6 @@ class BasicSwap(BaseApp):
ticker_from = ci_from.chainparams()['ticker'] ticker_from = ci_from.chainparams()['ticker']
ticker_to = ci_to.chainparams()['ticker'] ticker_to = ci_to.chainparams()['ticker']
headers = {'Connection': 'close'} headers = {'Connection': 'close'}
try:
self.setConnectionParameters()
rv = {} rv = {}
if rate_sources.get('coingecko.com', True): if rate_sources.get('coingecko.com', True):
@ -6406,8 +6403,7 @@ class BasicSwap(BaseApp):
url = 'https://api.coingecko.com/api/v3/simple/price?ids={},{}&vs_currencies=usd,btc'.format(exchange_name_from, exchange_name_to) url = 'https://api.coingecko.com/api/v3/simple/price?ids={},{}&vs_currencies=usd,btc'.format(exchange_name_from, exchange_name_to)
self.log.debug(f'lookupRates: {url}') self.log.debug(f'lookupRates: {url}')
start = time.time() start = time.time()
req = urllib.request.Request(url, headers=headers) js = json.loads(self.readURL(url, timeout=10, headers=headers))
js = json.loads(urllib.request.urlopen(req, timeout=10).read())
js['time_taken'] = time.time() - start js['time_taken'] = time.time() - start
rate = float(js[exchange_name_from]['usd']) / float(js[exchange_name_to]['usd']) rate = float(js[exchange_name_from]['usd']) / float(js[exchange_name_to]['usd'])
js['rate_inferred'] = ci_to.format_amount(rate, conv_int=True, r=1) js['rate_inferred'] = ci_to.format_amount(rate, conv_int=True, r=1)
@ -6442,8 +6438,7 @@ class BasicSwap(BaseApp):
url = f'{bittrex_api_v3}/markets/{pair}/ticker' url = f'{bittrex_api_v3}/markets/{pair}/ticker'
self.log.debug(f'lookupRates: {url}') self.log.debug(f'lookupRates: {url}')
start = time.time() start = time.time()
req = urllib.request.Request(url, headers=headers) js = json.loads(self.readURL(url, timeout=10, headers=headers))
js = json.loads(urllib.request.urlopen(req, timeout=10).read())
js['time_taken'] = time.time() - start js['time_taken'] = time.time() - start
js['pair'] = pair js['pair'] = pair
try: try:
@ -6460,8 +6455,7 @@ class BasicSwap(BaseApp):
url = f'{bittrex_api_v3}/markets/{pair}/ticker' url = f'{bittrex_api_v3}/markets/{pair}/ticker'
self.log.debug(f'lookupRates: {url}') self.log.debug(f'lookupRates: {url}')
start = time.time() start = time.time()
req = urllib.request.Request(url, headers=headers) js = json.loads(self.readURL(url, timeout=10, headers=headers))
js = json.loads(urllib.request.urlopen(req, timeout=10).read())
js['time_taken'] = time.time() - start js['time_taken'] = time.time() - start
js['pair'] = pair js['pair'] = pair
js['rate_last'] = js['lastTradeRate'] js['rate_last'] = js['lastTradeRate']
@ -6473,8 +6467,7 @@ class BasicSwap(BaseApp):
url = f'{bittrex_api_v3}/markets/{pair}/ticker' url = f'{bittrex_api_v3}/markets/{pair}/ticker'
self.log.debug(f'lookupRates: {url}') self.log.debug(f'lookupRates: {url}')
start = time.time() start = time.time()
req = urllib.request.Request(url, headers=headers) js_from = json.loads(self.readURL(url, timeout=10, headers=headers))
js_from = json.loads(urllib.request.urlopen(req, timeout=10).read())
js_from['time_taken'] = time.time() - start js_from['time_taken'] = time.time() - start
js_from['pair'] = pair js_from['pair'] = pair
@ -6482,8 +6475,7 @@ class BasicSwap(BaseApp):
url = f'{bittrex_api_v3}/markets/{pair}/ticker' url = f'{bittrex_api_v3}/markets/{pair}/ticker'
self.log.debug(f'lookupRates: {url}') self.log.debug(f'lookupRates: {url}')
start = time.time() start = time.time()
req = urllib.request.Request(url, headers=headers) js_to = json.loads(self.readURL(url, timeout=10, headers=headers))
js_to = json.loads(urllib.request.urlopen(req, timeout=10).read())
js_to['time_taken'] = time.time() - start js_to['time_taken'] = time.time() - start
js_to['pair'] = pair js_to['pair'] = pair
@ -6543,5 +6535,3 @@ class BasicSwap(BaseApp):
return rv_array return rv_array
return rv return rv
finally:
self.popConnectionParameters()

View file

@ -1,11 +1,10 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Copyright (c) 2019-2022 tecnovert # Copyright (c) 2019-2023 tecnovert
# Distributed under the MIT software license, see the accompanying # Distributed under the MIT software license, see the accompanying
# file LICENSE or http://www.opensource.org/licenses/mit-license.php. # file LICENSE or http://www.opensource.org/licenses/mit-license.php.
import json import json
import urllib.request
class Explorer(): class Explorer():
@ -17,12 +16,7 @@ class Explorer():
def readURL(self, url): def readURL(self, url):
self.log.debug('Explorer url: {}'.format(url)) self.log.debug('Explorer url: {}'.format(url))
try: return self.swapclient.readURL(url)
self.swapclient.setConnectionParameters()
req = urllib.request.Request(url)
return urllib.request.urlopen(req).read()
finally:
self.swapclient.popConnectionParameters()
class ExplorerInsight(Explorer): class ExplorerInsight(Explorer):