<s> """<STR_LIT>""" <EOL> from sqlalchemy . sql import select , and_ , func <EOL> TBL_MASTER = '<STR_LIT>' <EOL> TBL_CHAT_PATTERN = '<STR_LIT>' <EOL> class Conversation : <EOL> MSG_TYPES = { <EOL> '<STR_LIT>' : <NUM_LIT:1> , <EOL> '<STR_LIT>' : <NUM_LIT:3> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> , <EOL> '<STR_LIT>' : <NUM_LIT> <EOL> } <EOL> MSG_DEST = { <EOL> '<STR_LIT>' : <NUM_LIT:0> , <EOL> '<STR_LIT>' : <NUM_LIT:1> <EOL> } <EOL> def __init__ ( self , db ) : <EOL> self . _db = db <EOL> self . _tbl_master = self . _db . reflect ( TBL_MASTER ) <EOL> self . _chat_tbls = { } <EOL> def get_conversations ( self ) : <EOL> master = self . _tbl_master <EOL> stmt = select ( [ master . c . name ] , and_ ( master . c . type == '<STR_LIT>' , <EOL> master . c . name . like ( TBL_CHAT_PATTERN ) ) ) <EOL> for row in self . _db . conn . execute ( stmt ) : <EOL> cid = row [ <NUM_LIT:0> ] <EOL> tbl = self . _get_chat_tbl ( cid ) <EOL> stmt = select ( [ select ( [ func . count ( tbl . c . MesLocalID ) ] ) . as_scalar ( ) , <EOL> tbl . c . Message , tbl . c . CreateTime , tbl . c . Type , tbl . c . Des ] ) . order_by ( tbl . c . CreateTime . desc ( ) ) . limit ( <NUM_LIT:1> ) <EOL> result = self . _db . conn . execute ( stmt ) . fetchone ( ) <EOL> yield { '<STR_LIT>' : cid , <EOL> '<STR_LIT>' : result [ <NUM_LIT:0> ] , <EOL> '<STR_LIT>' : result [ <NUM_LIT:1> ] , <EOL> '<STR_LIT>' : result [ <NUM_LIT:2> ] , <EOL> '<STR_LIT>' : result [ <NUM_LIT:3> ] , <EOL> '<STR_LIT>' : result [ <NUM_LIT:4> ] } <EOL> def get_messages ( self , cid ) : <EOL> tbl = self . _get_chat_tbl ( cid ) <EOL> stmt = select ( [ tbl . c . MesLocalID , tbl . c . CreateTime , tbl . c . Message , <EOL> tbl . c . Type , tbl . c . Des ] ) <EOL> for row in self . _db . conn . execute ( stmt ) : <EOL> yield { '<STR_LIT:id>' : row [ <NUM_LIT:0> ] , <EOL> '<STR_LIT>' : row [ <NUM_LIT:1> ] , <EOL> '<STR_LIT:content>' : row [ <NUM_LIT:2> ] , <EOL> '<STR_LIT:type>' : row [ <NUM_LIT:3> ] , <EOL> '<STR_LIT>' : row [ <NUM_LIT:4> ] } <EOL> def _get_chat_tbl ( self , cid ) : <EOL> if cid not in self . _chat_tbls : <EOL> self . _chat_tbls [ cid ] = self . _db . reflect ( cid ) <EOL> return self . _chat_tbls [ cid ] </s>
