Guest User

Untitled

a guest
Jul 21st, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.62 KB | None | 0 0
  1. '''
  2. WARNINGS: THIS SCRIPT COMES WITHOUT ANY WARRANTY AND RUNNING IT IS DONE SO AT YOUR OWN RISK!
  3. '''
  4. from cms.models import Page
  5.  
  6. def setup():
  7. from django.contrib.auth.models import User
  8. from cms.utils.permissions import set_current_user
  9. set_current_user(User.objects.get(id=1))
  10. def check_no_moderator():
  11. print " checking that CMS_MODERATOR is set to False"
  12. from django.conf import settings
  13. if settings.CMS_MODERATOR:
  14. print "!! Please set CMS_MODERATOR=False in settings before using this script !!"
  15. print 'aborted'
  16. raise Exception("!! Please set CMS_MODERATOR=False in settings before using this script !!")
  17.  
  18.  
  19.  
  20. def fix_tree_id():
  21. setup()
  22. check_no_moderator()
  23. print " rewriting tree_id..."
  24. #from django.db.models import Avg, Max, Min, Count
  25. #base_tree_id = Page.objects.filter(parent=None).aggregate(tree_id=Max('tree_id'))['tree_id'] + 1
  26. base_tree_id = 1
  27.  
  28. for page in Page.objects.filter(parent=None).order_by('tree_id'):
  29. page.tree_id = base_tree_id
  30. page.save()
  31. r_fix_tree_id(page.children.all(), base_tree_id)
  32. base_tree_id += 1
  33. def r_fix_tree_id(pages, tree_id):
  34. for page in pages:
  35. page.tree_id = tree_id
  36. page.save(no_signals=True)
  37. r_fix_tree_id(page.children.all(), tree_id)
  38.  
  39. def fix_leftright(do_alteration=True):
  40. setup()
  41. check_no_moderator()
  42. print " fixing left and right..."
  43. def recur(node, counter):
  44. node.lft = counter
  45. counter += 1
  46. for child in node.children.all().order_by('tree_id', 'parent', 'lft'):
  47. counter = recur(child, counter)
  48. node.rght = counter
  49. counter += 1
  50. node.save(no_signals=True)
  51. return counter
  52. for root_page in Page.objects.filter(parent=None).order_by('tree_id', 'parent', 'lft'):
  53. counter = recur(root_page, 1)
  54. # sanity check
  55. total_pages = Page.objects.filter(tree_id=root_page.tree_id).count()
  56. if not total_pages * 2 == counter-1:
  57. print " something is wrong! %s != %s" % (total_pages * 2, counter-1)
  58.  
  59. def fix_level():
  60. setup()
  61. print " fixing level..."
  62. bad_level_count = 0
  63. level = 0
  64. all_pages = Page.objects.order_by('tree_id', 'parent', 'lft')
  65. for root_page in all_pages.filter(parent=None):
  66. bad_level_count += r_fix_level(root_page, level=level)
  67. print " fixed level of %s pages" % bad_level_count
  68.  
  69. def r_fix_level(page, level):
  70. bad_level_count = 0
  71. if not page.level == level:
  72. page.level = level
  73. page.save(no_signals=True)
  74. bad_level_count += 1
  75. else:
  76. pass#print " comparing level of page id:%s level:%s to level:%s: ok" % (page, page.level, level)
  77. for subpage in page.children.all():
  78. bad_level_count += r_fix_level(subpage, level+1)
  79. return bad_level_count
  80.  
  81.  
  82. def fix():
  83. print "fixing mptt tree"
  84. fix_tree_id()
  85. fix_level()
  86. fix_leftright()
  87. print "all done"
  88.  
  89. def check_level():
  90. print 'Checking levels'
  91. roots = Page.objects.filter(parent__isnull=True)
  92. def _rec(pages, level=0):
  93. for page in pages:
  94. if page.level != level:
  95. print 'ERROR: Page %s (%s) has level %s, expected %s' % (page, page.pk, page.level, level)
  96. children = Page.objects.filter(parent=page)
  97. _rec(children, level+1)
  98. _rec(roots)
  99. print 'Done'
  100.  
  101. def check_leftright():
  102. print " checking left and right..."
  103. errors = {}
  104. def add_error(node, msg):
  105. if not node.id in errors.keys():
  106. errors[node.id] = [u"node: %s" % node]
  107. errors[node.id].append(msg)
  108. def recur(node, counter):
  109. if not node.lft == counter: add_error(node, u"lft is %s, should be %s." % (node.lft, counter))
  110. counter += 1
  111. for child in node.children.all().order_by('tree_id', 'parent', 'lft'):
  112. counter = recur(child, counter)
  113. if not node.rght == counter: add_error(node, u"rght is %s, should be %s." % (node.rght, counter))
  114. counter += 1
  115. return counter
  116. for root_page in Page.objects.filter(parent=None).order_by('tree_id', 'parent', 'lft'):
  117. counter = recur(root_page, 1)
  118. # sanity check
  119. total_pages = Page.objects.filter(tree_id=root_page.tree_id).count()
  120. if not total_pages * 2 == counter-1:
  121. print " something is wrong! %s != %s" % (total_pages * 2, counter-1)
  122. from pprint import pprint
  123. pprint(errors)
  124. return errors
  125.  
  126. def kill_moderations():
  127. from django.db import connection
  128. HAPPY_MODERATION = """UPDATE cms_page SET moderator_state=10"""
  129.  
  130. cursor = connection.cursor()
  131. cursor.execute(HAPPY_MODERATION)
Add Comment
Please, Sign In to add comment