~ubuntu-branches/ubuntu/saucy/python-django/saucy-updates

« back to all changes in this revision

Viewing changes to django/contrib/databrowse/datastructures.py

  • Committer: Package Import Robot
  • Author(s): Luke Faraone, Jakub Wilk, Luke Faraone
  • Date: 2013-05-09 15:10:47 UTC
  • mfrom: (1.1.21) (4.4.27 sid)
  • Revision ID: package-import@ubuntu.com-20130509151047-aqv8d71oj9wvcv8c
Tags: 1.5.1-2
[ Jakub Wilk ]
* Use canonical URIs for Vcs-* fields.

[ Luke Faraone ]
* Upload to unstable.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
These classes are light wrappers around Django's database API that provide
3
3
convenience functionality and permalink functions for the databrowse app.
4
4
"""
 
5
from __future__ import unicode_literals
5
6
 
6
7
from django.db import models
7
8
from django.utils import formats
8
9
from django.utils.text import capfirst
9
 
from django.utils.encoding import smart_unicode, smart_str, iri_to_uri
10
 
from django.utils.safestring import mark_safe
 
10
from django.utils.encoding import smart_text, force_str, iri_to_uri
11
11
from django.db.models.query import QuerySet
 
12
from django.utils.encoding import python_2_unicode_compatible
12
13
 
13
14
EMPTY_VALUE = '(None)'
14
15
DISPLAY_SIZE = 100
17
18
    def __init__(self, site, model):
18
19
        self.site = site
19
20
        self.model = model
20
 
        self.model_list = site.registry.keys()
 
21
        self.model_list = list(site.registry.keys())
21
22
        self.verbose_name = model._meta.verbose_name
22
23
        self.verbose_name_plural = model._meta.verbose_name_plural
23
24
 
24
25
    def __repr__(self):
25
 
        return '<EasyModel for %s>' % smart_str(self.model._meta.object_name)
 
26
        return force_str('<EasyModel for %s>' % self.model._meta.object_name)
26
27
 
27
28
    def model_databrowse(self):
28
29
        "Returns the ModelDatabrowse class for this model."
29
30
        return self.site.registry[self.model]
30
31
 
31
32
    def url(self):
32
 
        return mark_safe('%s%s/%s/' % (self.site.root_url, self.model._meta.app_label, self.model._meta.module_name))
 
33
        return '%s%s/%s/' % (self.site.root_url, self.model._meta.app_label, self.model._meta.module_name)
33
34
 
34
35
    def objects(self, **kwargs):
35
36
        return self.get_query_set().filter(**kwargs)
61
62
        self.model, self.field = easy_model, field
62
63
 
63
64
    def __repr__(self):
64
 
        return smart_str(u'<EasyField for %s.%s>' % (self.model.model._meta.object_name, self.field.name))
 
65
        return force_str('<EasyField for %s.%s>' % (self.model.model._meta.object_name, self.field.name))
65
66
 
66
67
    def choices(self):
67
68
        for value, label in self.field.choices:
69
70
 
70
71
    def url(self):
71
72
        if self.field.choices:
72
 
            return mark_safe('%s%s/%s/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name, self.field.name))
 
73
            return '%s%s/%s/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name, self.field.name)
73
74
        elif self.field.rel:
74
 
            return mark_safe('%s%s/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name))
 
75
            return '%s%s/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name)
75
76
 
76
77
class EasyChoice(object):
77
78
    def __init__(self, easy_model, field, value, label):
79
80
        self.value, self.label = value, label
80
81
 
81
82
    def __repr__(self):
82
 
        return smart_str(u'<EasyChoice for %s.%s>' % (self.model.model._meta.object_name, self.field.name))
 
83
        return force_str('<EasyChoice for %s.%s>' % (self.model.model._meta.object_name, self.field.name))
83
84
 
84
85
    def url(self):
85
 
        return mark_safe('%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, iri_to_uri(self.value)))
 
86
        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, iri_to_uri(self.value))
86
87
 
 
88
@python_2_unicode_compatible
87
89
class EasyInstance(object):
88
90
    def __init__(self, easy_model, instance):
89
91
        self.model, self.instance = easy_model, instance
90
92
 
91
93
    def __repr__(self):
92
 
        return smart_str(u'<EasyInstance for %s (%s)>' % (self.model.model._meta.object_name, self.instance._get_pk_val()))
 
94
        return force_str('<EasyInstance for %s (%s)>' % (self.model.model._meta.object_name, self.instance._get_pk_val()))
93
95
 
94
 
    def __unicode__(self):
95
 
        val = smart_unicode(self.instance)
 
96
    def __str__(self):
 
97
        val = smart_text(self.instance)
96
98
        if len(val) > DISPLAY_SIZE:
97
 
            return val[:DISPLAY_SIZE] + u'...'
 
99
            return val[:DISPLAY_SIZE] + '...'
98
100
        return val
99
101
 
100
 
    def __str__(self):
101
 
        return self.__unicode__().encode('utf-8')
102
 
 
103
102
    def pk(self):
104
103
        return self.instance._get_pk_val()
105
104
 
106
105
    def url(self):
107
 
        return mark_safe('%s%s/%s/objects/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name, iri_to_uri(self.pk())))
 
106
        return '%s%s/%s/objects/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name, iri_to_uri(self.pk()))
108
107
 
109
108
    def fields(self):
110
109
        """
136
135
        self.raw_value = getattr(instance.instance, field.name)
137
136
 
138
137
    def __repr__(self):
139
 
        return smart_str(u'<EasyInstanceField for %s.%s>' % (self.model.model._meta.object_name, self.field.name))
 
138
        return force_str('<EasyInstanceField for %s.%s>' % (self.model.model._meta.object_name, self.field.name))
140
139
 
141
140
    def values(self):
142
141
        """
176
175
        for plugin_name, plugin in self.model.model_databrowse().plugins.items():
177
176
            urls = plugin.urls(plugin_name, self)
178
177
            if urls is not None:
179
 
                #plugin_urls.append(urls)
180
 
                values = self.values()
181
178
                return zip(self.values(), urls)
182
179
        if self.field.rel:
183
180
            m = EasyModel(self.model.site, self.field.rel.to)
186
183
                for value in self.values():
187
184
                    if value is None:
188
185
                        continue
189
 
                    url = mark_safe('%s%s/%s/objects/%s/' % (self.model.site.root_url, m.model._meta.app_label, m.model._meta.module_name, iri_to_uri(value._get_pk_val())))
190
 
                    lst.append((smart_unicode(value), url))
 
186
                    url = '%s%s/%s/objects/%s/' % (self.model.site.root_url, m.model._meta.app_label, m.model._meta.module_name, iri_to_uri(value._get_pk_val()))
 
187
                    lst.append((smart_text(value), url))
191
188
            else:
192
189
                lst = [(value, None) for value in self.values()]
193
190
        elif self.field.choices:
194
191
            lst = []
195
192
            for value in self.values():
196
 
                url = mark_safe('%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, iri_to_uri(self.raw_value)))
 
193
                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, iri_to_uri(self.raw_value))
197
194
                lst.append((value, url))
198
195
        elif isinstance(self.field, models.URLField):
199
 
            val = self.values()[0]
 
196
            val = list(self.values())[0]
200
197
            lst = [(val, iri_to_uri(val))]
201
198
        else:
202
 
            lst = [(self.values()[0], None)]
 
199
            lst = [(list(self.values())[0], None)]
203
200
        return lst
204
201
 
205
202
class EasyQuerySet(QuerySet):