cubicweb/misc/migration/3.10.9_Any.py
changeset 11057 0b59724cb3f2
parent 8694 d901c36bcfce
child 11279 e4f11ef1face
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cubicweb/misc/migration/3.10.9_Any.py	Sat Jan 16 13:48:51 2016 +0100
@@ -0,0 +1,32 @@
+import sys
+
+if confirm('fix some corrupted entities noticed on several instances?'):
+    rql('DELETE CWConstraint X WHERE NOT E constrained_by X')
+    rql('SET X is_instance_of Y WHERE X is Y, NOT X is_instance_of Y')
+    commit()
+
+if confirm('fix existing cwuri?'):
+    from logilab.common.shellutils import progress
+    from cubicweb.server.session import hooks_control
+    rset = rql('Any X, XC WHERE X cwuri XC, X cwuri ~= "%/eid/%"')
+    title = "%i entities to fix" % len(rset)
+    nbops = rset.rowcount
+    enabled = interactive_mode
+    with progress(title=title, nbops=nbops, size=30, enabled=enabled) as pb:
+        for i,  row in enumerate(rset):
+            with hooks_control(session, session.HOOKS_DENY_ALL, 'integrity'):
+                data = {'eid': row[0], 'cwuri': row[1].replace(u'/eid', u'')}
+                rql('SET X cwuri %(cwuri)s WHERE X eid %(eid)s', data)
+            if not i % 100: # commit every 100 entities to limit memory consumption
+                pb.text = "%i committed" % i
+                commit(ask_confirm=False)
+            pb.update()
+        commit(ask_confirm=False)
+
+try:
+    from cubicweb import devtools
+    option_group_changed('anonymous-user', 'main', 'web')
+    option_group_changed('anonymous-password', 'main', 'web')
+except ImportError:
+    # cubicweb-dev unavailable, nothing needed
+    pass