
    ZTh                       d dl mZ d dlZd dlmZmZmZmZmZm	Z	 d dl
mZmZ d dlmZ d dlmZ d dlmZ d dlmZ  ej*                  d	      Zdd
ZddZddZddZddZ G d de      Z G d de      Z G d de      Zy)    )annotationsN)AnyDictListLiteralUnioncast)NotRequired	TypedDict)_component_deprecation_warning)ChannelDataTypeStrRep)YamlConfigError)	_type_fqnz^\$\d+$c                V    t        | t              st        j                  | dddg      y )Nz<str>z&strchannels)
isinstancestrr   _invalid_property)vals    Y/home/www/backend.miabetepe.com/venv/lib/python3.12/site-packages/sift_py/yaml/channel.py_validate_channel_anchorr      s2    c3//L	
 	
      c                   t        t        t        t        f   |       }|j                  d      }t	        |t
              st        j                  |dddg      |j                  d      }|)t	        |t
              st        j                  |dddg      |j                  d      }|)t	        |t
              st        j                  |dddg      |j                  d	      }|3t                t	        |t
              st        j                  |d
ddg      |j                  d      }t        D cg c]  }|j                   }}||vr(t        j                  |ddj                  |      dg      |t        j                  j                  k(  rs|j                  d      }	t	        |	t              s*t        j                  |	ddt        t               ddg      t        t         t           |	      D ]  }
t#        |
        y |t        j$                  j                  k(  rq|j                  d      }t	        |t              s(t        j                  |ddt        t&               d      t        t         t           |      D ]  }t)        |        y |j                  d      }	|	t        d| d      |j                  d      }|t        d| d      y c c}w )Nname- namer   r   descriptionz- descriptionunitz- unit	componentz- component	data_typez- data_typez | 
enum_typesz- enum_typeszList<>bit_field_elements- bit_field_elementszChannel of data-type 'z#' should not have 'enum_types' set.z+' should not have 'bit_field_elements' set.)r	   r   r   getr   r   r   r   r   r   valuejoinENUMlistr   ChannelEnumTypeYamlSpecr   _validate_enum_type	BIT_FIELDChannelBitFieldElementYamlSpec_validate_bit_field_element)r   channelr   r   r   r   r   vvalid_data_type_valuesr    	enum_typer"   bit_field_elements                r   _validate_channelr3      s   4S>3'G;;vDdC //h
|TT++m,Kz+s'C//_eV`Uabb;;vD
4 5//h
|TTK(I&()S)!33I}eV`UabbK(I/DE!aggEE..//JJ-.L	
 	
 )..444[[.
*d+!33	"9:;1=	  d3i4 	+I	*	+ 
+55;;	;$[[)=>,d3!33"&	"@AB!D  "&d3i1C!D 	;'(9:	; [[.
!!(3VW  %[[)=>)!(3^_  *_ Fs   /Kc                *   t        t        t        t        f   |       }|j                  d      }t	        |t
              st        j                  |ddddg      |j                  d      }t	        |t              st        j                  |ddddg      y )	Nr   r   r   r   z- enum_typekeyz- keyint	r	   r   r   r$   r   r   r   r   r6   )r   r1   r   r5   s       r   r*   r*   g   s    T#s(^S)I== DdC //'	
 	
 --
Cc3//'	
 	
  r   c                   t        t        t        t        f   |       }|j                  d      }t	        |t
              st        j                  |ddddg      |j                  d      }t	        |t              st        j                  |ddddg      |j                  d	      }t	        |t              st        j                  |d
dddg      y )Nr   r   r   r   r#   indexz- indexr6   	bit_countz- bit_countr7   )r   r2   r   r9   r:   s        r   r-   r-      s    T#s(^S1  (DdC //(EJ0F#G
 	
 !!'*EeS!//)UZ1G$H
 	
 "%%k2Ii%//-5K(L
 	
 &r   c           	        t        t        t        t        f   |       }|j                         D ]  \  }}t	        |t
              s+t        j                  |ddt        t               dddg      t        j                  |      t        d| d      t	        |t              sv	 t        |        y # t        $ r}t        d| d	|       d }~ww xY w)
Nz- <str>z
Dict[str, ]rulesz- channel_referenceszInvalid channel reference key 'zD'. Expected an integer prefixed with '$' e.g. '$1', '$2', and so on.zRule 'z)' contains an invalid channel reference:
)r	   r   r   itemsr   r   r   r   r   ChannelConfigYamlSpec_CHANNEL_REFERENCE_REGEXmatchdictr3   )r   channel_referencer5   r%   errs        r   _validate_channel_referencerE      s    T#s(^S1'--/ e
U#s#!33!Y'<=>a@01	  $))#.6!1#6z{  eT"e!%(!e" # e%se3]^a]b&cddes   %B33	C<CCc                  X    e Zd ZU dZded<   ded<   ded<   ded<   ded	<   d
ed<   ded<   y)r?   a  
    Formal spec that defines what a channel should look like in YAML.

    `name`: Name of channel.
    `description`: Optional channel description.
    `unit`: Unit of measurement.
    `component`: Name of component that channel belongs to.
    `data_type`: Type of the data associated with the channel.
    `enum_types`: Required if `data_type` is `enum.
    `bit_field_elements`: Required if `data_type` is `bit_field`.
    r   r   zNotRequired[str]r   r   r   zUnion[Literal['double'], Literal['string'], Literal['enum'], Literal['bit_field'], Literal['bool'], Literal['float'], Literal['int32'], Literal['int64'], Literal['uint32'], Literal['uint64']]r   z*NotRequired[List[ChannelEnumTypeYamlSpec]]r    z1NotRequired[List[ChannelBitFieldElementYamlSpec]]r"   N__name__
__module____qualname____doc____annotations__ r   r   r?   r?      s8    
 I!!
  ;:IIr   r?   c                  &    e Zd ZU dZded<   ded<   y)r)   zU
    Formal spec that defines what a channel enum type should look like in YAML.
    r   r   r6   r5   NrG   rM   r   r   r)   r)      s     I	Hr   r)   c                  0    e Zd ZU dZded<   ded<   ded<   y)r,   zU
    Formal spec that defines what a bit-field element should look like in YAML.
    r   r   r6   r9   r:   NrG   rM   r   r   r,   r,      s     IJNr   r,   )r   r   )
__future__r   retypingr   r   r   r   r   r	   typing_extensionsr
   r   sift_py.errorr   sift_py.ingestion.channelr   #sift_py.ingestion.config.yaml.errorr   sift_py.yaml.utilsr   compiler@   r   r3   r*   r-   rE   r?   r)   r,   rM   r   r   <module>rY      st    " 	 8 8 4 8 ; ? (%2::j1 
JZ
0
2e0JI JBi Y r   