Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
D
django
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
django
Commits
bc0aba77
Kaydet (Commit)
bc0aba77
authored
Haz 09, 2014
tarafından
Tim Graham
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Dropped support for SpatiaLite < 2.4.
üst
40bfd856
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
24 additions
and
161 deletions
+24
-161
creation.py
django/contrib/gis/db/backends/spatialite/creation.py
+4
-98
operations.py
django/contrib/gis/db/backends/spatialite/operations.py
+3
-22
creation.py
django/db/backends/creation.py
+8
-0
geolibs.txt
docs/ref/contrib/gis/install/geolibs.txt
+2
-3
spatialite.txt
docs/ref/contrib/gis/install/spatialite.txt
+5
-20
testing.txt
docs/ref/contrib/gis/testing.txt
+0
-18
1.8.txt
docs/releases/1.8.txt
+2
-0
No files found.
django/contrib/gis/db/backends/spatialite/creation.py
Dosyayı görüntüle @
bc0aba77
import
os
from
django.conf
import
settings
from
django.core.exceptions
import
ImproperlyConfigured
from
django.db.backends.sqlite3.creation
import
DatabaseCreation
class
SpatiaLiteCreation
(
DatabaseCreation
):
def
create_test_db
(
self
,
verbosity
=
1
,
autoclobber
=
False
,
serialize
=
True
,
keepdb
=
False
):
"""
Creates a test database, prompting the user for confirmation if the
database already exists. Returns the name of the test database created.
This method is overloaded to load up the SpatiaLite initialization
SQL prior to calling the `migrate` command.
"""
# Don't import django.core.management if it isn't needed.
from
django.core.management
import
call_command
test_database_name
=
self
.
_get_test_db_name
()
if
verbosity
>=
1
:
test_db_repr
=
''
action
=
'Creating'
if
verbosity
>=
2
:
test_db_repr
=
" ('
%
s')"
%
test_database_name
if
keepdb
:
action
=
'Using existing'
print
(
"
%
s test database for alias '
%
s'
%
s..."
%
(
action
,
self
.
connection
.
alias
,
test_db_repr
))
self
.
_create_test_db
(
verbosity
,
autoclobber
,
keepdb
)
self
.
connection
.
close
()
self
.
connection
.
settings_dict
[
"NAME"
]
=
test_database_name
# Need to load the SpatiaLite initialization SQL before running `migrate`.
self
.
load_spatialite_sql
()
# Report migrate messages at one level lower than that requested.
# This ensures we don't get flooded with messages during testing
# (unless you really ask to be flooded)
call_command
(
'migrate'
,
verbosity
=
max
(
verbosity
-
1
,
0
),
interactive
=
False
,
database
=
self
.
connection
.
alias
,
load_initial_data
=
False
)
# We then serialize the current state of the database into a string
# and store it on the connection. This slightly horrific process is so people
# who are testing on databases without transactions or who are using
# a TransactionTestCase still get a clean database on every test run.
if
serialize
:
self
.
connection
.
_test_serialized_contents
=
self
.
serialize_db_to_string
()
# We need to then do a flush to ensure that any data installed by
# custom SQL has been removed. The only test data should come from
# test fixtures, or autogenerated from post_migrate triggers.
# This has the side effect of loading initial data (which was
# intentionally skipped in the migrate).
call_command
(
'flush'
,
verbosity
=
max
(
verbosity
-
1
,
0
),
interactive
=
False
,
database
=
self
.
connection
.
alias
)
call_command
(
'createcachetable'
,
database
=
self
.
connection
.
alias
)
# Ensure a connection for the side effect of initializing the test database.
self
.
connection
.
ensure_connection
()
return
test_database_name
def
sql_indexes_for_field
(
self
,
model
,
f
,
style
):
"Return any spatial index creation SQL for the field."
from
django.contrib.gis.db.models.fields
import
GeometryField
...
...
@@ -99,35 +31,9 @@ class SpatiaLiteCreation(DatabaseCreation):
return
output
def
load_spatiali
te_sql
(
self
):
def
_create_test_db_pre_migra
te_sql
(
self
):
"""
This routine loads up the SpatiaLite SQL file
.
Creates the spatial metadata tables
.
"""
if
self
.
connection
.
ops
.
spatial_version
[:
2
]
>=
(
2
,
4
):
# Spatialite >= 2.4 -- No need to load any SQL file, calling
# InitSpatialMetaData() transparently creates the spatial metadata
# tables
cur
=
self
.
connection
.
_cursor
()
cur
.
execute
(
"SELECT InitSpatialMetaData()"
)
else
:
# Spatialite < 2.4 -- Load the initial SQL
# Getting the location of the SpatiaLite SQL file, and confirming
# it exists.
spatialite_sql
=
self
.
spatialite_init_file
()
if
not
os
.
path
.
isfile
(
spatialite_sql
):
raise
ImproperlyConfigured
(
'Could not find the required SpatiaLite initialization '
'SQL file (necessary for testing):
%
s'
%
spatialite_sql
)
# Opening up the SpatiaLite SQL initialization file and executing
# as a script.
with
open
(
spatialite_sql
,
'r'
)
as
sql_fh
:
cur
=
self
.
connection
.
_cursor
()
cur
.
executescript
(
sql_fh
.
read
())
def
spatialite_init_file
(
self
):
# SPATIALITE_SQL may be placed in settings to tell GeoDjango
# to use a specific path to the SpatiaLite initialization SQL.
return
getattr
(
settings
,
'SPATIALITE_SQL'
,
'init_spatialite-
%
s.
%
s.sql'
%
self
.
connection
.
ops
.
spatial_version
[:
2
])
cur
=
self
.
connection
.
_cursor
()
cur
.
execute
(
"SELECT InitSpatialMetaData()"
)
django/contrib/gis/db/backends/spatialite/operations.py
Dosyayı görüntüle @
bc0aba77
...
...
@@ -140,17 +140,15 @@ class SpatiaLiteOperations(DatabaseOperations, BaseSpatialOperations):
'database (error was "
%
s"). Was the SpatiaLite initialization '
'SQL loaded on this database?'
)
%
(
self
.
connection
.
settings_dict
[
'NAME'
],
msg
)
six
.
reraise
(
ImproperlyConfigured
,
ImproperlyConfigured
(
new_msg
),
sys
.
exc_info
()[
2
])
if
version
<
(
2
,
3
,
0
):
if
version
<
(
2
,
4
,
0
):
raise
ImproperlyConfigured
(
'GeoDjango only supports SpatiaLite versions '
'2.
3
.0 and above'
)
'2.
4
.0 and above'
)
return
version
@property
def
_version_greater_2_4_0_rc4
(
self
):
if
self
.
spatial_version
>=
(
2
,
4
,
1
):
return
True
elif
self
.
spatial_version
<
(
2
,
4
,
0
):
return
False
else
:
# Spatialite 2.4.0-RC4 added AsGML and AsKML, however both
# RC2 (shipped in popular Debian/Ubuntu packages) and RC4
...
...
@@ -274,24 +272,7 @@ class SpatiaLiteOperations(DatabaseOperations, BaseSpatialOperations):
Returns the SpatiaLite version as a tuple (version string, major,
minor, subminor).
"""
# Getting the SpatiaLite version.
try
:
version
=
self
.
spatialite_version
()
except
DatabaseError
:
# The `spatialite_version` function first appeared in version 2.3.1
# of SpatiaLite, so doing a fallback test for 2.3.0 (which is
# used by popular Debian/Ubuntu packages).
version
=
None
try
:
tmp
=
self
.
_get_spatialite_func
(
"X(GeomFromText('POINT(1 1)'))"
)
if
tmp
==
1.0
:
version
=
'2.3.0'
except
DatabaseError
:
pass
# If no version string defined, then just re-raise the original
# exception.
if
version
is
None
:
raise
version
=
self
.
spatialite_version
()
m
=
self
.
version_regex
.
match
(
version
)
if
m
:
...
...
django/db/backends/creation.py
Dosyayı görüntüle @
bc0aba77
...
...
@@ -369,6 +369,8 @@ class BaseDatabaseCreation(object):
settings
.
DATABASES
[
self
.
connection
.
alias
][
"NAME"
]
=
test_database_name
self
.
connection
.
settings_dict
[
"NAME"
]
=
test_database_name
self
.
_create_test_db_pre_migrate_sql
()
# We report migrate messages at one level lower than that requested.
# This ensures we don't get flooded with messages during testing
# (unless you really ask to be flooded).
...
...
@@ -402,6 +404,12 @@ class BaseDatabaseCreation(object):
return
test_database_name
def
_create_test_db_pre_migrate_sql
(
self
):
"""
Hook for databases to load SQL before creating the test DB.
"""
pass
def
serialize_db_to_string
(
self
):
"""
Serializes all data in the database into a JSON string.
...
...
docs/ref/contrib/gis/install/geolibs.txt
Dosyayı görüntüle @
bc0aba77
...
...
@@ -12,10 +12,10 @@ Program Description Required
======================== ==================================== ================================ ==========================
:ref:`GEOS <ref-geos>` Geometry Engine Open Source Yes 3.4, 3.3, 3.2
`PROJ.4`_ Cartographic Projections library Yes (PostgreSQL and SQLite only) 4.8, 4.7, 4.6, 4.5, 4.4
:ref:`GDAL <ref-gdal>` Geospatial Data Abstraction Library
No (but, required for SQLite)
1.10, 1.9, 1.8, 1.7
:ref:`GDAL <ref-gdal>` Geospatial Data Abstraction Library
Yes (SQLite only)
1.10, 1.9, 1.8, 1.7
:ref:`GeoIP <ref-geoip>` IP-based geolocation library No 1.4
`PostGIS`__ Spatial extensions for PostgreSQL Yes (PostgreSQL only) 2.1, 2.0, 1.5, 1.4, 1.3
`SpatiaLite`__ Spatial extensions for SQLite Yes (SQLite only) 4.1, 4.0, 3.0, 2.4
, 2.3
`SpatiaLite`__ Spatial extensions for SQLite Yes (SQLite only) 4.1, 4.0, 3.0, 2.4
======================== ==================================== ================================ ==========================
Note that older or more recent versions of these libraries *may* also work
...
...
@@ -35,7 +35,6 @@ totally fine with GeoDjango. Your mileage may vary.
PostGIS 1.5.0 2010-02-04
PostGIS 2.0.0 2012-04-03
PostGIS 2.1.0 2013-08-17
SpatiaLite 2.3.0 2009-04-06
Spatialite 2.4.0 2010-11-14
Spatialite 3.0.0 2011-12-30
Spatialite 4.0.0 2012-11-25
...
...
docs/ref/contrib/gis/install/spatialite.txt
Dosyayı görüntüle @
bc0aba77
...
...
@@ -73,7 +73,7 @@ Prior to attempting to build, please read the important notes below to see if
customization of the ``configure`` command is necessary. If not, then run the
``configure`` script, make, and install for the SpatiaLite library::
$ cd libspatialite-amalgamation-2.
3.1
$ cd libspatialite-amalgamation-2.
4.0-5
$ ./configure # May need to be modified, see notes below.
$ make
$ sudo make install
...
...
@@ -83,7 +83,7 @@ customization of the ``configure`` command is necessary. If not, then run the
Finally, do the same for the SpatiaLite tools::
$ cd spatialite-tools-2.
3.1
$ cd spatialite-tools-2.
4.0-5
$ ./configure # May need to be modified, see notes below.
$ make
$ sudo make install
...
...
@@ -196,33 +196,18 @@ Creating a spatial database for SpatiaLite
After you've installed SpatiaLite, you'll need to create a number of spatial
metadata tables in your database in order to perform spatial queries.
If you're using SpatiaLite 2.4 or newer, use the ``spatialite`` utility to
call the ``InitSpatialMetaData()`` function,
like this::
Use the ``spatialite`` utility to call the ``InitSpatialMetaData()`` function,
like this::
$ spatialite geodjango.db "SELECT InitSpatialMetaData();"
the SPATIAL_REF_SYS table already contains some row(s)
InitSpatiaMetaData ()error:"table spatial_ref_sys already exists"
0
You can safely ignore the error messages shown. When you've done this, you can
skip the rest of this section.
If you're using SpatiaLite 2.3, you'll need to download a
database-initialization file and execute its SQL queries in your database.
First, get it from the `SpatiaLite Resources`__ page::
$ wget http://www.gaia-gis.it/spatialite-2.3.1/init_spatialite-2.3.sql.gz
$ gunzip init_spatialite-2.3.sql.gz
Then, use the ``spatialite`` command to initialize a spatial database::
$ spatialite geodjango.db < init_spatialite-2.3.sql
You can safely ignore the error messages shown.
.. note::
The parameter ``geodjango.db`` is the *filename* of the SQLite database
you want to use. Use the same in the :setting:`DATABASES` ``"name"`` key
inside your ``settings.py``.
__ http://www.gaia-gis.it/spatialite-2.3.1/resources.html
docs/ref/contrib/gis/testing.txt
Dosyayı görüntüle @
bc0aba77
...
...
@@ -120,24 +120,6 @@ database, as described in :ref:`create_spatialite_db`. Then just do this::
$ python manage.py test
Settings
--------
.. setting:: SPATIALITE_SQL
``SPATIALITE_SQL``
^^^^^^^^^^^^^^^^^^
Only relevant when using a SpatiaLite version 2.3.
By default, the GeoDjango test runner looks for the :ref:`file containing the
SpatiaLite database-initialization SQL code <create_spatialite_db>` in the
same directory where it was invoked (by default the same directory where
``manage.py`` is located). To use a different location, add the following to
your settings::
SPATIALITE_SQL='/path/to/init_spatialite-2.3.sql'
.. _geodjango-tests:
GeoDjango tests
...
...
docs/releases/1.8.txt
Dosyayı görüntüle @
bc0aba77
...
...
@@ -280,6 +280,8 @@ Miscellaneous
* The :tfilter:`length` template filter now returns ``0`` for an undefined
variable, rather than an empty string.
* Support for SpatiaLite < 2.4 has been dropped.
.. _deprecated-features-1.8:
Features deprecated in 1.8
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment