# HG changeset patch # User Sylvain Thénault # Date 1449679456 -3600 # Node ID adc46197b8c93161aeaec3eccc2b0e2984c1acce # Parent 5b646ab6821bcd21730d95f4f413947520a4dd8f [migration] test addition of a cube providing a custom final type This does not work yet. Related to #7569998 diff -r 5b646ab6821b -r adc46197b8c9 server/test/data-migractions/cubes/fakegis/__init__.py diff -r 5b646ab6821b -r adc46197b8c9 server/test/data-migractions/cubes/fakegis/__pkginfo__.py --- /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 diff -r 5b646ab6821b -r adc46197b8c9 server/test/data-migractions/cubes/fakegis/schema.py --- /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') diff -r 5b646ab6821b -r adc46197b8c9 server/test/data-migractions/cubes/fakegis/site_cubicweb.py --- /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 diff -r 5b646ab6821b -r adc46197b8c9 server/test/unittest_migractions.py --- 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')