mirror of https://github.com/django/django.git
Continue to attack E302 violations
This commit is contained in:
parent
8b3d9d96ed
commit
19256f300e
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue