o
    h5                     @   s  d dl Z d dlmZmZmZmZmZmZmZ d dl	m
Z
 d dlmZmZmZ d dlmZ d dlmZ d dlmZmZmZmZmZ d dlmZ d d	lmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d d
l'm(Z(m)Z) d dl*m+Z+ d dl,m-Z-m.Z.m/Z/m0Z0 G dd dZ1G dd dZ2dS )    N)AnyDictListOptionalSetTypeUnion)
Connection)COM_BINLOG_DUMPCOM_BINLOG_DUMP_GTIDCOM_REGISTER_SLAVE)
DictCursor)OperationalError)BINLOG_DUMP_NON_BLOCKBINLOG_THROUGH_GTIDMAX_HEARTBEATROTATE_EVENTTABLE_MAP_EVENT)BinLogNotEnabledError)BeginLoadQueryEventBinLogEventExecuteLoadQueryEventFormatDescriptionEvent	GtidEventHeartbeatLogEventNotImplementedEvent
QueryEventRotateEvent	StopEventXidEvent)GtidGtidSet)BinLogPacket)DeleteRowsEventTableMapEventUpdateRowsEventWriteRowsEventc                   @   s8   e Zd Zdeeeef fddZd
dedefddZ	d	S )ReportSlavevaluec              	   C   s   d| _ d| _d| _d| _t|ttfr7z|d | _ |d | _|d | _t|d | _W d S  ty6   Y d S w t|t	rVdD ]}z
t
| |||  W q> tyS   Y q>w d S || _ d S )N r            )hostnameusernamepasswordport)	_hostname	_username	_password_port
isinstancetuplelistint
IndexErrordictsetattrKeyError)selfr(   key r?   c/var/www/html/aiguide_backend/venv/lib/python3.10/site-packages/asyncmy/replication/binlogstream.py__init__(   s,   




zReportSlave.__init__r   	server_id	master_idc                 C   s   t | j }t | j }t | j }d| d | d | d d d }d}td|tdt td| td	t||d  | j  td	t||d  | j  td	t||d  | j  td
| j	 tdd td| S )N   r*   r+      i  <i!Bz<Lz<%dp<Hz<lr   )
lenr1   encoder2   r3   structpackr   minr4   )r=   rB   rC   len_hostnamelen_usernamelen_password
packet_lenmax_string_lenr?   r?   r@   encoded>   sP   	





zReportSlave.encodedN)r   )
__name__
__module____qualname__r   strr6   r:   rA   r8   rS   r?   r?   r?   r@   r'   '   s    r'   c                )   @   sf  e Zd ZddgZ																	d.dededed	ee d
ee deeee	e
f  dee dee deee  dededee deeee   deeee   dedeee  deee  deee  deee  def(ddZedeeee   deeee   defddZdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- ZdS )/BinLogStreami  i  NFT
connectionctl_connectionrB   
slave_uuidslave_heartbeatreport_slavemaster_log_filemaster_log_positionmaster_auto_positionresume_streamblockingskip_to_timestamponly_eventsignored_eventsfilter_non_implemented_eventsonly_tablesignored_tablesonly_schemasignored_schemasfreeze_schemac                 C   s   || _ || _|| _|| _|| _|| _|| _|
| _|	| _|| _	|| _
|| _|| _|| _|| _|| _| j| j_d| _d| _d | _|rEt|| _| |||| _ttg| j| _i | _d S NF)_freeze_schema_ignored_schemas_only_schemas_ignored_tables_only_tables_skip_to_timestamp	_blocking_resume_stream_master_auto_position_master_log_position_master_log_file
_server_id_slave_heartbeat_slave_uuid_connection_ctl_connection_get_table_information_use_checksum
_connected_report_slaver'   _allowed_event_list_allowed_eventsr$   r   _allowed_events_in_packet
_table_map)r=   rY   rZ   rB   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   r?   r?   r@   rA   c   s>   


zBinLogStream.__init__c                 C   s   | d ur	t | }nttttttttt	t
tttth}|d ur'|D ]}|| q|r@z
|t W t|S  ty?   Y t|S w t|S N)setr   r   r   r   r   r   r   r   r%   r&   r#   r$   r   r   remover<   	frozenset)rd   re   rf   eventser?   r?   r@   r      s:   
z BinLogStream._allowed_event_listc           	   	      s  | j  I d H  |  I d H | _| j  4 I d H "}| jr'|dI d H  | jr7|d| j dI d H  | jr[tt	t
d | j}|t
krJt
}t|d }|d| I d H  |  I d H  | js| jd u so| jd u r|dI d H  | I d H }|d u rtd|d d	 \| _| _td
t| jd tdt }| jr|td| j7 }n|tdd7 }d}| js|tO }|td|7 }|td| j7 }|| j 7 }n[t| j}|j}d}dtd
||  tdt }d}| js|tO }|tO }|td|7 }|td| j7 }|tdd7 }|d7 }|tdd7 }|td|j7 }|| 7 }W d   I d H  n1 I d H sDw   Y  | j  | d| j _!d| _"d S )Nz5set @master_binlog_checksum= @@global.binlog_checksumzset @slave_uuid= ''g       @i ʚ;zset @master_heartbeat_period= zSHOW MASTER STATUSz$MySQL binary logging is not enabled.r+   rF      rG   z<IrE   r   rH          r,   s      z<Qr*   T)#r{   connect_checksum_enabler~   cursorexecuterz   ry   floatrM   r   r8   _register_slaveru   rw   rv   fetchoner   rK   rL   rI   r
   rt   rs   r   rx   rJ   r!   encoded_lengthr   r   rS   _write_bytes_next_seq_idr   )	r=   r   	heartbeatmaster_statuspreludeflagsgtid_setencoded_data_sizeheader_sizer?   r?   r@   _connect   sv   


*M
zBinLogStream._connectc                    s&   | j r| j I d H  d| _ d S d S rl   )r   r{   ensure_closedr=   r?   r?   r@   close  s
   
zBinLogStream.closec                    sj  | j s|  I d H  z
| j I d H }W n& ty; } z|j\}}|| jv r5|  I d H  W Y d }~d S |d }~ww | rI|  I d H  d S |	 sOd S t
|| j| j| j| j| j| j| j| j| j
}| I d H  |jtkr|jj| _|jj| _i | _n|jr|j| _| jr|j| jk rd S |jtkr|jd ur|jj | j|jj!< |jd u s|jj"| j#vrd S |jS r   )$r   r   r{   read_packetr   argsMYSQL_EXPECTED_ERROR_CODESr   is_eof_packetis_ok_packetr"   r   r|   r~   r   rq   rp   ro   rn   rm   init
event_typer   eventpositionrv   next_binlogrw   log_posrr   	timestampr   tabletable_id	__class__r   )r=   pktr   code_binlog_eventr?   r?   r@   _read  sX   




zBinLogStream._readc              	      s   | j  4 I d H D}|dI d H  | I d H }|d u r*	 W d   I d H  dS |d d \}}|dkrB	 W d   I d H  dS 	 W d   I d H  dS 1 I d H sTw   Y  d S )Nz,SHOW GLOBAL VARIABLES LIKE 'BINLOG_CHECKSUM'Fr+   NONET)r{   r   r   r   )r=   r   resultvarr(   r?   r?   r@   r   H  s   0zBinLogStream._checksum_enablec                    sB   | j sd S | j | j}| j| d| j_| j I d H  d S )Nr*   )r   rS   rx   r{   r   r   r   )r=   packetr?   r?   r@   r   S  s   zBinLogStream._register_slavec              	      sd   | j t4 I d H }|d||fI d H  | W  d   I d H  S 1 I d H s+w   Y  d S )Na  
                    SELECT
                        COLUMN_NAME, COLLATION_NAME, CHARACTER_SET_NAME,
                        COLUMN_COMMENT, COLUMN_TYPE, COLUMN_KEY, ORDINAL_POSITION
                    FROM
                        information_schema.columns
                    WHERE
                        table_schema = %s AND table_name = %s
                    ORDER BY ORDINAL_POSITION
                    )r|   r   r   r   fetchall)r=   schemar   r   r?   r?   r@   r}   [  s   

0z#BinLogStream._get_table_informationc                 C   s   | S r   r?   r   r?   r?   r@   	__aiter__m  s   zBinLogStream.__aiter__c                    s@   | j s|  I d H  |  I d H }|d u r|  I d H }q|S r   )r   r   r   )r=   retr?   r?   r@   	__anext__p  s   zBinLogStream.__anext__)NNNNNNFFNNNTNNNNF)rT   rU   rV   r   r	   r8   r   rW   r   r6   r:   r   r    boolr   r   r   rA   staticmethodr   r   r   r   r   r   r}   r   r   r?   r?   r?   r@   rX   `   s    	






7"T2rX   )3rK   typingr   r   r   r   r   r   r   asyncmyr	   asyncmy.constants.COMMANDr
   r   r   asyncmy.cursorsr   asyncmy.errorsr   asyncmy.replication.constantsr   r   r   r   r   asyncmy.replication.errorsr   asyncmy.replication.eventsr   r   r   r   r   r   r   r   r   r   r   asyncmy.replication.gtidr    r!   asyncmy.replication.packetsr"   asyncmy.replication.row_eventsr#   r$   r%   r&   r'   rX   r?   r?   r?   r@   <module>   s    $49