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