3
S^A                 @   s&  d Z dkZegZy"ddlZedd eD ZdZW n ek
rH   d ZY nX d!d"l	m
Z
mZmZmZ d!d#lmZ yPd$d%lmZ d$d&lmZ d$d'lmZ d$d(lmZ d$d)lmZ d$d*lmZ d$d+lmZ d$d,lmZ d$d-lmZ d$d.lmZ d$d/lmZ dd0lmZ dd1lmZ dd2lmZ dd3lm Z  dd4l!m"Z" ydd5l#m$Z$ ej%e$ W n ek
rb   Y nX ej%e" i Z&x(ej'j(j) D ]\Z*Z+e+e&d6j,e*< qW x(ej-j(j) D ]\Z*Z+e+e&d7j,e*< qW x(ej.j/j) D ]\Z*Z+e+e&d8j,e*< qW x&ej0j) D ]\Z*Z+e+e&d9j,e*< qW x(ej1j2j) D ]\Z*Z+e+e&d:j,e*< q&W x(ej3j4j) D ]\Z*Z+e+e&d;j,e*< qPW x(ej5j6j) D ]\Z*Z+e+e&d<j,e*< qzW x(ej7j(j) D ]\Z*Z+e+e&d=j,e*< qW x(ej8j(j) D ]\Z*Z+e+e&d>j,e*< qW x*ej9j:j;j) D ]\Z*Z+e+e&d?j,e*< qW x*ej9j:j<j) D ]\Z*Z+e+e&d@j,e*< q&W x(ej9j=j) D ]\Z*Z+e+e&dAj,e*< qPW x(ej>j(j) D ]\Z*Z+e+e&dBj,e*< qzW x(ej?j(j) D ]\Z*Z+e+e&dCj,e*< qW x(ej@jAj) D ]\Z*Z+e+e&dDj,e*< qW x(ejBjCj) D ]\Z*Z+e+e&dEj,e*< qW x(ejDjEj) D ]\Z*Z+e+e&dFj,e*< q"W x*ejFjGj(j) D ]\Z*Z+e+e&dGj,e*< qNW x(ejHjIj) D ]\Z*Z+e+e&dHj,e*< qxW ejJ ZKejLeKZMeKjNejOjPejQjR eKjNejOjPejQjR eKjNejOjPejQjR eKjNejOjPejQjR eKjNejOjPejQjR eKjNejOjPejQjR eKjNejOjPejQjR eKjNejOjPejQjR eKjNejOjPejQjR eKjNejOjPejQjR eKjNejOjPejQjR edId eD ZdZSG dJdK dKeTZUW n( ek
r   d ZSesedLY nX dldmdndodpdWZVG dXdY dYeTZWG dZd[ d[eTZXd\d] ZYdS )qzXThis module contains the implementation of a helper class for MySQL X
Protobuf messages.Mysqlx.ServerMessages.Type.OK	Mysqlx.Ok Mysqlx.ServerMessages.Type.ERRORMysqlx.Error,Mysqlx.ServerMessages.Type.CONN_CAPABILITIESMysqlx.Connection.Capabilities5Mysqlx.ServerMessages.Type.SESS_AUTHENTICATE_CONTINUE#Mysqlx.Session.AuthenticateContinue/Mysqlx.ServerMessages.Type.SESS_AUTHENTICATE_OKMysqlx.Session.AuthenticateOk!Mysqlx.ServerMessages.Type.NOTICEMysqlx.Notice.Frame5Mysqlx.ServerMessages.Type.RESULTSET_COLUMN_META_DATAMysqlx.Resultset.ColumnMetaData(Mysqlx.ServerMessages.Type.RESULTSET_ROWMysqlx.Resultset.Row/Mysqlx.ServerMessages.Type.RESULTSET_FETCH_DONEMysqlx.Resultset.FetchDone4Mysqlx.ServerMessages.Type.RESULTSET_FETCH_SUSPENDEDMysqlx.Resultset.FetchSuspended?Mysqlx.ServerMessages.Type.RESULTSET_FETCH_DONE_MORE_RESULTSETS(Mysqlx.Resultset.FetchDoneMoreResultsets.Mysqlx.ServerMessages.Type.SQL_STMT_EXECUTE_OKMysqlx.Sql.StmtExecuteOk?Mysqlx.ServerMessages.Type.RESULTSET_FETCH_DONE_MORE_OUT_PARAMS'Mysqlx.Resultset.FetchDoneMoreOutParams    Nc             C   s"   g | ]\}}t tj||fqS  )int	_mysqlxpb
enum_value).0keyvalr   r   J/tmp/pip-build-8app2_gc/mysql-connector-python/mysqlx/protobuf/__init__.py
<listcomp>A   s   r$   TF   )PY3NUMERIC_TYPESSTRING_TYPES
BYTE_TYPES)encode_to_bytes   )mysqlx_connection_pb2)mysqlx_crud_pb2)mysqlx_datatypes_pb2)mysqlx_expect_pb2)mysqlx_expr_pb2)mysqlx_notice_pb2)
mysqlx_pb2)mysqlx_prepare_pb2)mysqlx_resultset_pb2)mysqlx_session_pb2)mysqlx_sql_pb2)descriptor_database)descriptor_pb2)descriptor_pool)message_factory)RepeatedCompositeFieldContainer)RepeatedCompositeContainerzMysqlx.ClientMessages.Type.{0}zMysqlx.ServerMessages.Type.{0}zMysqlx.Error.Severity.{0}zMysqlx.Crud.DataModel.{0}zMysqlx.Crud.Find.RowLock.{0}zMysqlx.Crud.Order.Direction.{0}z*Mysqlx.Crud.UpdateOperation.UpdateType.{0}z Mysqlx.Datatypes.Scalar.Type.{0}zMysqlx.Datatypes.Any.Type.{0}z3Mysqlx.Expect.Open.Condition.ConditionOperation.{0}z$Mysqlx.Expect.Open.Condition.Key.{0}z#Mysqlx.Expect.Open.CtxOperation.{0}zMysqlx.Expr.Expr.Type.{0}z%Mysqlx.Expr.DocumentPathItem.Type.{0}zMysqlx.Notice.Frame.Scope.{0}zMysqlx.Notice.Warning.Level.{0}z/Mysqlx.Notice.SessionStateChanged.Parameter.{0}z,Mysqlx.Prepare.Prepare.OneOfMessage.Type.{0}z-Mysqlx.Resultset.ColumnMetaData.FieldType.{0}c             C   s   g | ]\}}t | |fqS r   )	_MESSAGES)r    r!   r"   r   r   r#   r$      s    c               @   sT   e Zd ZdZej Zedd Zedd Z	edd Z
edd	 Zed
d ZdS )_mysqlxpb_purez]This class implements the methods in pure Python used by the
        _mysqlxpb C++ extension.c             C   s   t jjtj| }| S )N)r>   factoryZGetPrototype_DESCRIPTOR_POOLZFindMessageTypeByName)nameclsr   r   r#   new_message   s    z_mysqlxpb_pure.new_messagec             C   s   t |  S )N)r=   )r!   r   r   r#   r      s    z_mysqlxpb_pure.enum_valuec             C   s   | j  S )N)ZSerializeToString)msgr   r   r#   serialize_message   s    z _mysqlxpb_pure.serialize_messagec             C   s   t j| }|j| |S )N)r>   rC   ParseFromString)msg_type_namepayloadrD   r   r   r#   parse_message   s    

z_mysqlxpb_pure.parse_messagec             C   s4   t j| }|stdj| tj|}|j| |S )NzUnknown msg_type: {0})SERVER_MESSAGESget
ValueErrorformatr>   rC   rF   )msg_typerH   rG   rD   r   r   r#   parse_server_message   s    


z#_mysqlxpb_pure.parse_server_messageN)__name__
__module____qualname____doc__r:   ZMessageFactoryr?   staticmethodrC   r   rE   rI   rO   r   r   r   r#   r>      s   r>   zProtobuf is not available-Mysqlx.Prepare.Prepare.OneOfMessage.Type.FINDfind/Mysqlx.Prepare.Prepare.OneOfMessage.Type.INSERTinsert/Mysqlx.Prepare.Prepare.OneOfMessage.Type.UPDATEupdate/Mysqlx.Prepare.Prepare.OneOfMessage.Type.DELETEdelete-Mysqlx.Prepare.Prepare.OneOfMessage.Type.STMTstmt_execute)z$Mysqlx.ClientMessages.Type.CRUD_FINDz&Mysqlx.ClientMessages.Type.CRUD_INSERTz&Mysqlx.ClientMessages.Type.CRUD_UPDATEz&Mysqlx.ClientMessages.Type.CRUD_DELETEz+Mysqlx.ClientMessages.Type.SQL_STMT_EXECUTEc               @   s4   e Zd ZdZereneZer dndZe	dd Z
dS )ProtobufzProtobuf class acts as a container of the Protobuf message class.
    It allows the switch between the C extension and pure Python implementation
    message handlers, by patching the `mysqlxpb` class attribute.
    FTc             C   s@   | rt  rtdn|  r(t r(td| r0tntt_| t_dS )zSets whether to use the C extension or pure Python implementation.

        Args:
            use_pure (bool): `True` to use pure Python implementation.
        zProtobuf is not availablez-MySQL X Protobuf C extension is not availableN)HAVE_PROTOBUFImportErrorHAVE_MYSQLXPB_CEXTr>   r   r_   mysqlxpbuse_pure)rd   r   r   r#   set_use_pure  s    

zProtobuf.set_use_pureN)rP   rQ   rR   rS   rb   r   r>   rc   rd   rT   re   r   r   r   r#   r_      s   r_   c               @   s   e Zd ZdZdddZdd Zdd Zd	d
 Zdd Zd ddZ	dd Z
dd Zdd Zedd Zedd Zedd Zedd Zedd ZdS )!MessagezHelper class for interfacing with the MySQL X Protobuf extension.

    Args:
        msg_type_name (string): Protobuf type name.
        **kwargs: Arbitrary keyword arguments with values for the message.
    Nc             K   s@   |rt jj|nd | jd< x |j D ]\}}| j|| q$W d S )N_msg)r_   rc   rC   __dict__items__setattr__)selfrG   kwargsr!   valuer   r   r#   __init__  s    zMessage.__init__c             C   s   t jrtr(t|tr(t| j|t| qt|ttt	frHt| j|| qt|t
rft| j|j| qt|trt| j|j|j  qt| j|j| nt|tr|j n|| j|< d S )N)r_   rd   r&   
isinstancer(   setattrrg   r*   r'   r)   listgetattrextendrf   Z	MergeFromget_message)rk   rA   rm   r   r   r#   rj     s    

zMessage.__setattr__c             C   s:   yt js| j| S t| j|S  tk
r4   tY nX d S )N)r_   rd   rg   rr   KeyErrorAttributeError)rk   rA   r   r   r#   __getattr__-  s
    zMessage.__getattr__c             C   s   | j || d S )N)rj   )rk   rA   rm   r   r   r#   __setitem__4  s    zMessage.__setitem__c             C   s
   | j |S )N)rw   )rk   rA   r   r   r#   __getitem__7  s    zMessage.__getitem__c             C   s*   t js| jd j||S t| jd ||S )a  Returns the value of an element of the message dictionary.

        Args:
            name (string): Key name.
            default (object): The default value if the key does not exists.

        Returns:
            object: The value of the provided key name.
        rg   )r_   rd   rh   rK   rr   )rk   rA   defaultr   r   r#   rK   :  s    zMessage.getc             C   s   || j d< dS )zdSets the message.

        Args:
            msg (dict): Dictionary representing a message.
        rg   N)rh   )rk   rD   r   r   r#   set_messageH  s    zMessage.set_messagec             C   s
   | j d S )zReturns the dictionary representing a message containing parsed
        data.

        Returns:
            dict: The dictionary representing a message containing parsed data.
        rg   )rh   )rk   r   r   r#   rt   P  s    zMessage.get_messagec             C   s   t jj| jS )zSerializes a message to a string.

        Returns:
           string: A string representing a message containing parsed data.
        )r_   rc   rE   rg   )rk   r   r   r#   serialize_to_stringY  s    zMessage.serialize_to_stringc             C   s   t js| jd S | jjjS )zstring: Message type name.Z_mysqlxpb_type_name)r_   rd   rg   
DESCRIPTOR	full_name)rk   r   r   r#   typea  s    zMessage.typec             C   s   t jj| |S )a  Creates a new message, initialized with parsed data.

        Args:
            msg_type_name (string): Message type name.
            payload (string): Serialized message data.

        Returns:
            dict: The dictionary representing a message containing parsed data.
        )r_   rc   rI   )rG   rH   r   r   r#   parseg  s    zMessage.parsec             C   s   t jj| |S )a  Creates a new server-side message, initialized with parsed data.

        Args:
            msg_type (int): Message type.
            payload (string): Serialized message data.

        Returns:
            dict: The dictionary representing a message containing parsed data.
        )r_   rc   rO   )rN   rH   r   r   r#   parse_from_servert  s    zMessage.parse_from_serverc             C   s   |  }|j tjj|| |S )a  Creates a new message, initialized with parsed data and returns a
        :class:`mysqlx.protobuf.Message` object.

        Args:
            msg_type_name (string): Message type name.
            payload (string): Serialized message data.

        Returns:
            mysqlx.protobuf.Message: The Message representing a message
                                     containing parsed data.
        )r{   r_   rc   rI   )rB   rG   rH   rD   r   r   r#   from_message  s    zMessage.from_messagec             C   s   |  }|j tjj|| |S )a  Creates a new server-side message, initialized with parsed data and
        returns a :class:`mysqlx.protobuf.Message` object.

        Args:
            msg_type (int): Message type.
            payload (string): Serialized message data.

        Returns:
            mysqlx.protobuf.Message: The Message representing a message
                                     containing parsed data.
        )r{   r_   rc   rO   )rB   rN   rH   rD   r   r   r#   from_server_message  s    zMessage.from_server_message)N)N)rP   rQ   rR   rS   rn   rj   rw   rx   ry   rK   r{   rt   r|   propertyr   rT   r   r   classmethodr   r   r   r   r   r#   rf     s   

	rf   c             C   s   t jj| S )zReturns the value of a MySQL X Protobuf enumerator.

    Args:
        name (string): MySQL X Protobuf numerator name.

    Returns:
        int: Value of the enumerator.
    )r_   rc   r   )rA   r   r   r#   mysqlxpb_enum  s    	r   r   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   )rU   rV   )rW   rX   )rY   rZ   )r[   r\   )r]   r^   )ZrS   Z_SERVER_MESSAGES_TUPLESrq   ZPROTOBUF_REPEATED_TYPESr   dictrJ   rb   ra   compatr&   r'   r(   r)   helpersr*    r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   Zgoogle.protobufr7   r8   r9   r:   Z#google.protobuf.internal.containersr;   Zgoogle.protobuf.pyext._messager<   appendr=   ZClientMessagesTyperi   r!   r"   rM   ZServerMessagesErrorZSeverityZ	DataModelZFindZRowLockZOrderZ	DirectionZUpdateOperationZ
UpdateTypeZScalarZAnyZOpen	ConditionZConditionOperationZKeyZCtxOperationExprZDocumentPathItemZFrameZScopeWarningZLevelZSessionStateChanged	ParameterZPrepareZOneOfMessageZColumnMetaDataZ	FieldTypeZDescriptorDatabaseZ_DESCRIPTOR_DBZDescriptorPoolr@   AddZFileDescriptorProtoZ
FromStringr}   Zserialized_pbr`   objectr>   ZCRUD_PREPARE_MAPPINGr_   rf   r   r   r   r   r#   <module>   s                           














" 