misc/migration/3.10.9_Any.py
author Nicolas Chauvat <nicolas.chauvat@logilab.fr>
Wed, 28 Mar 2012 22:24:55 +0200
branchstable
changeset 8330 e69832f9b3af
parent 7550 183a61d1bab9
child 8694 d901c36bcfce
permissions -rw-r--r--
[doc] fix bad indentation
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7026
2c65dd2cbfff [migration] missing future import
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6955
diff changeset
     1
from __future__ import with_statement
7050
3f2857704444 [3.10.9 migration] don't display progress bar if stdout is not a tty
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7034
diff changeset
     2
import sys
7032
b712477ae286 [config] fix option group clash causing anonymous user configuration to end in the MAIN section instead of the WEB section if cubicweb-dev is installed
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7026
diff changeset
     3
7104
62c880e5d980 [migration] explicit first step of 3.10.9 migration.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7050
diff changeset
     4
62c880e5d980 [migration] explicit first step of 3.10.9 migration.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7050
diff changeset
     5
if confirm('fix some corrupted entities noticed on several instances?'):
62c880e5d980 [migration] explicit first step of 3.10.9 migration.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7050
diff changeset
     6
    rql('DELETE CWConstraint X WHERE NOT E constrained_by X')
62c880e5d980 [migration] explicit first step of 3.10.9 migration.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7050
diff changeset
     7
    rql('SET X is_instance_of Y WHERE X is Y, NOT X is_instance_of Y')
62c880e5d980 [migration] explicit first step of 3.10.9 migration.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7050
diff changeset
     8
    commit()
7034
1ac9715876e3 [migration] cleanup corrupted database, pb noticed on several instances
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7032
diff changeset
     9
6955
a6c32edabc8d [entity, metadata] huuum, use resolvable url as cwuri... And fix existing ones.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    10
if confirm('fix existing cwuri?'):
7105
aefd1776122f [migration] improve fix cwuri progress bar
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7104
diff changeset
    11
    from logilab.common.shellutils import progress
6955
a6c32edabc8d [entity, metadata] huuum, use resolvable url as cwuri... And fix existing ones.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    12
    from cubicweb.server.session import hooks_control
a6c32edabc8d [entity, metadata] huuum, use resolvable url as cwuri... And fix existing ones.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    13
    rset = rql('Any X, XC WHERE X cwuri XC, X cwuri ~= "%/eid/%"')
7550
183a61d1bab9 [3.10] fix typo and error for pre 3.10 migration w/ postgres: we *must* call init_creating else the fti isn't correctly initialized, which may lead to silently rollbacked transaction
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7261
diff changeset
    14
    title = "%i entities to fix" % len(rset)
7105
aefd1776122f [migration] improve fix cwuri progress bar
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7104
diff changeset
    15
    nbops = rset.rowcount
aefd1776122f [migration] improve fix cwuri progress bar
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7104
diff changeset
    16
    enabled = interactive_mode
aefd1776122f [migration] improve fix cwuri progress bar
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7104
diff changeset
    17
    with progress(title=title, nbops=nbops, size=30, enabled=enabled) as pb:
7261
1d1446e9dfe2 place the disable hooks context manager at the right place (closes: #1626694)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7106
diff changeset
    18
        for i,  row in enumerate(rset):
1d1446e9dfe2 place the disable hooks context manager at the right place (closes: #1626694)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7106
diff changeset
    19
            with hooks_control(session, session.HOOKS_DENY_ALL, 'integrity'):
7106
63f0bc280354 [migration] Lesser memory consumption of cwuri fix + actually commit every 100 processed entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7105
diff changeset
    20
                data = {'eid': row[0], 'cwuri': row[1].replace(u'/eid', u'')}
63f0bc280354 [migration] Lesser memory consumption of cwuri fix + actually commit every 100 processed entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7105
diff changeset
    21
                rql('SET X cwuri %(cwuri)s WHERE X eid %(eid)s', data)
7261
1d1446e9dfe2 place the disable hooks context manager at the right place (closes: #1626694)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7106
diff changeset
    22
            if not i % 100: # commit every 100 entities to limit memory consumption
1d1446e9dfe2 place the disable hooks context manager at the right place (closes: #1626694)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7106
diff changeset
    23
                pb.text = "%i committed" % i
1d1446e9dfe2 place the disable hooks context manager at the right place (closes: #1626694)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7106
diff changeset
    24
                commit(ask_confirm=False)
1d1446e9dfe2 place the disable hooks context manager at the right place (closes: #1626694)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7106
diff changeset
    25
            pb.update()
7105
aefd1776122f [migration] improve fix cwuri progress bar
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7104
diff changeset
    26
        commit(ask_confirm=False)
7032
b712477ae286 [config] fix option group clash causing anonymous user configuration to end in the MAIN section instead of the WEB section if cubicweb-dev is installed
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7026
diff changeset
    27
b712477ae286 [config] fix option group clash causing anonymous user configuration to end in the MAIN section instead of the WEB section if cubicweb-dev is installed
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7026
diff changeset
    28
try:
b712477ae286 [config] fix option group clash causing anonymous user configuration to end in the MAIN section instead of the WEB section if cubicweb-dev is installed
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7026
diff changeset
    29
    from cubicweb import devtools
b712477ae286 [config] fix option group clash causing anonymous user configuration to end in the MAIN section instead of the WEB section if cubicweb-dev is installed
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7026
diff changeset
    30
    option_group_changed('anonymous-user', 'main', 'web')
b712477ae286 [config] fix option group clash causing anonymous user configuration to end in the MAIN section instead of the WEB section if cubicweb-dev is installed
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7026
diff changeset
    31
    option_group_changed('anonymous-password', 'main', 'web')
b712477ae286 [config] fix option group clash causing anonymous user configuration to end in the MAIN section instead of the WEB section if cubicweb-dev is installed
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7026
diff changeset
    32
except ImportError:
b712477ae286 [config] fix option group clash causing anonymous user configuration to end in the MAIN section instead of the WEB section if cubicweb-dev is installed
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7026
diff changeset
    33
    # cubicweb-dev unavailable, nothing needed
b712477ae286 [config] fix option group clash causing anonymous user configuration to end in the MAIN section instead of the WEB section if cubicweb-dev is installed
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7026
diff changeset
    34
    pass