Author: ccahoon Date: 2009-06-30 21:04:35 -0500 (Tue, 30 Jun 2009) New Revision: 11130
Removed: django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/templates/gis/google/google-base.js Modified: django/branches/soc2009/http-wsgi-improvements/django/contrib/admindocs/views.py django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/admin/options.py django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/db/models/sql/query.py django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/maps/google/gmap.py django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/templates/gis/google/google-map.js django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/templates/gis/google/google-multi.js django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/templates/gis/google/google-single.js django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/tests/relatedapp/models.py django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/tests/relatedapp/tests.py django/branches/soc2009/http-wsgi-improvements/django/core/urlresolvers.py django/branches/soc2009/http-wsgi-improvements/tests/modeltests/transactions/models.py django/branches/soc2009/http-wsgi-improvements/tests/regressiontests/null_fk/models.py django/branches/soc2009/http-wsgi-improvements/tests/regressiontests/serializers_regress/tests.py django/branches/soc2009/http-wsgi-improvements/tests/regressiontests/urlpatterns_reverse/tests.py Log: [soc2009/http-wsgi-improvements] Merged up to r11127 from trunk. Modified: django/branches/soc2009/http-wsgi-improvements/django/contrib/admindocs/views.py =================================================================== --- django/branches/soc2009/http-wsgi-improvements/django/contrib/admindocs/views.py 2009-06-30 21:56:08 UTC (rev 11129) +++ django/branches/soc2009/http-wsgi-improvements/django/contrib/admindocs/views.py 2009-07-01 02:04:35 UTC (rev 11130) @@ -214,6 +214,22 @@ 'help_text': field.help_text, }) + # Gather many-to-many fields. + for field in opts.many_to_many: + data_type = related_object_name = field.rel.to.__name__ + app_label = field.rel.to._meta.app_label + verbose = _("related `%(app_label)s.%(object_name)s` objects") % {'app_label': app_label, 'object_name': data_type} + fields.append({ + 'name': "%s.all" % field.name, + "data_type": 'List', + 'verbose': utils.parse_rst(_("all %s") % verbose , 'model', _('model:') + opts.module_name), + }) + fields.append({ + 'name' : "%s.count" % field.name, + 'data_type' : 'Integer', + 'verbose' : utils.parse_rst(_("number of %s") % verbose , 'model', _('model:') + opts.module_name), + }) + # Gather model methods. for func_name, func in model.__dict__.items(): if (inspect.isfunction(func) and len(inspect.getargspec(func)[0]) == 1): @@ -233,7 +249,7 @@ }) # Gather related objects - for rel in opts.get_all_related_objects(): + for rel in opts.get_all_related_objects() + opts.get_all_related_many_to_many_objects(): verbose = _("related `%(app_label)s.%(object_name)s` objects") % {'app_label': rel.opts.app_label, 'object_name': rel.opts.object_name} accessor = rel.get_accessor_name() fields.append({ Modified: django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/admin/options.py =================================================================== --- django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/admin/options.py 2009-06-30 21:56:08 UTC (rev 11129) +++ django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/admin/options.py 2009-07-01 02:04:35 UTC (rev 11130) @@ -32,7 +32,7 @@ map_height = 400 map_srid = 4326 map_template = 'gis/admin/openlayers.html' - openlayers_url = 'http://openlayers.org/api/2.7/OpenLayers.js' + openlayers_url = 'http://openlayers.org/api/2.8/OpenLayers.js' point_zoom = num_zoom - 6 wms_url = 'http://labs.metacarta.com/wms/vmap0' wms_layer = 'basic' Modified: django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/db/models/sql/query.py =================================================================== --- django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/db/models/sql/query.py 2009-06-30 21:56:08 UTC (rev 11129) +++ django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/db/models/sql/query.py 2009-07-01 02:04:35 UTC (rev 11130) @@ -225,7 +225,7 @@ values.append(self.convert_values(value, field)) else: values.extend(row[index_start:]) - return values + return tuple(values) def convert_values(self, value, field): """ Modified: django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/maps/google/gmap.py =================================================================== --- django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/maps/google/gmap.py 2009-06-30 21:56:08 UTC (rev 11129) +++ django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/maps/google/gmap.py 2009-07-01 02:04:35 UTC (rev 11130) @@ -21,7 +21,7 @@ def __init__(self, key=None, api_url=None, version=None, center=None, zoom=None, dom_id='map', kml_urls=[], polylines=None, polygons=None, markers=None, - template='gis/google/google-single.js', + template='gis/google/google-map.js', js_module='geodjango', extra_context={}): @@ -162,7 +162,7 @@ # This is the template used to generate the GMap load JavaScript for # each map in the set. - self.map_template = kwargs.pop('map_template', 'gis/google/google-map.js') + self.map_template = kwargs.pop('map_template', 'gis/google/google-single.js') # Running GoogleMap.__init__(), and resetting the template # value with default obtained above. Deleted: django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/templates/gis/google/google-base.js =================================================================== --- django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/templates/gis/google/google-base.js 2009-06-30 21:56:08 UTC (rev 11129) +++ django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/templates/gis/google/google-base.js 2009-07-01 02:04:35 UTC (rev 11130) @@ -1,7 +0,0 @@ -{% block vars %}var geodjango = {};{% for icon in icons %} -var {{ icon.varname }} = new GIcon(G_DEFAULT_ICON); -{% if icon.image %}{{ icon.varname }}.image = "{{ icon.image }}";{% endif %} -{% if icon.shadow %}{{ icon.varname }}.shadow = "{{ icon.shadow }}";{% endif %} {% if icon.shadowsize %}{{ icon.varname }}.shadowSize = new GSize({{ icon.shadowsize.0 }}, {{ icon.shadowsize.1 }});{% endif %} -{% if icon.iconanchor %}{{ icon.varname }}.iconAnchor = new GPoint({{ icon.iconanchor.0 }}, {{ icon.iconanchor.1 }});{% endif %} {% if icon.iconsize %}{{ icon.varname }}.iconSize = new GSize({{ icon.iconsize.0 }}, {{ icon.iconsize.1 }});{% endif %} -{% if icon.infowindowanchor %}{{ icon.varname }}.infoWindowAnchor = new GPoint({{ icon.infowindowanchor.0 }}, {{ icon.infowindowanchor.1 }});{% endif %}{% endfor %}{% endblock %} -{% block functions %}{% endblock %} \ No newline at end of file Modified: django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/templates/gis/google/google-map.js =================================================================== --- django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/templates/gis/google/google-map.js 2009-06-30 21:56:08 UTC (rev 11129) +++ django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/templates/gis/google/google-map.js 2009-07-01 02:04:35 UTC (rev 11130) @@ -1,10 +1,16 @@ {% autoescape off %} +{% block vars %}var geodjango = {};{% for icon in icons %} +var {{ icon.varname }} = new GIcon(G_DEFAULT_ICON); +{% if icon.image %}{{ icon.varname }}.image = "{{ icon.image }}";{% endif %} +{% if icon.shadow %}{{ icon.varname }}.shadow = "{{ icon.shadow }}";{% endif %} {% if icon.shadowsize %}{{ icon.varname }}.shadowSize = new GSize({{ icon.shadowsize.0 }}, {{ icon.shadowsize.1 }});{% endif %} +{% if icon.iconanchor %}{{ icon.varname }}.iconAnchor = new GPoint({{ icon.iconanchor.0 }}, {{ icon.iconanchor.1 }});{% endif %} {% if icon.iconsize %}{{ icon.varname }}.iconSize = new GSize({{ icon.iconsize.0 }}, {{ icon.iconsize.1 }});{% endif %} +{% if icon.infowindowanchor %}{{ icon.varname }}.infoWindowAnchor = new GPoint({{ icon.infowindowanchor.0 }}, {{ icon.infowindowanchor.1 }});{% endif %}{% endfor %} +{% endblock vars %}{% block functions %} {% block load %}{{ js_module }}.{{ dom_id }}_load = function(){ if (GBrowserIsCompatible()) { {{ js_module }}.{{ dom_id }} = new GMap2(document.getElementById("{{ dom_id }}")); {{ js_module }}.{{ dom_id }}.setCenter(new GLatLng({{ center.1 }}, {{ center.0 }}), {{ zoom }}); - {% block controls %}{{ js_module }}.{{ dom_id }}.addControl(new GSmallMapControl()); - {{ js_module }}.{{ dom_id }}.addControl(new GMapTypeControl());{% endblock %} + {% block controls %}{{ js_module }}.{{ dom_id }}.setUIToDefault();{% endblock %} {% if calc_zoom %}var bounds = new GLatLngBounds(); var tmp_bounds = new GLatLngBounds();{% endif %} {% for kml_url in kml_urls %}{{ js_module }}.{{ dom_id }}_kml{{ forloop.counter }} = new GGeoXml("{{ kml_url }}"); {{ js_module }}.{{ dom_id }}.addOverlay({{ js_module }}.{{ dom_id }}_kml{{ forloop.counter }});{% endfor %} @@ -26,4 +32,4 @@ alert("Sorry, the Google Maps API is not compatible with this browser."); } } -{% endblock %}{% endautoescape %} +{% endblock load %}{% endblock functions %}{% endautoescape %} Modified: django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/templates/gis/google/google-multi.js =================================================================== --- django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/templates/gis/google/google-multi.js 2009-06-30 21:56:08 UTC (rev 11129) +++ django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/templates/gis/google/google-multi.js 2009-07-01 02:04:35 UTC (rev 11130) @@ -1,4 +1,4 @@ -{% extends "gis/google/google-base.js" %} +{% extends "gis/google/google-map.js" %} {% block functions %} {{ load_map_js }} {{ js_module }}.load = function(){ Modified: django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/templates/gis/google/google-single.js =================================================================== --- django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/templates/gis/google/google-single.js 2009-06-30 21:56:08 UTC (rev 11129) +++ django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/templates/gis/google/google-single.js 2009-07-01 02:04:35 UTC (rev 11130) @@ -1,2 +1,2 @@ -{% extends "gis/google/google-base.js" %} -{% block functions %}{% include "gis/google/google-map.js" %}{% endblock %} \ No newline at end of file +{% extends "gis/google/google-map.js" %} +{% block vars %}{# No vars here because used within GoogleMapSet #}{% endblock %} \ No newline at end of file Modified: django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/tests/relatedapp/models.py =================================================================== --- django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/tests/relatedapp/models.py 2009-06-30 21:56:08 UTC (rev 11129) +++ django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/tests/relatedapp/models.py 2009-07-01 02:04:35 UTC (rev 11130) @@ -40,5 +40,5 @@ class Book(models.Model): title = models.CharField(max_length=100) - author = models.ForeignKey(Author, related_name='books') + author = models.ForeignKey(Author, related_name='books', null=True) objects = models.GeoManager() Modified: django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/tests/relatedapp/tests.py =================================================================== --- django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/tests/relatedapp/tests.py 2009-06-30 21:56:08 UTC (rev 11129) +++ django/branches/soc2009/http-wsgi-improvements/django/contrib/gis/tests/relatedapp/tests.py 2009-07-01 02:04:35 UTC (rev 11130) @@ -257,6 +257,13 @@ self.assertEqual(1, len(qs)) self.assertEqual(3, qs[0].num_books) + def test13_select_related_null_fk(self): + "Testing `select_related` on a nullable ForeignKey via `GeoManager`. See #11381." + no_author = Book.objects.create(title='Without Author') + b = Book.objects.select_related('author').get(title='Without Author') + # Should be `None`, and not a 'dummy' model. + self.assertEqual(None, b.author) + # TODO: Related tests for KML, GML, and distance lookups. def suite(): Modified: django/branches/soc2009/http-wsgi-improvements/django/core/urlresolvers.py =================================================================== --- django/branches/soc2009/http-wsgi-improvements/django/core/urlresolvers.py 2009-06-30 21:56:08 UTC (rev 11129) +++ django/branches/soc2009/http-wsgi-improvements/django/core/urlresolvers.py 2009-07-01 02:04:35 UTC (rev 11130) @@ -195,6 +195,7 @@ return sub_match[0], sub_match[1], sub_match_dict tried.append(pattern.regex.pattern) raise Resolver404, {'tried': tried, 'path': new_path} + raise Resolver404, {'tried': [], 'path' : path} def _get_urlconf_module(self): try: Modified: django/branches/soc2009/http-wsgi-improvements/tests/modeltests/transactions/models.py =================================================================== --- django/branches/soc2009/http-wsgi-improvements/tests/modeltests/transactions/models.py 2009-06-30 21:56:08 UTC (rev 11129) +++ django/branches/soc2009/http-wsgi-improvements/tests/modeltests/transactions/models.py 2009-07-01 02:04:35 UTC (rev 11130) @@ -14,6 +14,9 @@ last_name = models.CharField(max_length=30) email = models.EmailField() + class Meta: + ordering = ('first_name', 'last_name') + def __unicode__(self): return u"%s %s" % (self.first_name, self.last_name) Modified: django/branches/soc2009/http-wsgi-improvements/tests/regressiontests/null_fk/models.py =================================================================== --- django/branches/soc2009/http-wsgi-improvements/tests/regressiontests/null_fk/models.py 2009-06-30 21:56:08 UTC (rev 11129) +++ django/branches/soc2009/http-wsgi-improvements/tests/regressiontests/null_fk/models.py 2009-07-01 02:04:35 UTC (rev 11130) @@ -22,6 +22,9 @@ post = models.ForeignKey(Post, null=True) comment_text = models.CharField(max_length=250) + class Meta: + ordering = ('comment_text',) + def __unicode__(self): return self.comment_text Modified: django/branches/soc2009/http-wsgi-improvements/tests/regressiontests/serializers_regress/tests.py =================================================================== --- django/branches/soc2009/http-wsgi-improvements/tests/regressiontests/serializers_regress/tests.py 2009-06-30 21:56:08 UTC (rev 11129) +++ django/branches/soc2009/http-wsgi-improvements/tests/regressiontests/serializers_regress/tests.py 2009-07-01 02:04:35 UTC (rev 11130) @@ -103,7 +103,7 @@ def generic_compare(testcase, pk, klass, data): instance = klass.objects.get(id=pk) testcase.assertEqual(data[0], instance.data) - testcase.assertEqual(data[1:], [t.data for t in instance.tags.all()]) + testcase.assertEqual(data[1:], [t.data for t in instance.tags.order_by('id')]) def fk_compare(testcase, pk, klass, data): instance = klass.objects.get(id=pk) @@ -111,7 +111,7 @@ def m2m_compare(testcase, pk, klass, data): instance = klass.objects.get(id=pk) - testcase.assertEqual(data, [obj.id for obj in instance.data.all()]) + testcase.assertEqual(data, [obj.id for obj in instance.data.order_by('id')]) def im2m_compare(testcase, pk, klass, data): instance = klass.objects.get(id=pk) Modified: django/branches/soc2009/http-wsgi-improvements/tests/regressiontests/urlpatterns_reverse/tests.py =================================================================== --- django/branches/soc2009/http-wsgi-improvements/tests/regressiontests/urlpatterns_reverse/tests.py 2009-06-30 21:56:08 UTC (rev 11129) +++ django/branches/soc2009/http-wsgi-improvements/tests/regressiontests/urlpatterns_reverse/tests.py 2009-07-01 02:04:35 UTC (rev 11130) @@ -14,8 +14,9 @@ ImproperlyConfigured: The included urlconf regressiontests.urlpatterns_reverse.no_urls doesn't have any patterns in it """} +import unittest -from django.core.urlresolvers import reverse, NoReverseMatch +from django.core.urlresolvers import reverse, resolve, NoReverseMatch, Resolver404 from django.http import HttpResponseRedirect, HttpResponsePermanentRedirect from django.shortcuts import redirect from django.test import TestCase @@ -112,6 +113,21 @@ else: self.assertEquals(got, expected) +class ResolverTests(unittest.TestCase): + def test_non_regex(self): + """ + Verifies that we raise a Resolver404 if what we are resolving doesn't + meet the basic requirements of a path to match - i.e., at the very + least, it matches the root pattern '^/'. We must never return None + from resolve, or we will get a TypeError further down the line. + + Regression for #10834. + """ + self.assertRaises(Resolver404, resolve, '') + self.assertRaises(Resolver404, resolve, 'a') + self.assertRaises(Resolver404, resolve, '\\') + self.assertRaises(Resolver404, resolve, '.') + class ReverseShortcutTests(TestCase): urls = 'regressiontests.urlpatterns_reverse.urls' --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django updates" group. To post to this group, send email to django-updates@googlegroups.com To unsubscribe from this group, send email to django-updates+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-updates?hl=en -~----------~----~----~----~------~----~------~--~---