def wikt_handle(self, *args, **options): tree = TreeNode(u'Викисловарь:Отчёты', u'') CommonHeadersChecker(tree).run() CommonSectionsChecker(tree).run() RussianNounWrongIndex(tree).run() RussianNounAsterisk3(tree).run() tree.update_section_pages()
class ReportsBuilder(object): # prefix = u'Участник:Vitalik' prefix = u'Викисловарь:Отчёты' def __init__(self): self.tree = TreeNode(self.prefix, u'') def run(self): self.process_sub_tree('v2', tree_data) # self.tree.update_section_pages(debug=True) print print u'=' * 30 print u'Saving folders...' print u'=' * 30 self.tree.update_section_pages() def process_slug(self, slug, title, checker): print u'Report:', transliterate(title) items = CheckerItem.objects.filter(checker_entry__slug=slug).\ order_by('title') # locale.setlocale(locale.LC_ALL, settings.LOCALE_FOR_INDEX_BUILDER) # sort(cmp=wiki_cmp) items = sorted(items, key=lambda x: x.title) count = len(items) description = checker.description if count: if items[0].key is not None: data = dict() for item in items: data.setdefault(item.key, list()) data[item.key].append(item) # if items[0].key_desc is not None: sorting = { # todo: make this things optional and customizable 'single': dict(), 'medium': dict(), 'frequent': dict(), 'very_frequent': dict(), } # todo: make this things optional and customizable: for key, sub_keys in data.items(): if len(sub_keys) == 1: sub_slug = 'single' elif len(sub_keys) < 20: sub_slug = 'medium' elif len(sub_keys) < 100: sub_slug = 'frequent' else: sub_slug = 'very_frequent' sorting[sub_slug][key] = sub_keys order = ['single', 'medium', 'frequent', 'very_frequent'] ordered_sorting = sorted(sorting.items(), key=lambda x: order.index(x[0])) for slug, slug_data in ordered_sorting: body = '' count = len(slug_data) for key, sub_keys in slug_data.items(): body += checker.sc_key(slug) % key for item in sub_keys: body += checker.sc_sub_key_desc(slug) % \ (item.title, item.key_desc) sub_titles = { 'single': u'Единичные', 'medium': u'Редкие', 'frequent': u'Частые', 'very_frequent': u'Очень частые', } self.save_report(title + u'/' + sub_titles[slug], description, body, count) return else: if items[0].sub_items is not None: body = '' for item in items: body += checker.sc_item(slug) % item.title sub_items = [] for sub_item in item.sub_items.split('\n'): args = checker.unpack(sub_item) sub_items.append(checker.sc_sub_item(slug) % args) if checker.join_sub_items: sub_items_string = \ checker.s_sub_item_joiner.join(sub_items) body += checker.s_sub_items % sub_items_string else: body += u''.join(sub_items) else: body = u''.join([checker.sc_item(slug) % item.title for item in items]) else: body = u"\n''Отчёт пуст''" self.save_report(title, description, body, count) def save_report(self, title, description, body, count): content = u"== Описание отчёта ==\n" \ u"%s\n\n" \ u"Обсуждение всех отчётов " \ u"'''[[Обсуждение Викисловаря:Отчёты|здесь]]'''.\n\n" \ u"== Содержимое отчёта ==\n" \ u"%s\n" \ u"\n[[Категория:Викисловарь:Отчёты]]" % \ (description.strip(), body) self.tree.add_node(title, count) desc = u'Формирование отчёта: {} элемент(ов)'.format(count or u'нет') # print '>>', title, count print u'Count: ', count # print '=' * 100 # print content # print '=' * 100 save_wiki_page(self.prefix + "/" + title, content, desc) def build_report(self, title, checker): if checker.slug: self.process_slug(checker.slug, title, checker) else: for slug, sub_title in checker.get_slugs_items(): self.process_slug(slug, u"%s/%s" % (title, sub_title), checker) def process_sub_tree(self, prefix, sub_tree): for sub_title, value in sub_tree: title = u"%s/%s" % (prefix, sub_title) if type(value) == list: self.process_sub_tree(title, value) elif issubclass(value, BaseChecker): print print u'-' * 79 print u'Path:', transliterate(title) module = value.__module__.\ replace(u'checkers.tree.', '') print u'Class:', module, value.__name__ print u'-' * 79 self.build_report(title, value())
def wikt_handle(self, *args, **options): tree = TreeNode(u'Викисловарь:Отчёты', u'') BigReports(tree).run() tree.update_section_pages()
def __init__(self): self.tree = TreeNode(self.prefix, u'')