Browse Source

Implement checking for updated versions

Eren Yilmaz 5 years ago
parent
commit
4d17ae21e7
5 changed files with 27 additions and 3 deletions
  1. 1 1
      routes.py
  2. 18 0
      run_client.py
  3. 1 1
      run_server.py
  4. 6 1
      server_controller.py
  5. 1 0
      version.py

+ 1 - 1
routes.py

@@ -3,7 +3,6 @@ valid_post_routes = {
     'login',
     'register',
     'depot',
-    'activate_key',
     'order', 'orders',
     'news',
     'trades',
@@ -22,6 +21,7 @@ valid_post_routes = {
     'issue_bond',
     'loans',
     'bonds',
+    'server_version',
 }
 
 push_message_types = set()

+ 18 - 0
run_client.py

@@ -4,8 +4,11 @@ import sys
 import time
 
 import requests
+from packaging import version as v
 
 import client_controller
+import version
+from connection import client_request, host
 from debug import debug
 from lib.print_exc_plus import print_exc_plus
 from routes import client_commands
@@ -28,12 +31,27 @@ def fake_loading_bar(msg, duration=5.):
     sys.stdout.flush()
 
 
+def check_for_updates():
+    server_version = client_request('server_version')['version']
+    client_version = version.__version__
+    if v.parse(server_version) != v.parse(client_version):
+        print(f'WARNING: You have Orderer version {client_version} installed while the server is running version {server_version}.')
+        print(f'         This may or may not lead to problems.')
+        print(f'         A recent client version should be available for download at '
+              f'         {host}/orderer.zip')
+
+
 def load():
     print('Loading...')
 
     fake_loading_bar('Initializing fake loading bars', duration=5)
     fake_loading_bar('Loading data from disk', duration=1)
     fake_loading_bar('Loading available commands', duration=3.5)
+    fake_loading_bar('Checking for updates', duration=0.4)
+    try:
+        check_for_updates()
+    except (ConnectionError, requests.exceptions.ConnectionError):
+        print('WARNING: There has been a problem connecting when to the server.')
     fake_loading_bar('Updating indices', duration=2)
     fake_loading_bar('Waiting', duration=5)
     print('Done.\n\n')

+ 1 - 1
run_server.py

@@ -84,7 +84,7 @@ def _process(path, json_request):
             model.connect(DB_NAME, create_if_not_exists=True)
             method_to_call = getattr(server_controller, path)
             try:
-                server_controller.before_request(json_request)
+                server_controller._before_request(json_request)
                 resp = call_controller_method_with_timeout(method_to_call, json_request)
                 if isinstance(resp, HttpError):
                     raise resp

+ 6 - 1
server_controller.py

@@ -6,6 +6,7 @@ from math import ceil, floor
 from passlib.hash import sha256_crypt
 
 import model
+import version
 from connection import check_missing_attributes, BadRequest, Forbidden, PreconditionFailed, NotFound
 from game import OWNABLE_NAME_PATTERN, BANK_NAME
 
@@ -318,7 +319,11 @@ def repay_loan(json_request):
     return {'message': "Successfully repayed loan"}
 
 
-def before_request(_json_request):
+def server_version(_json_request):
+    return {'version': version.__version__}
+
+
+def _before_request(_json_request):
     # pay interest rates for loans
     model.pay_loan_interest()
 

+ 1 - 0
version.py

@@ -0,0 +1 @@
+__version__ = '0.2.3'