o
    aqe6                     @   s  d dl Z d dlZd dlZd dlmZmZmZmZmZ ddl	m
Z
mZmZ ddlmZmZmZ ddlmZmZmZ G dd de
ZG d	d
 d
eZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZdS )    N)ListOptionalSetUnionDict   )
JsonObjectJsonValidatorshow_unknown_key_warning)BlockElementInteractiveElementInputInteractiveElement)MarkdownTextObjectPlainTextObject
TextObjectc                   @   s   e Zd ZdZddhZdZee Ze	dd Z
edee fdd	Zd
d
d
ddee dee dee fddZede ddd Zedeed f ded  fddZedeeed f  ded  fddZd
S )BlockzBlocks are a series of components that can be combined
    to create visually rich and compellingly interactive messages.
    https://api.slack.com/reference/block-kit/blocks
    block_idtype   c                   C   s   t dt d S )Nz?subtype is deprecated since slackclient 2.6.0, use type instead)warningswarnDeprecationWarning r   r   Y/var/www/html/humari/django-venv/lib/python3.10/site-packages/slack/web/classes/blocks.py_subtype_warning   s   zBlock._subtype_warningreturnc                 C   s   | j S N)r   selfr   r   r   subtype%   s   zBlock.subtypeN)r   r   r   r   c                C   s*   |r|    |r
|n|| _|| _d | _d S r   )r   r   r   color)r   r   r   r   r   r   r   __init__)   s
   
zBlock.__init__zblock_id cannot exceed  charactersc                 C      | j d u pt| j | jkS r   )r   lenblock_id_max_lengthr   r   r   r   _validate_block_id_length6      zBlock._validate_block_id_lengthblockc                 C   s2  |d u rd S t |tr|S d|v r|d }|tjkr!tdi |S |tjkr-tdi |S |tjkr9tdi |S |tjkrEtdi |S |tjkrQtdi |S |tjkr]tdi |S |t	jkrit	di |S |t
jkrut
di |S |tjkrtdi |S | jd| d d S | jd| d d S )Nr   z$Unknown block detected and skipped ()r   )
isinstancer   SectionBlockr   DividerBlock
ImageBlockActionsBlockContextBlock
InputBlock	FileBlock	CallBlockHeaderBlockloggerwarning)clsr(   r   r   r   r   parse:   s8   









zBlock.parseblocksc                    s    fdd|pg D S )Nc                    s   g | ]}  |qS r   )r7   ).0br6   r   r   
<listcomp>^   s    z#Block.parse_all.<locals>.<listcomp>r   )r6   r8   r   r;   r   	parse_all\   s   zBlock.parse_all)__name__
__module____qualname____doc__
attributesr%   logging	getLoggerr4   staticmethodr   propertyr   strr   r!   r	   r&   classmethodr   dictr7   r   r=   r   r   r   r   r      s2    



 !(r   c                       s   e Zd ZdZdZdZedee f fddZ	dddddd	e
e d
eeeef deeeeef  de
eeef  def
 fddZeddd Zede ddd Zede ddd Z  ZS )r+   section
     r   c                       t  jh dS )N>   textfields	accessorysuperrB   unionr   	__class__r   r   rB   k      zSectionBlock.attributesN)r   rN   rO   rP   r   rN   rO   rP   othersc          
         s   t  j| j|d t| | t|| _g }|pg D ]R}t|tr*|	t
| qt|tr5|	| qt|trcd|v rct|}|d}	|	t
jkrX|	t
di | q|	tdi | q| jd|  q|| _t|| _dS )zA section is one of the most flexible blocks available.
        https://api.slack.com/reference/block-kit/blocks#section
        r   r   r   z'Unsupported filed detected and skipped Nr   )rR   r!   r   r
   r   r7   rN   r*   rG   appendr   from_strrI   copypopr   r4   r5   rO   r   rP   )
r   r   rN   rO   rP   rW   field_objectsfdtrT   r   r   r!   o   s$   





zSectionBlock.__init__z*text or fields attribute must be specifiedc                 C   s   | j d up| jS r   )rN   rO   r   r   r   r   "_validate_text_or_fields_populated      z/SectionBlock._validate_text_or_fields_populatedzfields attribute cannot exceed z itemsc                 C   r#   r   )rO   r$   fields_max_lengthr   r   r   r   _validate_fields_length   r'   z$SectionBlock._validate_fields_lengthtext attribute cannot exceed r"   c                 C      | j d u pt| j j | jkS r   rN   r$   text_max_lengthr   r   r   r   _validate_alt_text_length      z&SectionBlock._validate_alt_text_length)r>   r?   r@   r   rc   rh   rF   r   rG   rB   r   r   rI   r   r   r   r!   r	   ra   rd   ri   __classcell__r   r   rT   r   r+   f   s6    "

r+   c                       s4   e Zd ZdZdddee def fddZ  ZS )r,   dividerNr   r   rW   c                   s    t  j| j|d t| | dS )zA content divider, like an <hr>, to split up different blocks inside of a message.
        https://api.slack.com/reference/block-kit/blocks#divider
        rX   N)rR   r!   r   r
   )r   r   rW   rT   r   r   r!      s   	zDividerBlock.__init__)	r>   r?   r@   r   r   rG   rI   r!   rk   r   r   rT   r   r,      s    r,   c                       s   e Zd ZdZedee f fddZdZdZ	dZ
dddd	ed
edeeeeef  dee def
 fddZede ddd Zede	 ddd Zede
 ddd Z  ZS )r-   imager   c                    rM   )N>   titlealt_text	image_urlrQ   r   rT   r   r   rB      rV   zImageBlock.attributesrL     N)ro   r   rq   rp   ro   r   rW   c                   s8   t  j| j|d t| | || _|| _t|| _dS )zA simple image block, designed to make those cat photos really pop.
        https://api.slack.com/reference/block-kit/blocks#image
        rX   N)	rR   r!   r   r
   rq   rp   r   r7   ro   )r   rq   rp   ro   r   rW   rT   r   r   r!      s
   
zImageBlock.__init__z"image_url attribute cannot exceed r"   c                 C      t | j| jkS r   )r$   rq   image_url_max_lengthr   r   r   r   _validate_image_url_length   s   z%ImageBlock._validate_image_url_lengthz!alt_text attribute cannot exceed c                 C   rs   r   )r$   rp   alt_text_max_lengthr   r   r   r   ri      rb   z$ImageBlock._validate_alt_text_lengthztitle attribute cannot exceed c                 C   (   | j d u p| j jd u pt| j j| jkS r   )ro   rN   r$   title_max_lengthr   r   r   r   _validate_title_length   
   

z!ImageBlock._validate_title_length)r>   r?   r@   r   rF   r   rG   rB   rt   rv   rx   r   r   rI   r   r!   r	   ru   ri   ry   rk   r   r   rT   r   r-      s8    


r-   c                       sz   e Zd ZdZdZedee f fddZddde	e
eef  d	ee d
ef fddZede ddd Z  ZS )r.   actions   r   c                       t  jdhS NelementsrQ   r   rT   r   r   rB      rb   zActionsBlock.attributesNrm   r   r   rW   c                   ,   t  j| j|d t| | t|| _dS )z|A block that is used to hold interactive elements.
        https://api.slack.com/reference/block-kit/blocks#actions
        rX   NrR   r!   r   r
   r   r=   r   r   r   r   rW   rT   r   r   r!         

zActionsBlock.__init__!elements attribute cannot exceed 	 elementsc                 C   r#   r   r   r$   elements_max_lengthr   r   r   r   _validate_elements_length   r'   z&ActionsBlock._validate_elements_length)r>   r?   r@   r   r   rF   r   rG   rB   r   r   rI   r   r   r!   r	   r   rk   r   r   rT   r   r.      s    r.   c                       s|   e Zd ZdZdZedee f fddZddde	e
eeef  d	ee d
ef fddZede ddd Z  ZS )r/   contextrK   r   c                    r}   r~   rQ   r   rT   r   r   rB      rb   zContextBlock.attributesNrm   r   r   rW   c                   r   )zDisplays message context, which can include both images and text.
        https://api.slack.com/reference/block-kit/blocks#context
        rX   Nr   r   rT   r   r   r!     r   zContextBlock.__init__r   r   c                 C   r#   r   r   r   r   r   r   r     r'   z&ContextBlock._validate_elements_length)r>   r?   r@   r   r   rF   r   rG   rB   r   r   rI   r-   r   r   r!   r	   r   rk   r   r   rT   r   r/      s    r/   c                       s   e Zd ZdZdZdZedee f fddZ	dddddde
eeef d	e
eeef d
ee dee
eeef  dee dee def fddZede ddd Zede ddd Zeddd Z  ZS )r0   inputrr   r   c                    rM   )N>   hintlabelelementoptionaldispatch_actionrQ   r   rT   r   r   rB     s   zInputBlock.attributesN)r   r   r   r   r   r   r   r   r   r   rW   c                   s\   t  j| j|d t| | tj|tjd| _t|| _	tj|tjd| _
|| _|| _dS )a.  A block that collects information from users - it can hold a plain-text input element,
        a select menu element, a multi-select menu element, or a datepicker.
        Important Note: Input blocks are only available in modals.
        https://api.slack.com/reference/block-kit/blocks#input
        rX   default_typeN)rR   r!   r   r
   r   r7   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   rW   rT   r   r   r!   "  s   

zInputBlock.__init__zlabel attribute cannot exceed r"   c                 C   rw   r   )r   rN   r$   label_max_lengthr   r   r   r   _validate_label_length;  rz   z!InputBlock._validate_label_lengthzhint attribute cannot exceed c                 C   rw   r   )r   rN   r$   r   r   r   r   r   _validate_hint_lengthC  rz   z InputBlock._validate_hint_lengthzelement attribute must be a string, select element, multi-select element, or a datepicker. (Sub-classes of InputInteractiveElement)c                 C   s   | j d u pt| j ttfS r   )r   r*   rG   r   r   r   r   r   _validate_element_typeK  s   
z!InputBlock._validate_element_type)r>   r?   r@   r   r   hint_max_lengthrF   r   rG   rB   r   rI   r   r   r   boolr!   r	   r   r   r   rk   r   r   rT   r   r0     sB    
	

r0   c                	       sX   e Zd ZdZedee f fddZdddded	ed
ee de	f fddZ
  ZS )r1   filer   c                    s   t  jddhS )Nexternal_idsourcerQ   r   rT   r   r   rB   Z  rV   zFileBlock.attributesremoteN)r   r   r   r   r   rW   c                   s,   t  j| j|d t| | || _|| _dS )z^Displays a remote file.
        https://api.slack.com/reference/block-kit/blocks#file
        rX   N)rR   r!   r   r
   r   r   )r   r   r   r   rW   rT   r   r   r!   ^  s   

zFileBlock.__init__)r>   r?   r@   r   rF   r   rG   rB   r   rI   r!   rk   r   r   rT   r   r1   W  s    r1   c                       sv   e Zd ZdZedee f fddZdddddedee	 dee
ee
eef f  d	ee d
ef
 fddZ  ZS )r2   callr   c                    rM   )N>   r   call_idapi_decoration_availablerQ   r   rT   r   r   rB   s  rV   zCallBlock.attributesN)r   r   r   r   r   r   rW   c                   s2   t  j| j|d t| | || _|| _|| _dS )zbDisplays a call information
        https://api.slack.com/reference/block-kit/blocks#call
        rX   N)rR   r!   r   r
   r   r   r   )r   r   r   r   r   rW   rT   r   r   r!   w  s
   

zCallBlock.__init__)r>   r?   r@   r   rF   r   rG   rB   r   r   r   anyrI   r!   rk   r   r   rT   r   r2   p  s$    r2   c                       s   e Zd ZdZdZedee f fddZdddde	e d	e
eeef d
ef fddZeddd Zede ddd Z  ZS )r3   header   r   c                    r}   )NrN   rQ   r   rT   r   r   rB     rb   zHeaderBlock.attributesN)r   rN   r   rN   rW   c                   s2   t  j| j|d t| | tj|tjd| _dS )zA header is a plain-text block that displays in a larger, bold font.
        https://api.slack.com/reference/block-kit/blocks#header
        rX   r   N)rR   r!   r   r
   r   r7   r   rN   )r   r   rN   rW   rT   r   r   r!     s   

zHeaderBlock.__init__z text attribute must be specifiedc                 C   s
   | j d uS r   )rN   r   r   r   r   _validate_text_populated  s   
z$HeaderBlock._validate_text_populatedre   r"   c                 C   rf   r   rg   r   r   r   r   ri     rj   z%HeaderBlock._validate_alt_text_length)r>   r?   r@   r   rh   rF   r   rG   rB   r   r   rI   r   r!   r	   r   ri   rk   r   r   rT   r   r3     s$    
r3   )r[   rC   r   typingr   r   r   r   r    r   r	   r
   r   r   r   r   objectsr   r   r   r   r+   r,   r-   r.   r/   r0   r1   r2   r3   r   r   r   r   <module>   s"    R81@