
    >Tf0                         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 d dlT d dlT d dlmZ d d	lmZ d d
lmZ dZ G d dej                  Z G d dee          Z G d deee          ZdS )    )
ArrayField)ValidationError)MaxValueValidatorMinValueValidator)models)reverse)gettext_lazy)*)PrimaryModel)ContactsMixin)array_to_string)ServiceServiceTemplatec                       e Zd Z ej         ed          de          Z e ej	         e
e           ee          g           ed                    Z G d d          Zd	 Zed
             ZdS )ServiceBaseprotocol2   )verbose_name
max_lengthchoices)
validatorszport numbers)
base_fieldr   c                       e Zd ZdZdS )ServiceBase.MetaTN)__name__
__module____qualname__abstract     9/var/www/html/netbox-4.1.3/netbox/ipam/models/services.pyMetar   $   s        r    r"   c                 P    | j          d|                                  d| j         dS )Nz (/))nameget_protocol_display	port_listselfs    r!   __str__zServiceBase.__str__'   s1    )NNt88::NNT^NNNNr    c                 *    t          | j                  S N)r   portsr)   s    r!   r(   zServiceBase.port_list*   s    tz***r    N)r   r   r   r   	CharField_ServiceProtocolChoicesr   r   PositiveIntegerFieldr   SERVICE_PORT_MINr   SERVICE_PORT_MAXr.   r"   r+   propertyr(   r   r    r!   r   r      s        vQz]]&  H
 J.6.!!"233!!"233
 
 
 Q~&&  E       O O O + + X+ + +r    r   c                   j    e Zd ZdZ ej         ed          dd          Z G d d          Zd Z	d	S )
r   zP
    A template for a Service to be applied to a device or virtual machine.
    r&   d   T)r   r   uniquec                   >    e Zd ZdZ ed          Z ed          ZdS )ServiceTemplate.Meta)r&   zservice templatezservice templatesNr   r   r   orderingr0   r   verbose_name_pluralr   r    r!   r"   r:   9   s6        q+,,a 344r    r"   c                 0    t          d| j        g          S )Nzipam:servicetemplateargsr   pkr)   s    r!   get_absolute_urlz ServiceTemplate.get_absolute_url>   s    -TWI>>>>r    N)
r   r   r   __doc__r   r/   r0   r&   r"   rC   r   r    r!   r   r   /   s          6QvYY  D5 5 5 5 5 5 5 5
? ? ? ? ?r    r   c            	       `    e Zd ZdZ ej        dej        d ed          dd          Z ej        dej        ddd          Z	 ej
        d	 ed
                    Z ej        ddd ed           ed                    Zg dZ G d d          Zd Zed             Z fdZ xZS )r   z
    A Service represents a layer-four service (e.g. HTTP or SSH) running on a Device or VirtualMachine. A Service may
    optionally be tied to one or more specific IPAddresses belonging to its parent.
    zdcim.DeviceservicesdeviceT)to	on_deleterelated_namer   nullblankzvirtualization.VirtualMachine)rH   rI   rJ   rK   rL   r7   r&   )r   r   zipam.IPAddresszIP addresseszAThe specific IP addresses (if any) to which this service is bound)rH   rJ   rL   r   	help_text)r   r.   descriptionrG   virtual_machineipaddressesc                   >    e Zd ZdZ ed          Z ed          ZdS )Service.Meta)r   r.   rB   servicerF   Nr;   r   r    r!   r"   rR   d   s0        .q||a
mmr    r"   c                 0    t          d| j        g          S )Nzipam:servicer?   rA   r)   s    r!   rC   zService.get_absolute_urli   s    ~TWI6666r    c                     | j         p| j        S r-   )rG   rO   r)   s    r!   parentzService.parentl   s    {2d22r    c                     t                                                       | j        r#| j        rt	          t          d                    | j        s#| j        st	          t          d                    d S d S )NzHA service cannot be associated with both a device and a virtual machine.zGA service must be associated with either a device or a virtual machine.)supercleanrG   rO   r   r0   )r*   	__class__s    r!   rY   zService.cleanp   s     ; 	q4/ 	q!!$n"o"oppp{ 	p4#7 	p!!$m"n"nooo	p 	p 	p 	pr    )r   r   r   rD   r   
ForeignKeyCASCADEr0   rG   rO   r/   r&   ManyToManyFieldrP   clone_fieldsr"   rC   r5   rV   rY   __classcell__)rZ   s   @r!   r   r   B   sv         V.Qx[[  F (f'*.  O 6QvYY  D )&(Q~&&!WXX  K feeL, , , , , , , ,
7 7 7 3 3 X3p p p p p p p p pr    r   N)django.contrib.postgres.fieldsr   django.core.exceptionsr   django.core.validatorsr   r   	django.dbr   django.urlsr   django.utils.translationr	   r0   ipam.choicesipam.constantsnetbox.modelsr   netbox.models.featuresr   utilities.datar   __all__Modelr   r   r   r   r    r!   <module>rm      sf   5 5 5 5 5 5 2 2 2 2 2 2 G G G G G G G G             6 6 6 6 6 6         & & & & & & 0 0 0 0 0 0 * * * * * *+ + + + +&, + + +6? ? ? ? ?k< ? ? ?&5p 5p 5p 5p 5pm[, 5p 5p 5p 5p 5pr    