3
(hH              $   @   s  d Z ye W n ek
r$   eZY nX drZdZegZy"ddlZe	dd  eD Z
d!ZW n ek
rn   d"ZY nX d#d$lmZmZmZmZ d#d%lmZ yd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 ydd,lmZ eje W n ek
r   Y nX eje eed-r.ej 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' d.d5l!m(Z( d.d6l!m)Z) d.d7l!m*Z* d.d8l!m+Z+ d.d9l!m,Z, d.d:l!m-Z- i Z.x(e)j/j0j1 D ]\Z2Z3e3e.d;j4e2< qW x(e)j5j0j1 D ]\Z2Z3e3e.d<j4e2< qW x(e)j6j7j1 D ]\Z2Z3e3e.d=j4e2< q$W x&e#j8j1 D ]\Z2Z3e3e.d>j4e2< qLW x(e#j9j:j1 D ]\Z2Z3e3e.d?j4e2< qvW x(e#j;j<j1 D ]\Z2Z3e3e.d@j4e2< qW x(e#j=j>j1 D ]\Z2Z3e3e.dAj4e2< qW x(e%j?j0j1 D ]\Z2Z3e3e.dBj4e2< qW x(e%j@j0j1 D ]\Z2Z3e3e.dCj4e2< qW x*e&jAjBjCj1 D ]\Z2Z3e3e.dDj4e2< qJW x*e&jAjBjDj1 D ]\Z2Z3e3e.dEj4e2< qvW x(e&jAjEj1 D ]\Z2Z3e3e.dFj4e2< qW x(e'jFj0j1 D ]\Z2Z3e3e.dGj4e2< qW x(e'jGj0j1 D ]\Z2Z3e3e.dHj4e2< qW x(e(jHjIj1 D ]\Z2Z3e3e.dIj4e2< qW x(e(jJjKj1 D ]\Z2Z3e3e.dJj4e2< qHW x(e(jLjMj1 D ]\Z2Z3e3e.dKj4e2< qrW x*e*jNjOj0j1 D ]\Z2Z3e3e.dLj4e2< qW x(e+jPjQj1 D ]\Z2Z3e3e.dMj4e2< qW ejR ZSejTeSZUeSjVejWjXe"jYjZ eSjVejWjXe#jYjZ eSjVejWjXe$jYjZ eSjVejWjXe%jYjZ eSjVejWjXe&jYjZ eSjVejWjXe'jYjZ eSjVejWjXe(jYjZ eSjVejWjXe)jYjZ eSjVejWjXe*jYjZ eSjVejWjXe+jYjZ eSjVejWjXe,jYjZ eSjVejWjXe-jYjZ e	dNd  eD Z
d!Z[dZ\G dOdP dPe]Z^W nV eee_e`fk
r Za z0d"Z[edk	rXeandQZ\espedRj4e\W Y ddZa[aX nX dsdtdudvdwd]ZbG d^d_ d_e]ZcG d`da dae]Zddbdc ZedS )xzXThis 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&Mysqlx.ServerMessages.Type.COMPRESSIONMysqlx.Connection.CompressionN    c             C   s"   g | ]\}}t tj||fqS  )int	_mysqlxpb
enum_value).0keyvalr   r   L/tmp/pip-install-q3hcpn_q/mysql-connector-python/mysqlx/protobuf/__init__.py
<listcomp>I   s   r&   TF   )PY3NUMERIC_TYPESSTRING_TYPES
BYTE_TYPES)encode_to_bytes)protobuf)descriptor_database)descriptor_pb2)descriptor_pool)message_factory)RepeatedCompositeFieldContainer)RepeatedCompositeContainer__version__   )mysqlx_connection_pb2)mysqlx_crud_pb2)mysqlx_cursor_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_pb2z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               @   s`   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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)rC   factoryZGetPrototype_DESCRIPTOR_POOLZFindMessageTypeByName)nameclsr   r   r%   new_message   s    z_mysqlxpb_pure.new_messagec             C   s   t |  S )N)rB   )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   | j  S )N)ZSerializePartialToString)rI   r   r   r%   serialize_partial_message   s    z(_mysqlxpb_pure.serialize_partial_messagec             C   s   t j| }|j| |S )N)rC   rH   ParseFromString)msg_type_namepayloadrI   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formatrC   rH   rL   )msg_typerN   rM   rI   r   r   r%   parse_server_message   s    


z#_mysqlxpb_pure.parse_server_messageN)__name__
__module____qualname____doc__r1   ZMessageFactoryrD   staticmethodrH   r!   rJ   rK   rO   rU   r   r   r   r%   rC      s   rC   zProtobuf >=3.0.0 is requiredz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   sF   | rt  rtdjtn|  r.t r.td| r6t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 available: {}z-MySQL X Protobuf C extension is not availableN)
HAVE_PROTOBUFImportErrorrS   HAVE_PROTOBUF_ERRORHAVE_MYSQLXPB_CEXTrC   r    re   mysqlxpbuse_pure)rk   r   r   r%   set_use_pure  s    

zProtobuf.set_use_pureN)rV   rW   rX   rY   ri   r    rC   rj   rk   rZ   rl   r   r   r   r%   re     s   re   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dd Ze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)re   rj   rH   __dict__items__setattr__)selfrM   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)re   rk   r(   
isinstancer*   setattrrn   r,   r)   r+   listgetattrextendrm   Z	MergeFromget_message)rr   rF   rt   r   r   r%   rq   4  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)re   rk   rn   ry   KeyErrorAttributeError)rr   rF   r   r   r%   __getattr__D  s
    zMessage.__getattr__c             C   s   | j || d S )N)rq   )rr   rF   rt   r   r   r%   __setitem__K  s    zMessage.__setitem__c             C   s
   | j |S )N)r~   )rr   rF   r   r   r%   __getitem__N  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.
        rn   )re   rk   ro   rQ   ry   )rr   rF   defaultr   r   r%   rQ   Q  s    zMessage.getc             C   s   || j d< dS )zdSets the message.

        Args:
            msg (dict): Dictionary representing a message.
        rn   N)ro   )rr   rI   r   r   r%   set_message_  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.
        rn   )ro   )rr   r   r   r%   r{   g  s    zMessage.get_messagec             C   s   t jj| jS )zSerializes a message to a string.

        Returns:
            str: A string representing a message containing parsed data.
        )re   rj   rJ   rn   )rr   r   r   r%   serialize_to_stringp  s    zMessage.serialize_to_stringc             C   s   t jj| jS )zSerializes the protocol message to a binary string.

        This method is similar to serialize_to_string but doesn't check if the
        message is initialized.

        Returns:
            str: A string representation of the partial message.
        )re   rj   rK   rn   )rr   r   r   r%   serialize_partial_to_stringx  s    	z#Message.serialize_partial_to_stringc             C   s   t js| jd S | jjjS )zstring: Message type name.Z_mysqlxpb_type_name)re   rk   rn   
DESCRIPTORZ	full_name)rr   r   r   r%   type  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.

        .. versionadded:: 8.0.21
        )re   rj   rO   )rM   rN   r   r   r%   parse  s    zMessage.parsec             C   s   t jr| j S tt| j S )zReturns the size of the message in bytes.

        Args:
            msg (mysqlx.protobuf.Message): MySQL X Protobuf Message.

        Returns:
            int: Size of the message in bytes.

        .. versionadded:: 8.0.21
        )re   rk   ZByteSizelenr,   r   )rI   r   r   r%   	byte_size  s    zMessage.byte_sizec             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.
        )re   rj   rU   )rT   rN   r   r   r%   parse_from_server  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   re   rj   rO   )rG   rM   rN   rI   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   re   rj   rU   )rG   rT   rN   rI   r   r   r%   from_server_message  s    zMessage.from_server_message)N)N)rV   rW   rX   rY   ru   rq   r~   r   r   rQ   r   r{   r   r   propertyr   rZ   r   r   r   classmethodr   r   r   r   r   r%   rm   '  s"   

	rm   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.
    )re   rj   r!   )rF   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   r   r   r   )r[   r\   )r]   r^   )r_   r`   )ra   rb   )rc   rd   )frY   ModuleNotFoundError	NameErrorrg   Z_SERVER_MESSAGES_TUPLESZPROTOBUF_VERSIONrx   ZPROTOBUF_REPEATED_TYPESr    dictrP   ri   compatr(   r)   r*   r+   helpersr,   Zgoogler-   Zgoogle.protobufr.   r/   r0   r1   Z#google.protobuf.internal.containersr2   Zgoogle.protobuf.pyext._messager3   appendhasattrr4    r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   ZClientMessagesTyperp   r#   r$   rS   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DescriptorPoolrE   AddZFileDescriptorProtoZ
FromStringr   Zserialized_pbrf   rh   objectrC   SyntaxError	TypeErrorerrZCRUD_PREPARE_MAPPINGre   rm   r   r   r   r   r%   <module>   s8  
                           















& 2