Django

Code

Changeset 2554

Show
Ignore:
Timestamp:
03/24/06 10:13:57 (3 years ago)
Author:
jacob
Message:

magic-removal: made a few tweaks to admin documentation views to better handle
new-style relation descriptors and deal with non-named groups in urlpatterns.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/magic-removal/django/contrib/admin/utils.py

    r2043 r2554  
    8383def create_reference_role(rolename, urlbase): 
    8484    def _role(name, rawtext, text, lineno, inliner, options={}, content=[]): 
    85         node = docutils.nodes.reference(rawtext, text, refuri=(urlbase % (inliner.document.settings.link_base, text)), **options) 
     85        node = docutils.nodes.reference(rawtext, text, refuri=(urlbase % (inliner.document.settings.link_base, text.lower())), **options) 
    8686        return [node], [] 
    8787    docutils.parsers.rst.roles.register_canonical_role(rolename, _role) 
     
    8989def default_reference_role(name, rawtext, text, lineno, inliner, options={}, content=[]): 
    9090    context = inliner.document.settings.default_reference_context 
    91     node = docutils.nodes.reference(rawtext, text, refuri=(ROLES[context] % (inliner.document.settings.link_base, text)), **options) 
     91    node = docutils.nodes.reference(rawtext, text, refuri=(ROLES[context] % (inliner.document.settings.link_base, text.lower())), **options) 
    9292    return [node], [] 
    9393 
  • django/branches/magic-removal/django/contrib/admin/views/doc.py

    r2421 r2554  
    9494        return missing_docutils_page(request) 
    9595 
    96     views = [] 
    97     for site_settings_module in settings.ADMIN_FOR: 
    98         settings_mod = __import__(site_settings_module, '', '', ['']) 
     96    if settings.ADMIN_FOR: 
     97        settings_modules = [__import__(m, '', '', ['']) for m in settings.ADMIN_FOR] 
     98    else: 
     99        settings_modules = [settings] 
     100     
     101    views = []         
     102    for settings_mod in settings_modules: 
    99103        urlconf = __import__(settings_mod.ROOT_URLCONF, '', '', ['']) 
    100104        view_functions = extract_views_from_urlpatterns(urlconf.urlpatterns) 
     
    164168    fields = [] 
    165169    for field in opts.fields: 
     170        # ForeignKey is a special case since the field will actually be a  
     171        # descriptor that returns the other object  
     172        if isinstance(field, models.ForeignKey): 
     173            data_type = related_object_name = field.rel.to.__name__ 
     174            app_label = field.rel.to._meta.app_label 
     175            verbose = utils.parse_rst(("the related `%s.%s` object"  % (app_label, data_type)), 'model', 'model:' + data_type)  
     176        else: 
     177            data_type = get_readable_field_data_type(field) 
     178            verbose = field.verbose_name 
    166179        fields.append({ 
    167180            'name': field.name, 
    168             'data_type': get_readable_field_data_type(field)
    169             'verbose': field.verbose_name, 
     181            'data_type': data_type
     182            'verbose': verbose, 
    170183            'help': field.help_text, 
    171184        }) 
     
    188201                'verbose': verbose, 
    189202            }) 
     203             
     204    # Gather related objects 
     205    for rel in opts.get_all_related_objects(): 
     206        verbose = "related `%s.%s` objects" % (rel.opts.app_label, rel.opts.object_name) 
     207        accessor = rel.get_accessor_name() 
     208        fields.append({ 
     209            'name' : "%s.all" % accessor, 
     210            'verbose' : utils.parse_rst("all " + verbose , 'model', 'model:' + opts.module_name), 
     211        }) 
     212        fields.append({ 
     213            'name' : "%s.count" % accessor, 
     214            'verbose' : utils.parse_rst("number of " + verbose , 'model', 'model:' + opts.module_name), 
     215        }) 
    190216 
    191217    return render_to_response('admin_doc/model_detail', { 
     
    278304 
    279305def get_readable_field_data_type(field): 
    280     # ForeignKey is a special case. Use the field type of the relation. 
    281     if field.get_internal_type() == 'ForeignKey': 
    282         field = field.rel.get_related_field() 
    283306    return DATA_TYPE_MAPPING[field.get_internal_type()] % field.__dict__ 
    284307 
     
    302325    return views 
    303326 
    304 # Clean up urlpattern regexes into something somewhat readable by Mere Humans: 
    305 # turns something like "^(?P<sport_slug>\w+)/athletes/(?P<athlete_slug>\w+)/$" 
    306 # into "<sport_slug>/athletes/<athlete_slug>/" 
    307  
    308327named_group_matcher = re.compile(r'\(\?P(<\w+>).+?\)') 
     328non_named_group_matcher = re.compile(r'\(.*?\)') 
    309329 
    310330def simplify_regex(pattern): 
     331    """ 
     332    Clean up urlpattern regexes into something somewhat readable by Mere Humans: 
     333    turns something like "^(?P<sport_slug>\w+)/athletes/(?P<athlete_slug>\w+)/$" 
     334    into "<sport_slug>/athletes/<athlete_slug>/" 
     335    """ 
     336    # handle named groups first 
    311337    pattern = named_group_matcher.sub(lambda m: m.group(1), pattern) 
    312     pattern = pattern.replace('^', '').replace('$', '').replace('?', '').replace('//', '/') 
     338     
     339    # handle non-named groups 
     340    pattern = non_named_group_matcher.sub("<var>", pattern) 
     341         
     342    # clean up any outstanding regex-y characters.     
     343    pattern = pattern.replace('^', '').replace('$', '').replace('?', '').replace('//', '/').replace('\\', '') 
    313344    if not pattern.startswith('/'): 
    314345        pattern = '/' + pattern