diff --git a/mwclient/page.py b/mwclient/page.py index 1475b7cc6ed2cf989051215ac712ff9bce4f6772..89178607af088b697c0b825bb4e927e3786496f4 100644 --- a/mwclient/page.py +++ b/mwclient/page.py @@ -53,7 +53,7 @@ class Page(object): self.exists = 'missing' not in info self.length = info.get('length') self.protection = { - i['type']: (i['level'], i['expiry']) + i['type']: (i['level'], i.get('expiry')) for i in info.get('protection', ()) if i } diff --git a/test/test_page.py b/test/test_page.py index 85f817452cf8201e502e24e179be8d986367fb9c..d24910e18a7e7d7213307ee02943be6a4973dfab 100644 --- a/test/test_page.py +++ b/test/test_page.py @@ -165,6 +165,12 @@ class TestPage(unittest.TestCase): assert page.can('edit') is True # User has 'autoconfirmed' right assert page.can('move') is True # User has 'sysop' right + # check an unusual case: no 'expiry' key, see + # https://github.com/mwclient/mwclient/issues/290 + del mock_site.get.return_value['query']['pages']['728']['protection'][0]['expiry'] + page = Page(mock_site, title) + assert page.protection == {'edit': ('autoconfirmed', None), 'move': ('sysop', 'infinity')} + @mock.patch('mwclient.client.Site') def test_redirect(self, mock_site): # Check that page.redirect is set correctly