コード例 #1
0
 def __init__(self, source, archiver, params=None):
     """Initializer."""
     super(DiscussionPage, self).__init__(source)
     self.threads = []
     self.full = False
     self.archiver = archiver
     # for testing purposes we allow archiver to be None and we are able
     # to create the a DiscussionPage in this way:
     # >>> import pywikibot as py
     # >>> from scripts.archivebot import DiscussionPage
     # >>> d = DiscussionPage(py.Page(py.Site(), <talk page name>), None)
     if archiver is None:
         self.timestripper = TimeStripper(self.site)
     else:
         self.timestripper = self.archiver.timestripper
     self.params = params
     self.now = datetime.datetime.utcnow().replace(tzinfo=TZoneUTC())
     try:
         self.load_page()
     except pywikibot.NoPage:
         self.header = archiver.get_attr(
             'archiveheader',
             i18n.twtranslate(self.site.code, 'archivebot-archiveheader'))
         if self.params:
             self.header = self.header % self.params
コード例 #2
0
ファイル: archivebot.py プロジェクト: hashar/pywikibot
    def __init__(self, page, template, salt, force=False):
        """Initializer.

        param page: a page object to be archived
        type page: pywikibot.Page
        param template: a template with configuration settings
        type template: pywikibot.Page
        param salt: salt value
        type salt: str
        param force: override security value
        type force: bool
        """
        self.attributes = OrderedDict([
            ('archive', ['', False]),
            ('algo', ['old(24h)', False]),
            ('counter', ['1', False]),
            ('maxarchivesize', ['200K', False]),
        ])
        self.salt = salt
        self.force = force
        self.site = page.site
        self.tpl = template
        self.timestripper = TimeStripper(site=self.site)
        self.page = DiscussionPage(page, self)
        self.load_config()
        self.comment_params = {
            'from': self.page.title(),
        }
        self.archives = {}
        self.archived_threads = 0
        self.month_num2orig_names = {}
        for n, (_long, _short) in enumerate(self.site.months_names):
            self.month_num2orig_names[n + 1] = {'long': _long, 'short': _short}
コード例 #3
0
    def test_timestripper_match_only(self):
        """Test that latest date is used instead of other dates."""
        ts = TimeStripper(self.get_site())

        later_date = '10:57 06 June 2015 (UTC)'
        txt_match = '<!-- --> ' + self.user_and_date + ' <!-- -->' + later_date
        res = datetime.datetime(2015, 6, 6, 10, 57, tzinfo=self.tzone)
        self.assertEqual(ts.timestripper(txt_match), res)

        earlier_date = '02:57 06 June 2015 (UTC)'
        txt_match = '<!-- ' + self.user_and_date + ' --> ' + earlier_date
        res = datetime.datetime(2015, 6, 6, 6, 57, tzinfo=self.tzone)
        self.assertEqual(ts.timestripper(txt_match), res)
コード例 #4
0
    def test_timestripper_match(self):
        """Test that dates in comments  are correctly recognised."""
        ts = TimeStripper(self.get_site())

        txt_match = '<!-- [[User:Do___ArchiveUntil]] ' + self.date + ' -->'
        res = datetime.datetime(2015, 6, 6, 6, 57, tzinfo=self.tzone)
        self.assertEqual(ts.timestripper(txt_match), res)

        txt_match = '<!-- --> <!-- ' + self.user_and_date + ' <!-- -->'
        res = datetime.datetime(2015, 6, 6, 6, 57, tzinfo=self.tzone)
        self.assertEqual(ts.timestripper(txt_match), res)

        txt_match = '<!-- ' + self.user_and_date + ' -->'
        res = datetime.datetime(2015, 6, 6, 6, 57, tzinfo=self.tzone)
        self.assertEqual(ts.timestripper(txt_match), res)
コード例 #5
0
    def test_timestripper_nomatch(self, key):
        """Test that correct date is not matched."""
        self.ts = TimeStripper(self.get_site(key))

        if 'nomatch' in self.sites[key]:
            txt_no_match = self.sites[key]['nomatch']
        else:
            txt_no_match = '3 March 2011 19:48 (UTC) 7 March 2010 19:48 (UTC)'

        self.assertEqual(self.ts.timestripper(txt_no_match), None)

        if 'nomatch1' not in self.sites[key]:
            return

        txt_no_match = self.sites[key]['nomatch1']
        self.assertEqual(self.ts.timestripper(txt_no_match), None)
コード例 #6
0
    def __init__(self, page, template, salt, force=False) -> None:
        """Initializer.

        param page: a page object to be archived
        type page: pywikibot.Page
        param template: a template with configuration settings
        type template: pywikibot.Page
        param salt: salt value
        type salt: str
        param force: override security value
        type force: bool
        """
        self.attributes = OrderedDict([
            ('archive', ['', False]),
            ('algo', ['old(24h)', False]),
            ('counter', ['1', False]),
            ('maxarchivesize', ['200K', False]),
        ])
        self.salt = salt
        self.force = force
        self.site = page.site
        self.tpl = template
        self.timestripper = TimeStripper(site=self.site)

        # read maxarticlesize
        try:
            # keep a gap of 1 KB not to block later changes
            self.maxsize = self.site.siteinfo['maxarticlesize'] - 1024
        except KeyError:  # mw < 1.28
            self.maxsize = 2096128  # 2 MB - 1 KB gap

        self.page = DiscussionPage(page, self)
        self.load_config()
        self.comment_params = {
            'from': self.page.title(),
        }
        self.now = datetime.datetime.utcnow().replace(tzinfo=TZoneUTC())
        self.archives = {}
        self.archived_threads = 0
        self.month_num2orig_names = {}
        for n, (long, short) in enumerate(self.site.months_names, start=1):
            self.month_num2orig_names[n] = {'long': long, 'short': short}
コード例 #7
0
ファイル: archivebot.py プロジェクト: MKaras93/pywikibot
 def __init__(self, page, tpl, salt, force=False):
     self.attributes = {
         'algo': ['old(24h)', False],
         'archive': ['', False],
         'maxarchivesize': ['1000M', False],
         'counter': ['1', False],
         'key': ['', False],
     }
     self.salt = salt
     self.force = force
     self.site = page.site
     self.tpl = pywikibot.Page(self.site, tpl)
     self.timestripper = TimeStripper(site=self.site)
     self.page = DiscussionPage(page, self)
     self.load_config()
     self.comment_params = {
         'from': self.page.title(),
     }
     self.archives = {}
     self.archived_threads = 0
     self.month_num2orig_names = {}
     for n, (_long, _short) in enumerate(self.site.months_names):
         self.month_num2orig_names[n + 1] = {"long": _long, "short": _short}
コード例 #8
0
 def setUp(self):
     """Set up test cases."""
     super(TestTimeStripperCase, self).setUp()
     self.ts = TimeStripper(self.get_site())
コード例 #9
0
 def setUp(self):
     site = pywikibot.Site('fr', 'wikipedia')
     self.ts = TimeStripper(site)
コード例 #10
0
 def setUp(self):
     super(TestTimeStripperWithDigitsAsMonths, self).setUp()
     self.ts = TimeStripper(self.get_site())
コード例 #11
0
 def setUp(self):
     """Set up test cases."""
     super(TestTimeStripperWithNoDigitsAsMonths, self).setUp()
     self.ts = TimeStripper(self.get_site())
コード例 #12
0
 def __init__(self, title, now):
     self.title = title
     self.now = now
     self.content = ""
     self.ts = TimeStripper(site=site)
     self.timestamp = None
コード例 #13
0
 def setUp(self):
     """Setup a timestripper for the configured site."""
     super(TestTimeStripperWithDigitsAsMonths, self).setUp()
     self.ts = TimeStripper(self.get_site())