misc/migration/3.10.9_Any.py
author Pierre-Yves David <pierre-yves.david@logilab.fr>
Tue, 27 Nov 2012 11:27:49 +0100
branchstable
changeset 8600 d74addac92bb
parent 7550 183a61d1bab9
child 8694 d901c36bcfce
permissions -rw-r--r--
[downloadable] fix filename in HTTP header (closes #2522325, #2522324) Before this changeset we use the `filename` header with utf8 encoded filename all the time. However RFC6266 says: The parameters "filename" and "filename*" differ only in that "filename*" uses the encoding defined in [RFC5987], allowing the use of characters not present in the ISO-8859-1 character set ([ISO-8859-1]). Therefore, we alter the code to: 1. Use `filename` and `ascii` encoding whenever possible, 2. use `filename*` with `utf8` encoding otherwise (with a filename fallback for old browser) We also switch the `content-disposition` value to attachement if filename is specified, this will result as a mandatory download according to RFC6266. This mandatory download is the expected behavior. We changes the filename encoding to RFC5987 which is simpler, supported by all and modern browser (including IE from version 6) and does not suffer from the continuation issue. (see ticket #2522324 for details)
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