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')
예제 #2
0
    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])
예제 #3
0
    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])
예제 #4
0
    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])
예제 #5
0
    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])
예제 #6
0
 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'])
예제 #7
0
 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"])
예제 #8
0
 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'])
예제 #9
0
    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])
예제 #10
0
    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])
예제 #11
0
    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')
예제 #14
0
 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')