3

\Q                 @   s   d dl 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
mZ d dlmZmZmZmZ d dlmZ G d	d
 d
ejZG dd deZdd Zdd ZdS )    N) is_language_prefix_patterns_used)
validators)ValidationError)Http404)resolveget_urlconf)gettext_lazyget_language_from_pathget_languageoverride)	get_modelc                   s@   e Zd Z fddZ fddZdd Zdd Zd	d
 Z  ZS )ExtendedURLValidatorc                s   d| _ t j|| d S )NF)is_local_urlsuper__init__)selfargskwargs)	__class__ 0/var/www/html/oscar2019/oscar/core/validators.pyr      s    zExtendedURLValidator.__init__c                s<   yt  j| W n& tk
r6   |r0| j| n Y nX d S )N)r   __call__r   validate_local_url)r   value)r   r   r   r      s    zExtendedURLValidator.__call__c             C   s   yt | W nj tk
rv   tdd}|d k	rby|jj|d W n |jk
r\   d| _Y nX d S ttd| Y nX d| _d S )N	flatpagesFlatPage)urlTzThe URL "%s" does not exist)	r   r   r   objectsgetDoesNotExistr   r   _)r   r   r   r   r   r   _validate_url   s    
z"ExtendedURLValidator._validate_urlc          	   C   sp   | j |}t }t|\}}d }|r>t|}t }||kr>|}|rbt| | j| W d Q R X n
| j| d S )N)	clean_urlr   r   r	   r
   r   r!   )r   r   urlconfZi18n_patterns_usedr    Zredefined_languagelanguageZcurrent_languager   r   r   r   0   s    

z'ExtendedURLValidator.validate_local_urlc             C   s8   |dkrd|j d }|jd}|dkr4|d| }|S )zF
        Ensure url has a preceding slash and no query string
        /?r   N)lstripfind)r   r   Zq_indexr   r   r   r"   G   s    
zExtendedURLValidator.clean_url)	__name__
__module____qualname__r   r   r!   r   r"   __classcell__r   r   )r   r   r      s
   r   c               @   s   e Zd Zdd ZdS )URLDoesNotExistValidatorc             C   s8   y| j | W n tk
r"   dS X ttddddS )a  
        Validate that the URL does not already exist.

        The URL will be verified first and raises ``ValidationError`` when
        it is invalid. A valid URL is checked for existence and raises
        ``ValidationError`` if the URL already exists.

        This validation uses two calls to ExtendedURLValidator which can
        be slow. Be aware of this, when you use it.

        Returns ``None`` if URL is valid and does not exist.
        NzSpecified page already exists!invalid)code)r   r   r    )r   r   r   r   r   r   U   s    z!URLDoesNotExistValidator.__call__N)r)   r*   r+   r   r   r   r   r   r-   S   s   r-   c             C   s   | j  }|sttd|S )NzThis field is required)stripr   r    )r   strippedr   r   r   non_whitespacek   s
    
r2   c             C   s   t j| rttd| S )Nz/This field is invalid as its value is forbidden)keyword	iskeywordr   r    )r   r   r   r   non_python_keywords   s    

r5   )r3   Zdjango.conf.urls.i18nr   django.corer   django.core.exceptionsr   django.httpr   django.urlsr   r   django.utils.translationr   r    r	   r
   r   oscar.core.loadingr   URLValidatorr   r-   r2   r5   r   r   r   r   <module>   s   F