fix(backend/mysql): isolate third-party module imports
currently there is a problem with loading the backends through the httpaste.Config class, since they aren't being lazily loaded, will have to rework this sometime later in the future.
This commit is contained in:
parent
4993a5a3ea
commit
9c31f044ce
1 changed files with 42 additions and 28 deletions
|
|
@ -1,19 +1,6 @@
|
|||
"""MySQL backend
|
||||
"""
|
||||
try:
|
||||
from mysql.connector import connect
|
||||
from mysql.connector.connection import MySQLConnection
|
||||
except ImportError as e:
|
||||
raise ImportError(' '.join((
|
||||
'\'mysql-connector-python\' is not installed.',
|
||||
'Install it by running',
|
||||
'\'python3 -m pip install mysql-connector-python\'.'
|
||||
))) from e
|
||||
|
||||
from typing import NamedTuple, Optional
|
||||
|
||||
from . import user
|
||||
from . import paste
|
||||
from typing import NamedTuple, Optional, Callable
|
||||
|
||||
|
||||
class Parameters(NamedTuple):
|
||||
|
|
@ -29,65 +16,77 @@ class Parameters(NamedTuple):
|
|||
#: database identifier
|
||||
database: str
|
||||
#: a mysql.connection.MySQLConnection object (does not apply to config)
|
||||
connection: Optional[MySQLConnection] = None
|
||||
connection: Optional[object] = None
|
||||
|
||||
|
||||
class User(object):
|
||||
"""MySQL user model backend
|
||||
"""
|
||||
|
||||
connection: MySQLConnection
|
||||
connection: object
|
||||
|
||||
def __init__(self, parameters: Parameters, model_class: type) -> None:
|
||||
|
||||
from . import user
|
||||
|
||||
connect = get_mysql_connect_callee()
|
||||
|
||||
self.interface = user
|
||||
|
||||
self.model_class = model_class
|
||||
|
||||
self.connection = get_connection(parameters)
|
||||
|
||||
def load(self, proto: object) -> object:
|
||||
|
||||
return user.load(proto, self.connection, self.model_class)
|
||||
return self.interface.load(proto, self.connection, self.model_class)
|
||||
|
||||
def dump(self, model: object) -> None:
|
||||
|
||||
return user.dump(model, self.connection)
|
||||
return self.interface.dump(model, self.connection)
|
||||
|
||||
def delete(self, proto: object) -> None:
|
||||
|
||||
return user.delete(proto, self.connection)
|
||||
return self.interface.delete(proto, self.connection)
|
||||
|
||||
def init(self) -> None:
|
||||
|
||||
return user.init(self.connection)
|
||||
return self.interface.init(self.connection)
|
||||
|
||||
def sanitize(self) -> None:
|
||||
|
||||
return user.sanitize(self.connection, self.model_class)
|
||||
return self.interface.sanitize(self.connection, self.model_class)
|
||||
|
||||
|
||||
class Paste(object):
|
||||
"""MySQL paste model backend
|
||||
"""
|
||||
|
||||
connection: MySQLConnection
|
||||
connection: object
|
||||
|
||||
def __init__(self, parameters: Parameters, model_class: type) -> None:
|
||||
|
||||
from . import paste
|
||||
|
||||
connect = get_mysql_connect_callee()
|
||||
|
||||
self.interface = paste
|
||||
|
||||
self.model_class = model_class
|
||||
|
||||
self.connection = get_connection(parameters)
|
||||
self.connection = get_connection(parameters, connect)
|
||||
|
||||
def load(self, proto: object) -> object:
|
||||
|
||||
return paste.load(proto, self.connection, self.model_class)
|
||||
return self.interface.load(proto, self.connection, self.model_class)
|
||||
|
||||
def dump(self, model: object) -> None:
|
||||
|
||||
return paste.dump(model, self.connection)
|
||||
return self.interface.dump(model, self.connection)
|
||||
|
||||
def delete(self, proto: object) -> None:
|
||||
|
||||
return paste.delete(proto, self.connection)
|
||||
return self.interface.delete(proto, self.connection)
|
||||
|
||||
def init(self) -> None:
|
||||
|
||||
|
|
@ -95,10 +94,25 @@ class Paste(object):
|
|||
|
||||
def sanitize(self) -> None:
|
||||
|
||||
return paste.sanitize(self.connection, self.model_class)
|
||||
return self.interface.sanitize(self.connection, self.model_class)
|
||||
|
||||
|
||||
def get_connection(parameters: Parameters) -> MySQLConnection:
|
||||
def get_mysql_connect_callee() -> object:
|
||||
|
||||
try:
|
||||
from mysql.connector import connect
|
||||
from mysql.connector.connection import MySQLConnection
|
||||
except ImportError as e:
|
||||
raise ImportError(' '.join((
|
||||
'\'mysql-connector-python\' is not installed.',
|
||||
'Install it by running',
|
||||
'\'python3 -m pip install mysql-connector-python\'.'
|
||||
))) from e
|
||||
|
||||
return connect
|
||||
|
||||
|
||||
def get_connection(parameters: Parameters, connect_callee: Callable) -> object:
|
||||
"""get a mysql.connection.MySQLConnection object
|
||||
"""
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue