
    B>qj                         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 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 d dlmZ d dlmZ d dlmZ d Zd Zd Zd Z	 	 ddZy)    )Any)Literal)Optional)
get_origin)	AutoField)BackrefAccessor)Field)ForeignKeyField)Node)FieldTypeMap)
ConfigDict)create_modelc                 4    t         t        d | D                 S )Nc              3   &   K   | ]	  \  }}|  y w)N ).0vallabels      W/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/playhouse/pydantic_utils.py	<genexpr>z%choices_to_literal.<locals>.<genexpr>   s     7e7s   )r   tuple)choicess    r   choices_to_literalr      s    57w7788    c           	      `    dj                  | D cg c]  \  }}|d| c}}      S c c}}w )Nz, z = )join)r   valuer   s      r   choices_descriptionr      s(    99WM\UE5%0MNNMs   *
c                     t        | t              r| j                  } | j                  dv rt        S t        j                  | j                  t              S )N)JSONJSONB)
isinstancer
   	rel_field
field_typer   r   get)fields    r   get_field_typer'      sD    %),, 
E,,c22r   c                    | y t        | t        t        t        f      r| f} t	               }| D ]  }t        |t              r&|j                  |j                  j                         9t        |t              r|j                  |j                         et        |t              r|j                  |       t        d|       |S )NzTexclude/include entries must be field names, field objects or back-references, got: )
r"   strPeeweeFieldr   setaddr&   backrefname
ValueError)r   namesitems      r   _field_namesr2   !   s    }%#{O<=EE 
(dO,IIdjj(()k*IIdii c"IIdO $' ( (
( Lr   Nc                    t        |      xs
 t               }t        |      }|xs i }i }i }i }	|j                         D ]\  \  }
}t        |
t              r|||
j
                  <   &t        |
t              r||	|
j                  j                  <   Pt        d|
       | j                  j                  D ]  }
|
j
                  }|h}t        |
t              r|j                  |
j                         ||z  rD|
||z  s||vrP|rt        |
t              rct        |
t              rx||v rh||   }i }|
j                  r|
j                  |d<   |
j                   r|
j                   |d<   |
j"                  rt$        |   }d |d<   |t'        di |f||<   |
j                  }t)        |
      }|
j*                  rt-        |
j*                        nd }|rt/        |      }g }|
j                   r|j1                  |
j                          |r|j1                  dt3        |      z         dj5                  |      xs d }i }|
j                  r|
j                  |d<   |r||d<   |
j6                  }t        |t8              rd }|,t;        |      r||d<   n||d<   |
j"                  r$t$        |   }n|
j"                  rt$        |   }d |d<   |t'        di |f||<    |	j                         D ]=  \  }}||v rt=        |      }|t,        urt        d      |t'        t,        	      f||<   ? |xs d
| j>                  z  }tA        |      }| G d d|d      }||d<   ntC        d      |d<   tE        |fi |S )Nz`relationships keys must be ForeignKeyField or back-reference accessors (e.g. User.tweets), got: titledescriptiondefaultzChoices: %sz | default_factoryz$back-references must use a List type)r7   z%sSchemac                       e Zd Zy)to_pydantic.<locals>.BaseN)__name__
__module____qualname__r   r   r   Baser9      s    r   r=   T)from_attributes__base__
__config__r   )#r2   r+   itemsr"   r
   r.   r   r&   r-   r/   _metasorted_fieldsr,   column_namer   verbose_name	help_textnullr   r	   r'   r   listr   appendr   r   r6   r   callabler   r:   dictr   r   )	model_clsexcludeincludeexclude_autofield
model_namerelationships
base_modelfields
rel_fieldsbackref_fieldsr&   schemar.   r0   field_kwargspython_typer   partsr5   r6   originkwargsr=   s                          r   to_pydanticr\   4   s   7#,suG7#G!'RMFJN&,,. Ave_-%+Juzz"/28N5;;../8=@ A AA .. C<zze_- IIe''(7?!57?j( :eY#?e_-z!#D)!%%,1,>,>L)??27//L/::%f-F.2L+ &(=(=>t$$D$U+).$u}}%D,W5K??LL)LL)<W)EEFjj'/4$)$6$6L!*5L'--gt$ G 29./*1Y'zz&{3ZZ";/K&*L##U%:\%:;tGC<J ',,. =f7?F#CDDd ;<t= @
Y-?-? ?J&\F	:t 	!z)$?|
-f--r   )NNTNNN)typingr   r   r   r   peeweer   r   r	   r*   r
   r   playhouse.reflectionr   pydanticr   r   r   r   r'   r2   r\   r   r   r   <module>ra      sQ         " ' "  -   !9O3& JN@Dk.r   