jenkins-bot has submitted this change and it was merged.

Change subject: Add support for math datatype
......................................................................


Add support for math datatype

Also changes test_WbMonolingualText_edit and adds testing for
WbMonolingualText to wikibase_tests.py.

Note that math has not been added to wikibase_tests.py since it is
not yet activated on wikidata.

Change-Id: Ia7345072a1be00920dac37edd15204137222e6a8
---
M pywikibot/page.py
M tests/edit_failure_tests.py
M tests/wikibase_edit_tests.py
M tests/wikibase_tests.py
4 files changed, 67 insertions(+), 8 deletions(-)

Approvals:
  Xqt: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/pywikibot/page.py b/pywikibot/page.py
index 82a9028..244c300 100644
--- a/pywikibot/page.py
+++ b/pywikibot/page.py
@@ -4079,12 +4079,14 @@
              'time': pywikibot.WbTime,
              'quantity': pywikibot.WbQuantity,
              'monolingualtext': pywikibot.WbMonolingualText,
+             'math': basestring,
              }
 
     value_types = {'wikibase-item': 'wikibase-entityid',
                    'commonsMedia': 'string',
                    'url': 'string',
                    'globe-coordinate': 'globecoordinate',
+                   'math': 'string',
                    }
 
     def __init__(self, site, id=None, datatype=None):
@@ -4626,7 +4628,7 @@
         if self.type == 'wikibase-item':
             value = {'entity-type': 'item',
                      'numeric-id': self.getTarget().getID(numeric=True)}
-        elif self.type in ('string', 'url'):
+        elif self.type in ('string', 'url', 'math'):
             value = self.getTarget()
         elif self.type == 'commonsMedia':
             value = self.getTarget().title(withNamespace=False)
diff --git a/tests/edit_failure_tests.py b/tests/edit_failure_tests.py
index 395a516..811f303 100644
--- a/tests/edit_failure_tests.py
+++ b/tests/edit_failure_tests.py
@@ -151,6 +151,14 @@
         claim = self._make_WbMonolingualText_claim(repo, text=123456, 
language='en')
         self.assertAPIError('invalid-snak', None, item.addClaim, claim)
 
+    def test_math_invalid_function(self):
+        """Attempt adding invalid latex to a math claim."""
+        repo = self.get_repo()
+        item = pywikibot.ItemPage(repo, 'Q68')
+        claim = pywikibot.page.Claim(repo, 'P717', datatype='math')
+        claim.setTarget('\foo')
+        self.assertAPIError('modification-failed', None, item.addClaim, claim)
+
 
 if __name__ == '__main__':
     try:
diff --git a/tests/wikibase_edit_tests.py b/tests/wikibase_edit_tests.py
index a350cf7..18f74a4 100644
--- a/tests/wikibase_edit_tests.py
+++ b/tests/wikibase_edit_tests.py
@@ -177,9 +177,9 @@
         self.assertEqual(new_item.getRedirectTarget(), target_item)
 
 
-class TestWbMonolingualText(WikibaseTestCase):
+class TestWikibaseMakeClaim(WikibaseTestCase):
 
-    """Run wikibase write tests for WbMonolingualText."""
+    """Run wikibase write tests for claims."""
 
     family = 'wikidata'
     code = 'test'
@@ -187,15 +187,45 @@
     user = True
     write = True
 
+    def _clean_item(self, repo, prop):
+        """
+        Return an item without any existing claims of the given property.
+
+        @param repo: repository to fetch item from
+        @type: pywikibot.site.DataSite
+        @param prop: P-value of the property to scrub
+        @type prop: str
+        @return: scrubbed item
+        @rtype: pywikibot.ItemPage
+        """
+        item = pywikibot.ItemPage(repo, 'Q68')
+        item.get()
+        if prop in item.claims:
+            item.removeClaims(item.claims[prop])
+        item.get(force=True)
+        return item
+
+    def test_math_edit(self):
+        """Attempt adding a math claim with valid input."""
+        testsite = self.get_repo()
+        item = self._clean_item(testsite, 'P717')
+
+        # set new claim
+        claim = pywikibot.page.Claim(testsite, 'P717', datatype='math')
+        target = 'a^2 + b^2 = c^2'
+        claim.setTarget(target)
+        item.addClaim(claim)
+
+        # confirm new claim
+        item.get(force=True)
+        claim = item.claims['P717'][0]
+        self.assertEqual(claim.getTarget(), target)
+
     def test_WbMonolingualText_edit(self):
         """Attempt adding a monolingual text with valid input."""
         # Clean the slate in preparation for test."""
         testsite = self.get_repo()
-        item = pywikibot.ItemPage(testsite, 'Q68')
-        item.get()
-        if 'P271' in item.claims:
-            item.removeClaims(item.claims['P271'])
-        item.get(force=True)
+        item = self._clean_item(testsite, 'P271')
 
         # set new claim
         claim = pywikibot.page.Claim(testsite, 'P271', 
datatype='monolingualtext')
@@ -203,6 +233,11 @@
         claim.setTarget(target)
         item.addClaim(claim)
 
+        # confirm new claim
+        item.get(force=True)
+        claim = item.claims['P271'][0]
+        self.assertEqual(claim.getTarget(), target)
+
 
 class TestWikibaseRemoveQualifier(WikibaseTestCase):
 
diff --git a/tests/wikibase_tests.py b/tests/wikibase_tests.py
index 3d844b7..4ae1542 100644
--- a/tests/wikibase_tests.py
+++ b/tests/wikibase_tests.py
@@ -645,13 +645,24 @@
     """Test setting claim values."""
 
     def test_set_website(self):
+        """Test setting claim of url type."""
         wikidata = self.get_repo()
         claim = pywikibot.Claim(wikidata, 'P856')
         self.assertEqual(claim.type, 'url')
         claim.setTarget('https://en.wikipedia.org/')
         self.assertEqual(claim.target, 'https://en.wikipedia.org/')
 
+    def test_set_WbMonolingualText(self):
+        """Test setting claim of monolingualtext type."""
+        wikidata = self.get_repo()
+        claim = pywikibot.Claim(wikidata, 'P1450')
+        self.assertEqual(claim.type, 'monolingualtext')
+        target = pywikibot.WbMonolingualText(text='Test this!', language='en')
+        claim.setTarget(target)
+        self.assertEqual(claim.target, target)
+
     def test_set_date(self):
+        """Test setting claim of time type."""
         wikidata = self.get_repo()
         claim = pywikibot.Claim(wikidata, 'P569')
         self.assertEqual(claim.type, 'time')
@@ -661,11 +672,14 @@
         self.assertEqual(claim.target.day, 1)
 
     def test_set_incorrect_target_value(self):
+        """Test setting claim of the incorrect value."""
         wikidata = self.get_repo()
         claim = pywikibot.Claim(wikidata, 'P569')
         self.assertRaises(ValueError, claim.setTarget, 'foo')
         claim = pywikibot.Claim(wikidata, 'P856')
         self.assertRaises(ValueError, claim.setTarget, pywikibot.WbTime(2001, 
site=wikidata))
+        claim = pywikibot.Claim(wikidata, 'P1450')
+        self.assertRaises(ValueError, claim.setTarget, 'foo')
 
 
 class TestItemBasePageMethods(WikidataTestCase, BasePageMethodsTestBase):

-- 
To view, visit https://gerrit.wikimedia.org/r/268398
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ia7345072a1be00920dac37edd15204137222e6a8
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Lokal Profil <[email protected]>
Gerrit-Reviewer: John Vandenberg <[email protected]>
Gerrit-Reviewer: Ladsgroup <[email protected]>
Gerrit-Reviewer: Mpaa <[email protected]>
Gerrit-Reviewer: XZise <[email protected]>
Gerrit-Reviewer: Xqt <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to