o
    hjS                  
   @  s$  U d Z ddlmZ ddlmZmZmZmZmZm	Z	m
Z
 ddlmZmZmZ dZded< d	Zd
ed< egZded< zdd	lZdd eD ZdZW n eyR   dZY nw ddlmZmZmZ zfddlmZ ddlmZm Z m!Z!m"Z" ddl#m$Z$ zddl%m&Z& e'e& W n	 ey   Y nw e'e$ e(edrej)Zddl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 i Z7ded< e2j8j	9 D ]\Z:Z;e;e7de: < qe2j<j	9 D ]\Z:Z;e;e7de: < qe2j=j>9 D ]\Z:Z;e;e7de: < qe,j?9 D ]\Z:Z;e;e7de: < qe,j@jA9 D ]\Z:Z;e;e7d e: < q
e,jBjC9 D ]\Z:Z;e;e7d!e: < qe,jDjE9 D ]\Z:Z;e;e7d"e: < q0e.jFj	9 D ]\Z:Z;e;e7d#e: < qCe.jj	9 D ]\Z:Z;e;e7d$e: < qVe/jGjHjI9 D ]\Z:Z;e;e7d%e: < qje/jGjHjJ9 D ]\Z:Z;e;e7d&e: < q~e/jGjK9 D ]\Z:Z;e;e7d'e: < qe0jLj	9 D ]\Z:Z;e;e7d(e: < qe0jMj	9 D ]\Z:Z;e;e7d)e: < qe1jNjO9 D ]\Z:Z;e;e7d*e: < qe1jPjQ9 D ]\Z:Z;e;e7d+e: < qe1jRjS9 D ]\Z:Z;e;e7d,e: < qe3jTjUj	9 D ]\Z:Z;e;e7d-e: < qe4jVjW9 D ]\Z:Z;e;e7d.e: < qeX ZYe!ZeYZ[eY\e j]^e+j_j` eY\e j]^e,j_j` eY\e j]^e-j_j` eY\e j]^e.j_j` eY\e j]^e/j_j` eY\e j]^e0j_j` eY\e j]^e1j_j` eY\e j]^e2j_j` eY\e j]^e3j_j` eY\e j]^e4j_j` eY\e j]^e5j_j` eY\e j]^e6j_j` d/d eD ZdZad	ZbG d0d1 d1ZcW n, eedeefy Zf zdZaed	urefnd2Zbesed3eb efW Y d	Zf[fnd	Zf[fww d4d5d6d7d8d9Zgd:ed;< G d<d= d=ZhG d>d? d?ZidFdDdEZjd	S )Gz?Implementation of a helper class for MySQL X Protobuf messages.    )annotations)AnyDictListOptionalTupleTypeUnion   )MessageTypeProtobufMessageCextTypeProtobufMessageType))zMysqlx.ServerMessages.Type.OKz	Mysqlx.Ok)z Mysqlx.ServerMessages.Type.ERRORzMysqlx.Error)z,Mysqlx.ServerMessages.Type.CONN_CAPABILITIESzMysqlx.Connection.Capabilities)z5Mysqlx.ServerMessages.Type.SESS_AUTHENTICATE_CONTINUEz#Mysqlx.Session.AuthenticateContinue)z/Mysqlx.ServerMessages.Type.SESS_AUTHENTICATE_OKzMysqlx.Session.AuthenticateOk)z!Mysqlx.ServerMessages.Type.NOTICEzMysqlx.Notice.Frame)z5Mysqlx.ServerMessages.Type.RESULTSET_COLUMN_META_DATAzMysqlx.Resultset.ColumnMetaData)z(Mysqlx.ServerMessages.Type.RESULTSET_ROWzMysqlx.Resultset.Row)z/Mysqlx.ServerMessages.Type.RESULTSET_FETCH_DONEzMysqlx.Resultset.FetchDone)z4Mysqlx.ServerMessages.Type.RESULTSET_FETCH_SUSPENDEDzMysqlx.Resultset.FetchSuspended)z?Mysqlx.ServerMessages.Type.RESULTSET_FETCH_DONE_MORE_RESULTSETSz(Mysqlx.Resultset.FetchDoneMoreResultsets)z.Mysqlx.ServerMessages.Type.SQL_STMT_EXECUTE_OKzMysqlx.Sql.StmtExecuteOk)z?Mysqlx.ServerMessages.Type.RESULTSET_FETCH_DONE_MORE_OUT_PARAMSz'Mysqlx.Resultset.FetchDoneMoreOutParams)z&Mysqlx.ServerMessages.Type.COMPRESSIONzMysqlx.Connection.CompressionzTuple[Tuple[str, str], ...]_SERVER_MESSAGES_TUPLESNOptional[str]PROTOBUF_VERSIONzpList[Union[Type[List[Dict[str, Any]]], Type[RepeatedCompositeContainer], Type[RepeatedCompositeFieldContainer]]]PROTOBUF_REPEATED_TYPESc                 C  s    i | ]\}}t t||qS  )int	_mysqlxpb
enum_value.0keyvalr   r   S/var/www/html/scripts/venv/lib/python3.10/site-packages/mysqlx/protobuf/__init__.py
<dictcomp>d   s    r   TF)
BYTE_TYPESNUMERIC_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Dict[str, int]	_MESSAGESzMysqlx.ClientMessages.Type.zMysqlx.ServerMessages.Type.zMysqlx.Error.Severity.zMysqlx.Crud.DataModel.zMysqlx.Crud.Find.RowLock.zMysqlx.Crud.Order.Direction.z'Mysqlx.Crud.UpdateOperation.UpdateType.zMysqlx.Datatypes.Scalar.Type.zMysqlx.Datatypes.Any.Type.z0Mysqlx.Expect.Open.Condition.ConditionOperation.z!Mysqlx.Expect.Open.Condition.Key.z Mysqlx.Expect.Open.CtxOperation.zMysqlx.Expr.Expr.Type.z"Mysqlx.Expr.DocumentPathItem.Type.zMysqlx.Notice.Frame.Scope.zMysqlx.Notice.Warning.Level.z,Mysqlx.Notice.SessionStateChanged.Parameter.z)Mysqlx.Prepare.Prepare.OneOfMessage.Type.z*Mysqlx.Resultset.ColumnMetaData.FieldType.c                 C  s   i | ]	\}}t | |qS r   r4   r   r   r   r   r     s    c                   @  sv   e Zd ZU dZe Zded< eddd	Z	edddZ
edddZedddZedddZed ddZdS )!_mysqlxpb_purez]This class implements the methods in pure Python used by the
        _mysqlxpb C++ extension.zmessage_factory.MessageFactoryfactorynamestrreturnr   c                 C  s   t jt| }| S )zCreate new Protobuf message.

            Args:
                name (str): Message type name.

            Returns:
                object: Protobuf message.
            )r6   r7   GetPrototype_DESCRIPTOR_POOLFindMessageTypeByName)r8   clsr   r   r   new_message  s   
z_mysqlxpb_pure.new_messageenum_keyr   c                 C  s   t |  S )zReturn enum value.

            Args:
                enum_key (str): Enum key.

            Returns:
                int: enum value.
            r5   )r@   r   r   r   r   %     
z_mysqlxpb_pure.enum_valuemsgbytesc                 C     |   S )zSerialize message.

            Args:
                msg (object): Protobuf message.

            Returns:
                bytes: Serialized message bytes string.
            )SerializeToStringrB   r   r   r   serialize_message1  rA   z _mysqlxpb_pure.serialize_messagec                 C  rD   )zSerialize partial message.

            Args:
                msg (object): Protobuf message.

            Returns:
                bytes: Serialized partial message bytes string.
            )SerializePartialToStringrF   r   r   r   serialize_partial_message=  rA   z(_mysqlxpb_pure.serialize_partial_messagemsg_type_namepayloadc                 C  s   t | }|| |S )zSerialize partial message.

            Args:
                msg_type_name (str): Message type name.
                payload (bytes): Payload.

            Returns:
                object: Message parsed from string.
            )r6   r?   ParseFromString)rJ   rK   rB   r   r   r   parse_messageI  s   

z_mysqlxpb_pure.parse_messagemsg_typec                 C  s4   t | }|std|  t|}|| |S )zParse server message message.

            Args:
                msg_type (int): Message type.
                payload (bytes): Payload.

            Returns:
                object: Server message parsed from string.
            zUnknown msg_type: )SERVER_MESSAGESget
ValueErrorr6   r?   rL   )rN   rK   rJ   rB   r   r   r   parse_server_messageX  s   


z#_mysqlxpb_pure.parse_server_messageN)r8   r9   r:   r   )r@   r9   r:   r   )rB   r   r:   rC   )rJ   r9   rK   rC   r:   r   )rN   r   rK   rC   r:   r   )__name__
__module____qualname____doc__r#   MessageFactoryr7   __annotations__staticmethodr?   r   rG   rI   rM   rR   r   r   r   r   r6     s   
 r6   zProtobuf >=3.11.0 is requiredProtobuf is not available: )z-Mysqlx.Prepare.Prepare.OneOfMessage.Type.FINDfind)z/Mysqlx.Prepare.Prepare.OneOfMessage.Type.INSERTinsert)z/Mysqlx.Prepare.Prepare.OneOfMessage.Type.UPDATEupdate)z/Mysqlx.Prepare.Prepare.OneOfMessage.Type.DELETEdelete)z-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_EXECUTEzDict[str, Tuple[str, str]]CRUD_PREPARE_MAPPINGc                   @  s:   e Zd ZU dZereneZe Zde	d< e
d	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.
    booluse_purer:   Nonec                 C  s>   | rt stdt | ststd| rt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.
        rZ   z-MySQL X Protobuf C extension is not availableN)	HAVE_PROTOBUFImportErrorHAVE_PROTOBUF_ERRORHAVE_MYSQLXPB_CEXTr6   r   ra   mysqlxpbrc   )rc   r   r   r   set_use_pure  s   
zProtobuf.set_use_pureN)rc   rb   r:   rd   )rS   rT   rU   rV   rh   r   r6   ri   rc   rX   rY   rj   r   r   r   r   ra     s   
 ra   c                   @  s   e Zd ZdZd4d5d	d
Zd6ddZd7ddZd6ddZd7ddZd4d8ddZ	d9ddZ
d:ddZd;d d!Zd;d"d#Zed<d$d%Zed=d'd(Zed>d+d,Zed?d.d/Zed@d0d1ZedAd2d3ZdS )B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.
    NrJ   r   kwargsr   r:   rd   c                 K  s<   |rt j|nd | jd< | D ]
\}}| || qd S )N_msg)ra   ri   r?   __dict__items__setattr__)selfrJ   rl   r8   valuer   r   r   __init__  s
   zMessage.__init__r8   r9   rr   c                 C  s   t jrPt|trt| j|t| d S t|ttfr#t| j|| d S t|t	r3t
| j|| d S t|trEt
| j||  d S t
| j|| d S t|tr^t|| j|< d S t|trg| n|| j|< d S N)ra   rc   
isinstancer9   setattrrm   r   r   r   listgetattrextendrk   	MergeFromget_messagerq   r8   rr   r   r   r   rp     s   



zMessage.__setattr__c                 C  s6   zt js
| j| W S t| j|W S  ty   td w rt   )ra   rc   rm   rx   KeyErrorAttributeErrorrq   r8   r   r   r   __getattr__  s   
zMessage.__getattr__c                 C  s   |  || d S rt   )rp   r|   r   r   r   __setitem__  s   zMessage.__setitem__c                 C  s
   |  |S rt   )r   r   r   r   r   __getitem__  s   
zMessage.__getitem__defaultc                 C  s*   t js| jd ||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.
        rm   )ra   rc   rn   rP   rx   )rq   r8   r   r   r   r   rP     s
   zMessage.getrB   3Union[ProtobufMessageType, ProtobufMessageCextType]c                 C  s   || j d< dS )zdSets the message.

        Args:
            msg (dict): Dictionary representing a message.
        rm   Nrn   )rq   rB   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.
        rm   r   rq   r   r   r   r{     s   
zMessage.get_messagerC   c                 C     t j| jS )zSerializes a message to a string.

        Returns:
            str: A string representing a message containing parsed data.
        )ra   ri   rG   rm   r   r   r   r   serialize_to_string  s   zMessage.serialize_to_stringc                 C  r   )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.
        )ra   ri   rI   rm   r   r   r   r   serialize_partial_to_string  s   	z#Message.serialize_partial_to_stringc                 C  s   t js| jd S | jjjS )zstring: Message type name._mysqlxpb_type_name)ra   rc   rm   
DESCRIPTOR	full_namer   r   r   r   type  s
   
zMessage.typerK   c                 C     t 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
        )ra   ri   rM   )rJ   rK   r   r   r   parse  s   zMessage.parser   r   c                 C  s   t jr|  S tt|  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
        )ra   rc   ByteSizelenr   r   rF   r   r   r   	byte_size&  s
   zMessage.byte_sizerN   c                 C  r   )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.
        )ra   ri   rR   )rN   rK   r   r   r   parse_from_server8  s   zMessage.parse_from_serverc                 C     |  }| t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   ra   ri   rM   )r>   rJ   rK   rB   r   r   r   from_messageG     zMessage.from_messagec                 C  r   )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   ra   ri   rR   )r>   rN   rK   rB   r   r   r   from_server_messageX  r   zMessage.from_server_messagert   )rJ   r   rl   r   r:   rd   )r8   r9   rr   r   r:   rd   )r8   r9   r:   r   )r8   r9   r   r   r:   r   )rB   r   r:   rd   )r:   r   )r:   rC   )r:   r9   )rJ   r9   rK   rC   r:   r   )rB   r   r:   r   )rN   r   rK   rC   r:   r   )rJ   r9   rK   rC   r:   r   )rN   r   rK   rC   r:   r   )rS   rT   rU   rV   rs   rp   r   r   r   rP   r   r{   r   r   propertyr   rY   r   r   r   classmethodr   r   r   r   r   r   rk     s0    
	






	
rk   r8   r9   r:   r   c                 C  s   t 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.
    )ra   ri   r   )r8   r   r   r   mysqlxpb_enumj  s   	r   )r8   r9   r:   r   )krV   
__future__r   typingr   r   r   r   r   r   r	   typesr   r   r   r   rX   r   rw   r   r   rO   rh   rf   helpersr   r   r   googler   google.protobufr    r!   r"   r#   #google.protobuf.internal.containersr$   google.protobuf.pyext._messager%   appendhasattrr&    r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   ClientMessagesro   r   r   ServerMessagesErrorSeverity	DataModelFindRowLockOrder	DirectionUpdateOperation
UpdateTypeScalarOpen	ConditionConditionOperationKeyCtxOperationExprDocumentPathItemFrameScopeWarningLevelSessionStateChanged	ParameterPrepareOneOfMessageColumnMetaData	FieldTypeDescriptorDatabase_DESCRIPTOR_DBDescriptorPoolr<   AddFileDescriptorProto
FromStringr   serialized_pbre   rg   r6   SyntaxError	TypeErrorerrr`   ra   rk   r   r   r   r   r   <module>   s8  $/


8
Z	 H