def test_unicode(self):
        """Test caching with Unicode content."""
        self.mocksite._userinfo = {'name': u'محمد الفلسطيني'}
        self.mocksite._loginstatus = 0

        req = CachedRequest(expiry=1,
                            site=self.mocksite,
                            action='query',
                            meta='siteinfo')
        en_user_path = req._cachefile_path()

        self.mocksite._namespaces = {2: [u'مستخدم']}

        req = CachedRequest(expiry=1,
                            site=self.mocksite,
                            action='query',
                            meta='siteinfo')

        expect = (u'MockSite()User(User:محمد الفلسطيني)' +
                  "[('action', 'query'), ('meta', 'siteinfo')]")

        self.assertEqual(repr(req._uniquedescriptionstr()), repr(expect))

        self.assertEqual(req._uniquedescriptionstr().encode('utf-8'),
                         expect.encode('utf-8'))

        ar_user_path = req._cachefile_path()

        self.assertEqual(en_user_path, ar_user_path)
Ejemplo n.º 2
0
    def test_cachefile_path_different_users(self):
        """Test and compare file paths when different usernames are used."""
        req = CachedRequest(expiry=1,
                            site=self.mocksite,
                            parameters={
                                'action': 'query',
                                'meta': 'siteinfo'
                            })
        anonpath = req._cachefile_path()

        self.mocksite._userinfo = {'name': 'MyUser'}
        self.mocksite._loginstatus = LoginStatus.AS_USER
        req = CachedRequest(expiry=1,
                            site=self.mocksite,
                            parameters={
                                'action': 'query',
                                'meta': 'siteinfo'
                            })
        userpath = req._cachefile_path()

        self.assertNotEqual(anonpath, userpath)

        self.mocksite._userinfo = {'name': 'MyOtherUser'}
        self.mocksite._loginstatus = LoginStatus.AS_USER
        req = CachedRequest(expiry=1,
                            site=self.mocksite,
                            parameters={
                                'action': 'query',
                                'meta': 'siteinfo'
                            })
        otherpath = req._cachefile_path()

        self.assertNotEqual(anonpath, otherpath)
        self.assertNotEqual(userpath, otherpath)
    def test_cachefile_path_different_users(self):
        """Test and compare the file paths when different usernames are used."""
        req = CachedRequest(expiry=1,
                            site=self.mocksite,
                            action='query',
                            meta='siteinfo')
        anonpath = req._cachefile_path()

        self.mocksite._userinfo = {'name': u'MyUser'}
        self.mocksite._loginstatus = 0
        req = CachedRequest(expiry=1,
                            site=self.mocksite,
                            action='query',
                            meta='siteinfo')
        userpath = req._cachefile_path()

        self.assertNotEqual(anonpath, userpath)

        self.mocksite._userinfo = {'name': u'MySysop'}
        self.mocksite._loginstatus = 1
        req = CachedRequest(expiry=1,
                            site=self.mocksite,
                            action='query',
                            meta='siteinfo')
        sysoppath = req._cachefile_path()

        self.assertNotEqual(anonpath, sysoppath)
        self.assertNotEqual(userpath, sysoppath)
Ejemplo n.º 4
0
 def setUp(self):
     self.parms = {'site': pywikibot.Site('en'),
                   'action': 'query',
                   'meta': 'userinfo'}
     self.req = CachedRequest(expiry=1, **self.parms)
     self.expreq = CachedRequest(expiry=0, **self.parms)
     self.diffreq = CachedRequest(expiry=1, site=pywikibot.Site('en'), action='query', meta='siteinfo')
     self.diffsite = CachedRequest(expiry=1, site=pywikibot.Site('de'), action='query', meta='userinfo')
Ejemplo n.º 5
0
    def test_cachefile_path_different_users(self):
        # Mock basesite object to test this.
        class MockSite(pywikibot.site.APISite):

            _loginstatus = pywikibot.site.LoginStatus.NOT_ATTEMPTED

            _namespaces = {2: 'User'}

            def __init__(self):
                self._user = '******'

            def user(self):
                return self._user

            def encoding(self):
                return 'utf-8'

            def encodings(self):
                return []

            def _getsiteinfo(self):
                self._siteinfo = {'case': 'first-letter'}
                return {}

            def __repr__(self):
                return "MockSite()"

            def __getattr__(self, attr):
                raise Exception("Attribute %r not defined" % attr)

        site = MockSite()
        req = CachedRequest(expiry=1,
                            site=site,
                            action='query',
                            meta='siteinfo')
        anonpath = req._cachefile_path()

        site._userinfo = {'name': u'user'}
        site._loginstatus = 0
        req = CachedRequest(expiry=1,
                            site=site,
                            action='query',
                            meta='siteinfo')
        userpath = req._cachefile_path()

        self.assertNotEqual(anonpath, userpath)

        site._userinfo = {'name': u'sysop'}
        site._loginstatus = 1
        req = CachedRequest(expiry=1,
                            site=site,
                            action='query',
                            meta='siteinfo')
        sysoppath = req._cachefile_path()

        self.assertNotEqual(anonpath, sysoppath)
        self.assertNotEqual(userpath, sysoppath)
Ejemplo n.º 6
0
 def setUp(self):
     super(DryCachedRequestTests, self).setUp()
     self.parms = {'site': self.basesite,
                   'action': 'query',
                   'meta': 'userinfo'}
     self.req = CachedRequest(expiry=1, **self.parms)
     self.expreq = CachedRequest(expiry=0, **self.parms)
     self.diffreq = CachedRequest(expiry=1, site=self.basesite, action='query', meta='siteinfo')
     self.diffsite = CachedRequest(expiry=1, site=self.altsite, action='query', meta='userinfo')
Ejemplo n.º 7
0
def refresh(site, sysop=False):
    """Fetch the watchlist."""
    if not site.logged_in(sysop=sysop):
        site.forceLogin(sysop=sysop)

    params = {
        'action': 'query',
        'list': 'watchlistraw',
        'site': site,
        'wrlimit': config.special_page_limit,
    }

    pywikibot.output(u'Retrieving watchlist for %s via API.' % str(site))
    # pywikibot.put_throttle() # It actually is a get, but a heavy one.
    watchlist = []
    while True:
        req = CachedRequest(config.API_config_expiry, **params)
        data = req.submit()
        if 'error' in data:
            raise RuntimeError('ERROR: %s' % data)
        watchlist.extend([w['title'] for w in data['watchlistraw']])

        if 'query-continue' in data:
            params.update(data['query-continue']['watchlistraw'])
        else:
            break
    return watchlist
 def test_expiry_formats(self):
     """Test using a timedelta as expiry."""
     self.assertEqual(
         self.req.expiry,
         CachedRequest(datetime.timedelta(days=1),
                       site=self.basesite,
                       parameters=self.parms).expiry)
 def setUp(self):
     """Initialize the fake requests."""
     super(DryCachedRequestTests, self).setUp()
     self.parms = {'action': 'query', 'meta': 'userinfo'}
     self.req = CachedRequest(expiry=1,
                              site=self.basesite,
                              parameters=self.parms)
     self.expreq = CachedRequest(expiry=0,
                                 site=self.basesite,
                                 parameters=self.parms)
     self.diffreq = CachedRequest(expiry=1,
                                  site=self.basesite,
                                  parameters={
                                      'action': 'query',
                                      'meta': 'siteinfo'
                                  })
     self.diffsite = CachedRequest(expiry=1,
                                   site=self.altsite,
                                   parameters={
                                       'action': 'query',
                                       'meta': 'userinfo'
                                   })
     # When using ** the paramters are still unicode
     self.deprecated_explicit = CachedRequest(expiry=1,
                                              site=self.basesite,
                                              action='query',
                                              meta='userinfo')
     self.deprecated_asterisks = CachedRequest(expiry=1,
                                               site=self.basesite,
                                               **self.parms)
Ejemplo n.º 10
0
 def setUp(self):
     """Initialize the fake requests."""
     super().setUp()
     self.parms = {'action': 'query', 'meta': 'userinfo'}
     self.req = CachedRequest(expiry=1,
                              site=self.basesite,
                              parameters=self.parms)
     self.expreq = CachedRequest(expiry=0,
                                 site=self.basesite,
                                 parameters=self.parms)
     self.diffreq = CachedRequest(expiry=1,
                                  site=self.basesite,
                                  parameters={
                                      'action': 'query',
                                      'meta': 'siteinfo'
                                  })
     self.diffsite = CachedRequest(expiry=1,
                                   site=self.altsite,
                                   parameters={
                                       'action': 'query',
                                       'meta': 'userinfo'
                                   })
     # When using ** the parameters are still unicode
     with suppress_warnings('Instead of using kwargs ', FutureWarning):
         self.deprecated_explicit = CachedRequest(expiry=1,
                                                  site=self.basesite,
                                                  action='query',
                                                  meta='userinfo')
         self.deprecated_asterisks = CachedRequest(expiry=1,
                                                   site=self.basesite,
                                                   **self.parms)
Ejemplo n.º 11
0
 def test_expiry_formats(self):
     self.assertEqual(
         self.req.expiry,
         CachedRequest(datetime.timedelta(days=1), **self.parms).expiry)