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
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}
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)
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)
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)
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}
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}
def setUp(self): """Set up test cases.""" super(TestTimeStripperCase, self).setUp() self.ts = TimeStripper(self.get_site())
def setUp(self): site = pywikibot.Site('fr', 'wikipedia') self.ts = TimeStripper(site)
def setUp(self): super(TestTimeStripperWithDigitsAsMonths, self).setUp() self.ts = TimeStripper(self.get_site())
def setUp(self): """Set up test cases.""" super(TestTimeStripperWithNoDigitsAsMonths, self).setUp() self.ts = TimeStripper(self.get_site())
def __init__(self, title, now): self.title = title self.now = now self.content = "" self.ts = TimeStripper(site=site) self.timestamp = None
def setUp(self): """Setup a timestripper for the configured site.""" super(TestTimeStripperWithDigitsAsMonths, self).setUp() self.ts = TimeStripper(self.get_site())