Esempio n. 1
0
 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()
Esempio n. 2
0
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())
Esempio n. 3
0
 def wikt_handle(self, *args, **options):
     tree = TreeNode(u'Викисловарь:Отчёты', u'')
     BigReports(tree).run()
     tree.update_section_pages()
Esempio n. 4
0
 def __init__(self):
     self.tree = TreeNode(self.prefix, u'')