def test_generator(self): """Test from_generator classmethod.""" self.assertEqual(MediaWikiVersion.from_generator('MediaWiki 1.2.3'), self._make('1.2.3')) with self.assertRaisesRegex( ValueError, self.GENERATOR_STRING_RE): MediaWikiVersion.from_generator('Invalid 1.2.3')
def _parse_site(self): """Parse siteinfo data.""" response = fetch(self.api + '?action=query&meta=siteinfo&format=json') check_response(response) # remove preleading newlines and Byte Order Mark (BOM), see T128992 content = response.text.strip().lstrip('\uFEFF') info = json.loads(content) self.private_wiki = ('error' in info and info['error']['code'] == 'readapidenied') if self.private_wiki: # user-config.py is not loaded because PYWIKIBOT_NO_USER_CONFIG # is set to '2' by generate_family_file.py. # Prepare a temporary config for login. username = pywikibot.input( 'Private wiki detected. Login is required.\n' 'Please enter your username?') # Setup a dummy family so that we can create a site object fam = pywikibot.family.AutoFamily('temporary_family', self.api[:-8]) site = pywikibot.Site(fam.code, fam, username) site.version = lambda: str(self.version) # Now the site object is able to login info = site.siteinfo else: info = info['query']['general'] self.version = MediaWikiVersion.from_generator(info['generator']) if self.version < MIN_VERSION: return self.server = urljoin(self.fromurl, info['server']) for item in ['scriptpath', 'articlepath', 'lang']: setattr(self, item, info[item])
def _parse_post_117(self): """Parse 1.17+ siteinfo data.""" response = fetch(self.api + '?action=query&meta=siteinfo&format=json') check_response(response) # remove preleading newlines and Byte Order Mark (BOM), see T128992 content = response.text.strip().lstrip('\uFEFF') info = json.loads(content) self.private_wiki = ('error' in info and info['error']['code'] == 'readapidenied') if self.private_wiki: # user-config.py is not loaded because PYWIKIBOT_NO_USER_CONFIG # is set to '2' by generate_family_file.py. # Prepare a temporary config for login. username = pywikibot.input( 'Private wiki detected. Login is required.\n' 'Please enter your username?') config.usernames['temporary_family'] = {'temporary_code': username} # Setup a dummy family so that we can create a site object fam = pywikibot.Family() fam.name = 'temporary_family' fam.scriptpath = lambda code: self.api[:-8] # without /api.php fam.langs = {'temporary_code': self.server} site = pywikibot.Site('temporary_code', fam) site.version = lambda: str(self.version) # Now the site object is able to login info = site.siteinfo else: info = info['query']['general'] self.version = MediaWikiVersion.from_generator(info['generator']) if self.version < MediaWikiVersion('1.17'): return self.server = urljoin(self.fromurl, info['server']) for item in ['scriptpath', 'articlepath', 'lang']: setattr(self, item, info[item])
def _parse_post_117(self): """Parse 1.17+ siteinfo data.""" response = fetch(self.api + '?action=query&meta=siteinfo&format=json') info = json.loads(response.content)['query']['general'] self.version = MediaWikiVersion.from_generator(info['generator']) if self.version < MediaWikiVersion('1.17'): return self.server = urljoin(self.fromurl, info['server']) for item in ['scriptpath', 'articlepath', 'lang']: setattr(self, item, info[item])
def _parse_post_117(self): """Parse 1.17+ siteinfo data.""" response = fetch(self.api + '?action=query&meta=siteinfo&format=json') info = json.loads(response.content)['query']['general'] self.version = MediaWikiVersion.from_generator(info['generator']) if self.version < MediaWikiVersion('1.17'): return self.server = urljoin(self.fromurl, info['server']) for item in ['scriptpath', 'articlepath', 'lang']: setattr(self, item, info[item])
def handle_starttag(self, tag, attrs): """Handle an opening tag.""" attrs = dict(attrs) if tag == 'meta': if attrs.get('name') == 'generator': self.generator = attrs['content'] with suppress(ValueError): self.version = MediaWikiVersion.from_generator( self.generator) elif tag == 'link' and 'rel' in attrs and 'href' in attrs: if attrs['rel'] in ('EditURI', 'stylesheet', 'search'): self.set_api_url(attrs['href']) elif tag == 'script' and 'src' in attrs: self.set_api_url(attrs['src'])
def handle_starttag(self, tag, attrs): """Handle an opening tag.""" attrs = dict(attrs) if tag == "meta": if attrs.get("name") == "generator": self.generator = attrs["content"] try: self.version = MediaWikiVersion.from_generator(self.generator) except ValueError: pass elif tag == "link" and "rel" in attrs and "href" in attrs: if attrs["rel"] in ("EditURI", "stylesheet", "search"): self.set_api_url(attrs["href"]) elif tag == "script" and "src" in attrs: self.set_api_url(attrs["src"])
def handle_starttag(self, tag, attrs): """Handle an opening tag.""" attrs = dict(attrs) if tag == "meta": if attrs.get('name') == 'generator': self.generator = attrs["content"] try: self.version = MediaWikiVersion.from_generator( self.generator) except ValueError: pass elif tag == 'link' and 'rel' in attrs and 'href' in attrs: if attrs['rel'] in ('EditURI', 'stylesheet', 'search'): self.set_api_url(attrs['href']) elif tag == 'script' and 'src' in attrs: self.set_api_url(attrs['src'])
def _parse_post_117(self): """Parse 1.17+ siteinfo data.""" response = fetch(self.api + "?action=query&meta=siteinfo&format=json") info = json.loads(response.content) self.private_wiki = "error" in info and info["error"]["code"] == "readapidenied" if self.private_wiki: return info = info["query"]["general"] self.version = MediaWikiVersion.from_generator(info["generator"]) if self.version < MediaWikiVersion("1.17"): return self.server = urljoin(self.fromurl, info["server"]) for item in ["scriptpath", "articlepath", "lang"]: setattr(self, item, info[item])
def _parse_post_117(self): """Parse 1.17+ siteinfo data.""" response = fetch(self.api + '?action=query&meta=siteinfo&format=json') # remove preleading newlines and Byte Order Mark (BOM), see T128992 content = response.content.strip().lstrip('\uFEFF') info = json.loads(content) self.private_wiki = ('error' in info and info['error']['code'] == 'readapidenied') if self.private_wiki: return info = info['query']['general'] self.version = MediaWikiVersion.from_generator(info['generator']) if self.version < MediaWikiVersion('1.17'): return self.server = urljoin(self.fromurl, info['server']) for item in ['scriptpath', 'articlepath', 'lang']: setattr(self, item, info[item])
def _parse_post_117(self): """Parse 1.17+ siteinfo data.""" response = fetch(self.api + '?action=query&meta=siteinfo&format=json') # remove preleading newlines and Byte Order Mark (BOM), see T128992 content = response.content.strip().lstrip('\uFEFF') info = json.loads(content) self.private_wiki = ('error' in info and info['error']['code'] == 'readapidenied') if self.private_wiki: return info = info['query']['general'] self.version = MediaWikiVersion.from_generator(info['generator']) if self.version < MediaWikiVersion('1.17'): return self.server = urljoin(self.fromurl, info['server']) for item in ['scriptpath', 'articlepath', 'lang']: setattr(self, item, info[item])
def test_generator(self): """Test from_generator classmethod.""" self.assertEqual(V.from_generator('MediaWiki 1.2.3'), self._make('1.2.3')) self.assertRaises(ValueError, V.from_generator, 'Invalid 1.2.3')
def test_generator(self): """Test from_generator classmethod.""" self.assertEqual(MediaWikiVersion.from_generator('MediaWiki 1.2.3'), self._make('1.2.3')) self.assertRaisesRegex(ValueError, self.GENERATOR_STRING_RE, MediaWikiVersion.from_generator, 'Invalid 1.2.3')
def test_generator(self): """Test from_generator classmethod.""" self.assertEqual(V.from_generator('MediaWiki 1.2.3'), self._make('1.2.3')) self.assertRaises(ValueError, V.from_generator, 'Invalid 1.2.3')