cubicweb/misc/migration/bootstrapmigration_repository.py
author Arthur Lutz <arthur.lutz@logilab.fr>
Fri, 31 Jan 2020 16:52:24 +0100
branch3.27
changeset 12861 1983923e51cc
parent 12715 d59570643a49
permissions -rw-r--r--
[doc/book/admin/setup] forget about easy_install
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11767
432f87a63057 flake8 and all
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11763
diff changeset
     1
# copyright 2003-2016 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/>.
11767
432f87a63057 flake8 and all
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11763
diff changeset
    18
"""Always executed before all others in server migration
0
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
"""
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
    22
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
    23
from cubicweb.server import schemaserial as ss
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    24
2275
bc0bed0616a3 fix #344387, remember upgraded version step by step
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
    25
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
    26
4570
ede247bbbf62 follow yams api change: attributes permissions are now defined for
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    27
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
    28
    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
    29
    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
    30
    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
    31
    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
    32
    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
    33
    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
    34
    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
    35
9585
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
    36
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
    37
    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
    38
    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
    39
    try:
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.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
    41
        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
    42
    except: # programming error, already migrated
11246
ceb0e8e9129e [migration] add rollback when replace_eid_sequence_with_eid_numrange fails
Julien Cristau <julien.cristau@logilab.fr>
parents: 11245
diff changeset
    43
        session.rollback()
9585
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
    44
        return
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
    45
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
    46
    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
    47
    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
    48
    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
    49
    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
    50
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
    51
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
    52
    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
    53
        # 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
    54
        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
    55
        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
    56
        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
    57
    except: # programming error, already migrated
10589
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 10553
diff changeset
    58
        print("Failed to drop mtime or source database columns")
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 10553
diff changeset
    59
        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
    60
b36bc18f6ef7 [migration] move 'entities' table changes from 3.19.0 to bootstrap script
Julien Cristau <julien.cristau@logilab.fr>
parents: 9585
diff changeset
    61
    commit()
b36bc18f6ef7 [migration] move 'entities' table changes from 3.19.0 to bootstrap script
Julien Cristau <julien.cristau@logilab.fr>
parents: 9585
diff changeset
    62
9585
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9543
diff changeset
    63
    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
    64
10270
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    65
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    66
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
    67
    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
    68
    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
    69
        import sys
10589
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 10553
diff changeset
    70
        print('This migration is not supported for backends other than sqlserver or postgres (yet).', file=sys.stderr)
10270
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    71
        sys.exit(1)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    72
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    73
    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
    74
    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
    75
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    76
    # 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
    77
    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
    78
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    79
    # 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
    80
    # 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
    81
    # things later.
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    82
    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
    83
    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
    84
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    85
    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
    86
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    87
    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
    88
        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
    89
        import yams
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    90
        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
    91
        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
    92
            return
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    93
        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
    94
            # 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
    95
            return default
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    96
        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
    97
        if atype == 'Boolean':
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
    98
            # 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
    99
            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
   100
            default = default == 'True'
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   101
        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
   102
            default = int(default)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   103
        elif atype == 'Float':
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   104
            default = float(default)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   105
        elif atype == 'Decimal':
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   106
            default = Decimal(default)
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   107
        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
   108
            try:
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   109
                # 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
   110
                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
   111
                default = default.upper()
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   112
            except KeyError:
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   113
                # 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
   114
                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
   115
        else:
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   116
            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
   117
        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
   118
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   119
    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
   120
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   121
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   122
    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
   123
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   124
    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
   125
        olddefault = cwattr.defaultval
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   126
        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
   127
            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
   128
            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
   129
            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
   130
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   131
    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
   132
    if driver == 'postgres':
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   133
        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
   134
    else: # sqlserver
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   135
        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
   136
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   137
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   138
    # 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
   139
    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
   140
        '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
   141
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   142
    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
   143
    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
   144
    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
   145
    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
   146
    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
   147
    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
   148
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   149
    commit()
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   150
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   151
    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
   152
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   153
    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
   154
        if rschema.symmetric:
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   155
            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
   156
            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
   157
            assert subjects == objects
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   158
            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
   159
                                               (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
   160
            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
   161
                                                (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
   162
            if martians:
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   163
                martians = ','.join(martians)
10589
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 10553
diff changeset
   164
                print('deleting broken relations %s for eids %s' % (rschema.type, martians))
10270
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   165
                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
   166
            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
   167
                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
   168
            commit()
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   169
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   170
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   171
    # 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
   172
    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
   173
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   174
    # 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
   175
    # 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
   176
    # 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
   177
    #    yet been added
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   178
    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
   179
        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
   180
    commit()
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   181
    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
   182
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   183
    # 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
   184
    if driver == 'postgres':
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   185
        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
   186
            if indexname.startswith('unique_'):
10589
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 10553
diff changeset
   187
                print('dropping index', indexname)
10270
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   188
                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
   189
        commit()
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   190
    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
   191
        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
   192
            if viewname.startswith('utv_'):
10589
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 10553
diff changeset
   193
                print('dropping view (index should be cascade-deleted)', viewname)
10270
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   194
                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
   195
        commit()
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   196
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   197
    # 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
   198
    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
   199
        if eschema._unique_together:
10589
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 10553
diff changeset
   200
            print('recreate unique indexes for', eschema)
10270
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   201
            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
   202
            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
   203
                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
   204
                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
   205
    commit()
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   206
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   207
    # 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
   208
    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
   209
        if rschema.final:
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   210
            if rschema.type in fsschema:
10589
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 10553
diff changeset
   211
                print('sync perms for', rschema.type)
10270
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   212
                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
   213
            else:
10589
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 10553
diff changeset
   214
                print('WARNING: attribute %s missing from fs schema' % rschema.type)
10270
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
8800
8ca1a0da5a29 [web/views] extract cube sioc (closes #1916018)
Simon Chabot <simon.chabot@logilab.fr>
parents: 8696
diff changeset
   217
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
   218
    try:
8ca1a0da5a29 [web/views] extract cube sioc (closes #1916018)
Simon Chabot <simon.chabot@logilab.fr>
parents: 8696
diff changeset
   219
        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
   220
    except ConfigurationError:
8800
8ca1a0da5a29 [web/views] extract cube sioc (closes #1916018)
Simon Chabot <simon.chabot@logilab.fr>
parents: 8696
diff changeset
   221
        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
   222
                       '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
   223
            raise
8803
47dd517d6c6f [web/views] extract cube embed (closes #1916015)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents: 8800
diff changeset
   224
    try:
47dd517d6c6f [web/views] extract cube embed (closes #1916015)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents: 8800
diff changeset
   225
        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
   226
    except ConfigurationError:
8803
47dd517d6c6f [web/views] extract cube embed (closes #1916015)
Vladimir Popescu <vladimir.popescu@logilab.fr>
parents: 8800
diff changeset
   227
        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
   228
                       '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
   229
            raise
8830
7fd6c52ef878 [web/views] extract cube geocoding (closes #353000)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8803
diff changeset
   230
    try:
7fd6c52ef878 [web/views] extract cube geocoding (closes #353000)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8803
diff changeset
   231
        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
   232
    except ConfigurationError:
8830
7fd6c52ef878 [web/views] extract cube geocoding (closes #353000)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8803
diff changeset
   233
        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
   234
                       '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
   235
            raise
8800
8ca1a0da5a29 [web/views] extract cube sioc (closes #1916018)
Simon Chabot <simon.chabot@logilab.fr>
parents: 8696
diff changeset
   236
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
   237
7797
a71618a75b53 backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7782
diff changeset
   238
if applcubicwebversion <= (3, 14, 0) and cubicwebversion >= (3, 14, 0):
a71618a75b53 backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7782
diff changeset
   239
    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
   240
        from cubicweb import ExecutionError
a71618a75b53 backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7782
diff changeset
   241
        try:
a71618a75b53 backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7782
diff changeset
   242
            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
   243
        except ConfigurationError:
7797
a71618a75b53 backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7782
diff changeset
   244
            raise ExecutionError('In cubicweb 3.14, CWPermission and related stuff '
a71618a75b53 backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7782
diff changeset
   245
                                 'has been moved to cube localperms. Install it first.')
a71618a75b53 backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7782
diff changeset
   246
10270
1ae64186af94 [migration] reorder system tables / meta-schema migration into bootstrap_migration
Erica Marco <erica.marco@logilab.fr>
parents: 10058
diff changeset
   247
4570
ede247bbbf62 follow yams api change: attributes permissions are now defined for
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   248
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
   249
    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
   250
                       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
   251
    _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
   252
    _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
   253
    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
   254
    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
   255
    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
   256
ede247bbbf62 follow yams api change: attributes permissions are now defined for
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   257
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
   258
    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
   259
                       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
   260
    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
   261
    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
   262
12715
d59570643a49 Avoid using gone hooks_control() in migration
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12567
diff changeset
   263
    with session.allow_all_hooks_but('integrity'):
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
   264
        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
   265
            rpermsdict = permsdict.get(rschema.eid, {})
10663
54b8a1f249fb [py3k] dict.itervalues → dict.values
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10589
diff changeset
   266
            for rdef in rschema.rdefs.values():
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
   267
                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
   268
                    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
   269
                    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
   270
                        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
   271
                            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
   272
                        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
   273
                            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
   274
                    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
   275
        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
   276
            _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
   277
            _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
   278
        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
   279
            _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
   280
            _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
   281
        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
   282
            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
   283
                '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
   284
            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
   285
                '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
   286
                '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
   287
                '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
   288
        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
   289
            '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
   290
        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
   291
            '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
   292
            '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
   293
            '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
   294
        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
   295
            '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
   296
        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
   297
            '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
   298
            '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
   299
            '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
   300
        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
   301
            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
   302
            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
   303
    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
   304
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
   305
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
   306
    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
   307
6896
784d5df35af1 [migration] cwunique constraint schema fix must be done in bootstrap migration
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6222
diff changeset
   308
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
   309
    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
   310
    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
   311
    commit()
784d5df35af1 [migration] cwunique constraint schema fix must be done in bootstrap migration
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6222
diff changeset
   312
    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
   313
    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
   314
2965
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   315
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
   316
    # 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
   317
    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
   318
               '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
   319
               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
   320
    if rset:
3d5abcd7c852 [migration] warn if 3.5 workflow migration is going to fail
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 3305
diff changeset
   321
        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
   322
        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
   323
                           'Continue anyway ?'):
3d5abcd7c852 [migration] warn if 3.5 workflow migration is going to fail
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 3305
diff changeset
   324
            import sys
3d5abcd7c852 [migration] warn if 3.5 workflow migration is going to fail
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 3305
diff changeset
   325
            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
   326
    # proceed with migration
2965
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   327
    add_entity_type('Workflow')
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   328
    add_entity_type('BaseTransition')
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   329
    add_entity_type('WorkflowTransition')
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   330
    add_entity_type('SubWorkflowExitPoint')
3218
2a4bbe3fa4f3 [3.5 migration] avoid removing defined transitions...
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2965
diff changeset
   331
    # 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
   332
    # 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
   333
    # 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
   334
    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
   335
        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
   336
        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
   337
        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
   338
            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
   339
        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
   340
            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
   341
    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
   342
        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
   343
        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
   344
                                '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
   345
        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
   346
            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
   347
        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
   348
            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
   349
                                  'after_delete_relation', 'relation_type')
2965
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   350
    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
   351
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   352
    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
   353
                  ask_confirm=False).entities():
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   354
        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
   355
                          ask_confirm=False)
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   356
        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
   357
            {'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
   358
        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
   359
            {'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
   360
        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
   361
            {'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
   362
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   363
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   364
    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
   365
    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
   366
        '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
   367
    commit()
2965
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   368
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   369
    drop_relation_definition('State', 'state_of', 'CWEType')
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   370
    drop_relation_definition('Transition', 'transition_of', 'CWEType')
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   371
    drop_relation_definition('CWEType', 'initial_state', 'State')
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   372
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   373
    sync_schema_props_perms()
75ad5cb00b88 3.5 migration script
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2955
diff changeset
   374
1501
c80ca83a382f migrate card cube in bootstrap migration
sylvain.thenault@logilab.fr
parents: 1399
diff changeset
   375
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
   376
    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
   377
11245
20b2e7ceecf6 [migration] move CWComputedRType later
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   378
if applcubicwebversion < (3, 20, 0) and cubicwebversion >= (3, 20, 0):
20b2e7ceecf6 [migration] move CWComputedRType later
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   379
    ss._IGNORED_PROPS.append('formula')
20b2e7ceecf6 [migration] move CWComputedRType later
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   380
    add_attribute('CWAttribute', 'formula', commit=False)
20b2e7ceecf6 [migration] move CWComputedRType later
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   381
    ss._IGNORED_PROPS.remove('formula')
20b2e7ceecf6 [migration] move CWComputedRType later
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   382
    commit()
20b2e7ceecf6 [migration] move CWComputedRType later
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   383
    add_entity_type('CWComputedRType')
20b2e7ceecf6 [migration] move CWComputedRType later
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   384
    commit()
20b2e7ceecf6 [migration] move CWComputedRType later
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   385
20b2e7ceecf6 [migration] move CWComputedRType later
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   386
if schema['TZDatetime'].eid is None:
20b2e7ceecf6 [migration] move CWComputedRType later
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   387
    add_entity_type('TZDatetime', auto=False)
20b2e7ceecf6 [migration] move CWComputedRType later
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   388
if schema['TZTime'].eid is None:
20b2e7ceecf6 [migration] move CWComputedRType later
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   389
    add_entity_type('TZTime', auto=False)
20b2e7ceecf6 [migration] move CWComputedRType later
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   390
10553
1d824df4f2bd Fix (de)serialization of ComputedRelation read permissions
Julien Cristau <julien.cristau@logilab.fr>
parents: 10301
diff changeset
   391
1d824df4f2bd Fix (de)serialization of ComputedRelation read permissions
Julien Cristau <julien.cristau@logilab.fr>
parents: 10301
diff changeset
   392
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
   393
    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
   394
    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
   395
1d824df4f2bd Fix (de)serialization of ComputedRelation read permissions
Julien Cristau <julien.cristau@logilab.fr>
parents: 10301
diff changeset
   396
10015
57a16bef82c0 [migration] make sure the repo knows about all constraint types
Julien Cristau <julien.cristau@logilab.fr>
parents: 9708
diff changeset
   397
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
   398
    """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
   399
    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
   400
    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
   401
57a16bef82c0 [migration] make sure the repo knows about all constraint types
Julien Cristau <julien.cristau@logilab.fr>
parents: 9708
diff changeset
   402
    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
   403
        if cstrtype == 'BoundConstraint':
57a16bef82c0 [migration] make sure the repo knows about all constraint types
Julien Cristau <julien.cristau@logilab.fr>
parents: 9708
diff changeset
   404
            # 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
   405
            continue
57a16bef82c0 [migration] make sure the repo knows about all constraint types
Julien Cristau <julien.cristau@logilab.fr>
parents: 9708
diff changeset
   406
        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
   407
57a16bef82c0 [migration] make sure the repo knows about all constraint types
Julien Cristau <julien.cristau@logilab.fr>
parents: 9708
diff changeset
   408
    commit()
57a16bef82c0 [migration] make sure the repo knows about all constraint types
Julien Cristau <julien.cristau@logilab.fr>
parents: 9708
diff changeset
   409
57a16bef82c0 [migration] make sure the repo knows about all constraint types
Julien Cristau <julien.cristau@logilab.fr>
parents: 9708
diff changeset
   410
sync_constraint_types()