mirror of
https://github.com/fishyboteso/fishyboteso.git
synced 2024-08-30 18:32:13 +00:00
#167 hotfix start fishy in offline mode if backend doesn't responds
This commit is contained in:
@ -1 +1 @@
|
|||||||
0.5.18
|
0.5.19
|
@ -1,3 +1,3 @@
|
|||||||
from .urls import get_notification_page, get_terms_page
|
from .urls import get_notification_page, get_terms_page
|
||||||
from .web import (get_session, is_subbed, register_user, send_fish_caught,
|
from .web import (get_session, is_subbed, _register_user, send_fish_caught,
|
||||||
send_notification, sub, unsub)
|
send_notification, sub, unsub)
|
||||||
|
@ -2,8 +2,11 @@ import logging
|
|||||||
import traceback
|
import traceback
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
|
|
||||||
|
from fishy.web import web
|
||||||
|
|
||||||
|
|
||||||
def uses_session(f):
|
def uses_session(f):
|
||||||
|
"""directly returns none if it couldn't get session, instead of running the function"""
|
||||||
@wraps(f)
|
@wraps(f)
|
||||||
def wrapper(*args, **kwargs):
|
def wrapper(*args, **kwargs):
|
||||||
from .web import get_session
|
from .web import get_session
|
||||||
@ -21,6 +24,9 @@ def fallback(default):
|
|||||||
# noinspection PyBroadException
|
# noinspection PyBroadException
|
||||||
@wraps(f)
|
@wraps(f)
|
||||||
def wrapper(*args, **kwargs):
|
def wrapper(*args, **kwargs):
|
||||||
|
if not web.is_online():
|
||||||
|
return default
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return f(*args, **kwargs)
|
return f(*args, **kwargs)
|
||||||
except Exception:
|
except Exception:
|
||||||
|
@ -10,6 +10,11 @@ from . import urls
|
|||||||
from .decorators import fallback, uses_session
|
from .decorators import fallback, uses_session
|
||||||
|
|
||||||
_session_id = None
|
_session_id = None
|
||||||
|
_online = True
|
||||||
|
|
||||||
|
|
||||||
|
def is_online():
|
||||||
|
return _online
|
||||||
|
|
||||||
|
|
||||||
@fallback(-1)
|
@fallback(-1)
|
||||||
@ -44,7 +49,7 @@ def logout():
|
|||||||
|
|
||||||
|
|
||||||
@fallback(None)
|
@fallback(None)
|
||||||
def register_user():
|
def _register_user():
|
||||||
ip = get_ip(GoogleDnsProvider)
|
ip = get_ip(GoogleDnsProvider)
|
||||||
body = {"ip": ip, "apiversion": apiversion}
|
body = {"ip": ip, "apiversion": apiversion}
|
||||||
response = requests.post(urls.user, json=body)
|
response = requests.post(urls.user, json=body)
|
||||||
@ -111,7 +116,12 @@ def unsub():
|
|||||||
|
|
||||||
|
|
||||||
def get_session(lazy=True):
|
def get_session(lazy=True):
|
||||||
global _session_id
|
"""
|
||||||
|
this doesn't have @fallback as this doesn't actually make any web calls directly
|
||||||
|
this web call needs to be the first thing to be called, as it sets the online status
|
||||||
|
todo maybe shift this to web.init() or something to signify that
|
||||||
|
"""
|
||||||
|
global _session_id, _online
|
||||||
|
|
||||||
# lazy loading logic
|
# lazy loading logic
|
||||||
if lazy and _session_id is not None:
|
if lazy and _session_id is not None:
|
||||||
@ -122,22 +132,22 @@ def get_session(lazy=True):
|
|||||||
|
|
||||||
# then create session
|
# then create session
|
||||||
if uid:
|
if uid:
|
||||||
_session_id, online = _create_new_session(uid)
|
_session_id, _online = _create_new_session(uid)
|
||||||
# if not, create new id then try creating session again
|
# if not, create new id then try creating session again
|
||||||
else:
|
else:
|
||||||
uid = register_user()
|
uid = _register_user()
|
||||||
config.set("uid", uid, True)
|
config.set("uid", uid, True)
|
||||||
logging.debug(f"New User, generated new uid: {uid}")
|
logging.debug(f"New User, generated new uid: {uid}")
|
||||||
if uid:
|
if uid:
|
||||||
_session_id, online = _create_new_session(uid)
|
_session_id, _online = _create_new_session(uid)
|
||||||
else:
|
else:
|
||||||
online = False
|
_online = False
|
||||||
|
|
||||||
# when the user is already registered but session is not created as uid is not found
|
# when the user is already registered but session is not created as uid is not found by the server
|
||||||
if online and not _session_id:
|
if _online and not _session_id:
|
||||||
logging.error("user not found, generating new uid.. contact dev if you don't want to loose data")
|
logging.error("user not found, generating new uid.. contact dev if you don't want to loose data")
|
||||||
new_uid = register_user()
|
new_uid = _register_user()
|
||||||
_session_id, online = _create_new_session(new_uid)
|
_session_id, _online = _create_new_session(new_uid)
|
||||||
config.set("uid", new_uid, True)
|
config.set("uid", new_uid, True)
|
||||||
config.set("old_uid", uid, True)
|
config.set("old_uid", uid, True)
|
||||||
|
|
||||||
@ -147,7 +157,7 @@ def get_session(lazy=True):
|
|||||||
@fallback((None, False))
|
@fallback((None, False))
|
||||||
def _create_new_session(uid):
|
def _create_new_session(uid):
|
||||||
body = {"uid": uid, "apiversion": apiversion}
|
body = {"uid": uid, "apiversion": apiversion}
|
||||||
response = requests.post(urls.session, json=body)
|
response = requests.post(urls.session, json=body, timeout=10)
|
||||||
|
|
||||||
if response.status_code == 405:
|
if response.status_code == 405:
|
||||||
return None, True
|
return None, True
|
||||||
|
Reference in New Issue
Block a user