Django

Code

Changeset 5274

Show
Ignore:
Timestamp:
05/16/07 20:24:58 (1 year ago)
Author:
mtredinnick
Message:

unicode: Audited most of the remaining contrib/ modules for unicode compliance
(only sitemaps remaining). Fixes here for databrowse, markup and webdesign.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/unicode/django/contrib/databrowse/datastructures.py

    r5054 r5274  
    44""" 
    55 
     6import urllib 
    67from django.db import models 
    78from django.utils import dateformat 
    89from django.utils.text import capfirst 
    910from django.utils.translation import get_date_formats 
     11from django.utils.encoding import smart_unicode, smart_str 
    1012 
    1113EMPTY_VALUE = '(None)' 
     
    2022 
    2123    def __repr__(self): 
    22         return '<EasyModel for %s>' % self.model._meta.object_name 
     24        return '<EasyModel for %s>' % smart_str(self.model._meta.object_name) 
    2325 
    2426    def model_databrowse(self): 
     
    5557 
    5658    def __repr__(self): 
    57         return '<EasyField for %s.%s>' % (self.model.model._meta.object_name, self.field.name
     59        return smart_str(u'<EasyField for %s.%s>' % (self.model.model._meta.object_name, self.field.name)
    5860 
    5961    def choices(self): 
     
    7375 
    7476    def __repr__(self): 
    75         return '<EasyChoice for %s.%s>' % (self.model.model._meta.object_name, self.field.name
     77        return smart_str(u'<EasyChoice for %s.%s>' % (self.model.model._meta.object_name, self.field.name)
    7678 
    7779    def url(self): 
    78         return '%s%s/%s/%s/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name, self.field.field.name, self.value
     80        return '%s%s/%s/%s/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name, self.field.field.name, urllib.quote(smart_str(self.value))
    7981 
    8082class EasyInstance(object): 
     
    8385 
    8486    def __repr__(self): 
    85         return '<EasyInstance for %s (%s)>' % (self.model.model._meta.object_name, self.instance._get_pk_val()) 
     87        return smart_str(u'<EasyInstance for %s (%s)>' % (self.model.model._meta.object_name, self.instance._get_pk_val())) 
     88 
     89    def __unicode__(self): 
     90        val = smart_unicode(self.instance) 
     91        if len(val) > 30: 
     92            return val[:30] + u'...' 
     93        return val 
    8694 
    8795    def __str__(self): 
    88         val = str(self.instance) 
    89         if len(val) > 30: 
    90             return val[:30] + '...' 
    91         return val 
     96        return self.__unicode__().encode('utf-8') 
    9297 
    9398    def pk(self): 
     
    95100 
    96101    def url(self): 
    97         return '%s%s/%s/objects/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name, self.pk()) 
     102        return '%s%s/%s/objects/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name, urllib.quote(smart_str(self.pk()))) 
    98103 
    99104    def fields(self): 
     
    127132 
    128133    def __repr__(self): 
    129         return '<EasyInstanceField for %s.%s>' % (self.model.model._meta.object_name, self.field.name
     134        return smart_str(u'<EasyInstanceField for %s.%s>' % (self.model.model._meta.object_name, self.field.name)
    130135 
    131136    def values(self): 
     
    176181                lst = [] 
    177182                for value in self.values(): 
    178                     url = '%s%s/%s/objects/%s/' % (self.model.site.root_url, m.model._meta.app_label, m.model._meta.module_name, value._get_pk_val()) 
    179                     lst.append((str(value), url)) 
     183                    url = '%s%s/%s/objects/%s/' % (self.model.site.root_url, m.model._meta.app_label, m.model._meta.module_name, urllib.quote(smart_str(value._get_pk_val()))) 
     184                    lst.append((smart_unicode(value), url)) 
    180185            else: 
    181186                lst = [(value, None) for value in self.values()] 
     
    183188            lst = [] 
    184189            for value in self.values(): 
    185                 url = '%s%s/%s/fields/%s/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name, self.field.name, self.raw_value
     190                url = '%s%s/%s/fields/%s/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name, self.field.name, urllib.quote(smart_str(self.raw_value))
    186191                lst.append((value, url)) 
    187192        elif isinstance(self.field, models.URLField): 
    188193            val = self.values()[0] 
    189             lst = [(val, val)] 
     194            lst = [(val, urllib.quote(smart_str(val)))] 
    190195        else: 
    191196            lst = [(self.values()[0], None)] 
  • django/branches/unicode/django/contrib/databrowse/plugins/calendars.py

    r5054 r5274  
    2828        fields = self.field_dict(model) 
    2929        if not fields: 
    30             return '' 
    31         return '<p class="filter"><strong>View calendar by:</strong> %s</p>' % \ 
    32             ', '.join(['<a href="calendars/%s/">%s</a>' % (f.name, capfirst(f.verbose_name)) for f in fields.values()]) 
     30            return u'' 
     31        return u'<p class="filter"><strong>View calendar by:</strong> %s</p>' % \ 
     32            u', '.join(['<a href="calendars/%s/">%s</a>' % (f.name, capfirst(f.verbose_name)) for f in fields.values()]) 
    3333 
    3434    def urls(self, plugin_name, easy_instance_field): 
    3535        if isinstance(easy_instance_field.field, models.DateField): 
    36             return ['%s%s/%s/%s/%s/%s/' % (easy_instance_field.model.url(), 
     36            return [u'%s%s/%s/%s/%s/%s/' % (easy_instance_field.model.url(), 
    3737                plugin_name, easy_instance_field.field.name, 
    3838                easy_instance_field.raw_value.year, 
  • django/branches/unicode/django/contrib/databrowse/plugins/fieldchoices.py

    r5054 r5274  
    55from django.shortcuts import render_to_response 
    66from django.utils.text import capfirst 
     7from django.utils.encoding import smart_str 
    78from django.views.generic import date_based 
    89import datetime 
    910import time 
     11import urllib 
    1012 
    1113class FieldChoicePlugin(DatabrowsePlugin): 
     
    3032        fields = self.field_dict(model) 
    3133        if not fields: 
    32             return '' 
    33         return '<p class="filter"><strong>View by:</strong> %s</p>' % \ 
    34             ', '.join(['<a href="fields/%s/">%s</a>' % (f.name, capfirst(f.verbose_name)) for f in fields.values()]) 
     34            return u'' 
     35        return u'<p class="filter"><strong>View by:</strong> %s</p>' % \ 
     36            u', '.join(['<a href="fields/%s/">%s</a>' % (f.name, capfirst(f.verbose_name)) for f in fields.values()]) 
    3537 
    3638    def urls(self, plugin_name, easy_instance_field): 
    3739        if easy_instance_field.field in self.field_dict(easy_instance_field.model.model).values(): 
    38             return ['%s%s/%s/%s/' % (easy_instance_field.model.url(), 
     40            return [u'%s%s/%s/%s/' % (easy_instance_field.model.url(), 
    3941                plugin_name, easy_instance_field.field.name, 
    40                 easy_instance_field.raw_value)] 
     42                urllib.quote(smart_str(easy_instance_field.raw_value)))] 
    4143 
    4244    def model_view(self, request, model_databrowse, url): 
  • django/branches/unicode/django/contrib/databrowse/sites.py

    r5054 r5274  
    6161    def main_view(self, request): 
    6262        easy_model = EasyModel(self.site, self.model) 
    63         html_snippets = '\n'.join([p.model_index_html(request, self.model, self.site) for p in self.plugins.values()]) 
     63        html_snippets = u'\n'.join([p.model_index_html(request, self.model, self.site) for p in self.plugins.values()]) 
    6464        return render_to_response('databrowse/model_detail.html', { 
    6565            'model': easy_model, 
  • django/branches/unicode/django/contrib/databrowse/templates/databrowse/fieldchoice_list.html

    r5054 r5274  
    1111<ul class="objectlist"> 
    1212{% for object in object_list %} 
    13 <li class="{% cycle odd,even %}"><a href="{{ object }}/">{{ object|escape }}</a></li> 
     13<li class="{% cycle odd,even %}"><a href="{{ object|urlencode }}/">{{ object|escape }}</a></li> 
    1414{% endfor %} 
    1515</ul> 
  • django/branches/unicode/django/contrib/markup/templatetags/markup.py

    r4265 r5274  
    1717from django import template 
    1818from django.conf import settings 
     19from django.utils.encoding import smart_str, smart_unicode 
    1920 
    2021register = template.Library() 
     
    2627        if settings.DEBUG: 
    2728            raise template.TemplateSyntaxError, "Error in {% textile %} filter: The Python textile library isn't installed." 
    28         return value 
     29        return smart_unicode(value) 
    2930    else: 
    30         return textile.textile(value, encoding=settings.DEFAULT_CHARSET, output=settings.DEFAULT_CHARSET
     31        return smart_unicode(textile.textile(smart_str(value), encoding='utf-8', output='utf-8')
    3132 
    3233def markdown(value): 
     
    3637        if settings.DEBUG: 
    3738            raise template.TemplateSyntaxError, "Error in {% markdown %} filter: The Python markdown library isn't installed." 
    38         return value 
     39        return smart_unicode(value) 
    3940    else: 
    40         return markdown.markdown(value
     41        return smart_unicode(markdown.markdown(smart_str(value))
    4142 
    4243def restructuredtext(value): 
     
    4647        if settings.DEBUG: 
    4748            raise template.TemplateSyntaxError, "Error in {% restructuredtext %} filter: The Python docutils library isn't installed." 
    48         return value 
     49        return smart_unicode(value) 
    4950    else: 
    5051        docutils_settings = getattr(settings, "RESTRUCTUREDTEXT_FILTER_SETTINGS", {}) 
    51         parts = publish_parts(source=value, writer_name="html4css1", settings_overrides=docutils_settings) 
    52         return parts["fragment"] 
     52        parts = publish_parts(source=smart_str(value), writer_name="html4css1", settings_overrides=docutils_settings) 
     53        return smart_unicode(parts["fragment"]) 
    5354 
    5455register.filter(textile) 
  • django/branches/unicode/django/contrib/webdesign/lorem_ipsum.py

    r5214 r5274  
    66 
    77COMMON_P = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' 
    8 WORDS = ('exercitationem', 'perferendis', 'perspiciatis', 'laborum', 'eveniet', 'sunt', 'iure', 'nam', 'nobis', 'eum', 'cum', 'officiis', 'excepturi', 'odio', 'consectetur', 'quasi', 'aut', 'quisquam', 'vel', 'eligendi', 'itaque', 'non', 'odit', 'tempore', 'quaerat', 'dignissimos', 'facilis', 'neque', 'nihil', 'expedita', 'vitae', 'vero', 'ipsum', 'nisi', 'animi', 'cumque', 'pariatur', 'velit', 'modi', 'natus', 'iusto', 'eaque', 'sequi', 'illo', 'sed', 'ex', 'et', 'voluptatibus', 'tempora', 'veritatis', 'ratione', 'assumenda', 'incidunt', 'nostrum', 'placeat', 'aliquid', 'fuga', 'provident', 'praesentium', 'rem', 'necessitatibus', 'suscipit', 'adipisci', 'quidem', 'possimus', 'voluptas', 'debitis', 'sint', 'accusantium', 'unde', 'sapiente', 'voluptate', 'qui', 'aspernatur', 'laudantium', 'soluta', 'amet', 'quo', 'aliquam', 'saepe', 'culpa', 'libero', 'ipsa', 'dicta', 'reiciendis', 'nesciunt', 'doloribus', 'autem', 'impedit', 'minima', 'maiores', 'repudiandae', 'ipsam', 'obcaecati', 'ullam', 'enim', 'totam', 'delectus', 'ducimus', 'quis', 'voluptates', 'dolores', 'molestiae', 'harum', 'dolorem', 'quia', 'voluptatem', 'molestias', 'magni', 'distinctio', 'omnis', 'illum', 'dolorum', 'voluptatum', 'ea', 'quas', 'quam', 'corporis', 'quae', 'blanditiis', 'atque', 'deserunt', 'laboriosam', 'earum', 'consequuntur', 'hic', 'cupiditate', 'quibusdam', 'accusamus', 'ut', 'rerum', 'error', 'minus', 'eius', 'ab', 'ad', 'nemo', 'fugit', 'officia', 'at', 'in', 'id', 'quos', 'reprehenderit', 'numquam', 'iste', 'fugiat', 'sit', 'inventore', 'beatae', 'repellendus', 'magnam', 'recusandae', 'quod', 'explicabo', 'doloremque', 'aperiam', 'consequatur', 'asperiores', 'commodi', 'optio', 'dolor', 'labore', 'temporibus', 'repellat', 'veniam', 'architecto', 'est', 'esse', 'mollitia', 'nulla', 'a', 'similique', 'eos', 'alias', 'dolore', 'tenetur', 'deleniti', 'porro', 'facere', 'maxime', 'corrupti') 
    9 COMMON_WORDS = ('lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipisicing', 'elit', 'sed', 'do', 'eiusmod', 'tempor', 'incididunt', 'ut', 'labore', 'et', 'dolore', 'magna', 'aliqua') 
     8 
     9WORDS = ('exercitationem', 'perferendis', 'perspiciatis', 'laborum', 'eveniet', 
     10        'sunt', 'iure', 'nam', 'nobis', 'eum', 'cum', 'officiis', 'excepturi', 
     11        'odio', 'consectetur', 'quasi', 'aut', 'quisquam', 'vel', 'eligendi', 
     12        'itaque', 'non', 'odit', 'tempore', 'quaerat', 'dignissimos', 
     13        'facilis', 'neque', 'nihil', 'expedita', 'vitae', 'vero', 'ipsum', 
     14        'nisi', 'animi', 'cumque', 'pariatur', 'velit', 'modi', 'natus', 
     15        'iusto', 'eaque', 'sequi', 'illo', 'sed', 'ex', 'et', 'voluptatibus', 
     16        'tempora', 'veritatis', 'ratione', 'assumenda', 'incidunt', 'nostrum', 
     17        'placeat', 'aliquid', 'fuga', 'provident', 'praesentium', 'rem', 
     18        'necessitatibus', 'suscipit', 'adipisci', 'quidem', 'possimus', 
     19        'voluptas', 'debitis', 'sint', 'accusantium', 'unde', 'sapiente', 
     20        'voluptate', 'qui', 'aspernatur', 'laudantium', 'soluta', 'amet', 
     21        'quo', 'aliquam', 'saepe', 'culpa', 'libero', 'ipsa', 'dicta', 
     22        'reiciendis', 'nesciunt', 'doloribus', 'autem', 'impedit', 'minima', 
     23        'maiores', 'repudiandae', 'ipsam', 'obcaecati', 'ullam', 'enim', 
     24        'totam', 'delectus', 'ducimus', 'quis', 'voluptates', 'dolores', 
     25        'molestiae', 'harum', 'dolorem', 'quia', 'voluptatem', 'molestias', 
     26        'magni', 'distinctio', 'omnis', 'illum', 'dolorum', 'voluptatum', 'ea', 
     27        'quas', 'quam', 'corporis', 'quae', 'blanditiis', 'atque', 'deserunt', 
     28        'laboriosam', 'earum', 'consequuntur', 'hic', 'cupiditate', 
     29        'quibusdam', 'accusamus', 'ut', 'rerum', 'error', 'minus', 'eius', 
     30        'ab', 'ad', 'nemo', 'fugit', 'officia', 'at', 'in', 'id', 'quos', 
     31        'reprehenderit', 'numquam', 'iste', 'fugiat', 'sit', 'inventore', 
     32        'beatae', 'repellendus', 'magnam', 'recusandae', 'quod', 'explicabo', 
     33        'doloremque', 'aperiam', 'consequatur', 'asperiores', 'commodi', 
     34        'optio', 'dolor', 'labore', 'temporibus', 'repellat', 'veniam', 
     35        'architecto', 'est', 'esse', 'mollitia', 'nulla', 'a', 'similique', 
     36        'eos', 'alias', 'dolore', 'tenetur', 'deleniti', 'porro', 'facere', 
     37        'maxime', 'corrupti') 
     38 
     39COMMON_WORDS = ('lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 
     40        'adipisicing', 'elit', 'sed', 'do', 'eiusmod', 'tempor', 'incididunt', 
     41        'ut', 'labore', 'et', 'dolore', 'magna', 'aliqua') 
    1042 
    1143def sentence(): 
     
    1850    # Determine the number of comma-separated sections and number of words in 
    1951    # each section for this sentence. 
    20     sections = [' '.join(random.sample(WORDS, random.randint(3, 12))) for i in range(random.randint(1, 5))] 
    21     s = ', '.join(sections) 
     52    sections = [u' '.join(random.sample(WORDS, random.randint(3, 12))) for i in range(random.randint(1, 5))] 
     53    s = u', '.join(sections) 
    2254    # Convert to sentence case and add end punctuation. 
    23     return '%s%s%s' % (s[0].upper(), s[1:], random.choice('?.')) 
     55    return u'%s%s%s' % (s[0].upper(), s[1:], random.choice('?.')) 
    2456 
    2557def paragraph(): 
     
    2961    The paragraph consists of between 1 and 4 sentences, inclusive. 
    3062    """ 
    31     return ' '.join([sentence() for i in range(random.randint(1, 4))]) 
     63    return u' '.join([sentence() for i in range(random.randint(1, 4))]) 
    3264 
    3365def paragraphs(count, common=True): 
     
    6799    else: 
    68100        word_list = word_list[:count] 
    69     return ' '.join(word_list) 
     101    return u' '.join(word_list) 
  • django/branches/unicode/django/contrib/webdesign/templatetags/webdesign.py

    r5214 r5274  
    1919        if self.method == 'p': 
    2020            paras = ['<p>%s</p>' % p for p in paras] 
    21         return '\n\n'.join(paras) 
     21        return u'\n\n'.join(paras) 
    2222 
    2323#@register.tag