XZise has submitted this change and it was merged.
Change subject: PropertyPage.get() fails ......................................................................
PropertyPage.get() fails
PropertyPage method get attempts to set 'type', which is a property of superclass Property that does not have a setter, resulting in an AttributeError:
self.type = self._content['datatype'] AttributeError: can't set attribute
Fix by putting the datatype into the underlying _type attribute.
Also use the 'type' property in PropertyPage.newClaim so that each newly created Claim does not need to fetch the property type.
Change-Id: I845ec3ad91017e386e568ee5bcb85fd48644adfb --- M pywikibot/page.py M tests/wikibase_tests.py 2 files changed, 22 insertions(+), 2 deletions(-)
Approvals: John Vandenberg: Looks good to me, but someone else must approve XZise: Looks good to me, approved
diff --git a/pywikibot/page.py b/pywikibot/page.py index fb5bffe..8052f0b 100644 --- a/pywikibot/page.py +++ b/pywikibot/page.py @@ -3172,7 +3172,7 @@ """ if force or not hasattr(self, '_content'): WikibasePage.get(self, force=force, *args) - self.type = self._content['datatype'] + self._type = self._content['datatype']
def newClaim(self, *args, **kwargs): """ @@ -3180,7 +3180,8 @@
@return: Claim """ - return Claim(self.site, self.getID(), *args, **kwargs) + return Claim(self.site, self.getID(), datatype=self.type, + *args, **kwargs)
class Claim(Property): diff --git a/tests/wikibase_tests.py b/tests/wikibase_tests.py index a9142dd..67df427 100644 --- a/tests/wikibase_tests.py +++ b/tests/wikibase_tests.py @@ -384,6 +384,25 @@ self.assertEquals(claim.type, 'globe-coordinate') self.assertEquals(claim.getType(), 'globecoordinate')
+ def test_get(self): + property_page = pywikibot.PropertyPage(wikidata, 'P625') + property_page.get() + self.assertEquals(property_page.type, 'globe-coordinate') + + def test_new_claim(self): + """Test that PropertyPage.newClaim uses cached datatype.""" + property_page = pywikibot.PropertyPage(wikidata, 'P625') + property_page.get() + claim = property_page.newClaim() + self.assertEquals(claim.type, 'globe-coordinate') + + # Now verify that it isnt fetching the type from the property + # data in the repo by setting the cache to the incorrect type + # and checking that it is the cached value that is used. + property_page._type = 'wikibase-item' + claim = property_page.newClaim() + self.assertEquals(claim.type, 'wikibase-item') +
class TestClaimSetValue(PywikibotTestCase):