
    >Tf                     z   d dl Z d dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZ d dlmZmZ d dlmZ d d	lmZ d
Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d de          Z G d dej                  ZdS )    N)forms)Count)	JSONFieldInvalidJSONInput)static)gettext_lazy)AddrFormatErrorEUI)widgets)EnhancedURLValidator)
ColorFieldCommentFieldr   LaxURLFieldMACAddressField	SlugFieldTagFilterFieldc                        e Zd ZdZej        Z ed          Z ed          	                     e
d                    Zeedd fd
Z xZS )	r   zk
    A textarea with support for Markdown rendering. Exists mostly just to add a standard `help_text`.
    Commentszz<i class="mdi mdi-information-outline"></i> <a href="{url}" target="_blank" tabindex="-1">Markdown</a> syntax is supportedzdocs/reference/markdown/)urlFlabel	help_textrequiredc                B     t                      j        d|||d| d S )Nr    )super__init__)selfr   r   r   kwargs	__class__s        B/var/www/html/netbox-4.1.3/netbox/utilities/forms/fields/fields.pyr   zCommentField.__init__#   s0    Wu	HWWPVWWWWW    )__name__
__module____qualname____doc__r   MarkdownWidgetwidget_r   formatr   r   r   __classcell__r    s   @r!   r   r      s          #FAjMME	Y  f233f44 
 !&U X X X X X X X X X X Xr"   r   c                   f     e Zd ZdZej        Z ed          Z ed          Z	dee	d fd
Z
 xZS )r   z
    Extend Django's built-in SlugField to automatically populate from a field called `name` unless otherwise specified.

    Parameters:
        slug_source: Name of the form field from which the slug value will be derived
    SlugzURL-friendly unique shorthandname)slug_sourcer   r   c                ^     t                      j        d||d| || j        j        d<   d S )N)r   r   zslug-sourcer   )r   r   r(   attrs)r   r0   r   r   r   r    s        r!   r   zSlugField.__init__2   s<    Du	DDVDDD+6-(((r"   )r#   r$   r%   r&   r   
SlugWidgetr(   r)   r   r   r   r+   r,   s   @r!   r   r   '   sz          FAfIIE122I&,EY 7 7 7 7 7 7 7 7 7 7 7r"   r   c                        e Zd ZdZej        ZdS )r   z
    A field which represents a color value in hexadecimal `RRGGBB` format. Utilizes NetBox's `ColorSelect` widget to
    render choices.
    N)r#   r$   r%   r&   r   ColorSelectr(   r   r"   r!   r   r   8   s"           FFFr"   r   c                   "     e Zd ZdZ fdZ xZS )r   z
    A filter field for the tags of a model. Only the tags used by a model are displayed.

    :param model: The model of the filter
    c                 h    fd} t                      j        |t          d          |dd| d S )Nc                      j                             t          d                                        d          } d | D             S )Nextras_taggeditem_items)countr/   c                 v    g | ]6}t          |j                  d                     |j        |j                  f7S )z{} ({}))strslugr*   r/   r:   ).0tags     r!   
<listcomp>z@TagFilterField.__init__.<locals>.get_choices.<locals>.<listcomp>L   sF       KNSX	 0 039 E EF  r"   )tagsannotater   order_by)rA   models    r!   get_choicesz,TagFilterField.__init__.<locals>.get_choicesH   s\    :&&566 '  hv  RV   r"   TagsF)r   choicesr   )r   r   r)   )r   rD   argsr   rE   r    s    `   r!   r   zTagFilterField.__init__G   sR    	 	 	 	 	 	PTqyy+__X^_____r"   )r#   r$   r%   r&   r   r+   r,   s   @r!   r   r   @   sK         
` 
` 
` 
` 
` 
` 
` 
` 
`r"   r   c                   (    e Zd ZdZ e            gZdS )r   z
    Modifies Django's built-in URLField to remove the requirement for fully-qualified domain names
    (e.g. http://myserver/ is valid)
    N)r#   r$   r%   r&   r   default_validatorsr   r"   r!   r   r   T   s.          /.001r"   r   c                   0     e Zd ZdZg dZ fdZd Z xZS )r   zk
    Custom wrapper around Django's built-in JSONField to avoid presenting "null" as the default text.
    )N r   c                      t                      j        |i | | j        s4t          d          | _        d| j        j        d<   d| j        j        d<   d S d S )NzBEnter context data in <a href="https://json.org/">JSON</a> format.rL   placeholderzfont-monospaceclass)r   r   r   r)   r(   r2   )r   rH   r   r    s      r!   r   zJSONField.__init__b   sg    $)&)))~ 	:cddDN/1DKm,)9DKg&&&	: 	:r"   c                    t          |t                    r|S |dv rdS t          |          t          u r9	 t	          j        || j                  }n# t          j        j        $ r |cY S w xY wt	          j        |ddd| j	                  S )N)rL   NrL   )clsT   F)	sort_keysindentensure_asciirQ   )

isinstancer   typer<   jsonloadsdecoderJSONDecodeErrordumpsencoder)r   values     r!   prepare_valuezJSONField.prepare_valuei   s    e-.. 	LJ2;;#
5dl;;;</   z%4SWS_````s   A A*)A*)r#   r$   r%   r&   empty_valuesr   r_   r+   r,   s   @r!   r   r   \   sc          ">>L: : : : :
a 
a 
a 
a 
a 
a 
ar"   r   c                   J     e Zd ZdZej        Zd ed          iZ fdZ	 xZ
S )r   z)
    Validates a 48-bit MAC address.
    invalidz$MAC address must be in EUI-48 formatc                     t                                          |          }	 t          |                                          }n/# t          $ r" t          j        | j        d         d          w xY w|S )Nrb   )code)r   	to_pythonr
   stripr	   r   ValidationErrorerror_messages)r   r^   r    s     r!   re   zMACAddressField.to_python   s{    !!%((	X&&EE 	X 	X 	X'(;I(FYWWWW	X s   !A ,A2)r#   r$   r%   r&   r   	CharFieldr(   r)   default_error_messagesre   r+   r,   s   @r!   r   r   v   sc          _F11;<<	 	 	 	 	 	 	 	 	r"   r   ) rX   djangor   django.db.modelsr   django.forms.fieldsr   
_JSONFieldr   django.templatetags.staticr   django.utils.translationr   r)   netaddrr	   r
   utilities.formsr   utilities.validatorsr   __all__ri   r   r   r   MultipleChoiceFieldr   URLFieldr   Fieldr   r   r"   r!   <module>rx      s          " " " " " " I I I I I I I I - - - - - - 6 6 6 6 6 6 ( ( ( ( ( ( ( ( # # # # # # 5 5 5 5 5 5X X X X X5? X X X7 7 7 7 7 7 7 7"! ! ! ! ! ! ! !` ` ` ` `U. ` ` `(2 2 2 2 2%. 2 2 2a a a a a
 a a a4    ek     r"   