ó
øĒTQc           @  s!  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
 m Z d e f d     YZ d	 e f d
     YZ d e f d     YZ d e f d     YZ d e f d     YZ e   Z d  d l m Z d  d l m Z d  d l m Z d e f d     YZ d S(   iĸĸĸĸ(   t   unicode_literals(   t   http(   t   models(   t	   EasyModel(   t   render_to_response(   t	   mark_safet   AlreadyRegisteredc           B  s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s8   ../Django//lib/python/django/contrib/databrowse/sites.pyR   	   s   t   NotRegisteredc           B  s   e  Z RS(    (   R   R   (    (    (    s8   ../Django//lib/python/django/contrib/databrowse/sites.pyR	      s   t   DatabrowsePluginc           B  s#   e  Z d    Z d   Z d   Z RS(   c         C  s   d S(   u  
        Given an EasyInstanceField object, returns a list of URLs for this
        plugin's views of this object. These URLs should be absolute.

        Returns None if the EasyInstanceField object doesn't get a
        list of plugin-specific URLs.
        N(   t   None(   t   selft   plugin_namet   easy_instance_field(    (    s8   ../Django//lib/python/django/contrib/databrowse/sites.pyt   urls   s    c         C  s   d S(   uO   
        Returns a snippet of HTML to include on the model index page.
        u    (    (   R   t   requestt   modelt   site(    (    s8   ../Django//lib/python/django/contrib/databrowse/sites.pyt   model_index_html   s    c         C  s
   t   d S(   uO   
        Handles main URL routing for a plugin's model-specific pages.
        N(   t   NotImplementedError(   R   R   t   model_databrowset   url(    (    s8   ../Django//lib/python/django/contrib/databrowse/sites.pyt
   model_view    s    (   R   R   R   R   R   (    (    (    s8   ../Django//lib/python/django/contrib/databrowse/sites.pyR
      s   	
	t   ModelDatabrowsec           B  s)   e  Z i  Z d    Z d   Z d   Z RS(   c         C  s   | |  _  | |  _ d  S(   N(   R   R   (   R   R   R   (    (    s8   ../Django//lib/python/django/contrib/databrowse/sites.pyt   __init__)   s    	c         C  s   | d k r |  j |  Sy | j d d  \ } } Wn t k
 rU | d } } n Xy |  j | } Wn  t k
 r t j d   n X| j | |  |  S(   u   
        Handles main URL routing for the databrowse app.

        `url` is the remainder of the URL -- e.g. 'objects/3'.
        u   /i   u0   A plugin with the requested name does not exist.N(	   R   t	   main_viewt   splitt
   ValueErrort   pluginst   KeyErrorR   t   Http404R   (   R   R   R   R   t   rest_of_urlt   plugin(    (    s8   ../Django//lib/python/django/contrib/databrowse/sites.pyt   root-   s    c         C  s   t  |  j |  j  } t d j g  |  j j   D]! } | j | |  j |  j  ^ q.   } t d i | d 6|  j j	 d 6| d 6 S(   Nu   
u   databrowse/model_detail.htmlu   modelu   root_urlu   plugin_html(
   R   R   R   R   t   joinR   t   valuesR   R   t   root_url(   R   R   t
   easy_modelt   pt   html_snippets(    (    s8   ../Django//lib/python/django/contrib/databrowse/sites.pyR   @   s    F	(   R   R   R   R   R"   R   (    (    (    s8   ../Django//lib/python/django/contrib/databrowse/sites.pyR   &   s   		t   DatabrowseSitec           B  sA   e  Z d    Z d   Z d   Z d   Z d   Z d d  Z RS(   c         C  s   i  |  _  d  |  _ d  S(   N(   t   registryR   R%   (   R   (    (    s8   ../Django//lib/python/django/contrib/databrowse/sites.pyR   J   s    	c         O  sY   | j  d t  } x@ | D]8 } | |  j k rD t d | j   n  | |  j | <q Wd S(   uS  
        Registers the given model(s) with the given databrowse site.

        The model(s) should be Model classes, not instances.

        If a databrowse class isn't given, it will use DefaultModelDatabrowse
        (the default databrowse options).

        If a model is already registered, this will raise AlreadyRegistered.
        u   databrowse_classu"   The model %s is already registeredN(   t   popt   DefaultModelDatabrowseR*   R   R   (   R   t
   model_listt   optionst   databrowse_classR   (    (    s8   ../Django//lib/python/django/contrib/databrowse/sites.pyt   registerN   s
    c         G  sD   x= | D]5 } | |  j  k r2 t d | j   n  |  j  | =q Wd S(   u~   
        Unregisters the given model(s).

        If a model isn't already registered, this will raise NotRegistered.
        u   The model %s is not registeredN(   R*   R	   R   (   R   R-   R   (    (    s8   ../Django//lib/python/django/contrib/databrowse/sites.pyt
   unregister_   s    c         C  s   | j  t | j   t |   |  _ | j d  } | d k rK |  j |  Sd | k rs |  j | | j d d   St j d   d S(   u   
        Handles main URL routing for the databrowse app.

        `url` is the remainder of the URL -- e.g. 'comments/comment/'.
        u   /u    i   u-   The requested databrowse page does not exist.N(	   t   patht   lenR%   t   rstript   indext
   model_pageR   R   R   (   R   R   R   (    (    s8   ../Django//lib/python/django/contrib/databrowse/sites.pyR"   j   s    #c         C  sI   g  |  j  j   D] } t |  |  ^ q } t d i | d 6|  j d 6 S(   Nu   databrowse/homepage.htmlu
   model_listu   root_url(   R*   t   keysR   R   R%   (   R   R   t   mt   m_list(    (    s8   ../Django//lib/python/django/contrib/databrowse/sites.pyR5   z   s    +c         C  s   t  j | |  } | d k r: t j d | | f   n  y |  j | } Wn  t k
 rm t j d   n X| | |   j | |  S(   u   
        Handles the model-specific functionality of the databrowse site, delegating
        to the appropriate ModelDatabrowse class.
        u   App %r, model %r, not found.u>   This model exists but has not been registered with databrowse.N(   R   t	   get_modelR   R   R   R*   R   R"   (   R   R   t	   app_labelt
   model_nameR    R   R/   (    (    s8   ../Django//lib/python/django/contrib/databrowse/sites.pyR6   ~   s    N(	   R   R   R   R0   R1   R"   R5   R   R6   (    (    (    s8   ../Django//lib/python/django/contrib/databrowse/sites.pyR)   I   s   					(   t   CalendarPlugin(   t   ObjectDetailPlugin(   t   FieldChoicePluginR,   c           B  s,   e  Z i e   d  6e   d 6e   d 6Z RS(   u   objectsu	   calendarsu   fields(   R   R   R>   R=   R?   R   (    (    (    s8   ../Django//lib/python/django/contrib/databrowse/sites.pyR,      s   N(   t
   __future__R    t   djangoR   t	   django.dbR   t(   django.contrib.databrowse.datastructuresR   t   django.shortcutsR   t   django.utils.safestringR   t	   ExceptionR   R	   t   objectR
   R   R)   R   t+   django.contrib.databrowse.plugins.calendarsR=   t)   django.contrib.databrowse.plugins.objectsR>   t.   django.contrib.databrowse.plugins.fieldchoicesR?   R,   (    (    (    s8   ../Django//lib/python/django/contrib/databrowse/sites.pyt   <module>   s   #C	