
    Bh                     N   d dl 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mZ d dlmZ d dlZd d	lmZ  e j&                  d
      Z e j&                  de j*                        Zd Zd Zd Zd Zd Z ed      Z	 	 	 	 	 ddedee   dee   deeeef      dee   f
dZy)    N)Sequence)AnyOptional)urlparse)settings)reverse)	force_str)	urlencode)get_cms_settingz(^/?[a-zA-Z0-9_.-]+(/[a-zA-Z0-9_.-]+)*/?$z^[^/<>]+/[^/<>].*$|^/[^/<>]*.*$c           	          t        t        d| j                  d                  }t        t	        |      dd      D cg c]  }ddj                  |d|       z    c}S c c}w )zSplits given path to list of paths removing latest level in each step.

    >>> path = '/application/item/new'
    >>> levelize_path(path)
    ['/application/item/new', '/application/item', '/application']
    N/r   )tuplefiltersplitrangelenjoin)pathpartsns      B/home/dcms/DCMS/lib/python3.12/site-packages/cms/utils/urlutils.pylevelize_pathr      sR     &tzz#/0E/4SZB/GH!C#((5!9%%HHHs   Ac                      | d   j                  d      rdnd}|dj                  t        dd | D                    z  }t        j                  r|dz   S |S )a  Joins url segments together and appends trailing slash if required.

    >>> urljoin('a', 'b', 'c')
    u'a/b/c/'

    >>> urljoin('a', '//b//', 'c')
    u'a/b/c/'

    >>> urljoin('/a', '/b/', '/c/')
    u'/a/b/c/'

    >>> urljoin('/a', '')
    u'/a/'
    r   r    Nc              3   P   K   | ]  }t        |      j                  d          yw)r   N)r	   strip).0ss     r   	<genexpr>zurljoin.<locals>.<genexpr>5   s     !La)A,"4"4S"9!Ls   $&)
startswithr   r   r   APPEND_SLASH)segmentsurls     r   urljoinr%   %   sS     !'',#"C388F4!L8!LMNNC --39636    c                     t        t        j                        }| j                  j	                  |j
                        r,|j                  r| j                         |j                  k(  ryyyy)z0
    Check if a request is a media request.
    TF)r   r   	MEDIA_URL	path_infor!   r   netlocget_host)requestparsed_media_urls     r   is_media_requestr.   9   sa       2 23##$4$9$9:""!%5%<%<<  r&   c                 |    t        j                  d      }t        j                  |dt        j                  z  |       S )zb
    Changes provided path from `path/to/filename.ext` to `path/to/$CMS_VERSION/filename.ext`
    z(.*)/([^/]*$)z\1/%s/\2)recompilesubcms__version__)r   path_res     r   static_with_versionr6   G   s.     jj)G66';#//:DAAr&   c                 Z    |D ]  }|j                  |        |r|  dt        |       S | S )a  
    adds parameters to an url -> url?p1=v1&p2=v2...
    :param url: url without any parameters
    :param args: one or more dictionaries containing url parameters
    :param params: url parameters as keyword arguments
    :return: url with parameters if any
    ?)updater
   )r$   argsparamsargs       r   add_url_parametersr=   P   s>      ca	&)*++Jr&   ADMIN_NAMESPACEviewnameurlconfr:   kwargscurrent_appc                 4    t        t         d|  ||||      S )N:)r@   r:   rA   rB   )r   admin_namespace)r?   r@   r:   rA   prefixrB   s         r   admin_reverserG   b   s,     
1XJ' r&   )NNNNN) r0   collections.abcr   typingr   r   urllib.parser   django.confr   django.urlsr   django.utils.encodingr	   django.utils.httpr
   r3   cms.utils.confr   r1   any_path_re
IGNORECASErelative_url_regexr   r%   r.   r6   r=   rE   strdictrG    r&   r   <module>rV      s    	 $   !    + ' 
 * bjjCD  RZZ BBMMR I7(B ""34
 "#'+!%c] 8
 T#s(^$	 #r&   