o
    Th                     @   s,   d Z ddlZddlmZ G dd deZdS )zlinebot.models.base module.    N   )utilsc                   @   sr   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
edddZedd Ze	dddZdS )Basez;Base class of model.

    Suitable for JSON base data.
    c                 K   s   dS )z1__init__ method.

        :param kwargs:
        N )selfkwargsr   r   S/home/air/segue/gpt/backup/venv/lib/python3.10/site-packages/linebot/models/base.py__init__   s   zBase.__init__c                 C   s   |   S )z__str__ method.)as_json_stringr   r   r   r   __str__$      zBase.__str__c                 C   s   t | S )z__repr__ method.)strr   r   r   r   __repr__(   r   zBase.__repr__c                 C   s   |o	|   |  kS )z.__eq__ method.

        :param other:
        )as_json_dictr   otherr   r   r   __eq__,   s   zBase.__eq__c                 C   s   |  | S )z.__ne__ method.

        :param other:
        )r   r   r   r   r   __ne__3   s   zBase.__ne__c                 C   s   t j|  ddS )zBReturn JSON string from this object.

        :rtype: str
        T)	sort_keys)jsondumpsr   r   r   r   r   r
   :   s   zBase.as_json_stringc                 C   s   i }| j  D ]F\}}t|}t|tttfr9t ||< |D ]}t|dr0|| 	|
  q|| 	| qqt|drE|
 ||< q|durM|||< q|S )zCReturn dictionary from this object.

        :return: dict
        r   N)__dict__itemsr   to_camel_case
isinstancelisttuplesethasattrappendr   )r   datakeyvalue	camel_keyitemr   r   r   r   A   s    



zBase.as_json_dictFc                 C   s6   |r| dd|i|S dd |  D }| di |S )zCreate a new instance from a dict.

        :param data: JSON dict
        :param bool use_raw_message: Using original Message key as attribute
        use_raw_messagec                 S   s   i | ]
\}}t ||qS r   )r   to_snake_case).0r"   r#   r   r   r   
<dictcomp>b   s    z+Base.new_from_json_dict.<locals>.<dictcomp>Nr   )r   )clsr!   r&   new_datar   r   r   new_from_json_dictX   s   zBase.new_from_json_dictc                 C   s&   t | |r| S t | tr|| S dS )a  Get `cls` object w/ deserialization from json if needed.

        If data is instance of cls, return data.
        Else if data is instance of dict, create instance from dict.
        Else, return None.

        :param data:
        :param cls:
        :rtype: object
        N)r   dictr,   )r!   r*   r   r   r   get_or_new_from_json_dictg   s
   


zBase.get_or_new_from_json_dicttypec                 C   sF   t | t| r| S t | tr!| | }||v r!|| j| |dS dS )a  Get `cls` object w/ deserialization from json by using type key hint if needed.

        If data is instance of one of cls, return data.
        Else if data is instance of dict, create instance from dict.
        Else, return None.

        :param data:
        :param cls_map:
        :param type_key:
        :rtype: object
        :param bool use_raw_message: Using original Message key as attribute
        )r&   N)r   r   valuesr-   r,   )r!   cls_maptype_keyr&   type_valr   r   r   $get_or_new_from_json_dict_with_typesz   s   
z)Base.get_or_new_from_json_dict_with_typesN)F)r/   F)__name__
__module____qualname____doc__r	   r   r   r   r   r
   r   classmethodr,   staticmethodr.   r4   r   r   r   r   r      s     
r   )r8   r    r   objectr   r   r   r   r   <module>   s   