
    D6i                     L    d dl mZmZ d dlmZ d dlmZ d dlmZ  G d d      Z	y)    )IterableMapping)Column)InstrumentedAttribute)ValidationErrorc                   B    e Zd ZdZddiZd
dZed        Zd Zd Z	d	 Z
y)Uniquea  Checks field values unicity against specified table fields.

    :param column:
        InstrumentedAttribute object, eg. User.name, or
        Column object, eg. user.c.name, or
        a field name, eg. 'name' or
        a tuple of InstrumentedAttributes, eg. (User.name, User.email) or
        a dictionary mapping field names to InstrumentedAttributes, eg.
        {
            'name': User.name,
            'email': User.email
        }
    :param get_session:
        A function that returns a SQAlchemy Session. This parameter is not
        needed if the given model supports Flask-SQLAlchemy styled query
        parameter.
    :param message:
        The error message.
    uniqueTNc                 .    || _         || _        || _        y )N)columnmessageget_session)selfr   r   r   s       ]/home/azureuser/techstart-app/venv/lib/python3.12/site-packages/wtforms_alchemy/validators.py__init__zUnique.__init__   s    &    c                    | j                  | j                         | j                  r)| j                         j                  | j                        S t	        | j                  d      rt        | j                  d      S t        d      )NqueryzPValidator requires either get_session or Flask-SQLAlchemy styled query parameter)_check_for_sessionmodelr   r   hasattrgetattr	Exception)r   s    r   r   zUnique.query$   sl    

+##%++DJJ77TZZ)4::w//* r   c                 L    t        |d      s| j                  st        d      y y )Nr   z$Could not obtain SQLAlchemy session.)r   r   r   )r   r   s     r   r   zUnique._check_for_session1   s)    ug&t/?/?BCC 0@&r   c                     t        |t              r#|t        j                  j                  |      ffS t        |t
              r$t         fd|j                         D              S t        |t              rt         fd|D              S t        |t        t        f      r|j                  |ffS t        d      )z;Converts a set of different syntaxes into a tuple of tuplesc              3   `   K   | ]%  }|d    j                  |d         d    d   f ' yw)r      N_syntaxes_as_tuples.0xfieldformr   s     r   	<genexpr>z-Unique._syntaxes_as_tuples.<locals>.<genexpr>:   s?       1t//eQqTB1EaHIs   +.c              3   J   K   | ]  }j                  |      d      yw)r   Nr   r    s     r   r%   z-Unique._syntaxes_as_tuples.<locals>.<genexpr>?   s%     U11$qA!DUs    #zInvalid syntax for column)
isinstancestrr   Metar   r   tupleitemsr   r   r   key	TypeError)r   r$   r#   r   s   ``` r   r   zUnique._syntaxes_as_tuples5   s    fc"WTYY__f=>@@(    )UfUUU)> ?@ZZ(**788r   c                    | j                  ||| j                        }|d   d   j                  | _        | j                  }|D ]&  \  }}|j                  |||   j                  k(        }( |j                         }t        |d      st        d      |rG|j                  |k(  s7| j                  |j                  d      | _        t        | j                        y y )Nr   r   _objzCouldn't access Form._obj attribute. Either make your form inherit WTForms-Alchemy ModelForm or WTForms-Components ModelForm or make this attribute available in your form.zAlready exists.)r   r   class_r   r   filterdatafirstr   r   r/   r   gettextr   )r   r$   r#   columnsr   
field_namer   objs           r   __call__zUnique.__call__E   s    **4DQZ]))


") 	BJLL4
+;+@+@!@AE	B kkmtV$K  tyyC'||#$}}->?!$,,// (3r   )NN)__name__
__module____qualname____doc__field_flagsr   propertyr   r   r   r8    r   r   r	   r	      s<    ( T"K'
 
 
D9 0r   r	   N)
collections.abcr   r   
sqlalchemyr   sqlalchemy.orm.attributesr   wtformsr   r	   r?   r   r   <module>rD      s    -  ; #P0 P0r   