misc/scripts/repair_file_1-9_migration.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Fri, 25 Oct 2013 12:23:06 +0200
branchstable
changeset 9324 a5ce068143ad
parent 8694 d901c36bcfce
child 9460 a2a0bc984863
permissions -rw-r--r--
[rql2sql] fix relation table scope when some variable from subquery is used. Closes #3252270 While it feels weird to drop this explicit ColumnAlias handling, hg history has no clue on its introduction (prior to rev 0) and no older test case fails without it, so let's drop it.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6001
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     1
"""execute this script if you've migration to file >= 1.9.0 with cubicweb <= 3.9.2
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     2
6109
47d9c0e0f7b7 integrate Celso's work on translation file: proper/complete spanish translation, fixed some typos in french translation, occured -> occurred fix in various places
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6001
diff changeset
     3
FYI, this migration occurred :
6001
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     4
* on our intranet on July 07 2010
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     5
* on our extranet on July 16 2010
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     6
"""
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     7
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     8
try:
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     9
    backupinstance, = __args__
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    10
except ValueError:
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    11
    print 'USAGE: cubicweb-ctl shell <instance> repair_file_1-9_migration.py -- <backup instance id>'
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    12
    print
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    13
    print 'you should restored the backup on a new instance, accessible through pyro'
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    14
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    15
from cubicweb import cwconfig, dbapi
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    16
from cubicweb.server.session import hooks_control
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    17
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    18
sourcescfg = repo.config.sources()
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    19
backupcfg = cwconfig.instance_configuration(backupinstance)
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    20
backupcfg.repairing = True
7056
51f88f13d6f3 [dbapi] split in_memory_cnx functions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6109
diff changeset
    21
backuprepo, backupcnx = dbapi.in_memory_repo_cnx(backupcfg, sourcescfg['admin']['login'],
51f88f13d6f3 [dbapi] split in_memory_cnx functions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6109
diff changeset
    22
                                                 password=sourcescfg['admin']['password'],
51f88f13d6f3 [dbapi] split in_memory_cnx functions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6109
diff changeset
    23
                                                 host='localhost')
6001
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    24
backupcu = backupcnx.cursor()
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    25
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    26
with hooks_control(session, session.HOOKS_DENY_ALL):
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    27
    rql('SET X is Y WHERE X is File, Y name "File", NOT X is Y')
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    28
    rql('SET X is_instance_of Y WHERE X is File, Y name "File", NOT X is_instance_of Y')
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    29
    for rtype, in backupcu.execute('DISTINCT Any RTN WHERE X relation_type RT, RT name RTN,'
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    30
                                   'X from_entity Y, Y name "Image", X is CWRelation, '
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    31
                                   'EXISTS(XX is CWRelation, XX relation_type RT, '
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    32
                                   'XX from_entity YY, YY name "File")'):
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    33
        if rtype in ('is', 'is_instance_of'):
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    34
            continue
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    35
        print rtype
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    36
        for feid, xeid in backupcu.execute('Any F,X WHERE F %s X, F is IN (File,Image)' % rtype):
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    37
            print 'restoring relation %s between file %s and %s' % (rtype, feid, xeid),
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    38
            print rql('SET F %s X WHERE F eid %%(f)s, X eid %%(x)s, NOT F %s X' % (rtype, rtype),
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    39
                      {'f': feid, 'x': xeid})
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    40
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    41
    for rtype, in backupcu.execute('DISTINCT Any RTN WHERE X relation_type RT, RT name RTN,'
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    42
                                   'X to_entity Y, Y name "Image", X is CWRelation, '
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    43
                                   'EXISTS(XX is CWRelation, XX relation_type RT, '
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    44
                                   'XX to_entity YY, YY name "File")'):
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    45
        print rtype
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    46
        for feid, xeid in backupcu.execute('Any F,X WHERE X %s F, F is IN (File,Image)' % rtype):
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    47
            print 'restoring relation %s between %s and file %s' % (rtype, xeid, feid),
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    48
            print rql('SET X %s F WHERE F eid %%(f)s, X eid %%(x)s, NOT X %s F' % (rtype, rtype),
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    49
                      {'f': feid, 'x': xeid})
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    50
1a21d7d2c959 [migration] add script to repair instances which have lost some relation due to 3.9 + file 1.9 migration (bad Image -> File entity type renaming)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    51
commit()