Merge branch 'master' of github.com:okfn/ckanext-spatial
This commit is contained in:
commit
706f40b80d
|
@ -1,12 +1,16 @@
|
||||||
from logging import getLogger
|
from logging import getLogger
|
||||||
|
|
||||||
|
from sqlalchemy import types, Column, Table
|
||||||
|
|
||||||
|
from geoalchemy import Geometry, GeometryColumn, GeometryDDL, GeometryExtensionColumn
|
||||||
|
from geoalchemy.postgis import PGComparator
|
||||||
|
|
||||||
|
|
||||||
from ckan.lib.base import config
|
from ckan.lib.base import config
|
||||||
from ckan import model
|
from ckan import model
|
||||||
from ckan.model import Session
|
from ckan.model import Session
|
||||||
from ckan.model.meta import *
|
from ckan.model import meta
|
||||||
from ckan.model.domain_object import DomainObject
|
from ckan.model.domain_object import DomainObject
|
||||||
from geoalchemy import *
|
|
||||||
from geoalchemy.postgis import PGComparator
|
|
||||||
|
|
||||||
log = getLogger(__name__)
|
log = getLogger(__name__)
|
||||||
|
|
||||||
|
@ -20,9 +24,9 @@ def setup(srid=None):
|
||||||
define_spatial_tables(srid)
|
define_spatial_tables(srid)
|
||||||
log.debug('Spatial tables defined in memory')
|
log.debug('Spatial tables defined in memory')
|
||||||
|
|
||||||
if model.repo.are_tables_created():
|
if model.package_table.exists():
|
||||||
if not Table('geometry_columns',metadata).exists() or \
|
if not Table('geometry_columns',meta.metadata).exists() or \
|
||||||
not Table('spatial_ref_sys',metadata).exists():
|
not Table('spatial_ref_sys',meta.metadata).exists():
|
||||||
raise Exception('The spatial extension is enabled, but PostGIS ' + \
|
raise Exception('The spatial extension is enabled, but PostGIS ' + \
|
||||||
'has not been set up in the database. ' + \
|
'has not been set up in the database. ' + \
|
||||||
'Please refer to the "Setting up PostGIS" section in the README.')
|
'Please refer to the "Setting up PostGIS" section in the README.')
|
||||||
|
@ -63,12 +67,12 @@ def define_spatial_tables(db_srid=None):
|
||||||
else:
|
else:
|
||||||
db_srid = int(db_srid)
|
db_srid = int(db_srid)
|
||||||
|
|
||||||
package_extent_table = Table('package_extent', metadata,
|
package_extent_table = Table('package_extent', meta.metadata,
|
||||||
Column('package_id', types.UnicodeText, primary_key=True),
|
Column('package_id', types.UnicodeText, primary_key=True),
|
||||||
GeometryExtensionColumn('the_geom', Geometry(2,srid=db_srid)))
|
GeometryExtensionColumn('the_geom', Geometry(2,srid=db_srid)))
|
||||||
|
|
||||||
|
|
||||||
mapper(PackageExtent, package_extent_table, properties={
|
meta.mapper(PackageExtent, package_extent_table, properties={
|
||||||
'the_geom': GeometryColumn(package_extent_table.c.the_geom,
|
'the_geom': GeometryColumn(package_extent_table.c.the_geom,
|
||||||
comparator=PGComparator)})
|
comparator=PGComparator)})
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#spatial-search-show{
|
#spatial-search-show{
|
||||||
margin-top: 10px;
|
margin-top: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#spatial-search-show a.more:after {
|
#spatial-search-show a.more:after {
|
||||||
|
|
|
@ -16,18 +16,19 @@ class TestDatasetMap(FunctionalTestCase,SpatialTestBase):
|
||||||
|
|
||||||
def test_map_shown(self):
|
def test_map_shown(self):
|
||||||
CreateTestData.create()
|
CreateTestData.create()
|
||||||
|
|
||||||
|
extra_environ = {'REMOTE_USER': 'annafan'}
|
||||||
name = 'annakarenina'
|
name = 'annakarenina'
|
||||||
|
|
||||||
offset = url_for(controller='package', action='edit',id=name)
|
offset = url_for(controller='package', action='edit',id=name)
|
||||||
res = self.app.get(offset)
|
res = self.app.get(offset, extra_environ=extra_environ)
|
||||||
assert 'Edit - Datasets' in res
|
assert 'Edit - Datasets' in res
|
||||||
fv = res.forms['dataset-edit']
|
fv = res.forms['dataset-edit']
|
||||||
prefix = ''
|
prefix = ''
|
||||||
fv[prefix+'extras__1__key'] = u'spatial'
|
fv[prefix+'extras__1__key'] = u'spatial'
|
||||||
fv[prefix+'extras__1__value'] = self.geojson_examples['point']
|
fv[prefix+'extras__1__value'] = self.geojson_examples['point']
|
||||||
|
|
||||||
res = fv.submit('save')
|
res = fv.submit('save', extra_environ=extra_environ)
|
||||||
assert not 'Error' in res, res
|
assert not 'Error' in res, res
|
||||||
|
|
||||||
# Load the dataset page and check if the libraries have been loaded
|
# Load the dataset page and check if the libraries have been loaded
|
||||||
|
|
|
@ -14,6 +14,11 @@ log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class TestPackageController(FunctionalTestCase,SpatialTestBase):
|
class TestPackageController(FunctionalTestCase,SpatialTestBase):
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setup_class(cls):
|
||||||
|
cls.extra_environ = {'REMOTE_USER': 'annafan'}
|
||||||
|
|
||||||
def setup(self):
|
def setup(self):
|
||||||
CreateTestData.create()
|
CreateTestData.create()
|
||||||
|
|
||||||
|
@ -24,7 +29,7 @@ class TestPackageController(FunctionalTestCase,SpatialTestBase):
|
||||||
name = 'test-spatial-dataset-1'
|
name = 'test-spatial-dataset-1'
|
||||||
|
|
||||||
offset = url_for(controller='package', action='new')
|
offset = url_for(controller='package', action='new')
|
||||||
res = self.app.get(offset)
|
res = self.app.get(offset, extra_environ=self.extra_environ)
|
||||||
assert 'Add - Datasets' in res
|
assert 'Add - Datasets' in res
|
||||||
fv = res.forms['dataset-edit']
|
fv = res.forms['dataset-edit']
|
||||||
prefix = ''
|
prefix = ''
|
||||||
|
@ -32,7 +37,7 @@ class TestPackageController(FunctionalTestCase,SpatialTestBase):
|
||||||
fv[prefix+'extras__0__key'] = u'spatial'
|
fv[prefix+'extras__0__key'] = u'spatial'
|
||||||
fv[prefix+'extras__0__value'] = self.geojson_examples['point']
|
fv[prefix+'extras__0__value'] = self.geojson_examples['point']
|
||||||
|
|
||||||
res = fv.submit('save')
|
res = fv.submit('save', extra_environ=self.extra_environ)
|
||||||
assert not 'Error' in res, res
|
assert not 'Error' in res, res
|
||||||
|
|
||||||
package = Package.get(name)
|
package = Package.get(name)
|
||||||
|
@ -52,7 +57,7 @@ class TestPackageController(FunctionalTestCase,SpatialTestBase):
|
||||||
name = 'test-spatial-dataset-2'
|
name = 'test-spatial-dataset-2'
|
||||||
|
|
||||||
offset = url_for(controller='package', action='new')
|
offset = url_for(controller='package', action='new')
|
||||||
res = self.app.get(offset)
|
res = self.app.get(offset, extra_environ=self.extra_environ)
|
||||||
assert 'Add - Datasets' in res
|
assert 'Add - Datasets' in res
|
||||||
fv = res.forms['dataset-edit']
|
fv = res.forms['dataset-edit']
|
||||||
prefix = ''
|
prefix = ''
|
||||||
|
@ -60,7 +65,7 @@ class TestPackageController(FunctionalTestCase,SpatialTestBase):
|
||||||
fv[prefix+'extras__0__key'] = u'spatial'
|
fv[prefix+'extras__0__key'] = u'spatial'
|
||||||
fv[prefix+'extras__0__value'] = u'{"Type":Bad Json]'
|
fv[prefix+'extras__0__value'] = u'{"Type":Bad Json]'
|
||||||
|
|
||||||
res = fv.submit('save')
|
res = fv.submit('save', extra_environ=self.extra_environ)
|
||||||
assert 'Error' in res, res
|
assert 'Error' in res, res
|
||||||
assert 'Spatial' in res
|
assert 'Spatial' in res
|
||||||
assert 'Error decoding JSON object' in res
|
assert 'Error decoding JSON object' in res
|
||||||
|
@ -72,7 +77,7 @@ class TestPackageController(FunctionalTestCase,SpatialTestBase):
|
||||||
name = 'test-spatial-dataset-3'
|
name = 'test-spatial-dataset-3'
|
||||||
|
|
||||||
offset = url_for(controller='package', action='new')
|
offset = url_for(controller='package', action='new')
|
||||||
res = self.app.get(offset)
|
res = self.app.get(offset, extra_environ=self.extra_environ)
|
||||||
assert 'Add - Datasets' in res
|
assert 'Add - Datasets' in res
|
||||||
fv = res.forms['dataset-edit']
|
fv = res.forms['dataset-edit']
|
||||||
prefix = ''
|
prefix = ''
|
||||||
|
@ -80,7 +85,7 @@ class TestPackageController(FunctionalTestCase,SpatialTestBase):
|
||||||
fv[prefix+'extras__0__key'] = u'spatial'
|
fv[prefix+'extras__0__key'] = u'spatial'
|
||||||
fv[prefix+'extras__0__value'] = u'{"Type":"Bad_GeoJSON","a":2}'
|
fv[prefix+'extras__0__value'] = u'{"Type":"Bad_GeoJSON","a":2}'
|
||||||
|
|
||||||
res = fv.submit('save')
|
res = fv.submit('save', extra_environ=self.extra_environ)
|
||||||
assert 'Error' in res, res
|
assert 'Error' in res, res
|
||||||
assert 'Spatial' in res
|
assert 'Spatial' in res
|
||||||
assert 'Error creating geometry' in res
|
assert 'Error creating geometry' in res
|
||||||
|
@ -93,14 +98,14 @@ class TestPackageController(FunctionalTestCase,SpatialTestBase):
|
||||||
name = 'annakarenina'
|
name = 'annakarenina'
|
||||||
|
|
||||||
offset = url_for(controller='package', action='edit',id=name)
|
offset = url_for(controller='package', action='edit',id=name)
|
||||||
res = self.app.get(offset)
|
res = self.app.get(offset, extra_environ=self.extra_environ)
|
||||||
assert 'Edit - Datasets' in res
|
assert 'Edit - Datasets' in res
|
||||||
fv = res.forms['dataset-edit']
|
fv = res.forms['dataset-edit']
|
||||||
prefix = ''
|
prefix = ''
|
||||||
fv[prefix+'extras__1__key'] = u'spatial'
|
fv[prefix+'extras__1__key'] = u'spatial'
|
||||||
fv[prefix+'extras__1__value'] = self.geojson_examples['point']
|
fv[prefix+'extras__1__value'] = self.geojson_examples['point']
|
||||||
|
|
||||||
res = fv.submit('save')
|
res = fv.submit('save', extra_environ=self.extra_environ)
|
||||||
assert not 'Error' in res, res
|
assert not 'Error' in res, res
|
||||||
|
|
||||||
package = Package.get(name)
|
package = Package.get(name)
|
||||||
|
@ -117,13 +122,13 @@ class TestPackageController(FunctionalTestCase,SpatialTestBase):
|
||||||
|
|
||||||
# Update the spatial extra
|
# Update the spatial extra
|
||||||
offset = url_for(controller='package', action='edit',id=name)
|
offset = url_for(controller='package', action='edit',id=name)
|
||||||
res = self.app.get(offset)
|
res = self.app.get(offset, extra_environ=self.extra_environ)
|
||||||
assert 'Edit - Datasets' in res
|
assert 'Edit - Datasets' in res
|
||||||
fv = res.forms['dataset-edit']
|
fv = res.forms['dataset-edit']
|
||||||
prefix = ''
|
prefix = ''
|
||||||
fv[prefix+'extras__1__value'] = self.geojson_examples['polygon']
|
fv[prefix+'extras__1__value'] = self.geojson_examples['polygon']
|
||||||
|
|
||||||
res = fv.submit('save')
|
res = fv.submit('save', extra_environ=self.extra_environ)
|
||||||
assert not 'Error' in res, res
|
assert not 'Error' in res, res
|
||||||
|
|
||||||
# Check that the PackageExtent object has been updated
|
# Check that the PackageExtent object has been updated
|
||||||
|
|
Loading…
Reference in New Issue