misc/scripts/repair_file_1-9_migration.py
author Aurelien Campeas <aurelien.campeas@logilab.fr>
Tue, 27 May 2014 18:47:24 +0200
changeset 10087 ed0b076c119b
parent 9460 a2a0bc984863
child 10589 7c23b7de2b8d
permissions -rw-r--r--
[rset] kill the rset._rqlst cache Right now it "works" for the standard, internal uses. However when we will fold ClientConnection and Connection, it will hurt, because suddenly we get more cache hits, and the following situation would become commonplace: * there is an un-annotated _rqlst given by the querier * some view (e.g. facets) requests the .syntax_tree, which takes a copy of _rqlst * the view actually expects the rql syntax tree to be annotated, but it was not, hence we crash. Related to #3837233.
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
9460
a2a0bc984863 [config] cleanup/refactor server sources file values handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8694
diff changeset
    18
defaultadmin = repo.config.default_admin_config
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
    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
9460
a2a0bc984863 [config] cleanup/refactor server sources file values handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8694
diff changeset
    21
backuprepo, backupcnx = dbapi.in_memory_repo_cnx(backupcfg, defaultadmin['login'],
a2a0bc984863 [config] cleanup/refactor server sources file values handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8694
diff changeset
    22
                                                 password=defaultadmin['password'],
7056
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()