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

Change subject: Add coord tests, fix bugs
......................................................................


Add coord tests, fix bugs

Change-Id: I528405d3b99adfd6389efe7738714b27a4419f90
---
M pywikibase/claim.py
M pywikibase/coordinate.py
M pywikibase/wbquantity.py
M pywikibase/wbtime.py
M pywikibase/wikibasepage.py
M tests/test_wbtime.py
M tests/test_wikibasepage.py
7 files changed, 42 insertions(+), 18 deletions(-)

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



diff --git a/pywikibase/claim.py b/pywikibase/claim.py
index 704625b..21e4317 100644
--- a/pywikibase/claim.py
+++ b/pywikibase/claim.py
@@ -401,10 +401,8 @@
         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', 'commonsMedia'):
             value = self.getTarget()
-        elif self.type == 'commonsMedia':
-            value = self.getTarget().title(withNamespace=False)
         elif self.type in ('globe-coordinate', 'time', 'quantity'):
             value = self.getTarget().toWikibase()
         else:
diff --git a/pywikibase/coordinate.py b/pywikibase/coordinate.py
index a97850a..232a9d4 100644
--- a/pywikibase/coordinate.py
+++ b/pywikibase/coordinate.py
@@ -67,6 +67,9 @@
         string += ')'
         return string
 
+    def __eq__(self, other):
+        return other.toWikibase() == self.toWikibase()
+
     @property
     def entity(self):
         if self._entity:
@@ -79,7 +82,7 @@
 
         FIXME: Should this be in the DataSite object?
         """
-        if self.globe not in self.site.globes():
+        if not self._entity and self.globe not in self.site.globes():
             raise CoordinateGlobeUnknownException(
                 u"%s is not supported in Wikibase yet."
                 % self.globe)
@@ -91,11 +94,12 @@
                 }
 
     @classmethod
-    def fromWikibase(cls, data, site):
+    def fromWikibase(cls, data, site=None):
         """Constructor to create an object from Wikibase's JSON output."""
         globes = {}
-        for k in site.globes():
-            globes[site.globes()[k]] = k
+        if site:
+            for k in site.globes():
+                globes[site.globes()[k]] = k
 
         globekey = data['globe']
         if globekey:
diff --git a/pywikibase/wbquantity.py b/pywikibase/wbquantity.py
index 95713ee..cad89b0 100644
--- a/pywikibase/wbquantity.py
+++ b/pywikibase/wbquantity.py
@@ -29,7 +29,7 @@
                      the upper error and the second is the lower error value.
         """
         if amount is None:
-            raise ValueError('no amount given')
+            raise ValueError('No amount given')
         if unit is None:
             unit = '1'
         self.amount = amount
@@ -44,12 +44,12 @@
 
     def toWikibase(self):
         """Convert the data to a JSON object for the Wikibase API."""
-        json = {'amount': self.amount,
-                'upperBound': self.upperBound,
-                'lowerBound': self.lowerBound,
-                'unit': self.unit
+        data = {'amount': self._normalize_value(self.amount),
+                'upperBound': self._normalize_value(self.upperBound),
+                'lowerBound': self._normalize_value(self.lowerBound),
+                'unit': str(self.unit)
                 }
-        return json
+        return data
 
     @classmethod
     def fromWikibase(cls, wb):
@@ -74,3 +74,9 @@
     def __repr__(self):
         return (u"WbQuantity(amount=%(amount)s, upperBound=%(upperBound)s, "
                 u"lowerBound=%(lowerBound)s, unit=%(unit)s)" % self.__dict__)
+
+    @staticmethod
+    def _normalize_value(value):
+        if value > 0:
+            value = "+" + str(value)
+        return value
diff --git a/pywikibase/wbtime.py b/pywikibase/wbtime.py
index 6fa8de8..a868a6b 100644
--- a/pywikibase/wbtime.py
+++ b/pywikibase/wbtime.py
@@ -40,7 +40,7 @@
                  'second': 14
                  }
 
-    FORMATSTR = '{0:+012d}-{1:02d}-{2:02d}T{3:02d}:{4:02d}:{5:02d}Z'
+    FORMATSTR = '{0:+04d}-{1:02d}-{2:02d}T{3:02d}:{4:02d}:{5:02d}Z'
 
     def __init__(self, year=None, month=None, day=None,
                  hour=None, minute=None, second=None,
diff --git a/pywikibase/wikibasepage.py b/pywikibase/wikibasepage.py
index 3bbbdf2..3dc6c1d 100644
--- a/pywikibase/wikibasepage.py
+++ b/pywikibase/wikibasepage.py
@@ -27,6 +27,9 @@
     There should be no need to instantiate this directly.
     """
 
+    def __init__(self, id=None):
+        self.id = id
+
     def __eq__(self, other):
         return other.id == self.id
 
@@ -90,7 +93,7 @@
 
     def _diff_to(self, type_key, key_name, value_name, diffto, data):
         assert type_key not in data, 'Key type must be defined in data'
-        source = self._normalizeLanguages(getattr(self, type_key)).copy()
+        source = getattr(self, type_key).copy()
         diffto = {} if not diffto else diffto.get(type_key, {})
         new = set(source.keys())
         for key in diffto:
@@ -121,7 +124,7 @@
 
         self._diff_to('descriptions', 'language', 'value', diffto, data)
 
-        aliases = self._normalizeLanguages(self.aliases).copy()
+        aliases = self.aliases
         if diffto and 'aliases' in diffto:
             for lang in set(diffto['aliases'].keys()) - set(aliases.keys()):
                 aliases[lang] = []
diff --git a/tests/test_wbtime.py b/tests/test_wbtime.py
index 7d91510..dd6d5b2 100644
--- a/tests/test_wbtime.py
+++ b/tests/test_wbtime.py
@@ -30,7 +30,7 @@
         t = self.time1.toWikibase()
         wb_t = {u'after': 0,
                 u'precision': 11,
-                u'time': u'+00000001912-06-23T00:00:00Z',
+                u'time': u'+1912-06-23T00:00:00Z',
                 u'timezone': 0,
                 u'calendarmodel': u'http://www.wikidata.org/entity/Q1985727',
                 u'before': 0}
@@ -44,7 +44,7 @@
 
     def timestr_tests(self):
         t = WbTime(year=2010, hour=12, minute=43, precision=14)
-        self.assertEqual(t.toTimestr(), '+00000002010-01-01T12:43:00Z')
+        self.assertEqual(t.toTimestr(), '+2010-01-01T12:43:00Z')
 
         # Consistency
         self.assertEqual(WbTime.fromTimestr(t.toTimestr()), t)
diff --git a/tests/test_wikibasepage.py b/tests/test_wikibasepage.py
index de1aa1c..daeb103 100644
--- a/tests/test_wikibasepage.py
+++ b/tests/test_wikibasepage.py
@@ -21,6 +21,9 @@
 
     def test_init_wb(self):
         self.assertEqual(self.wb_page.getID(), 'Q7251')
+        wb_page = WikibasePage('Q7251')
+        self.assertNotEqual(self.wb_page, WikibasePage())
+        self.assertEqual(self.wb_page, wb_page)
 
     def test_descriptions(self):
         self.assertEqual(len(self.wb_page.descriptions), 22)
@@ -45,5 +48,15 @@
         self.assertIsInstance(self.wb_page.aliases['en'], list)
         self.assertIsInstance(self.wb_page.aliases['en'][0], basestring)
 
+    def test_to_json(self):
+        content = self._content
+        json_res = self.wb_page.toJSON()
+        self.assertEqual(content['labels'], json_res['labels'])
+        self.assertEqual(content['descriptions'], json_res['descriptions'])
+        self.assertEqual(content['aliases'], json_res['aliases'])
+        for p_number in content['claims']:
+            self.assertEqual(content['claims'][p_number],
+                             json_res['claims'][p_number])
+
 if __name__ == '__main__':
     unittest.main()

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I528405d3b99adfd6389efe7738714b27a4419f90
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/wikibase
Gerrit-Branch: master
Gerrit-Owner: Ladsgroup <[email protected]>
Gerrit-Reviewer: Ladsgroup <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to