stop checking github for new versions

This commit is contained in:
Alex Grintsvayg 2017-04-26 13:27:24 -04:00
parent cc14ac4a46
commit e19e2f3609
2 changed files with 6 additions and 110 deletions

View file

@ -8,7 +8,6 @@ import requests
import urllib import urllib
import json import json
import textwrap import textwrap
from requests import exceptions as requests_exceptions
import random import random
from twisted.web import server from twisted.web import server
@ -109,7 +108,6 @@ class IterableContainer(object):
class Checker(object): class Checker(object):
"""The looping calls the daemon runs""" """The looping calls the daemon runs"""
INTERNET_CONNECTION = 'internet_connection_checker' INTERNET_CONNECTION = 'internet_connection_checker'
VERSION = 'version_checker'
CONNECTION_STATUS = 'connection_status_checker' CONNECTION_STATUS = 'connection_status_checker'
@ -143,57 +141,6 @@ class CheckInternetConnection(object):
self.daemon.connected_to_internet = utils.check_connection() self.daemon.connected_to_internet = utils.check_connection()
class CheckRemoteVersion(object):
URL = 'https://api.github.com/repos/lbryio/lbry-app/releases/latest'
def __init__(self):
self.version = None
def __call__(self):
d = threads.deferToThread(self._get_lbry_electron_client_version)
d.addErrback(self._trap_and_log_error, 'lbry-app')
d.addErrback(log.fail(), 'Failure checking versions on github')
def _trap_and_log_error(self, err, module_checked):
# KeyError is thrown by get_version_from_github
# It'd be better to catch the error before trying to parse the response
err.trap(requests_exceptions.RequestException, KeyError)
log.warning("Failed to check latest %s version from github", module_checked)
def _get_lbry_electron_client_version(self):
# We'll need to ensure the lbry-app version is in sync with the lbrynet-daemon version
self._set_data_from_github()
log.info(
"remote lbrynet %s > local lbrynet %s = %s",
self.version, LBRYNET_VERSION,
utils.version_is_greater_than(self.version, LBRYNET_VERSION)
)
def _set_data_from_github(self):
release = self._get_release_data()
# githubs documentation claims this should never happen, but we'll check just in case
if release['prerelease']:
raise Exception('Release {} is a pre-release'.format(release['tag_name']))
self.version = self._get_version_from_release(release)
def _get_release_data(self):
response = requests.get(self.URL, timeout=20)
release = response.json()
return release
@staticmethod
def _get_version_from_release(release):
"""Return the latest released version from github."""
tag = release['tag_name']
return get_version_from_tag(tag)
def is_update_available(self):
try:
return utils.version_is_greater_than(self.version, LBRYNET_VERSION)
except TypeError:
return False
class AlwaysSend(object): class AlwaysSend(object):
def __init__(self, value_generator, *args, **kwargs): def __init__(self, value_generator, *args, **kwargs):
self.value_generator = value_generator self.value_generator = value_generator
@ -282,10 +229,8 @@ class Daemon(AuthJSONRPCServer):
self.streams = {} self.streams = {}
self.name_cache = {} self.name_cache = {}
self.exchange_rate_manager = ExchangeRateManager() self.exchange_rate_manager = ExchangeRateManager()
self._remote_version = CheckRemoteVersion()
calls = { calls = {
Checker.INTERNET_CONNECTION: LoopingCall(CheckInternetConnection(self)), Checker.INTERNET_CONNECTION: LoopingCall(CheckInternetConnection(self)),
Checker.VERSION: LoopingCall(self._remote_version),
Checker.CONNECTION_STATUS: LoopingCall(self._update_connection_status), Checker.CONNECTION_STATUS: LoopingCall(self._update_connection_status),
} }
self.looping_call_manager = LoopingCallManager(calls) self.looping_call_manager = LoopingCallManager(calls)
@ -311,7 +256,6 @@ class Daemon(AuthJSONRPCServer):
log.info("Starting lbrynet-daemon") log.info("Starting lbrynet-daemon")
self.looping_call_manager.start(Checker.INTERNET_CONNECTION, 3600) self.looping_call_manager.start(Checker.INTERNET_CONNECTION, 3600)
self.looping_call_manager.start(Checker.VERSION, 1800)
self.looping_call_manager.start(Checker.CONNECTION_STATUS, 30) self.looping_call_manager.start(Checker.CONNECTION_STATUS, 30)
self.exchange_rate_manager.start() self.exchange_rate_manager.start()
@ -1185,7 +1129,6 @@ class Daemon(AuthJSONRPCServer):
{ {
'build': (str) build type (e.g. "dev", "rc", "release"), 'build': (str) build type (e.g. "dev", "rc", "release"),
'ip': (str) remote ip, if available, 'ip': (str) remote ip, if available,
'lbrynet_update_available': (bool) whether there's an update available,
'lbrynet_version': (str) lbrynet_version, 'lbrynet_version': (str) lbrynet_version,
'lbryum_version': (str) lbryum_version, 'lbryum_version': (str) lbryum_version,
'lbryschema_version': (str) lbryschema_version, 'lbryschema_version': (str) lbryschema_version,
@ -1194,13 +1137,10 @@ class Daemon(AuthJSONRPCServer):
'platform': (str) platform string 'platform': (str) platform string
'processor': (str) processor type, 'processor': (str) processor type,
'python_version': (str) python version, 'python_version': (str) python version,
'remote_lbrynet': (str) most recent lbrynet version available from github
} }
""" """
platform_info = self._get_platform() platform_info = self._get_platform()
platform_info['remote_lbrynet'] = self._remote_version.version
platform_info['lbrynet_update_available'] = self._remote_version.is_update_available()
log.info("Get version info: " + json.dumps(platform_info)) log.info("Get version info: " + json.dumps(platform_info))
return self._render_response(platform_info) return self._render_response(platform_info)
@ -2741,14 +2681,6 @@ def get_blob_payment_rate_manager(session, payment_rate_manager=None):
return payment_rate_manager or session.payment_rate_manager return payment_rate_manager or session.payment_rate_manager
def get_version_from_tag(tag):
match = re.match('v([\d.]+)', tag)
if match:
return match.group(1)
else:
raise Exception('Failed to parse version from tag {}'.format(tag))
# lbryum returns json loadeable object with amounts as decimal encoded string, # lbryum returns json loadeable object with amounts as decimal encoded string,
# convert them into floats for the daemon # convert them into floats for the daemon
# TODO: daemon should also use decimal encoded string # TODO: daemon should also use decimal encoded string

View file

@ -1,54 +1,18 @@
import mock import mock
import json import json
import requests
from tests.mocks import BlobAvailabilityTracker as DummyBlobAvailabilityTracker
from tests import util
from twisted.internet import defer from twisted.internet import defer
from twisted.internet import reactor
from twisted.trial import unittest from twisted.trial import unittest
from lbryschema.decode import smart_decode from lbryschema.decode import smart_decode
from lbrynet.lbrynet_daemon import Daemon from lbrynet import conf
from lbrynet.core import Session, PaymentRateManager, Wallet from lbrynet.core import Session, PaymentRateManager, Wallet
from lbrynet.lbrynet_daemon.Daemon import Daemon as LBRYDaemon from lbrynet.lbrynet_daemon.Daemon import Daemon as LBRYDaemon
from lbrynet.lbrynet_daemon import ExchangeRateManager from lbrynet.lbrynet_daemon import ExchangeRateManager
from lbrynet import conf
from tests import util
from tests.mocks import mock_conf_settings, FakeNetwork from tests.mocks import mock_conf_settings, FakeNetwork
from tests.mocks import BlobAvailabilityTracker as DummyBlobAvailabilityTracker
class MiscTests(unittest.TestCase):
def test_get_lbry_electron_client_version_from_github(self):
response = mock.create_autospec(requests.Response)
# don't need to mock out the entire response from the api
# but at least need 'tag_name'
response.json.return_value = {
"url": "https://api.github.com/repos/lbryio/lbry/releases/3685199",
"assets_url": "https://api.github.com/repos/lbryio/lbry/releases/3685199/assets",
"html_url": "https://github.com/lbryio/lbry/releases/tag/v0.3.8",
"id": 3685199,
"tag_name": "v0.3.8",
"prerelease": False
}
with mock.patch('lbrynet.lbrynet_daemon.Daemon.requests') as req:
req.get.return_value = response
rv = Daemon.CheckRemoteVersion()
rv._get_lbry_electron_client_version()
self.assertEqual('0.3.8', rv.version)
def test_error_is_thrown_if_prerelease(self):
response = mock.create_autospec(requests.Response)
response.json.return_value = {
"tag_name": "v0.3.8",
"prerelease": True
}
with mock.patch('lbrynet.lbrynet_daemon.Daemon.requests') as req:
req.get.return_value = response
rv = Daemon.CheckRemoteVersion()
with self.assertRaises(Exception):
rv._get_lbry_electron_client_version()
def test_error_is_thrown_when_version_cant_be_parsed(self):
with self.assertRaises(Exception):
Daemon.get_version_from_tag('garbage')
def get_test_daemon(data_rate=None, generous=True, with_fee=False): def get_test_daemon(data_rate=None, generous=True, with_fee=False):