Merge lp:~dholbach/developer-ubuntu-com/consistency into lp:developer-ubuntu-com

Proposed by Daniel Holbach
Status: Merged
Merged at revision: 223
Proposed branch: lp:~dholbach/developer-ubuntu-com/consistency
Merge into: lp:developer-ubuntu-com
Diff against target: 65 lines (+61/-0)
1 file modified
developer_portal/management/commands/check-consistency.py (+61/-0)
To merge this branch: bzr merge lp:~dholbach/developer-ubuntu-com/consistency
Reviewer Review Type Date Requested Status
David Callé Approve
Review via email: mp+295259@code.launchpad.net
To post a comment you must log in.
224. By Daniel Holbach

fix typo

Revision history for this message
David Callé (davidc3) wrote :

Works as expected. +1

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'developer_portal/management/commands/check-consistency.py'
2--- developer_portal/management/commands/check-consistency.py 1970-01-01 00:00:00 +0000
3+++ developer_portal/management/commands/check-consistency.py 2016-05-19 20:23:28 +0000
4@@ -0,0 +1,61 @@
5+from optparse import make_option
6+
7+from django.core.management.base import BaseCommand
8+
9+from cms.models import Page
10+
11+
12+def find_pages_without_publisher_draft():
13+ return [p for p in Page.objects.all()
14+ if not hasattr(p, 'publisher_draft')]
15+
16+
17+def find_duplicates_pages():
18+ urls = [p.get_absolute_url() for p in Page.objects.all()]
19+ return [p for p in Page.objects.all()
20+ if urls.count(p.get_absolute_url()) == 2]
21+
22+
23+def print_pages(pages):
24+ for p in pages:
25+ print('{} ({})'.format
26+ (p.get_absolute_url(),
27+ 'Draft' if p.publisher_is_draft else 'Public'))
28+
29+
30+def delete_pages(pages):
31+ for p in pages:
32+ print('Deleting page: {} ({})'.format
33+ (p.get_absolute_url(),
34+ 'Draft' if p.publisher_is_draft else 'Public'))
35+ p.delete()
36+
37+
38+class Command(BaseCommand):
39+ help = "Make sure the CMS database is consistent."
40+
41+ option_list = BaseCommand.option_list + (
42+ make_option(
43+ '--delete', action='store_true', dest='delete',
44+ default=True, help='Delete broken and inconsistent entries.'),
45+ )
46+
47+ def handle(self, *args, **options):
48+ pages = find_pages_without_publisher_draft()
49+ print('Pages without .publisher_draft: {}'.format(len(pages)))
50+ if pages:
51+ if options['delete']:
52+ print_pages(pages)
53+ else:
54+ delete_pages(pages)
55+
56+ pages = find_duplicates_pages()
57+ print('Duplicate pages: {}'.format(len(pages)))
58+ if pages:
59+ print_pages(pages)
60+ if options['delete']:
61+ print('Please remove them manually.')
62+
63+ if not options['delete']:
64+ print('If you want any inconsistencies fixed, please re-run this '
65+ 'command with the --delete option.')

Subscribers

People subscribed via source and target branches