mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Continue to attack E302 violations
This commit is contained in:
		| @@ -14,21 +14,25 @@ from django.contrib.formtools.wizard.views import NamedUrlWizardView | ||||
| temp_storage_location = tempfile.mkdtemp(dir=os.environ.get('DJANGO_TEST_TEMP_DIR')) | ||||
| temp_storage = FileSystemStorage(location=temp_storage_location) | ||||
|  | ||||
|  | ||||
| class Page1(forms.Form): | ||||
|     name = forms.CharField(max_length=100) | ||||
|     user = forms.ModelChoiceField(queryset=User.objects.all()) | ||||
|     thirsty = forms.NullBooleanField() | ||||
|  | ||||
|  | ||||
| class Page2(forms.Form): | ||||
|     address1 = forms.CharField(max_length=100) | ||||
|     address2 = forms.CharField(max_length=100) | ||||
|     file1 = forms.FileField() | ||||
|  | ||||
|  | ||||
| class Page3(forms.Form): | ||||
|     random_crap = forms.CharField(max_length=100) | ||||
|  | ||||
| Page4 = formset_factory(Page3, extra=2) | ||||
|  | ||||
|  | ||||
| class ContactWizard(NamedUrlWizardView): | ||||
|     file_storage = temp_storage | ||||
|  | ||||
| @@ -44,8 +48,10 @@ class ContactWizard(NamedUrlWizardView): | ||||
|         c['this_will_fail'] = self.get_cleaned_data_for_step('this_will_fail') | ||||
|         return HttpResponse(Template('').render(c)) | ||||
|  | ||||
|  | ||||
| class SessionContactWizard(ContactWizard): | ||||
|     storage_name = 'django.contrib.formtools.wizard.storage.session.SessionStorage' | ||||
|  | ||||
|  | ||||
| class CookieContactWizard(ContactWizard): | ||||
|     storage_name = 'django.contrib.formtools.wizard.storage.cookie.CookieStorage' | ||||
|   | ||||
| @@ -2,6 +2,7 @@ from django.conf.urls import patterns, url | ||||
| from django.contrib.formtools.tests.wizard.namedwizardtests.forms import ( | ||||
|     SessionContactWizard, CookieContactWizard, Page1, Page2, Page3, Page4) | ||||
|  | ||||
|  | ||||
| def get_named_session_wizard(): | ||||
|     return SessionContactWizard.as_view( | ||||
|         [('form1', Page1), ('form2', Page2), ('form3', Page3), ('form4', Page4)], | ||||
| @@ -9,6 +10,7 @@ def get_named_session_wizard(): | ||||
|         done_step_name='nwiz_session_done' | ||||
|     ) | ||||
|  | ||||
|  | ||||
| def get_named_cookie_wizard(): | ||||
|     return CookieContactWizard.as_view( | ||||
|         [('form1', Page1), ('form2', Page2), ('form3', Page3), ('form4', Page4)], | ||||
|   | ||||
| @@ -81,12 +81,14 @@ class TestWizard(WizardView): | ||||
|             kwargs['test'] = True | ||||
|         return kwargs | ||||
|  | ||||
|  | ||||
| class TestWizardWithInitAttrs(TestWizard): | ||||
|     form_list = [Step1, Step2] | ||||
|     condition_dict = {'step2': True} | ||||
|     initial_dict = {'start': {'name': 'value1'}} | ||||
|     instance_dict = {'start': User()} | ||||
|  | ||||
|  | ||||
| class FormTests(TestCase): | ||||
|     def test_form_init(self): | ||||
|         testform = TestWizard.get_initkwargs([Step1, Step2]) | ||||
|   | ||||
| @@ -15,21 +15,25 @@ from django.contrib.formtools.wizard.views import WizardView | ||||
| temp_storage_location = tempfile.mkdtemp(dir=os.environ.get('DJANGO_TEST_TEMP_DIR')) | ||||
| temp_storage = FileSystemStorage(location=temp_storage_location) | ||||
|  | ||||
|  | ||||
| class Page1(forms.Form): | ||||
|     name = forms.CharField(max_length=100) | ||||
|     user = forms.ModelChoiceField(queryset=User.objects.all()) | ||||
|     thirsty = forms.NullBooleanField() | ||||
|  | ||||
|  | ||||
| class Page2(forms.Form): | ||||
|     address1 = forms.CharField(max_length=100) | ||||
|     address2 = forms.CharField(max_length=100) | ||||
|     file1 = forms.FileField() | ||||
|  | ||||
|  | ||||
| class Page3(forms.Form): | ||||
|     random_crap = forms.CharField(max_length=100) | ||||
|  | ||||
| Page4 = formset_factory(Page3, extra=2) | ||||
|  | ||||
|  | ||||
| class ContactWizard(WizardView): | ||||
|     file_storage = temp_storage | ||||
|  | ||||
| @@ -51,6 +55,7 @@ class ContactWizard(WizardView): | ||||
|             context.update({'another_var': True}) | ||||
|         return context | ||||
|  | ||||
|  | ||||
| class UserForm(forms.ModelForm): | ||||
|     class Meta: | ||||
|         model = User | ||||
| @@ -58,8 +63,10 @@ class UserForm(forms.ModelForm): | ||||
|  | ||||
| UserFormSet = modelformset_factory(User, form=UserForm) | ||||
|  | ||||
|  | ||||
| class SessionContactWizard(ContactWizard): | ||||
|     storage_name = 'django.contrib.formtools.wizard.storage.session.SessionStorage' | ||||
|  | ||||
|  | ||||
| class CookieContactWizard(ContactWizard): | ||||
|     storage_name = 'django.contrib.formtools.wizard.storage.cookie.CookieStorage' | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| from django import forms | ||||
|  | ||||
|  | ||||
| class ManagementForm(forms.Form): | ||||
|     """ | ||||
|     ``ManagementForm`` is used to keep track of the current wizard step. | ||||
|   | ||||
| @@ -1,7 +1,9 @@ | ||||
| from django.core.exceptions import ImproperlyConfigured | ||||
|  | ||||
|  | ||||
| class MissingStorage(ImproperlyConfigured): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class NoFileStorageConfigured(ImproperlyConfigured): | ||||
|     pass | ||||
|   | ||||
| @@ -28,6 +28,7 @@ def normalize_name(name): | ||||
|     new = re.sub('(((?<=[a-z])[A-Z])|([A-Z](?![A-Z]|$)))', '_\\1', name) | ||||
|     return new.lower().strip('_') | ||||
|  | ||||
|  | ||||
| class StepsHelper(object): | ||||
|  | ||||
|     def __init__(self, wizard): | ||||
|   | ||||
| @@ -3,6 +3,7 @@ from django.contrib.gis.admin.widgets import OpenLayersWidget | ||||
| from django.contrib.gis.gdal import OGRGeomType | ||||
| from django.contrib.gis.db import models | ||||
|  | ||||
|  | ||||
| class GeoModelAdmin(ModelAdmin): | ||||
|     """ | ||||
|     The administration options class for Geographic models. Map settings | ||||
|   | ||||
| @@ -143,6 +143,7 @@ class BaseSpatialOperations(object): | ||||
|     def spatial_ref_sys(self): | ||||
|         raise NotImplementedError('subclasses of BaseSpatialOperations must a provide spatial_ref_sys() method') | ||||
|  | ||||
|  | ||||
| @python_2_unicode_compatible | ||||
| class SpatialRefSysMixin(object): | ||||
|     """ | ||||
|   | ||||
| @@ -3,6 +3,7 @@ from django.db.backends.mysql import compiler | ||||
|  | ||||
| SQLCompiler = compiler.SQLCompiler | ||||
|  | ||||
|  | ||||
| class GeoSQLCompiler(BaseGeoSQLCompiler, SQLCompiler): | ||||
|     def resolve_columns(self, row, fields=()): | ||||
|         """ | ||||
| @@ -19,17 +20,22 @@ class GeoSQLCompiler(BaseGeoSQLCompiler, SQLCompiler): | ||||
| class SQLInsertCompiler(compiler.SQLInsertCompiler, GeoSQLCompiler): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class SQLDeleteCompiler(compiler.SQLDeleteCompiler, GeoSQLCompiler): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class SQLUpdateCompiler(compiler.SQLUpdateCompiler, GeoSQLCompiler): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class SQLAggregateCompiler(compiler.SQLAggregateCompiler, GeoSQLCompiler): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class SQLDateCompiler(compiler.SQLDateCompiler, GeoSQLCompiler): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class SQLDateTimeCompiler(compiler.SQLDateTimeCompiler, GeoSQLCompiler): | ||||
|     pass | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| from django.db.backends.mysql.creation import DatabaseCreation | ||||
|  | ||||
| class MySQLCreation(DatabaseCreation): | ||||
|  | ||||
| class MySQLCreation(DatabaseCreation): | ||||
|     def sql_indexes_for_field(self, model, f, style): | ||||
|         from django.contrib.gis.db.models.fields import GeometryField | ||||
|         output = super(MySQLCreation, self).sql_indexes_for_field(model, f, style) | ||||
|   | ||||
| @@ -3,6 +3,7 @@ from MySQLdb.constants import FIELD_TYPE | ||||
| from django.contrib.gis.gdal import OGRGeomType | ||||
| from django.db.backends.mysql.introspection import DatabaseIntrospection | ||||
|  | ||||
|  | ||||
| class MySQLIntrospection(DatabaseIntrospection): | ||||
|     # Updating the data_types_reverse dictionary with the appropriate | ||||
|     # type for Geometry fields. | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| from cx_Oracle import CLOB | ||||
| from django.contrib.gis.db.backends.adapter import WKTAdapter | ||||
|  | ||||
|  | ||||
| class OracleSpatialAdapter(WKTAdapter): | ||||
|     input_size = CLOB | ||||
|   | ||||
| @@ -3,23 +3,30 @@ from django.db.backends.oracle import compiler | ||||
|  | ||||
| SQLCompiler = compiler.SQLCompiler | ||||
|  | ||||
|  | ||||
| class GeoSQLCompiler(BaseGeoSQLCompiler, SQLCompiler): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class SQLInsertCompiler(compiler.SQLInsertCompiler, GeoSQLCompiler): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class SQLDeleteCompiler(compiler.SQLDeleteCompiler, GeoSQLCompiler): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class SQLUpdateCompiler(compiler.SQLUpdateCompiler, GeoSQLCompiler): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class SQLAggregateCompiler(compiler.SQLAggregateCompiler, GeoSQLCompiler): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class SQLDateCompiler(compiler.SQLDateCompiler, GeoSQLCompiler): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class SQLDateTimeCompiler(compiler.SQLDateTimeCompiler, GeoSQLCompiler): | ||||
|     pass | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| from django.db.backends.oracle.creation import DatabaseCreation | ||||
| from django.db.backends.utils import truncate_name | ||||
|  | ||||
|  | ||||
| class OracleCreation(DatabaseCreation): | ||||
|  | ||||
|     def sql_indexes_for_field(self, model, f, style): | ||||
|   | ||||
| @@ -3,6 +3,7 @@ import sys | ||||
| from django.db.backends.oracle.introspection import DatabaseIntrospection | ||||
| from django.utils import six | ||||
|  | ||||
|  | ||||
| class OracleIntrospection(DatabaseIntrospection): | ||||
|     # Associating any OBJECTVAR instances with GeometryField.  Of course, | ||||
|     # this won't work right on Oracle objects that aren't MDSYS.SDO_GEOMETRY, | ||||
|   | ||||
| @@ -11,6 +11,7 @@ from django.contrib.gis.db import models | ||||
| from django.contrib.gis.db.backends.base import SpatialRefSysMixin | ||||
| from django.utils.encoding import python_2_unicode_compatible | ||||
|  | ||||
|  | ||||
| @python_2_unicode_compatible | ||||
| class GeometryColumns(models.Model): | ||||
|     "Maps to the Oracle USER_SDO_GEOM_METADATA table." | ||||
| @@ -42,6 +43,7 @@ class GeometryColumns(models.Model): | ||||
|     def __str__(self): | ||||
|         return '%s - %s (SRID: %s)' % (self.table_name, self.column_name, self.srid) | ||||
|  | ||||
|  | ||||
| class SpatialRefSys(models.Model, SpatialRefSysMixin): | ||||
|     "Maps to the Oracle MDSYS.CS_SRS table." | ||||
|     cs_name = models.CharField(max_length=68) | ||||
|   | ||||
| @@ -28,6 +28,7 @@ class SDOOperation(SpatialFunction): | ||||
|         kwargs.setdefault('result', 'TRUE') | ||||
|         super(SDOOperation, self).__init__(func, **kwargs) | ||||
|  | ||||
|  | ||||
| class SDODistance(SpatialFunction): | ||||
|     "Class for Distance queries." | ||||
|     sql_template = ('%(function)s(%(geo_col)s, %(geometry)s, %(tolerance)s) ' | ||||
| @@ -39,6 +40,7 @@ class SDODistance(SpatialFunction): | ||||
|                                           tolerance=tolerance, | ||||
|                                           operator=op, result='%s') | ||||
|  | ||||
|  | ||||
| class SDODWithin(SpatialFunction): | ||||
|     dwithin_func = 'SDO_WITHIN_DISTANCE' | ||||
|     sql_template = "%(function)s(%(geo_col)s, %(geometry)s, %%s) = 'TRUE'" | ||||
| @@ -46,6 +48,7 @@ class SDODWithin(SpatialFunction): | ||||
|     def __init__(self): | ||||
|         super(SDODWithin, self).__init__(self.dwithin_func) | ||||
|  | ||||
|  | ||||
| class SDOGeomRelate(SpatialFunction): | ||||
|     "Class for using SDO_GEOM.RELATE." | ||||
|     relate_func = 'SDO_GEOM.RELATE' | ||||
| @@ -58,6 +61,7 @@ class SDOGeomRelate(SpatialFunction): | ||||
|         super(SDOGeomRelate, self).__init__(self.relate_func, operator='=', | ||||
|                                             mask=mask, tolerance=tolerance) | ||||
|  | ||||
|  | ||||
| class SDORelate(SpatialFunction): | ||||
|     "Class for using SDO_RELATE." | ||||
|     masks = 'TOUCH|OVERLAPBDYDISJOINT|OVERLAPBDYINTERSECT|EQUAL|INSIDE|COVEREDBY|CONTAINS|COVERS|ANYINTERACT|ON' | ||||
| @@ -73,6 +77,7 @@ class SDORelate(SpatialFunction): | ||||
| # Valid distance types and substitutions | ||||
| dtypes = (Decimal, Distance, float) + six.integer_types | ||||
|  | ||||
|  | ||||
| class OracleOperations(DatabaseOperations, BaseSpatialOperations): | ||||
|     compiler_module = "django.contrib.gis.db.backends.oracle.compiler" | ||||
|  | ||||
|   | ||||
| @@ -6,6 +6,7 @@ from __future__ import unicode_literals | ||||
| from psycopg2 import Binary | ||||
| from psycopg2.extensions import ISQLQuote | ||||
|  | ||||
|  | ||||
| class PostGISAdapter(object): | ||||
|     def __init__(self, geom): | ||||
|         "Initializes on the geometry." | ||||
|   | ||||
| @@ -1,9 +1,11 @@ | ||||
| from django.db.backends.postgresql_psycopg2.introspection import DatabaseIntrospection | ||||
| from django.contrib.gis.gdal import OGRGeomType | ||||
|  | ||||
|  | ||||
| class GeoIntrospectionError(Exception): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class PostGISIntrospection(DatabaseIntrospection): | ||||
|     # Reverse dictionary for PostGIS geometry types not populated until | ||||
|     # introspection is actually performed. | ||||
|   | ||||
| @@ -5,6 +5,7 @@ from django.db import models | ||||
| from django.contrib.gis.db.backends.base import SpatialRefSysMixin | ||||
| from django.utils.encoding import python_2_unicode_compatible | ||||
|  | ||||
|  | ||||
| @python_2_unicode_compatible | ||||
| class GeometryColumns(models.Model): | ||||
|     """ | ||||
| @@ -44,6 +45,7 @@ class GeometryColumns(models.Model): | ||||
|                (self.f_table_name, self.f_geometry_column, | ||||
|                 self.coord_dimension, self.type, self.srid) | ||||
|  | ||||
|  | ||||
| class SpatialRefSys(models.Model, SpatialRefSysMixin): | ||||
|     """ | ||||
|     The 'spatial_ref_sys' table from PostGIS. See the PostGIS | ||||
|   | ||||
| @@ -22,15 +22,18 @@ class PostGISOperator(SpatialOperation): | ||||
|     def __init__(self, operator): | ||||
|         super(PostGISOperator, self).__init__(operator=operator) | ||||
|  | ||||
|  | ||||
| class PostGISFunction(SpatialFunction): | ||||
|     "For PostGIS function calls (e.g., `ST_Contains(table, geom)`)." | ||||
|     def __init__(self, prefix, function, **kwargs): | ||||
|         super(PostGISFunction, self).__init__(prefix + function, **kwargs) | ||||
|  | ||||
|  | ||||
| class PostGISFunctionParam(PostGISFunction): | ||||
|     "For PostGIS functions that take another parameter (e.g. DWithin, Relate)." | ||||
|     sql_template = '%(function)s(%(geo_col)s, %(geometry)s, %%s)' | ||||
|  | ||||
|  | ||||
| class PostGISDistance(PostGISFunction): | ||||
|     "For PostGIS distance operations." | ||||
|     dist_func = 'Distance' | ||||
| @@ -40,6 +43,7 @@ class PostGISDistance(PostGISFunction): | ||||
|         super(PostGISDistance, self).__init__(prefix, self.dist_func, | ||||
|                                               operator=operator) | ||||
|  | ||||
|  | ||||
| class PostGISSpheroidDistance(PostGISFunction): | ||||
|     "For PostGIS spherical distance operations (using the spheroid)." | ||||
|     dist_func = 'distance_spheroid' | ||||
| @@ -50,10 +54,12 @@ class PostGISSpheroidDistance(PostGISFunction): | ||||
|         super(PostGISSpheroidDistance, self).__init__(prefix, self.dist_func, | ||||
|                                                       operator=operator) | ||||
|  | ||||
|  | ||||
| class PostGISSphereDistance(PostGISDistance): | ||||
|     "For PostGIS spherical distance operations." | ||||
|     dist_func = 'distance_sphere' | ||||
|  | ||||
|  | ||||
| class PostGISRelate(PostGISFunctionParam): | ||||
|     "For PostGIS Relate(<geom>, <pattern>) calls." | ||||
|     pattern_regex = re.compile(r'^[012TF\*]{9}$') | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| from django.db.backends.sqlite3.base import Database | ||||
| from django.contrib.gis.db.backends.adapter import WKTAdapter | ||||
|  | ||||
|  | ||||
| class SpatiaLiteAdapter(WKTAdapter): | ||||
|     "SQLite adaptor for geometry objects." | ||||
|     def __conform__(self, protocol): | ||||
|   | ||||
| @@ -11,6 +11,7 @@ from django.contrib.gis.db.backends.spatialite.introspection import SpatiaLiteIn | ||||
| from django.contrib.gis.db.backends.spatialite.operations import SpatiaLiteOperations | ||||
| from django.utils import six | ||||
|  | ||||
|  | ||||
| class DatabaseWrapper(SQLiteDatabaseWrapper): | ||||
|     def __init__(self, *args, **kwargs): | ||||
|         # Before we get too far, make sure pysqlite 2.5+ is installed. | ||||
|   | ||||
| @@ -1,4 +1,5 @@ | ||||
| from django.db.backends.sqlite3.client import DatabaseClient | ||||
|  | ||||
|  | ||||
| class SpatiaLiteClient(DatabaseClient): | ||||
|     executable_name = 'spatialite' | ||||
|   | ||||
| @@ -2,6 +2,7 @@ from django.contrib.gis.gdal import OGRGeomType | ||||
| from django.db.backends.sqlite3.introspection import DatabaseIntrospection, FlexibleFieldLookupDict | ||||
| from django.utils import six | ||||
|  | ||||
|  | ||||
| class GeoFlexibleFieldLookupDict(FlexibleFieldLookupDict): | ||||
|     """ | ||||
|     Sublcass that includes updates the `base_data_types_reverse` dict | ||||
| @@ -18,6 +19,7 @@ class GeoFlexibleFieldLookupDict(FlexibleFieldLookupDict): | ||||
|          'geometrycollection': 'GeometryField', | ||||
|          }) | ||||
|  | ||||
|  | ||||
| class SpatiaLiteIntrospection(DatabaseIntrospection): | ||||
|     data_types_reverse = GeoFlexibleFieldLookupDict() | ||||
|  | ||||
|   | ||||
| @@ -5,6 +5,7 @@ from django.db import models | ||||
| from django.contrib.gis.db.backends.base import SpatialRefSysMixin | ||||
| from django.utils.encoding import python_2_unicode_compatible | ||||
|  | ||||
|  | ||||
| @python_2_unicode_compatible | ||||
| class GeometryColumns(models.Model): | ||||
|     """ | ||||
| @@ -42,6 +43,7 @@ class GeometryColumns(models.Model): | ||||
|                (self.f_table_name, self.f_geometry_column, | ||||
|                 self.coord_dimension, self.type, self.srid) | ||||
|  | ||||
|  | ||||
| class SpatialRefSys(models.Model, SpatialRefSysMixin): | ||||
|     """ | ||||
|     The 'spatial_ref_sys' table from SpatiaLite. | ||||
|   | ||||
| @@ -19,15 +19,18 @@ class SpatiaLiteOperator(SpatialOperation): | ||||
|     def __init__(self, operator): | ||||
|         super(SpatiaLiteOperator, self).__init__(operator=operator) | ||||
|  | ||||
|  | ||||
| class SpatiaLiteFunction(SpatialFunction): | ||||
|     "For SpatiaLite function calls." | ||||
|     def __init__(self, function, **kwargs): | ||||
|         super(SpatiaLiteFunction, self).__init__(function, **kwargs) | ||||
|  | ||||
|  | ||||
| class SpatiaLiteFunctionParam(SpatiaLiteFunction): | ||||
|     "For SpatiaLite functions that take another parameter." | ||||
|     sql_template = '%(function)s(%(geo_col)s, %(geometry)s, %%s)' | ||||
|  | ||||
|  | ||||
| class SpatiaLiteDistance(SpatiaLiteFunction): | ||||
|     "For SpatiaLite distance operations." | ||||
|     dist_func = 'Distance' | ||||
| @@ -37,6 +40,7 @@ class SpatiaLiteDistance(SpatiaLiteFunction): | ||||
|         super(SpatiaLiteDistance, self).__init__(self.dist_func, | ||||
|                                                  operator=operator) | ||||
|  | ||||
|  | ||||
| class SpatiaLiteRelate(SpatiaLiteFunctionParam): | ||||
|     "For SpatiaLite Relate(<geom>, <pattern>) calls." | ||||
|     pattern_regex = re.compile(r'^[012TF\*]{9}$') | ||||
| @@ -46,12 +50,14 @@ class SpatiaLiteRelate(SpatiaLiteFunctionParam): | ||||
|             raise ValueError('Invalid intersection matrix pattern "%s".' % pattern) | ||||
|         super(SpatiaLiteRelate, self).__init__('Relate') | ||||
|  | ||||
|  | ||||
| # Valid distance types and substitutions | ||||
| dtypes = (Decimal, Distance, float) + six.integer_types | ||||
| def get_dist_ops(operator): | ||||
|     "Returns operations for regular distances; spherical distances are not currently supported." | ||||
|     return (SpatiaLiteDistance(operator),) | ||||
|  | ||||
|  | ||||
| class SpatiaLiteOperations(DatabaseOperations, BaseSpatialOperations): | ||||
|     compiler_module = 'django.contrib.gis.db.models.sql.compiler' | ||||
|     name = 'spatialite' | ||||
|   | ||||
| @@ -3,6 +3,7 @@ A collection of utility routines and classes used by the spatial | ||||
| backends. | ||||
| """ | ||||
|  | ||||
|  | ||||
| class SpatialOperation(object): | ||||
|     """ | ||||
|     Base class for generating spatial SQL. | ||||
| @@ -28,6 +29,7 @@ class SpatialOperation(object): | ||||
|         params.update(self.extra) | ||||
|         return params | ||||
|  | ||||
|  | ||||
| class SpatialFunction(SpatialOperation): | ||||
|     """ | ||||
|     Base class for generating spatial SQL related to a function. | ||||
|   | ||||
| @@ -1,16 +1,21 @@ | ||||
| from django.db.models import Aggregate | ||||
|  | ||||
|  | ||||
| class Collect(Aggregate): | ||||
|     name = 'Collect' | ||||
|  | ||||
|  | ||||
| class Extent(Aggregate): | ||||
|     name = 'Extent' | ||||
|  | ||||
|  | ||||
| class Extent3D(Aggregate): | ||||
|     name = 'Extent3D' | ||||
|  | ||||
|  | ||||
| class MakeLine(Aggregate): | ||||
|     name = 'MakeLine' | ||||
|  | ||||
|  | ||||
| class Union(Aggregate): | ||||
|     name = 'Union' | ||||
|   | ||||
| @@ -11,6 +11,7 @@ from django.utils import six | ||||
| # for SRID info each time a distance query is constructed. | ||||
| _srid_cache = {} | ||||
|  | ||||
|  | ||||
| def get_srid_info(srid, connection): | ||||
|     """ | ||||
|     Returns the units, unit name, and spheroid WKT associated with the | ||||
| @@ -39,6 +40,7 @@ def get_srid_info(srid, connection): | ||||
|  | ||||
|     return _srid_cache[connection.alias][srid] | ||||
|  | ||||
|  | ||||
| class GeometryField(Field): | ||||
|     "The base GIS field -- maps to the OpenGIS Specification Geometry type." | ||||
|  | ||||
| @@ -269,37 +271,44 @@ class GeometryField(Field): | ||||
|         """ | ||||
|         return connection.ops.get_geom_placeholder(self, value) | ||||
|  | ||||
|  | ||||
| # The OpenGIS Geometry Type Fields | ||||
| class PointField(GeometryField): | ||||
|     geom_type = 'POINT' | ||||
|     form_class = forms.PointField | ||||
|     description = _("Point") | ||||
|  | ||||
|  | ||||
| class LineStringField(GeometryField): | ||||
|     geom_type = 'LINESTRING' | ||||
|     form_class = forms.LineStringField | ||||
|     description = _("Line string") | ||||
|  | ||||
|  | ||||
| class PolygonField(GeometryField): | ||||
|     geom_type = 'POLYGON' | ||||
|     form_class = forms.PolygonField | ||||
|     description = _("Polygon") | ||||
|  | ||||
|  | ||||
| class MultiPointField(GeometryField): | ||||
|     geom_type = 'MULTIPOINT' | ||||
|     form_class = forms.MultiPointField | ||||
|     description = _("Multi-point") | ||||
|  | ||||
|  | ||||
| class MultiLineStringField(GeometryField): | ||||
|     geom_type = 'MULTILINESTRING' | ||||
|     form_class = forms.MultiLineStringField | ||||
|     description = _("Multi-line string") | ||||
|  | ||||
|  | ||||
| class MultiPolygonField(GeometryField): | ||||
|     geom_type = 'MULTIPOLYGON' | ||||
|     form_class = forms.MultiPolygonField | ||||
|     description = _("Multi polygon") | ||||
|  | ||||
|  | ||||
| class GeometryCollectionField(GeometryField): | ||||
|     geom_type = 'GEOMETRYCOLLECTION' | ||||
|     form_class = forms.GeometryCollectionField | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| from django.db.models.manager import Manager | ||||
| from django.contrib.gis.db.models.query import GeoQuerySet | ||||
|  | ||||
|  | ||||
| class GeoManager(Manager): | ||||
|     "Overrides Manager to return Geographic QuerySets." | ||||
|  | ||||
|   | ||||
| @@ -8,6 +8,7 @@ Thanks to Robert Coup for providing this functionality (see #4322). | ||||
| from django.contrib.gis import memoryview | ||||
| from django.utils import six | ||||
|  | ||||
|  | ||||
| class GeometryProxy(object): | ||||
|     def __init__(self, klass, field): | ||||
|         """ | ||||
|   | ||||
| @@ -782,6 +782,7 @@ class GeoQuerySet(QuerySet): | ||||
|         else: | ||||
|             return self.query.get_compiler(self.db)._field_column(geo_field) | ||||
|  | ||||
|  | ||||
| class GeoValuesQuerySet(ValuesQuerySet): | ||||
|     def __init__(self, *args, **kwargs): | ||||
|         super(GeoValuesQuerySet, self).__init__(*args, **kwargs) | ||||
| @@ -790,5 +791,6 @@ class GeoValuesQuerySet(ValuesQuerySet): | ||||
|         # of string values are returned with `values()` or `values_list()`. | ||||
|         self.query.geo_values = True | ||||
|  | ||||
|  | ||||
| class GeoValuesListQuerySet(GeoValuesQuerySet, ValuesListQuerySet): | ||||
|     pass | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| from django.db.models.sql.aggregates import * | ||||
| from django.contrib.gis.db.models.fields import GeometryField | ||||
|  | ||||
|  | ||||
| class GeoAggregate(Aggregate): | ||||
|     # Default SQL template for spatial aggregates. | ||||
|     sql_template = '%(function)s(%(field)s)' | ||||
| @@ -46,17 +47,22 @@ class GeoAggregate(Aggregate): | ||||
|  | ||||
|         return sql_template % substitutions, params | ||||
|  | ||||
|  | ||||
| class Collect(GeoAggregate): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class Extent(GeoAggregate): | ||||
|     is_extent = '2D' | ||||
|  | ||||
|  | ||||
| class Extent3D(GeoAggregate): | ||||
|     is_extent = '3D' | ||||
|  | ||||
|  | ||||
| class MakeLine(GeoAggregate): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class Union(GeoAggregate): | ||||
|     pass | ||||
|   | ||||
| @@ -10,6 +10,7 @@ from django.utils import timezone | ||||
|  | ||||
| SQLCompiler = compiler.SQLCompiler | ||||
|  | ||||
|  | ||||
| class GeoSQLCompiler(compiler.SQLCompiler): | ||||
|  | ||||
|     def get_columns(self, with_aliases=False): | ||||
| @@ -249,18 +250,23 @@ class GeoSQLCompiler(compiler.SQLCompiler): | ||||
|         return "%s.%s" % (self.quote_name_unless_alias(table_alias), | ||||
|                           self.connection.ops.quote_name(column or field.column)) | ||||
|  | ||||
|  | ||||
| class SQLInsertCompiler(compiler.SQLInsertCompiler, GeoSQLCompiler): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class SQLDeleteCompiler(compiler.SQLDeleteCompiler, GeoSQLCompiler): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class SQLUpdateCompiler(compiler.SQLUpdateCompiler, GeoSQLCompiler): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class SQLAggregateCompiler(compiler.SQLAggregateCompiler, GeoSQLCompiler): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class SQLDateCompiler(compiler.SQLDateCompiler, GeoSQLCompiler): | ||||
|     """ | ||||
|     This is overridden for GeoDjango to properly cast date columns, since | ||||
| @@ -286,6 +292,7 @@ class SQLDateCompiler(compiler.SQLDateCompiler, GeoSQLCompiler): | ||||
|                     date = date.date() | ||||
|                 yield date | ||||
|  | ||||
|  | ||||
| class SQLDateTimeCompiler(compiler.SQLDateTimeCompiler, GeoSQLCompiler): | ||||
|     """ | ||||
|     This is overridden for GeoDjango to properly cast date columns, since | ||||
|   | ||||
| @@ -3,6 +3,7 @@ This module holds simple classes used by GeoQuery.convert_values | ||||
| to convert geospatial values from the database. | ||||
| """ | ||||
|  | ||||
|  | ||||
| class BaseField(object): | ||||
|     empty_strings_allowed = True | ||||
|  | ||||
| @@ -10,16 +11,19 @@ class BaseField(object): | ||||
|         "Overloaded method so OracleQuery.convert_values doesn't balk." | ||||
|         return None | ||||
|  | ||||
|  | ||||
| class AreaField(BaseField): | ||||
|     "Wrapper for Area values." | ||||
|     def __init__(self, area_att): | ||||
|         self.area_att = area_att | ||||
|  | ||||
|  | ||||
| class DistanceField(BaseField): | ||||
|     "Wrapper for Distance values." | ||||
|     def __init__(self, distance_att): | ||||
|         self.distance_att = distance_att | ||||
|  | ||||
|  | ||||
| class GeomField(BaseField): | ||||
|     """ | ||||
|     Wrapper for Geometry values.  It is a lightweight alternative to | ||||
|   | ||||
| @@ -21,6 +21,7 @@ ALL_TERMS = set([ | ||||
| ]) | ||||
| ALL_TERMS.update(sql.constants.QUERY_TERMS) | ||||
|  | ||||
|  | ||||
| class GeoQuery(sql.Query): | ||||
|     """ | ||||
|     A single spatial SQL query. | ||||
|   | ||||
| @@ -4,6 +4,7 @@ from django.db.models.sql.expressions import SQLEvaluator | ||||
| from django.db.models.sql.where import Constraint, WhereNode | ||||
| from django.contrib.gis.db.models.fields import GeometryField | ||||
|  | ||||
|  | ||||
| class GeoConstraint(Constraint): | ||||
|     """ | ||||
|     This subclass overrides `process` to better handle geographic SQL | ||||
| @@ -27,6 +28,7 @@ class GeoConstraint(Constraint): | ||||
|         params = self.field.get_db_prep_lookup(lookup_type, value, connection=connection) | ||||
|         return (self.alias, self.col, db_type), params | ||||
|  | ||||
|  | ||||
| class GeoWhereNode(WhereNode): | ||||
|     """ | ||||
|     Used to represent the SQL where-clause for spatial databases -- | ||||
|   | ||||
| @@ -3,6 +3,7 @@ from __future__ import unicode_literals | ||||
| from django.contrib.syndication.views import Feed as BaseFeed | ||||
| from django.utils.feedgenerator import Atom1Feed, Rss201rev2Feed | ||||
|  | ||||
|  | ||||
| class GeoFeedMixin(object): | ||||
|     """ | ||||
|     This mixin provides the necessary routines for SyndicationFeed subclasses | ||||
| @@ -79,6 +80,7 @@ class GeoFeedMixin(object): | ||||
|                     else: | ||||
|                         raise ValueError('Geometry type "%s" not supported.' % geom.geom_type) | ||||
|  | ||||
|  | ||||
| ### SyndicationFeed subclasses ### | ||||
| class GeoRSSFeed(Rss201rev2Feed, GeoFeedMixin): | ||||
|     def rss_attributes(self): | ||||
| @@ -94,6 +96,7 @@ class GeoRSSFeed(Rss201rev2Feed, GeoFeedMixin): | ||||
|         super(GeoRSSFeed, self).add_root_elements(handler) | ||||
|         self.add_georss_element(handler, self.feed) | ||||
|  | ||||
|  | ||||
| class GeoAtom1Feed(Atom1Feed, GeoFeedMixin): | ||||
|     def root_attributes(self): | ||||
|         attrs = super(GeoAtom1Feed, self).root_attributes() | ||||
| @@ -108,6 +111,7 @@ class GeoAtom1Feed(Atom1Feed, GeoFeedMixin): | ||||
|         super(GeoAtom1Feed, self).add_root_elements(handler) | ||||
|         self.add_georss_element(handler, self.feed) | ||||
|  | ||||
|  | ||||
| class W3CGeoFeed(Rss201rev2Feed, GeoFeedMixin): | ||||
|     def rss_attributes(self): | ||||
|         attrs = super(W3CGeoFeed, self).rss_attributes() | ||||
| @@ -122,6 +126,7 @@ class W3CGeoFeed(Rss201rev2Feed, GeoFeedMixin): | ||||
|         super(W3CGeoFeed, self).add_root_elements(handler) | ||||
|         self.add_georss_element(handler, self.feed, w3c_geo=True) | ||||
|  | ||||
|  | ||||
| ### Feed subclass ### | ||||
| class Feed(BaseFeed): | ||||
|     """ | ||||
|   | ||||
| @@ -3,6 +3,7 @@ from ctypes import c_void_p | ||||
| from django.contrib.gis.gdal.error import GDALException | ||||
| from django.utils import six | ||||
|  | ||||
|  | ||||
| class GDALBase(object): | ||||
|     """ | ||||
|     Base object for GDAL objects that has a pointer access property | ||||
|   | ||||
| @@ -49,6 +49,7 @@ from django.utils.encoding import force_bytes, force_text | ||||
| from django.utils import six | ||||
| from django.utils.six.moves import xrange | ||||
|  | ||||
|  | ||||
| # For more information, see the OGR C API source code: | ||||
| #  http://www.gdal.org/ogr/ogr__api_8h.html | ||||
| # | ||||
|   | ||||
| @@ -7,6 +7,7 @@ from django.contrib.gis.gdal.prototypes import ds as capi | ||||
| from django.utils import six | ||||
| from django.utils.encoding import force_bytes | ||||
|  | ||||
|  | ||||
| # For more information, see the OGR C API source code: | ||||
| #  http://www.gdal.org/ogr/ogr__api_8h.html | ||||
| # | ||||
|   | ||||
| @@ -13,6 +13,7 @@ | ||||
| from ctypes import Structure, c_double | ||||
| from django.contrib.gis.gdal.error import OGRException | ||||
|  | ||||
|  | ||||
| # The OGR definition of an Envelope is a C structure containing four doubles. | ||||
| #  See the 'ogr_core.h' source file for more information: | ||||
| #   http://www.gdal.org/ogr/ogr__core_8h-source.html | ||||
| @@ -24,6 +25,7 @@ class OGREnvelope(Structure): | ||||
|                 ("MaxY", c_double), | ||||
|                 ] | ||||
|  | ||||
|  | ||||
| class Envelope(object): | ||||
|     """ | ||||
|     The Envelope object is a C structure that contains the minimum and | ||||
|   | ||||
| @@ -3,16 +3,20 @@ | ||||
|  check_err() routine which checks the status code returned by | ||||
|  OGR methods. | ||||
| """ | ||||
|  | ||||
| #### OGR & SRS Exceptions #### | ||||
| class GDALException(Exception): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class OGRException(Exception): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class SRSException(Exception): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class OGRIndexError(OGRException, KeyError): | ||||
|     """ | ||||
|     This exception is raised when an invalid index is encountered, and has | ||||
| @@ -37,6 +41,7 @@ OGRERR_DICT = { | ||||
| } | ||||
| OGRERR_NONE = 0 | ||||
|  | ||||
|  | ||||
| def check_err(code): | ||||
|     "Checks the given OGRERR, and raises an exception where appropriate." | ||||
|  | ||||
|   | ||||
| @@ -11,6 +11,7 @@ from django.utils.encoding import force_bytes, force_text | ||||
| from django.utils import six | ||||
| from django.utils.six.moves import xrange | ||||
|  | ||||
|  | ||||
| # For more information, see the OGR C API source code: | ||||
| #  http://www.gdal.org/ogr/ogr__api_8h.html | ||||
| # | ||||
|   | ||||
| @@ -102,6 +102,7 @@ class Field(GDALBase): | ||||
|         "Returns the width of this Field." | ||||
|         return capi.get_field_width(self.ptr) | ||||
|  | ||||
|  | ||||
| ### The Field sub-classes for each OGR Field type. ### | ||||
| class OFTInteger(Field): | ||||
|     _double = False | ||||
| @@ -125,22 +126,27 @@ class OFTInteger(Field): | ||||
|         """ | ||||
|         return 0 | ||||
|  | ||||
|  | ||||
| class OFTReal(Field): | ||||
|     @property | ||||
|     def value(self): | ||||
|         "Returns a float contained in this field." | ||||
|         return self.as_double() | ||||
|  | ||||
|  | ||||
| # String & Binary fields, just subclasses | ||||
| class OFTString(Field): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class OFTWideString(Field): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class OFTBinary(Field): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| # OFTDate, OFTTime, OFTDateTime fields. | ||||
| class OFTDate(Field): | ||||
|     @property | ||||
| @@ -152,6 +158,7 @@ class OFTDate(Field): | ||||
|         except (ValueError, OGRException): | ||||
|             return None | ||||
|  | ||||
|  | ||||
| class OFTDateTime(Field): | ||||
|     @property | ||||
|     def value(self): | ||||
| @@ -166,6 +173,7 @@ class OFTDateTime(Field): | ||||
|         except (ValueError, OGRException): | ||||
|             return None | ||||
|  | ||||
|  | ||||
| class OFTTime(Field): | ||||
|     @property | ||||
|     def value(self): | ||||
| @@ -176,16 +184,20 @@ class OFTTime(Field): | ||||
|         except (ValueError, OGRException): | ||||
|             return None | ||||
|  | ||||
|  | ||||
| # List fields are also just subclasses | ||||
| class OFTIntegerList(Field): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class OFTRealList(Field): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class OFTStringList(Field): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class OFTWideStringList(Field): | ||||
|     pass | ||||
|  | ||||
|   | ||||
| @@ -67,7 +67,7 @@ from django.utils.six.moves import xrange | ||||
| # | ||||
| # The OGR_G_* routines are relevant here. | ||||
|  | ||||
| #### OGRGeometry Class #### | ||||
|  | ||||
| class OGRGeometry(GDALBase): | ||||
|     "Generally encapsulates an OGR geometry." | ||||
|  | ||||
|   | ||||
| @@ -18,6 +18,7 @@ from django.utils.encoding import force_bytes, force_text | ||||
| from django.utils import six | ||||
| from django.utils.six.moves import xrange | ||||
|  | ||||
|  | ||||
| # For more information, see the OGR C API source code: | ||||
| #  http://www.gdal.org/ogr/ogr__api_8h.html | ||||
| # | ||||
|   | ||||
| @@ -328,6 +328,7 @@ class SpatialReference(GDALBase): | ||||
|         "Returns the XML representation of this Spatial Reference." | ||||
|         return capi.to_xml(self.ptr, byref(c_char_p()), dialect) | ||||
|  | ||||
|  | ||||
| class CoordTransform(GDALBase): | ||||
|     "The coordinate system transformation object." | ||||
|  | ||||
|   | ||||
| @@ -17,10 +17,12 @@ from django.utils.encoding import force_bytes | ||||
| free_regex = re.compile(r'^GEO-\d{3}FREE') | ||||
| lite_regex = re.compile(r'^GEO-\d{3}LITE') | ||||
|  | ||||
|  | ||||
| #### GeoIP classes #### | ||||
| class GeoIPException(Exception): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class GeoIP(object): | ||||
|     # The flags for GeoIP memory caching. | ||||
|     # GEOIP_STANDARD - read database from filesystem, uses least memory. | ||||
|   | ||||
| @@ -18,6 +18,7 @@ try: | ||||
| except ImportError: | ||||
|     numpy = False | ||||
|  | ||||
|  | ||||
| class GEOSBase(object): | ||||
|     """ | ||||
|     Base object for GEOS objects that has a pointer access property | ||||
|   | ||||
| @@ -6,12 +6,14 @@ reader and writer classes. | ||||
| from django.contrib.gis.geos.geometry import GEOSGeometry | ||||
| from django.contrib.gis.geos.prototypes.io import _WKTReader, _WKBReader, WKBWriter, WKTWriter | ||||
|  | ||||
|  | ||||
| # Public classes for (WKB|WKT)Reader, which return GEOSGeometry | ||||
| class WKBReader(_WKBReader): | ||||
|     def read(self, wkb): | ||||
|         "Returns a GEOSGeometry for the given WKB buffer." | ||||
|         return GEOSGeometry(super(WKBReader, self).read(wkb)) | ||||
|  | ||||
|  | ||||
| class WKTReader(_WKTReader): | ||||
|     def read(self, wkt): | ||||
|         "Returns a GEOSGeometry for the given WKT string." | ||||
|   | ||||
| @@ -12,6 +12,7 @@ from django.utils.functional import total_ordering | ||||
| from django.utils import six | ||||
| from django.utils.six.moves import xrange | ||||
|  | ||||
|  | ||||
| @total_ordering | ||||
| class ListMixin(object): | ||||
|     """ | ||||
|   | ||||
| @@ -6,6 +6,7 @@ from django.contrib.gis.geos import prototypes as capi | ||||
| from django.utils import six | ||||
| from django.utils.six.moves import xrange | ||||
|  | ||||
|  | ||||
| class Polygon(GEOSGeometry): | ||||
|     _minlength = 1 | ||||
|  | ||||
|   | ||||
| @@ -2,6 +2,7 @@ from django.contrib.gis.geos.base import GEOSBase | ||||
| from django.contrib.gis.geos.geometry import GEOSGeometry | ||||
| from django.contrib.gis.geos.prototypes import prepared as capi | ||||
|  | ||||
|  | ||||
| class PreparedGeometry(GEOSBase): | ||||
|     """ | ||||
|     A geometry that is prepared for performing certain operations. | ||||
|   | ||||
| @@ -44,6 +44,7 @@ from django.utils import six | ||||
| NUMERIC_TYPES = six.integer_types + (float, Decimal) | ||||
| AREA_PREFIX = "sq_" | ||||
|  | ||||
|  | ||||
| def pretty_name(obj): | ||||
|     return obj.__name__ if obj.__class__ == type else obj.__class__.__name__ | ||||
|  | ||||
| @@ -218,6 +219,7 @@ class MeasureBase(object): | ||||
|         else: | ||||
|             raise Exception('Could not find a unit keyword associated with "%s"' % unit_str) | ||||
|  | ||||
|  | ||||
| class Distance(MeasureBase): | ||||
|     STANDARD_UNIT = "m" | ||||
|     UNITS = { | ||||
|   | ||||
| @@ -5,6 +5,7 @@ from django.conf import settings | ||||
| from django.http import HttpResponse | ||||
| from django.template import loader | ||||
|  | ||||
|  | ||||
| def compress_kml(kml): | ||||
|     "Returns compressed KMZ from the given KML string." | ||||
|     kmz = BytesIO() | ||||
| @@ -14,11 +15,13 @@ def compress_kml(kml): | ||||
|     kmz.seek(0) | ||||
|     return kmz.read() | ||||
|  | ||||
|  | ||||
| def render_to_kml(*args, **kwargs): | ||||
|     "Renders the response as KML (using the correct MIME type)." | ||||
|     return HttpResponse(loader.render_to_string(*args, **kwargs), | ||||
|         content_type='application/vnd.google-earth.kml+xml') | ||||
|  | ||||
|  | ||||
| def render_to_kmz(*args, **kwargs): | ||||
|     """ | ||||
|     Compresses the KML content and returns as KMZ (using the correct | ||||
| @@ -27,6 +30,7 @@ def render_to_kmz(*args, **kwargs): | ||||
|     return HttpResponse(compress_kml(loader.render_to_string(*args, **kwargs)), | ||||
|         content_type='application/vnd.google-earth.kmz') | ||||
|  | ||||
|  | ||||
| def render_to_text(*args, **kwargs): | ||||
|     "Renders the response using the MIME type for plain text." | ||||
|     return HttpResponse(loader.render_to_string(*args, **kwargs), | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| from django.core import urlresolvers | ||||
| from django.contrib.sitemaps import Sitemap | ||||
|  | ||||
|  | ||||
| class GeoRSSSitemap(Sitemap): | ||||
|     """ | ||||
|     A minimal hook to produce sitemaps for GeoRSS feeds. | ||||
|   | ||||
| @@ -3,6 +3,7 @@ from django.contrib.sitemaps import Sitemap | ||||
| from django.contrib.gis.db.models.fields import GeometryField | ||||
| from django.db import models | ||||
|  | ||||
|  | ||||
| class KMLSitemap(Sitemap): | ||||
|     """ | ||||
|     A minimal hook to produce KML sitemaps. | ||||
| @@ -60,5 +61,7 @@ class KMLSitemap(Sitemap): | ||||
|                                             'field_name': obj[2], | ||||
|                                             } | ||||
|                                     ) | ||||
|  | ||||
|  | ||||
| class KMZSitemap(KMLSitemap): | ||||
|     geo_format = 'kmz' | ||||
|   | ||||
| @@ -14,6 +14,7 @@ from django.utils.translation import ugettext as _ | ||||
|  | ||||
| from django.contrib.gis.shortcuts import render_to_kml, render_to_kmz | ||||
|  | ||||
|  | ||||
| def index(request, sitemaps): | ||||
|     """ | ||||
|     This view generates a sitemap index that uses the proper view | ||||
|   | ||||
| @@ -144,6 +144,7 @@ class DistanceTest(unittest.TestCase): | ||||
|         for nm, att in unit_tuple: | ||||
|             self.assertEqual(att, D.unit_attname(nm)) | ||||
|  | ||||
|  | ||||
| class AreaTest(unittest.TestCase): | ||||
|     "Testing the Area object" | ||||
|  | ||||
|   | ||||
| @@ -14,17 +14,21 @@ def no_backend(test_func, backend): | ||||
|     else: | ||||
|         return test_func | ||||
|  | ||||
|  | ||||
| # Decorators to disable entire test functions for specific | ||||
| # spatial backends. | ||||
| def no_oracle(func): | ||||
|     return no_backend(func, 'oracle') | ||||
|  | ||||
|  | ||||
| def no_postgis(func): | ||||
|     return no_backend(func, 'postgis') | ||||
|  | ||||
|  | ||||
| def no_mysql(func): | ||||
|     return no_backend(func, 'mysql') | ||||
|  | ||||
|  | ||||
| def no_spatialite(func): | ||||
|     return no_backend(func, 'spatialite') | ||||
|  | ||||
|   | ||||
| @@ -3,6 +3,7 @@ from __future__ import unicode_literals | ||||
| from django.http import Http404 | ||||
| from django.utils.translation import ugettext as _ | ||||
|  | ||||
|  | ||||
| def feed(request, url, feed_dict=None): | ||||
|     """Provided for backwards compatibility.""" | ||||
|     if not feed_dict: | ||||
|   | ||||
| @@ -9,6 +9,7 @@ from django.contrib.sites.models import Site | ||||
| from django.contrib.sites import models as site_app | ||||
| from django.core.management.color import no_style | ||||
|  | ||||
|  | ||||
| def create_default_site(app, created_models, verbosity, db, **kwargs): | ||||
|     # Only create the default sites in databases where Django created the table | ||||
|     if Site in created_models and router.allow_migrate(db, Site): | ||||
|   | ||||
| @@ -6,6 +6,7 @@ from django.utils.six.moves.urllib.request import url2pathname | ||||
| from django.contrib.staticfiles import utils | ||||
| from django.contrib.staticfiles.views import serve | ||||
|  | ||||
|  | ||||
| class StaticFilesHandler(WSGIHandler): | ||||
|     """ | ||||
|     WSGI middleware that intercepts calls to the static files directory, as | ||||
|   | ||||
| @@ -3,6 +3,7 @@ from django.conf.urls.static import static | ||||
|  | ||||
| urlpatterns = [] | ||||
|  | ||||
|  | ||||
| def staticfiles_urlpatterns(prefix=None): | ||||
|     """ | ||||
|     Helper function to return a URL pattern for serving static files. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user