
    Bh                         d dl 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  e j                  d      Zd Zd	 Zdd
ZddZddZy)    N)NoReverseMatchreverse)	force_str)PAGE_USERNAME_MAX_LENGTH)get_current_siteget_language_from_request)get_cms_settingz^(.*)-(\d+)$c                 "   t        d      }t        d |D              }|syt        |      dk(  r|d   d   S | j                  j	                  d      }|r||v r|S | j
                  r| j
                  j                         S t        d      d   d   S )za
    Gets a valid template from different sources or falls back to the default
    template.
    	TEMPLATESc              3   &   K   | ]	  }|d      yw)r   N ).0pairs     >/home/dcms/DCMS/lib/python3.12/site-packages/cms/utils/page.py	<genexpr>z1get_page_template_from_request.<locals>.<genexpr>   s     =4tAw=s   N   r   template)r	   	frozensetlenGETgetcurrent_pageget_template)request	templatestemplate_namesmanual_templates       r   get_page_template_from_requestr      s    
  ,I=9==N
9~ |Akkooj1O?n<##0022;'*1--    c                     	 t        |       }t        |      t        kD  r|d t        dz
    d| j                   d}|S # t        $ r d}Y |S w xY w)N   z... (id=)	anonymous)r   r   r   pkAttributeError)userusernames     r   get_clean_usernamer(   (   sh    WT? x=33"#A$<r$ABC8DGG9TUVHO  
 Os   = AAc                 r    ddl m} ddlm} ddlm}  |d|d       |j                  j                  |       S )Nr   )warn)Page)RemovedInDjangoCMS60WarningzWcms.utils.page.get_page_queryset is deprecated. Use Page.objects.on_site(site) instead.   )
stacklevel)warningsr*   
cms.modelsr+   cms.utils.compat.warningsr,   objectson_site)sitedraft	publishedr*   r+   r,   s         r   get_page_querysetr7   5   s5    E	2#	 <<%%r   c                    ddl m} t        | d      r| j                  S |t	        |       }|| j
                  n|}|rA	 t        d      }|j                  |      r|t        |      d }|j                  d      r|dd }t               }|j                  j                  |      j                  |      j                  d	      }t!        |      }	 |d   j"                  }|d   j$                  t'        |       k(  r |D 	ci c]  }	|	j$                  |	 c}	|_        |S # t        $ r Y w xY wc c}	w # t*        $ r d}Y |S w xY w)
a4  
    Gets the current page from a request object.

    URLs can be of the following form (this should help understand the code):
    http://server.whatever.com/<some_path>/"pages-root"/some/page/slug

    <some_path>: This can be anything, and should be stripped when resolving
        pages names. This means the CMS is not installed at the root of the
        server's URLs.
    "pages-root" This is the root of Django urls for the CMS. It is, in essence
        an empty page slug (slug == '')

    The page slug can then be resolved to a Page model object
    r   PageUrl_current_page_cacheNz
pages-root/)pathpage)r0   r:   hasattrr;   bool	path_infor   
startswithr   endswithr   r   r2   get_for_sitefilterselect_relatedlistr?   languager   
urls_cache
IndexError)
r   use_path
clean_pathr:   r>   
pages_rootr4   	page_urlsr?   urls
             r   get_page_from_requestrQ   D   sL    #w-.***h'
 ( 07hD		 .Jz*C
O,- }}S!CRy D		d		T			  YI|  Q<  $=g$FF<EFSs||S0FDO K%  		 G Ks7    A D .D0 >D+D0 	D('D(+D0 0D?>D?c                    ddl m} |j                  d      \  }}}|j                  j	                  | ||      }	|	j                         rt        j                  |      }
|
r;|r9t        |
j                         d         dz   }t        j                  d| |      }n|r|d|z   d	z   z  }n|d	z  }|r| d| n|}t        | |||d
      S |S )z_
    Generates slug for path.
    If path is used, appends the value of suffix to the end.
    r   r9   r<   )r>   rI   r=   r   z\g<1>--z-2T)modified)cms.models.pagemodelr:   
rpartitionr2   rE   existsSUFFIX_REGEXmatchintgroupssubget_available_slug)r4   r>   rI   suffixrT   r:   base_slugrO   rY   _nexts               r   r]   r]   |   s    
 -OOC(MD!T,,Tx,PI""4(Xr*+a/E##geW$5t<DC&L4''DDLD#'$qT!$hNNKr   )TF)NN)copyF)redjango.urlsr   r   django.utils.encodingr   cms.constantsr   	cms.utilsr   r   cms.utils.confr	   compilerX   r   r(   r7   rQ   r]   r   r   r   <module>rk      sA    	 / + 2 A *rzz/*.6
&5pr   