o
    b                     @   s   d dl Z d dlZd dlmZ ejdkrd dlmZ nd dlmZ ddl	m
Z
 G dd	 d	ejZG d
d deZG dd deZdS )    N)models)   r   )gettext_lazy)ugettext_lazy   )basec                       sJ   e Zd Z fddZdd Zdd Zddd	Zd
d Z fddZ  Z	S )SemVerFieldc                    s&   | dd tt| j|i | d S )N
max_length   )
setdefaultsuperr   __init__selfargskwargs	__class__ Busr/lib/python3.10/site-packages/semantic_version/django_fields.pyr      s   zSemVerField.__init__c                 G   s
   |  |S )zgConvert from the database format.

        This should be the inverse of self.get_prep_value()
        )	to_python)r   valueZ
expression
connectionr   r   r   r   from_db_value   s   
zSemVerField.from_db_valuec                 C   s   |d u rd S t |S N)str)r   objr   r   r   get_prep_value       zSemVerField.get_prep_valueFc                 C   s   |s|  |}|S r   )r   )r   r   r   preparedr   r   r   get_db_prep_value#   s   
zSemVerField.get_db_prep_valuec                 C   s   |  | |}t|S r   )r   Zvalue_from_objectr   )r   r   r   r   r   r   value_to_string(   s   zSemVerField.value_to_stringc                    s   t t| t|S r   )r   r   run_validatorsr   r   r   r   r   r   r"   ,   r   zSemVerField.run_validators)F)
__name__
__module____qualname__r   r   r   r    r!   r"   __classcell__r   r   r   r   r      s    
r   c                       D   e Zd ZdediZedZ fddZ fddZdd	 Z  Z	S )
VersionFieldinvalidz-Enter a valid version number in X.Y.Z format.Versionc                    sL   | dd| _| jrtjdtdd | dd| _tt| j|i | d S )NpartialFz-Use of `partial=True` will be removed in 3.0.   )
stacklevelcoerce)	popr,   warningswarnDeprecationWarningr/   r   r)   r   r   r   r   r   r   6   s   zVersionField.__init__c                    s6   t t|  \}}}}| j|d< | j|d< ||||fS )Handle django.db.migrations.r,   r/   )r   r)   deconstructr,   r/   r   namepathr   r   r   r   r   r5   A   s   

zVersionField.deconstructc                 C   sL   |du s|dkr
|S t |tjr|S | jrtjj|| jdS tj|| jdS )z+Converts any value to a base.Version field.N )r,   )
isinstancer   r+   r/   r,   r#   r   r   r   r   H   s   zVersionField.to_python
r$   r%   r&   _Zdefault_error_messagesdescriptionr   r5   r   r'   r   r   r   r   r)   0   s    r)   c                       r(   )
	SpecFieldr*   zAEnter a valid version number spec list in ==X.Y.Z,>=A.B.C format.zVersion specification listc                    s*   | dtj| _tt| j|i | d S )Nsyntax)r0   r   DEFAULT_SYNTAXr?   r   r>   r   r   r   r   r   r   Z   s   zSpecField.__init__c                    s8   t t|  \}}}}| jtjkr| j|d< ||||fS )r4   r?   )r   r>   r5   r?   r   r@   r6   r   r   r   r5   ^   s   
zSpecField.deconstructc                 C   s6   |du s|dkr
|S t |tjr|S tjj|| jdS )z(Converts any value to a base.Spec field.Nr9   )r?   )r:   r   ZBaseSpecparser?   r#   r   r   r   r   e   s
   zSpecField.to_pythonr;   r   r   r   r   r>   T   s    r>   )r1   ZdjangoZ	django.dbr   VERSIONZdjango.utils.translationr   r<   r   r9   r   Z	CharFieldr   r)   r>   r   r   r   r   <module>   s   
$