[migration] test addition of a cube providing a custom final type
This does not work yet.
Related to #7569998
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/server/test/data-migractions/cubes/fakegis/__pkginfo__.py Wed Dec 09 17:44:16 2015 +0100
@@ -0,0 +1,50 @@
+# pylint: disable-msg=W0622
+"""cubicweb-fakeemail packaging information"""
+
+modname = 'fakegis'
+distname = "cubicweb-%s" % modname
+
+numversion = (1, 0, 0)
+version = '.'.join(str(num) for num in numversion)
+
+license = 'LGPL'
+author = "Logilab"
+author_email = "contact@logilab.fr"
+web = 'http://www.cubicweb.org/project/%s' % distname
+description = "whatever"
+classifiers = [
+ 'Environment :: Web Environment',
+ 'Framework :: CubicWeb',
+ 'Programming Language :: Python',
+ 'Programming Language :: JavaScript',
+]
+
+# used packages
+__depends__ = {'cubicweb': '>= 3.19.0',
+ }
+
+
+# packaging ###
+
+from os import listdir as _listdir
+from os.path import join, isdir
+from glob import glob
+
+THIS_CUBE_DIR = join('share', 'cubicweb', 'cubes', modname)
+
+def listdir(dirpath):
+ return [join(dirpath, fname) for fname in _listdir(dirpath)
+ if fname[0] != '.' and not fname.endswith('.pyc')
+ and not fname.endswith('~')
+ and not isdir(join(dirpath, fname))]
+
+data_files = [
+ # common files
+ [THIS_CUBE_DIR, [fname for fname in glob('*.py') if fname != 'setup.py']],
+ ]
+# check for possible extended cube layout
+for dirname in ('entities', 'views', 'sobjects', 'hooks', 'schema', 'data', 'i18n', 'migration', 'wdoc'):
+ if isdir(dirname):
+ data_files.append([join(THIS_CUBE_DIR, dirname), listdir(dirname)])
+# Note: here, you'll need to add subdirectories if you want
+# them to be included in the debian package
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/server/test/data-migractions/cubes/fakegis/schema.py Wed Dec 09 17:44:16 2015 +0100
@@ -0,0 +1,9 @@
+
+from yams.buildobjs import EntityType, make_type
+
+Geometry = make_type('Geometry')
+
+class Location(EntityType):
+ geometry = Geometry(
+ geom_type='GEOMETRYCOLLECTION', srid=4326, coord_dimension=2,
+ description='Geospatial indication of the location')
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/server/test/data-migractions/cubes/fakegis/site_cubicweb.py Wed Dec 09 17:44:16 2015 +0100
@@ -0,0 +1,23 @@
+from yams import register_base_type
+from logilab.database import get_db_helper
+from logilab.database.sqlgen import SQLExpression
+
+_GEOM_PARAMETERS = ('srid', 'geom_type', 'coord_dimension')
+register_base_type('Geometry', _GEOM_PARAMETERS)
+
+# Add the datatype to the helper mapping
+pghelper = get_db_helper('postgres')
+pghelper.TYPE_MAPPING['Geometry'] = 'geometry'
+
+
+# Add a converter for Geometry
+def convert_geom(x):
+ if isinstance(x, (tuple, list)):
+ # We give the (Geometry, SRID)
+ return SQLExpression('ST_GeomFromText(%(geo)s, %(srid)s)', geo=x[0], srid=x[1])
+ else:
+ # We just give the Geometry
+ return SQLExpression('ST_GeomFromText(%(geo)s, %(srid)s)', geo=x, srid=-1)
+
+# Add the converter function to the known SQL_CONVERTERS
+pghelper.TYPE_CONVERTERS['Geometry'] = convert_geom
--- a/server/test/unittest_migractions.py Wed Sep 16 10:56:36 2015 +0200
+++ b/server/test/unittest_migractions.py Wed Dec 09 17:44:16 2015 +0100
@@ -289,6 +289,12 @@
for cstr in eschema.rdef('name').constraints:
self.assertTrue(hasattr(cstr, 'eid'))
+ def test_add_cube_with_custom_final_type(self):
+ with self.mh() as (cnx, mh):
+ mh.cmd_add_cube('fakegis')
+ self.assertIn('Geometry', self.schema)
+ self.assertTrue(self.schema['Geometry'].final)
+
def test_add_drop_entity_type(self):
with self.mh() as (cnx, mh):
mh.cmd_add_entity_type('Folder2')