R6�W� � @ s* d Z d d l TGd d � d e � Z d S)ag Support for using a dedicated read-slave. The read database is specified as a Model.Meta option, and will be used for SELECT statements: master = PostgresqlDatabase('master') read_slave = PostgresqlDatabase('read_slave') class BaseModel(ReadSlaveModel): class Meta: database = master read_slaves = [read_slave] # This database will be used for SELECTs. # Now define your models as you would normally. class User(BaseModel): username = CharField() # To force a SELECT on the master database, you can instantiate the SelectQuery # by hand: master_select = SelectQuery(User).where(...) � )�*c sR e Z d Z e d d � � Z e � f d d � � Z e � f d d � � Z � S)�ReadSlaveModelc C s_ t | j d d � s | j j St | d d � } | d t | j j � | _ | j j | j S)N�read_slaves�_read_slave_idx� ���)�getattrZ_meta�database�lenr r )�clsZcurrent_idx� r �/read_slave.py�_get_read_database s z!ReadSlaveModel._get_read_databasec s. t t | � j | | � } | j � | _ | S)N)�superr �selectr r )r �args�kwargs�query)� __class__r r r # s zReadSlaveModel.selectc sF t t | � j | | � } | j j � j d � rB | j � | _ | S)Nr )r r �rawZ_sql�lower� startswithr r )r r r r )r r r r ) s zReadSlaveModel.raw)�__name__� __module__�__qualname__�classmethodr r r r r )r r r s r N)�__doc__ZpeeweeZModelr r r r r �<module> s