22
33from flask import current_app , g , request
44
5+
56class FlaskReplicated (object ):
67 READONLY_METHODS = set (['GET' , 'HEAD' ])
78
89 def __init__ (self , app = None ):
910 if app is not None :
1011 self .init_app (app )
12+ self .AUTO_SLAVE = app .config .get ('AUTO_READ_ON_SLAVE' , True )
1113
1214 def init_app (self , app ):
1315 assert hasattr (app , 'extensions' )
1416 assert 'sqlalchemy' in app .extensions
1517 if 'replicated' not in app .extensions :
1618 app .extensions ['replicated' ] = self
1719 binds = app .config .get ('SQLALCHEMY_BINDS' ) or {}
18- auto_slave = app .config .get ('AUTO_READ_ON_SLAVE' , True )
1920 if 'slave' in binds :
20- app .before_request (self ._pick_database_replica , auto_slave )
21+ app .before_request (self ._pick_database_replica )
2122 db = app .extensions ['sqlalchemy' ].db
2223 get_engine_vanilla = db .get_engine
2324
@@ -30,11 +31,11 @@ def get_replicated_engine(app=app, bind=None):
3031 return get_engine_vanilla (app , bind )
3132 db .get_engine = get_replicated_engine
3233
33- def _pick_database_replica (self , auto_slave = True ):
34+ def _pick_database_replica (self ):
3435 func = current_app .view_functions .get (request .endpoint )
3536 if getattr (func , 'use_master_database' , False ):
3637 g .use_master = True
37- g .use_slave = ( request .method in self .READONLY_METHODS and auto_slave ) or getattr (func , 'use_slave_database' , False )
38+ g .use_slave = ( request .method in self .READONLY_METHODS and self . AUTO_SLAVE ) or getattr (func , 'use_slave_database' , False )
3839
3940def use_master_database (func ):
4041 func .use_master_database = True
@@ -43,4 +44,4 @@ def use_master_database(func):
4344
4445def use_slave_database (func ):
4546 func .use_slave_database = True
46- return func
47+ return func
0 commit comments