misc/migration/bootstrapmigration_repository.py
author Julien Cristau <julien.cristau@logilab.fr>
Tue, 28 Jul 2015 09:25:26 +0200
changeset 10553 1d824df4f2bd
parent 10301 729f36a1bcfa
child 10589 7c23b7de2b8d
permissions -rw-r--r--
Fix (de)serialization of ComputedRelation read permissions For normal relation types, permissions don't need to be stored since they're just default values for the relation definitions. However, computed relations are serialized (as CWComputedRType), while their relation definitions are added at schema finalization time, and are only in memory. So add the 'read_permission' relation to CWComputedRType, and the appropriate hooks to save and restore those permissions. To avoid having to touch yams, we drop the 'add' and 'delete' permissions from the default computed relation permissions; this should probably be backported there. The actual permissions (set on the relation definitions) are hardcoded in finalize_computed_relations anyway. In deserialize_schema, the CWComputedRType handling needs to be delayed a little bit, until after we've called deserialize_ertype_permissions. The rql2sql test is adjusted because CWComputedRType has a 'name' attribute and the 'read_permission' relation, which generates ambiguity vs CWEType. We add an explicit CubicWebRelationSchema.check_permission_definitions, since we need to check both that computed and non-computed rtypes are defined properly. Based on report and initial patch from Christophe de Vienne (thanks!). Closes #5706307
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9163
fe4c1c1982e7 [3.17 migration] when some cube is missing, add_cube raise ConfigurationError, not ImportError. Closes #2981477
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8830
diff changeset
     1
# copyright 2003-2013 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4944
diff changeset
     2
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4944
diff changeset
     3
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4944
diff changeset
     4
# This file is part of CubicWeb.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4944
diff changeset
     5
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4944
diff changeset
     6
# CubicWeb is free software: you can redistribute it and/or modify it under the
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4944
diff changeset
     7
# terms of the GNU Lesser General Public License as published by the Free
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4944
diff changeset
     8
# Software Foundation, either version 2.1 of the License, or (at your option)
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4944
diff changeset
     9
# any later version.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4944
diff changeset
    10
#
5424
8ecbcbff9777 replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5421
diff changeset
    11
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4944
diff changeset
    12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4944
diff changeset
    13
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4944
diff changeset
    14
# details.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4944
diff changeset
    15
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4944
diff changeset
    16
# You should have received a copy of the GNU Lesser General Public License along
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4944
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    18
"""allways executed before all others in server migration
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    19
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    20
it should only include low level schema changes
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    21
"""
4944
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
    22
9163
fe4c1c1982e7 [3.17 migration] when some cube is missing, add_cube raise ConfigurationError, not ImportError. Closes #2981477
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8830
diff changeset
    23
from cubicweb import ConfigurationError
4944
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
    24
from cubicweb.server.session import hooks_control
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
    25
from cubicweb.server import schemaserial as ss
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    26
2275
bc0bed0616a3 fix #344387, remember upgraded version step by step
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
    27
applcubicwebversion, cubicwebversion = versions_map['cubicweb']
bc0bed0616a3 fix #344387, remember upgraded version step by step
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
    28
4570
ede247bbbf62 follow yams api change: attributes permissions are now defined for
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    29
def _add_relation_definition_no_perms(subjtype, rtype, objtype):
ede247bbbf62 follow yams api change: attributes permissions are now defined for
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    30
    rschema = fsschema.rschema(rtype)
4944
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
    31
    rdef = rschema.rdefs[(subjtype, objtype)]
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
    32
    rdef.rtype = schema.rschema(rtype)
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
    33
    rdef.subject = schema.eschema(subjtype)
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
    34
    rdef.object = schema.eschema(objtype)
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
    35
    ss.execschemarql(rql, rdef, ss.rdef2rql(rdef, CSTRMAP, groupmap=None))
4570
ede247bbbf62 follow yams api change: attributes permissions are now defined for
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    36
    commit(ask_confirm=False)
ede247bbbf62 follow yams api change: attributes permissions are now defined for
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    37
9585
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
    38
def replace_eid_sequence_with_eid_numrange(session):
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
    39
    dbh = session.repo.system_source.dbhelper
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
    40
    cursor = session.cnxset.cu
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
    41
    try:
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
    42
        cursor.execute(dbh.sql_sequence_current_state('entities_id_seq'))
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
    43
        lasteid = cursor.fetchone()[0]
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
    44
    except: # programming error, already migrated
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
    45
        return
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
    46
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
    47
    cursor.execute(dbh.sql_drop_sequence('entities_id_seq'))
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
    48
    cursor.execute(dbh.sql_create_numrange('entities_id_seq'))
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
    49
    cursor.execute(dbh.sql_restart_numrange('entities_id_seq', initial_value=lasteid))
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
    50
    session.commit()
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
    51
10270
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    52
if applcubicwebversion <= (3, 13, 0) and cubicwebversion >= (3, 13, 1):
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    53
    sql('ALTER TABLE entities ADD asource VARCHAR(64)')
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    54
    sql('UPDATE entities SET asource=cw_name  '
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    55
        'FROM cw_CWSource, cw_source_relation '
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    56
        'WHERE entities.eid=cw_source_relation.eid_from AND cw_source_relation.eid_to=cw_CWSource.cw_eid')
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    57
    commit()
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    58
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    59
if applcubicwebversion <= (3, 14, 4) and cubicwebversion >= (3, 14, 4):
10301
729f36a1bcfa merge 3.20.6 into 3.21
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10272
diff changeset
    60
    from cubicweb.server import schema2sql as y2sql
10270
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    61
    dbhelper = repo.system_source.dbhelper
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    62
    rdefdef = schema['CWSource'].rdef('name')
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    63
    attrtype = y2sql.type_from_constraints(dbhelper, rdefdef.object, rdefdef.constraints).split()[0]
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    64
    cursor = session.cnxset.cu
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    65
    sql('UPDATE entities SET asource = source WHERE asource is NULL')
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    66
    dbhelper.change_col_type(cursor, 'entities', 'asource', attrtype, False)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    67
    dbhelper.change_col_type(cursor, 'entities', 'source', attrtype, False)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    68
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    69
    # we now have a functional asource column, start using the normal eid_type_source method
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    70
    if repo.system_source.eid_type_source == repo.system_source.eid_type_source_pre_131:
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    71
        del repo.system_source.eid_type_source
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    72
9585
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
    73
if applcubicwebversion < (3, 19, 0) and cubicwebversion >= (3, 19, 0):
10058
d47c318f95b2 [migration/bootstrap] add explicit index removal for sqlserver, be tolerant to migration replay
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9708
diff changeset
    74
    try: 
d47c318f95b2 [migration/bootstrap] add explicit index removal for sqlserver, be tolerant to migration replay
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9708
diff changeset
    75
        # need explicit drop of the indexes on some database systems (sqlserver)
d47c318f95b2 [migration/bootstrap] add explicit index removal for sqlserver, be tolerant to migration replay
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9708
diff changeset
    76
        sql(repo.system_source.dbhelper.sql_drop_index('entities', 'mtime'))
d47c318f95b2 [migration/bootstrap] add explicit index removal for sqlserver, be tolerant to migration replay
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9708
diff changeset
    77
        sql('ALTER TABLE "entities" DROP COLUMN "mtime"')
d47c318f95b2 [migration/bootstrap] add explicit index removal for sqlserver, be tolerant to migration replay
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9708
diff changeset
    78
        sql('ALTER TABLE "entities" DROP COLUMN "source"')
d47c318f95b2 [migration/bootstrap] add explicit index removal for sqlserver, be tolerant to migration replay
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9708
diff changeset
    79
    except: # programming error, already migrated
d47c318f95b2 [migration/bootstrap] add explicit index removal for sqlserver, be tolerant to migration replay
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9708
diff changeset
    80
        print "Failed to drop mtime or source database columns"
d47c318f95b2 [migration/bootstrap] add explicit index removal for sqlserver, be tolerant to migration replay
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9708
diff changeset
    81
        print "'entities' table of the database has probably been already updated"
9708
b36bc18f6ef7 [migration] move 'entities' table changes from 3.19.0 to bootstrap script
Julien Cristau <julien.cristau@logilab.fr>
parents: 9585
diff changeset
    82
b36bc18f6ef7 [migration] move 'entities' table changes from 3.19.0 to bootstrap script
Julien Cristau <julien.cristau@logilab.fr>
parents: 9585
diff changeset
    83
    commit()
b36bc18f6ef7 [migration] move 'entities' table changes from 3.19.0 to bootstrap script
Julien Cristau <julien.cristau@logilab.fr>
parents: 9585
diff changeset
    84
9585
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
    85
    replace_eid_sequence_with_eid_numrange(session)
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
    86
10025
7b72ecc3f4d2 [migration] hackish black magic to bootstrap addition of formula attr during migration
Julien Cristau <julien.cristau@logilab.fr>
parents: 10015
diff changeset
    87
if applcubicwebversion < (3, 20, 0) and cubicwebversion >= (3, 20, 0):
7b72ecc3f4d2 [migration] hackish black magic to bootstrap addition of formula attr during migration
Julien Cristau <julien.cristau@logilab.fr>
parents: 10015
diff changeset
    88
    ss._IGNORED_PROPS.append('formula')
7b72ecc3f4d2 [migration] hackish black magic to bootstrap addition of formula attr during migration
Julien Cristau <julien.cristau@logilab.fr>
parents: 10015
diff changeset
    89
    add_attribute('CWAttribute', 'formula', commit=False)
7b72ecc3f4d2 [migration] hackish black magic to bootstrap addition of formula attr during migration
Julien Cristau <julien.cristau@logilab.fr>
parents: 10015
diff changeset
    90
    ss._IGNORED_PROPS.remove('formula')
7b72ecc3f4d2 [migration] hackish black magic to bootstrap addition of formula attr during migration
Julien Cristau <julien.cristau@logilab.fr>
parents: 10015
diff changeset
    91
    commit()
7b72ecc3f4d2 [migration] hackish black magic to bootstrap addition of formula attr during migration
Julien Cristau <julien.cristau@logilab.fr>
parents: 10015
diff changeset
    92
    add_entity_type('CWComputedRType')
7b72ecc3f4d2 [migration] hackish black magic to bootstrap addition of formula attr during migration
Julien Cristau <julien.cristau@logilab.fr>
parents: 10015
diff changeset
    93
    commit()
7b72ecc3f4d2 [migration] hackish black magic to bootstrap addition of formula attr during migration
Julien Cristau <julien.cristau@logilab.fr>
parents: 10015
diff changeset
    94
10270
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    95
if schema['TZDatetime'].eid is None:
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    96
    add_entity_type('TZDatetime', auto=False)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    97
if schema['TZTime'].eid is None:
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    98
    add_entity_type('TZTime', auto=False)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    99
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   100
if applcubicwebversion < (3, 18, 0) and cubicwebversion >= (3, 18, 0):
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   101
    driver = config.system_source_config['db-driver']
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   102
    if not (driver == 'postgres' or driver.startswith('sqlserver')):
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   103
        import sys
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   104
        print >>sys.stderr, 'This migration is not supported for backends other than sqlserver or postgres (yet).'
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   105
        sys.exit(1)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   106
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   107
    add_relation_definition('CWAttribute', 'add_permission', 'CWGroup')
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   108
    add_relation_definition('CWAttribute', 'add_permission', 'RQLExpression')
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   109
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   110
    # a bad defaultval in 3.13.8 schema was fixed in 3.13.9, but the migration was missed
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   111
    rql('SET ATTR defaultval NULL WHERE ATTR from_entity E, E name "CWSource", ATTR relation_type T, T name "in_synchronization"')
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   112
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   113
    # the migration gets confused when we change rdefs out from under it.  So
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   114
    # explicitly remove this size constraint so it doesn't stick around and break
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   115
    # things later.
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   116
    rdefeid = schema['defaultval'].rdefs.values()[0].eid
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   117
    rql('DELETE CWConstraint C WHERE C cstrtype T, T name "SizeConstraint", R constrained_by C, R eid %(eid)s', {'eid': rdefeid})
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   118
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   119
    sync_schema_props_perms('defaultval')
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   120
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   121
    def convert_defaultval(cwattr, default):
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   122
        from decimal import Decimal
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   123
        import yams
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   124
        from cubicweb import Binary
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   125
        if default is None:
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   126
            return
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   127
        if isinstance(default, Binary):
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   128
            # partially migrated instance, try to be idempotent
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   129
            return default
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   130
        atype = cwattr.to_entity[0].name
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   131
        if atype == 'Boolean':
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   132
            # boolean attributes with default=False were stored as ''
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   133
            assert default in ('True', 'False', ''), repr(default)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   134
            default = default == 'True'
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   135
        elif atype in ('Int', 'BigInt'):
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   136
            default = int(default)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   137
        elif atype == 'Float':
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   138
            default = float(default)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   139
        elif atype == 'Decimal':
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   140
            default = Decimal(default)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   141
        elif atype in ('Date', 'Datetime', 'TZDatetime', 'Time'):
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   142
            try:
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   143
                # handle NOW and TODAY, keep them stored as strings
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   144
                yams.KEYWORD_MAP[atype][default.upper()]
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   145
                default = default.upper()
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   146
            except KeyError:
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   147
                # otherwise get an actual date or datetime
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   148
                default = yams.DATE_FACTORY_MAP[atype](default)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   149
        else:
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   150
            assert atype == 'String', atype
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   151
            default = unicode(default)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   152
        return Binary.zpickle(default)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   153
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   154
    dbh = repo.system_source.dbhelper
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   155
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   156
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   157
    sql('ALTER TABLE cw_cwattribute ADD new_defaultval %s' % dbh.TYPE_MAPPING['Bytes'])
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   158
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   159
    for cwattr in rql('CWAttribute X').entities():
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   160
        olddefault = cwattr.defaultval
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   161
        if olddefault is not None:
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   162
            req = "UPDATE cw_cwattribute SET new_defaultval = %(val)s WHERE cw_eid = %(eid)s"
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   163
            args = {'val': dbh.binary_value(convert_defaultval(cwattr, olddefault).getvalue()), 'eid': cwattr.eid}
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   164
            sql(req, args, ask_confirm=False)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   165
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   166
    sql('ALTER TABLE cw_cwattribute DROP COLUMN cw_defaultval')
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   167
    if driver == 'postgres':
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   168
        sql('ALTER TABLE cw_cwattribute RENAME COLUMN new_defaultval TO cw_defaultval')
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   169
    else: # sqlserver
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   170
        sql("sp_rename 'cw_cwattribute.new_defaultval', 'cw_defaultval', 'COLUMN'")
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   171
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   172
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   173
    # Set object type to "Bytes" for CWAttribute's "defaultval" attribute
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   174
    rql('SET X to_entity B WHERE X is CWAttribute, X from_entity Y, Y name "CWAttribute", '
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   175
        'X relation_type Z, Z name "defaultval", B name "Bytes", NOT X to_entity B')
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   176
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   177
    oldrdef = schema['CWAttribute'].rdef('defaultval')
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   178
    import yams.buildobjs as ybo
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   179
    newrdef = ybo.RelationDefinition('CWAttribute', 'defaultval', 'Bytes')
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   180
    newrdef.eid = oldrdef.eid
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   181
    schema.add_relation_def(newrdef)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   182
    schema.del_relation_def('CWAttribute', 'defaultval', 'String')
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   183
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   184
    commit()
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   185
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   186
    sync_schema_props_perms('defaultval')
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   187
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   188
    for rschema in schema.relations():
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   189
        if rschema.symmetric:
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   190
            subjects = set(repr(e.type) for e in rschema.subjects())
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   191
            objects = set(repr(e.type) for e in rschema.objects())
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   192
            assert subjects == objects
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   193
            martians = set(str(eid) for eid, in sql('SELECT eid_to FROM %s_relation, entities WHERE eid_to = eid AND type NOT IN (%s)' %
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   194
                                               (rschema.type, ','.join(subjects))))
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   195
            martians |= set(str(eid) for eid, in sql('SELECT eid_from FROM %s_relation, entities WHERE eid_from = eid AND type NOT IN (%s)' %
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   196
                                                (rschema.type, ','.join(subjects))))
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   197
            if martians:
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   198
                martians = ','.join(martians)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   199
                print 'deleting broken relations %s for eids %s' % (rschema.type, martians)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   200
                sql('DELETE FROM %s_relation WHERE eid_from IN (%s) OR eid_to IN (%s)' % (rschema.type, martians, martians))
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   201
            with session.deny_all_hooks_but():
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   202
                rql('SET X %(r)s Y WHERE Y %(r)s X, NOT X %(r)s Y' % {'r': rschema.type})
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   203
            commit()
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   204
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   205
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   206
    # multi columns unique constraints regeneration
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   207
    from cubicweb.server import schemaserial
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   208
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   209
    # syncschema hooks would try to remove indices but
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   210
    # 1) we already do that below
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   211
    # 2) the hook expects the CWUniqueTogetherConstraint.name attribute that hasn't
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   212
    #    yet been added
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   213
    with session.allow_all_hooks_but('syncschema'):
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   214
        rql('DELETE CWUniqueTogetherConstraint C')
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   215
    commit()
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   216
    add_attribute('CWUniqueTogetherConstraint', 'name')
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   217
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   218
    # low-level wipe code for postgres & sqlserver, plain sql ...
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   219
    if driver == 'postgres':
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   220
        for indexname, in sql('select indexname from pg_indexes'):
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   221
            if indexname.startswith('unique_'):
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   222
                print 'dropping index', indexname
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   223
                sql('DROP INDEX %s' % indexname)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   224
        commit()
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   225
    elif driver.startswith('sqlserver'):
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   226
        for viewname, in sql('select name from sys.views'):
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   227
            if viewname.startswith('utv_'):
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   228
                print 'dropping view (index should be cascade-deleted)', viewname
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   229
                sql('DROP VIEW %s' % viewname)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   230
        commit()
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   231
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   232
    # recreate the constraints, hook will lead to low-level recreation
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   233
    for eschema in sorted(schema.entities()):
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   234
        if eschema._unique_together:
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   235
            print 'recreate unique indexes for', eschema
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   236
            rql_args = schemaserial.uniquetogether2rqls(eschema)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   237
            for rql, args in rql_args:
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   238
                args['x'] = eschema.eid
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   239
                session.execute(rql, args)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   240
    commit()
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   241
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   242
    # all attributes perms have to be refreshed ...
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   243
    for rschema in sorted(schema.relations()):
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   244
        if rschema.final:
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   245
            if rschema.type in fsschema:
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   246
                print 'sync perms for', rschema.type
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   247
                sync_schema_props_perms(rschema.type, syncprops=False, ask_confirm=False, commit=False)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   248
            else:
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   249
                print 'WARNING: attribute %s missing from fs schema' % rschema.type
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   250
    commit()
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   251
8800
8ca1a0da5a29 [web/views] extract cube sioc (closes #1916018)
Simon Chabot <simon.chabot@logilab.fr>
parents: 8696
diff changeset
   252
if applcubicwebversion < (3, 17, 0) and cubicwebversion >= (3, 17, 0):
8ca1a0da5a29 [web/views] extract cube sioc (closes #1916018)
Simon Chabot <simon.chabot@logilab.fr>
parents: 8696
diff changeset
   253
    try:
8ca1a0da5a29 [web/views] extract cube sioc (closes #1916018)
Simon Chabot <simon.chabot@logilab.fr>
parents: 8696
diff changeset
   254
        add_cube('sioc', update_database=False)
9163
fe4c1c1982e7 [3.17 migration] when some cube is missing, add_cube raise ConfigurationError, not ImportError. Closes #2981477
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8830
diff changeset
   255
    except ConfigurationError:
8800
8ca1a0da5a29 [web/views] extract cube sioc (closes #1916018)
Simon Chabot <simon.chabot@logilab.fr>
parents: 8696
diff changeset
   256
        if not confirm('In cubicweb 3.17 sioc views have been moved to the sioc '
8ca1a0da5a29 [web/views] extract cube sioc (closes #1916018)
Simon Chabot <simon.chabot@logilab.fr>
parents: 8696
diff changeset
   257
                       'cube, which is not installed.  Continue anyway?'):
8ca1a0da5a29 [web/views] extract cube sioc (closes #1916018)
Simon Chabot <simon.chabot@logilab.fr>
parents: 8696
diff changeset
   258
            raise
8803
47dd517d6c6f [web/views] extract cube embed (closes #1916015)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents: 8800
diff changeset
   259
    try:
47dd517d6c6f [web/views] extract cube embed (closes #1916015)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents: 8800
diff changeset
   260
        add_cube('embed', update_database=False)
9163
fe4c1c1982e7 [3.17 migration] when some cube is missing, add_cube raise ConfigurationError, not ImportError. Closes #2981477
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8830
diff changeset
   261
    except ConfigurationError:
8803
47dd517d6c6f [web/views] extract cube embed (closes #1916015)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents: 8800
diff changeset
   262
        if not confirm('In cubicweb 3.17 embedding views have been moved to the embed '
47dd517d6c6f [web/views] extract cube embed (closes #1916015)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents: 8800
diff changeset
   263
                       'cube, which is not installed.  Continue anyway?'):
47dd517d6c6f [web/views] extract cube embed (closes #1916015)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents: 8800
diff changeset
   264
            raise
8830
7fd6c52ef878 [web/views] extract cube geocoding (closes #353000)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8803
diff changeset
   265
    try:
7fd6c52ef878 [web/views] extract cube geocoding (closes #353000)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8803
diff changeset
   266
        add_cube('geocoding', update_database=False)
9163
fe4c1c1982e7 [3.17 migration] when some cube is missing, add_cube raise ConfigurationError, not ImportError. Closes #2981477
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8830
diff changeset
   267
    except ConfigurationError:
8830
7fd6c52ef878 [web/views] extract cube geocoding (closes #353000)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8803
diff changeset
   268
        if not confirm('In cubicweb 3.17 geocoding views have been moved to the geocoding '
7fd6c52ef878 [web/views] extract cube geocoding (closes #353000)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8803
diff changeset
   269
                       'cube, which is not installed.  Continue anyway?'):
7fd6c52ef878 [web/views] extract cube geocoding (closes #353000)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8803
diff changeset
   270
            raise
8800
8ca1a0da5a29 [web/views] extract cube sioc (closes #1916018)
Simon Chabot <simon.chabot@logilab.fr>
parents: 8696
diff changeset
   271
7543
570522300e22 [ms, entity metas] add 'actual source' to entities table / base entity metadata cache. Closes #1767090
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7398
diff changeset
   272
7797
a71618a75b53 backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7782
diff changeset
   273
if applcubicwebversion <= (3, 14, 0) and cubicwebversion >= (3, 14, 0):
a71618a75b53 backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7782
diff changeset
   274
    if 'require_permission' in schema and not 'localperms'in repo.config.cubes():
a71618a75b53 backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7782
diff changeset
   275
        from cubicweb import ExecutionError
a71618a75b53 backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7782
diff changeset
   276
        try:
a71618a75b53 backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7782
diff changeset
   277
            add_cube('localperms', update_database=False)
9163
fe4c1c1982e7 [3.17 migration] when some cube is missing, add_cube raise ConfigurationError, not ImportError. Closes #2981477
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8830
diff changeset
   278
        except ConfigurationError:
7797
a71618a75b53 backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7782
diff changeset
   279
            raise ExecutionError('In cubicweb 3.14, CWPermission and related stuff '
a71618a75b53 backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7782
diff changeset
   280
                                 'has been moved to cube localperms. Install it first.')
a71618a75b53 backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7782
diff changeset
   281
10270
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   282
4570
ede247bbbf62 follow yams api change: attributes permissions are now defined for
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   283
if applcubicwebversion == (3, 6, 0) and cubicwebversion >= (3, 6, 0):
4944
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   284
    CSTRMAP = dict(rql('Any T, X WHERE X is CWConstraintType, X name T',
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   285
                       ask_confirm=False))
4570
ede247bbbf62 follow yams api change: attributes permissions are now defined for
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   286
    _add_relation_definition_no_perms('CWAttribute', 'update_permission', 'CWGroup')
ede247bbbf62 follow yams api change: attributes permissions are now defined for
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   287
    _add_relation_definition_no_perms('CWAttribute', 'update_permission', 'RQLExpression')
4835
13b0b96d7982 [repo] enhanced security handling: deprecates unsafe_execute, in favor of explicit read/write security control using the `enabled_security` context manager. Also code executed on the repository side is now unsafe by default.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4834
diff changeset
   288
    rql('SET X update_permission Y WHERE X is CWAttribute, X add_permission Y')
4570
ede247bbbf62 follow yams api change: attributes permissions are now defined for
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   289
    drop_relation_definition('CWAttribute', 'delete_permission', 'CWGroup')
ede247bbbf62 follow yams api change: attributes permissions are now defined for
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   290
    drop_relation_definition('CWAttribute', 'delete_permission', 'RQLExpression')
ede247bbbf62 follow yams api change: attributes permissions are now defined for
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   291
ede247bbbf62 follow yams api change: attributes permissions are now defined for
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   292
elif applcubicwebversion < (3, 6, 0) and cubicwebversion >= (3, 6, 0):
4944
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   293
    CSTRMAP = dict(rql('Any T, X WHERE X is CWConstraintType, X name T',
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   294
                       ask_confirm=False))
7398
26695dd703d8 [repository api] definitly kill usage of word 'pool' to refer to connections set used by a session
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6896
diff changeset
   295
    session.set_cnxset()
4011
394f853bb653 [migration] write migration instructions for permissions handling on relation definition
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3890
diff changeset
   296
    permsdict = ss.deserialize_ertype_permissions(session)
394f853bb653 [migration] write migration instructions for permissions handling on relation definition
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3890
diff changeset
   297
4944
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   298
    with hooks_control(session, session.HOOKS_ALLOW_ALL, 'integrity'):
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   299
        for rschema in repo.schema.relations():
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   300
            rpermsdict = permsdict.get(rschema.eid, {})
8696
0bb18407c053 [toward py3k] rewrite dict.keys() and dict.values() (part of #2711624)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 8694
diff changeset
   301
            for rdef in rschema.rdefs.itervalues():
4944
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   302
                for action in rdef.ACTIONS:
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   303
                    actperms = []
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   304
                    for something in rpermsdict.get(action == 'update' and 'add' or action, ()):
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   305
                        if isinstance(something, tuple):
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   306
                            actperms.append(rdef.rql_expression(*something))
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   307
                        else: # group name
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   308
                            actperms.append(something)
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   309
                    rdef.set_action_permissions(action, actperms)
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   310
        for action in ('read', 'add', 'delete'):
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   311
            _add_relation_definition_no_perms('CWRelation', '%s_permission' % action, 'CWGroup')
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   312
            _add_relation_definition_no_perms('CWRelation', '%s_permission' % action, 'RQLExpression')
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   313
        for action in ('read', 'update'):
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   314
            _add_relation_definition_no_perms('CWAttribute', '%s_permission' % action, 'CWGroup')
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   315
            _add_relation_definition_no_perms('CWAttribute', '%s_permission' % action, 'RQLExpression')
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   316
        for action in ('read', 'add', 'delete'):
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   317
            rql('SET X %s_permission Y WHERE X is CWRelation, '
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   318
                'RT %s_permission Y, X relation_type RT, Y is CWGroup' % (action, action))
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   319
            rql('INSERT RQLExpression Y: Y exprtype YET, Y mainvars YMV, Y expression YEX, '
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   320
                'X %s_permission Y WHERE X is CWRelation, '
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   321
                'X relation_type RT, RT %s_permission Y2, Y2 exprtype YET, '
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   322
                'Y2 mainvars YMV, Y2 expression YEX' % (action, action))
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   323
        rql('SET X read_permission Y WHERE X is CWAttribute, '
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   324
            'RT read_permission Y, X relation_type RT, Y is CWGroup')
4011
394f853bb653 [migration] write migration instructions for permissions handling on relation definition
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3890
diff changeset
   325
        rql('INSERT RQLExpression Y: Y exprtype YET, Y mainvars YMV, Y expression YEX, '
4944
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   326
            'X read_permission Y WHERE X is CWAttribute, '
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   327
            'X relation_type RT, RT read_permission Y2, Y2 exprtype YET, '
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   328
            'Y2 mainvars YMV, Y2 expression YEX')
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   329
        rql('SET X update_permission Y WHERE X is CWAttribute, '
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   330
            'RT add_permission Y, X relation_type RT, Y is CWGroup')
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   331
        rql('INSERT RQLExpression Y: Y exprtype YET, Y mainvars YMV, Y expression YEX, '
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   332
            'X update_permission Y WHERE X is CWAttribute, '
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   333
            'X relation_type RT, RT add_permission Y2, Y2 exprtype YET, '
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   334
            'Y2 mainvars YMV, Y2 expression YEX')
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   335
        for action in ('read', 'add', 'delete'):
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   336
            drop_relation_definition('CWRType', '%s_permission' % action, 'CWGroup', commit=False)
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   337
            drop_relation_definition('CWRType', '%s_permission' % action, 'RQLExpression')
6222
21772f4e41d9 [migration] attempt to fix pre 3.6 migration
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   338
    sync_schema_props_perms('read_permission', syncperms=False) # fix read_permission cardinality
21772f4e41d9 [migration] attempt to fix pre 3.6 migration
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   339
7549
465009397d91 [migration] don't add CWUniqueConstraint if already there (may occurs when running a migration in multiple times
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6896
diff changeset
   340
if applcubicwebversion < (3, 9, 6) and cubicwebversion >= (3, 9, 6) and not 'CWUniqueTogetherConstraint' in schema:
6222
21772f4e41d9 [migration] attempt to fix pre 3.6 migration
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6208
diff changeset
   341
    add_entity_type('CWUniqueTogetherConstraint')
4011
394f853bb653 [migration] write migration instructions for permissions handling on relation definition
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3890
diff changeset
   342
6896
784d5df35af1 [migration] cwunique constraint schema fix must be done in bootstrap migration
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6222
diff changeset
   343
if not ('CWUniqueTogetherConstraint', 'CWRType') in schema['relations'].rdefs:
784d5df35af1 [migration] cwunique constraint schema fix must be done in bootstrap migration
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6222
diff changeset
   344
    add_relation_definition('CWUniqueTogetherConstraint', 'relations', 'CWRType')
784d5df35af1 [migration] cwunique constraint schema fix must be done in bootstrap migration
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6222
diff changeset
   345
    rql('SET C relations RT WHERE C relations RDEF, RDEF relation_type RT')
784d5df35af1 [migration] cwunique constraint schema fix must be done in bootstrap migration
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6222
diff changeset
   346
    commit()
784d5df35af1 [migration] cwunique constraint schema fix must be done in bootstrap migration
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6222
diff changeset
   347
    drop_relation_definition('CWUniqueTogetherConstraint', 'relations', 'CWAttribute')
784d5df35af1 [migration] cwunique constraint schema fix must be done in bootstrap migration
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6222
diff changeset
   348
    drop_relation_definition('CWUniqueTogetherConstraint', 'relations', 'CWRelation')
784d5df35af1 [migration] cwunique constraint schema fix must be done in bootstrap migration
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6222
diff changeset
   349
784d5df35af1 [migration] cwunique constraint schema fix must be done in bootstrap migration
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6222
diff changeset
   350
2463
5200c0f7d2d5 add migration script for the new cwuri metadata attribute
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2462
diff changeset
   351
if applcubicwebversion < (3, 4, 0) and cubicwebversion >= (3, 4, 0):
2892
7ae3d62a8328 hooks have been refactored, call [re|de]activate_verification_hooks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2696
diff changeset
   352
4944
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   353
    with hooks_control(session, session.HOOKS_ALLOW_ALL, 'integrity'):
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   354
        session.set_shared_data('do-not-insert-cwuri', True)
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   355
        add_relation_type('cwuri')
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   356
        base_url = session.base_url()
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   357
        for eid, in rql('Any X', ask_confirm=False):
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   358
            type, source, extid = session.describe(eid)
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   359
            if source == 'system':
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   360
                rql('SET X cwuri %(u)s WHERE X eid %(x)s',
9515
b0dd5b57d2d8 [dataimport, migration] more fixes in the spirit of a6c32edabc8d:
Dimitri Papadopoulos <dimitri.papadopoulos@cea.fr>
parents: 9163
diff changeset
   361
                    {'x': eid, 'u': u'%s%s' % (base_url, eid)})
4944
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   362
        isession.commit()
65533aee8d0a fix migration when upgrading from cw < 3.6 to cw 3.7
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4843
diff changeset
   363
        session.set_shared_data('do-not-insert-cwuri', False)
2463
5200c0f7d2d5 add migration script for the new cwuri metadata attribute
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2462
diff changeset
   364
2965
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   365
if applcubicwebversion < (3, 5, 0) and cubicwebversion >= (3, 5, 0):
3788
3d5abcd7c852 [migration] warn if 3.5 workflow migration is going to fail
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 3305
diff changeset
   366
    # check that migration is not doomed
3d5abcd7c852 [migration] warn if 3.5 workflow migration is going to fail
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 3305
diff changeset
   367
    rset = rql('Any X,Y WHERE X transition_of E, Y transition_of E, '
3d5abcd7c852 [migration] warn if 3.5 workflow migration is going to fail
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 3305
diff changeset
   368
               'X name N, Y name N, NOT X identity Y',
3d5abcd7c852 [migration] warn if 3.5 workflow migration is going to fail
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 3305
diff changeset
   369
               ask_confirm=False)
3d5abcd7c852 [migration] warn if 3.5 workflow migration is going to fail
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 3305
diff changeset
   370
    if rset:
3d5abcd7c852 [migration] warn if 3.5 workflow migration is going to fail
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 3305
diff changeset
   371
        from logilab.common.shellutils import ASK
3d5abcd7c852 [migration] warn if 3.5 workflow migration is going to fail
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 3305
diff changeset
   372
        if not ASK.confirm('Migration will fail because of transitions with the same name. '
3d5abcd7c852 [migration] warn if 3.5 workflow migration is going to fail
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 3305
diff changeset
   373
                           'Continue anyway ?'):
3d5abcd7c852 [migration] warn if 3.5 workflow migration is going to fail
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 3305
diff changeset
   374
            import sys
3d5abcd7c852 [migration] warn if 3.5 workflow migration is going to fail
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 3305
diff changeset
   375
            sys.exit(1)
3d5abcd7c852 [migration] warn if 3.5 workflow migration is going to fail
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 3305
diff changeset
   376
    # proceed with migration
2965
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   377
    add_entity_type('Workflow')
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   378
    add_entity_type('BaseTransition')
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   379
    add_entity_type('WorkflowTransition')
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   380
    add_entity_type('SubWorkflowExitPoint')
3218
2a4bbe3fa4f3 [3.5 migration] avoid removing defined transitions...
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2965
diff changeset
   381
    # drop explicit 'State allowed_transition Transition' since it should be
2a4bbe3fa4f3 [3.5 migration] avoid removing defined transitions...
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2965
diff changeset
   382
    # infered due to yams inheritance.  However we've to disable the schema
2a4bbe3fa4f3 [3.5 migration] avoid removing defined transitions...
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2965
diff changeset
   383
    # sync hook first to avoid to destroy existing data...
2a4bbe3fa4f3 [3.5 migration] avoid removing defined transitions...
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2965
diff changeset
   384
    try:
3395
405f393bcac0 [migration] fix bootstrap migration of 3.5 : need to support old-style and new-style hooks to migrate from 3.4 to 3.6
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3369
diff changeset
   385
        from cubicweb.hooks import syncschema
405f393bcac0 [migration] fix bootstrap migration of 3.5 : need to support old-style and new-style hooks to migrate from 3.4 to 3.6
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3369
diff changeset
   386
        repo.vreg.unregister(syncschema.AfterDelRelationTypeHook)
405f393bcac0 [migration] fix bootstrap migration of 3.5 : need to support old-style and new-style hooks to migrate from 3.4 to 3.6
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3369
diff changeset
   387
        try:
405f393bcac0 [migration] fix bootstrap migration of 3.5 : need to support old-style and new-style hooks to migrate from 3.4 to 3.6
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3369
diff changeset
   388
            drop_relation_definition('State', 'allowed_transition', 'Transition')
405f393bcac0 [migration] fix bootstrap migration of 3.5 : need to support old-style and new-style hooks to migrate from 3.4 to 3.6
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3369
diff changeset
   389
        finally:
405f393bcac0 [migration] fix bootstrap migration of 3.5 : need to support old-style and new-style hooks to migrate from 3.4 to 3.6
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3369
diff changeset
   390
            repo.vreg.register(syncschema.AfterDelRelationTypeHook)
405f393bcac0 [migration] fix bootstrap migration of 3.5 : need to support old-style and new-style hooks to migrate from 3.4 to 3.6
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3369
diff changeset
   391
    except ImportError: # syncschema is in CW >= 3.6 only
405f393bcac0 [migration] fix bootstrap migration of 3.5 : need to support old-style and new-style hooks to migrate from 3.4 to 3.6
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3369
diff changeset
   392
        from cubicweb.server.schemahooks import after_del_relation_type
405f393bcac0 [migration] fix bootstrap migration of 3.5 : need to support old-style and new-style hooks to migrate from 3.4 to 3.6
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3369
diff changeset
   393
        repo.hm.unregister_hook(after_del_relation_type,
405f393bcac0 [migration] fix bootstrap migration of 3.5 : need to support old-style and new-style hooks to migrate from 3.4 to 3.6
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3369
diff changeset
   394
                                'after_delete_relation', 'relation_type')
405f393bcac0 [migration] fix bootstrap migration of 3.5 : need to support old-style and new-style hooks to migrate from 3.4 to 3.6
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3369
diff changeset
   395
        try:
405f393bcac0 [migration] fix bootstrap migration of 3.5 : need to support old-style and new-style hooks to migrate from 3.4 to 3.6
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3369
diff changeset
   396
            drop_relation_definition('State', 'allowed_transition', 'Transition')
405f393bcac0 [migration] fix bootstrap migration of 3.5 : need to support old-style and new-style hooks to migrate from 3.4 to 3.6
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3369
diff changeset
   397
        finally:
405f393bcac0 [migration] fix bootstrap migration of 3.5 : need to support old-style and new-style hooks to migrate from 3.4 to 3.6
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3369
diff changeset
   398
            repo.hm.register_hook(after_del_relation_type,
405f393bcac0 [migration] fix bootstrap migration of 3.5 : need to support old-style and new-style hooks to migrate from 3.4 to 3.6
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3369
diff changeset
   399
                                  'after_delete_relation', 'relation_type')
2965
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   400
    schema.rebuild_infered_relations() # need to be explicitly called once everything is in place
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   401
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   402
    for et in rql('DISTINCT Any ET,ETN WHERE S state_of ET, ET name ETN',
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   403
                  ask_confirm=False).entities():
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   404
        wf = add_workflow(u'default %s workflow' % et.name, et.name,
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   405
                          ask_confirm=False)
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   406
        rql('SET S state_of WF WHERE S state_of ET, ET eid %(et)s, WF eid %(wf)s',
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   407
            {'et': et.eid, 'wf': wf.eid}, 'et', ask_confirm=False)
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   408
        rql('SET T transition_of WF WHERE T transition_of ET, ET eid %(et)s, WF eid %(wf)s',
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   409
            {'et': et.eid, 'wf': wf.eid}, 'et', ask_confirm=False)
3305
abae9045d2e4 [migration] fix initial_state migration: at this point, S state_of ET is no more true (but we don't need it...)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3218
diff changeset
   410
        rql('SET WF initial_state S WHERE ET initial_state S, ET eid %(et)s, WF eid %(wf)s',
2965
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   411
            {'et': et.eid, 'wf': wf.eid}, 'et', ask_confirm=False)
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   412
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   413
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   414
    rql('DELETE TrInfo TI WHERE NOT TI from_state S')
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   415
    rql('SET TI by_transition T WHERE TI from_state FS, TI to_state TS, '
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   416
        'FS allowed_transition T, T destination_state TS')
4042
f85a4c846aad 3.6 api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4011
diff changeset
   417
    commit()
2965
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   418
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   419
    drop_relation_definition('State', 'state_of', 'CWEType')
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   420
    drop_relation_definition('Transition', 'transition_of', 'CWEType')
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   421
    drop_relation_definition('CWEType', 'initial_state', 'State')
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   422
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   423
    sync_schema_props_perms()
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   424
1952
8e19c813750d fix extid handling: ensure encoded string is given, and store them as base64 (see note in native.py).
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1501
diff changeset
   425
if applcubicwebversion < (3, 2, 2) and cubicwebversion >= (3, 2, 1):
2462
9e670072884d fix indentation problems in bootstrap_migration (use 4 spaces instead of 3)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2275
diff changeset
   426
    from base64 import b64encode
9450
af4b93bc38a5 [multi-sources-removal] Drop deleted_entities system table and entities.mtime column
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9163
diff changeset
   427
    for eid, extid in sql('SELECT eid, extid FROM entities '
af4b93bc38a5 [multi-sources-removal] Drop deleted_entities system table and entities.mtime column
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9163
diff changeset
   428
                          'WHERE extid is NOT NULL',
af4b93bc38a5 [multi-sources-removal] Drop deleted_entities system table and entities.mtime column
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9163
diff changeset
   429
                          ask_confirm=False):
af4b93bc38a5 [multi-sources-removal] Drop deleted_entities system table and entities.mtime column
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9163
diff changeset
   430
        sql('UPDATE entities SET extid=%(extid)s WHERE eid=%(eid)s',
af4b93bc38a5 [multi-sources-removal] Drop deleted_entities system table and entities.mtime column
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9163
diff changeset
   431
            {'extid': b64encode(extid), 'eid': eid}, ask_confirm=False)
4042
f85a4c846aad 3.6 api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4011
diff changeset
   432
    commit()
1952
8e19c813750d fix extid handling: ensure encoded string is given, and store them as base64 (see note in native.py).
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1501
diff changeset
   433
1501
c80ca83a382f migrate card cube in bootstrap migration
sylvain.thenault@logilab.fr
parents: 1399
diff changeset
   434
if applcubicwebversion < (3, 2, 0) and cubicwebversion >= (3, 2, 0):
2462
9e670072884d fix indentation problems in bootstrap_migration (use 4 spaces instead of 3)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2275
diff changeset
   435
    add_cube('card', update_database=False)
10015
57a16bef82c0 [migration] make sure the repo knows about all constraint types
Julien Cristau <julien.cristau@logilab.fr>
parents: 9708
diff changeset
   436
10553
1d824df4f2bd Fix (de)serialization of ComputedRelation read permissions
Julien Cristau <julien.cristau@logilab.fr>
parents: 10301
diff changeset
   437
1d824df4f2bd Fix (de)serialization of ComputedRelation read permissions
Julien Cristau <julien.cristau@logilab.fr>
parents: 10301
diff changeset
   438
if applcubicwebversion < (3, 21, 1) and cubicwebversion >= (3, 21, 1):
1d824df4f2bd Fix (de)serialization of ComputedRelation read permissions
Julien Cristau <julien.cristau@logilab.fr>
parents: 10301
diff changeset
   439
    add_relation_definition('CWComputedRType', 'read_permission', 'CWGroup')
1d824df4f2bd Fix (de)serialization of ComputedRelation read permissions
Julien Cristau <julien.cristau@logilab.fr>
parents: 10301
diff changeset
   440
    add_relation_definition('CWComputedRType', 'read_permission', 'RQLExpression')
1d824df4f2bd Fix (de)serialization of ComputedRelation read permissions
Julien Cristau <julien.cristau@logilab.fr>
parents: 10301
diff changeset
   441
1d824df4f2bd Fix (de)serialization of ComputedRelation read permissions
Julien Cristau <julien.cristau@logilab.fr>
parents: 10301
diff changeset
   442
10015
57a16bef82c0 [migration] make sure the repo knows about all constraint types
Julien Cristau <julien.cristau@logilab.fr>
parents: 9708
diff changeset
   443
def sync_constraint_types():
57a16bef82c0 [migration] make sure the repo knows about all constraint types
Julien Cristau <julien.cristau@logilab.fr>
parents: 9708
diff changeset
   444
    """Make sure the repository knows about all constraint types defined in the code"""
57a16bef82c0 [migration] make sure the repo knows about all constraint types
Julien Cristau <julien.cristau@logilab.fr>
parents: 9708
diff changeset
   445
    from cubicweb.schema import CONSTRAINTS
57a16bef82c0 [migration] make sure the repo knows about all constraint types
Julien Cristau <julien.cristau@logilab.fr>
parents: 9708
diff changeset
   446
    repo_constraints = set(row[0] for row in rql('Any N WHERE X is CWConstraintType, X name N'))
57a16bef82c0 [migration] make sure the repo knows about all constraint types
Julien Cristau <julien.cristau@logilab.fr>
parents: 9708
diff changeset
   447
57a16bef82c0 [migration] make sure the repo knows about all constraint types
Julien Cristau <julien.cristau@logilab.fr>
parents: 9708
diff changeset
   448
    for cstrtype in set(CONSTRAINTS) - repo_constraints:
57a16bef82c0 [migration] make sure the repo knows about all constraint types
Julien Cristau <julien.cristau@logilab.fr>
parents: 9708
diff changeset
   449
        if cstrtype == 'BoundConstraint':
57a16bef82c0 [migration] make sure the repo knows about all constraint types
Julien Cristau <julien.cristau@logilab.fr>
parents: 9708
diff changeset
   450
            # was renamed to BoundaryConstraint, we don't need the old name
57a16bef82c0 [migration] make sure the repo knows about all constraint types
Julien Cristau <julien.cristau@logilab.fr>
parents: 9708
diff changeset
   451
            continue
57a16bef82c0 [migration] make sure the repo knows about all constraint types
Julien Cristau <julien.cristau@logilab.fr>
parents: 9708
diff changeset
   452
        rql('INSERT CWConstraintType X: X name %(name)s', {'name': cstrtype})
57a16bef82c0 [migration] make sure the repo knows about all constraint types
Julien Cristau <julien.cristau@logilab.fr>
parents: 9708
diff changeset
   453
57a16bef82c0 [migration] make sure the repo knows about all constraint types
Julien Cristau <julien.cristau@logilab.fr>
parents: 9708
diff changeset
   454
    commit()
57a16bef82c0 [migration] make sure the repo knows about all constraint types
Julien Cristau <julien.cristau@logilab.fr>
parents: 9708
diff changeset
   455
57a16bef82c0 [migration] make sure the repo knows about all constraint types
Julien Cristau <julien.cristau@logilab.fr>
parents: 9708
diff changeset
   456
sync_constraint_types()