Fallback to MemorySession if sqlite3 is not available

This commit is contained in:
Lonami Exo 2018-08-02 15:17:44 +02:00
parent 16f7626ceb
commit 7a7923b317
2 changed files with 21 additions and 3 deletions

View File

@ -13,7 +13,7 @@ from ..crypto import rsa
from ..extensions import markdown from ..extensions import markdown
from ..network import MTProtoSender, ConnectionTcpFull from ..network import MTProtoSender, ConnectionTcpFull
from ..network.mtprotostate import MTProtoState from ..network.mtprotostate import MTProtoState
from ..sessions import Session, SQLiteSession from ..sessions import Session, SQLiteSession, MemorySession
from ..tl import TLObject, functions, types from ..tl import TLObject, functions, types
from ..tl.alltlobjects import LAYER from ..tl.alltlobjects import LAYER
@ -171,7 +171,18 @@ class TelegramBaseClient(abc.ABC):
# Determine what session object we have # Determine what session object we have
if isinstance(session, str) or session is None: if isinstance(session, str) or session is None:
session = SQLiteSession(session) try:
session = SQLiteSession(session)
except ValueError:
import warnings
warnings.warn(
'The sqlite3 module is not available under this '
'Python installation and no custom session '
'instance was given; using MemorySession.\n'
'You will need to re-login every time unless '
'you use another session storage'
)
session = MemorySession()
elif not isinstance(session, Session): elif not isinstance(session, Session):
raise TypeError( raise TypeError(
'The given session must be a str or a Session instance.' 'The given session must be a str or a Session instance.'

View File

@ -1,7 +1,6 @@
import datetime import datetime
import json import json
import os import os
import sqlite3
from base64 import b64decode from base64 import b64decode
from os.path import isfile as file_exists from os.path import isfile as file_exists
@ -13,6 +12,11 @@ from ..tl.types import (
InputPhoto, InputDocument, PeerUser, PeerChat, PeerChannel InputPhoto, InputDocument, PeerUser, PeerChat, PeerChannel
) )
try:
import sqlite3
except ImportError:
sqlite3 = None
EXTENSION = '.session' EXTENSION = '.session'
CURRENT_VERSION = 4 # database version CURRENT_VERSION = 4 # database version
@ -27,6 +31,9 @@ class SQLiteSession(MemorySession):
""" """
def __init__(self, session_id=None): def __init__(self, session_id=None):
if sqlite3 is None:
raise ValueError('sqlite3 is not installed')
super().__init__() super().__init__()
self.filename = ':memory:' self.filename = ':memory:'
self.save_entities = True self.save_entities = True