jenkins-bot has submitted this change. ( 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/872504 )

Change subject: [Bugfix] Normalize WbTimes sent to Wikidata
......................................................................

[Bugfix] Normalize WbTimes sent to Wikidata

Bug: T325860
Change-Id: I178fa165ac6142a9945c77a661132676d8f498ae
---
M pywikibot/__init__.py
M pywikibot/page/_wikibase.py
M tests/wikibase_tests.py
3 files changed, 33 insertions(+), 4 deletions(-)

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




diff --git a/pywikibot/__init__.py b/pywikibot/__init__.py
index 073b1de..8202f38 100644
--- a/pywikibot/__init__.py
+++ b/pywikibot/__init__.py
@@ -638,7 +638,8 @@
             kwargs['second'] = self.second
         return type(self)(**kwargs)

-    def toTimestr(self, force_iso: bool = False) -> str:
+    def toTimestr(self, force_iso: bool = False,
+                  normalize: bool = False) -> str:
         """
         Convert the data to a UTC date/time string.

@@ -646,8 +647,13 @@
         force_iso.

         :param force_iso: whether the output should be forced to ISO 8601
+        :param normalize: whether the output should be normalized (see
+            :meth:`normalize` for details)
         :return: Timestamp in a format resembling ISO 8601
         """
+        if normalize:
+            return self.normalize().toTimestr(force_iso=force_iso,
+                                              normalize=False)
         if force_iso:
             return Timestamp._ISO8601Format_new.format(
                 self.year, max(1, self.month), max(1, self.day),
@@ -667,13 +673,15 @@
         return Timestamp.fromISOformat(
             self.toTimestr(force_iso=True).lstrip('+'))

-    def toWikibase(self) -> Dict[str, Any]:
+    def toWikibase(self, normalize: bool = False) -> Dict[str, Any]:
         """
         Convert the data to a JSON object for the Wikibase API.

+        :param normalize: Whether to normalize the WbTime object before
+            converting it to a JSON object (see :func:`normalize` for details)
         :return: Wikibase JSON
         """
-        json = {'time': self.toTimestr(),
+        json = {'time': self.toTimestr(normalize=normalize),
                 'precision': self.precision,
                 'after': self.after,
                 'before': self.before,
diff --git a/pywikibot/page/_wikibase.py b/pywikibot/page/_wikibase.py
index d2af3ac..eedbbbd 100644
--- a/pywikibot/page/_wikibase.py
+++ b/pywikibot/page/_wikibase.py
@@ -1922,7 +1922,9 @@
             value = self.getTarget()
         elif self.type == 'commonsMedia':
             value = self.getTarget().title(with_ns=False)
-        elif self.type in ('globe-coordinate', 'time',
+        elif self.type == 'time':
+            value = self.getTarget().toWikibase(normalize=True)
+        elif self.type in ('globe-coordinate',
                            'quantity', 'monolingualtext',
                            'geo-shape', 'tabular-data'):
             value = self.getTarget().toWikibase()
diff --git a/tests/wikibase_tests.py b/tests/wikibase_tests.py
index 88a6a78..d4c2008 100755
--- a/tests/wikibase_tests.py
+++ b/tests/wikibase_tests.py
@@ -284,6 +284,15 @@
         self.assertEqual(t.toTimestr(), '-00000002010-01-01T12:43:00Z')
         self.assertEqual(t.toTimestr(force_iso=True), '-2010-01-01T12:43:00Z')

+        t = pywikibot.WbTime(site=repo, year=2010, hour=12, minute=43,
+                             precision=pywikibot.WbTime.PRECISION['day'])
+        self.assertEqual(t.toTimestr(), '+00000002010-01-01T12:43:00Z')
+        self.assertEqual(t.toTimestr(force_iso=True), '+2010-01-01T12:43:00Z')
+        self.assertEqual(t.toTimestr(normalize=True),
+                         '+00000002010-01-01T00:00:00Z')
+        self.assertEqual(t.toTimestr(force_iso=True, normalize=True),
+                         '+2010-01-01T00:00:00Z')
+
     def test_WbTime_fromTimestr(self):
         """Test WbTime creation from UTC date/time string."""
         repo = self.get_repo()

--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/872504
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.wikimedia.org/r/settings

Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: I178fa165ac6142a9945c77a661132676d8f498ae
Gerrit-Change-Number: 872504
Gerrit-PatchSet: 3
Gerrit-Owner: RPI2026F1 <sarkaraoyan+rpi202...@gmail.com>
Gerrit-Reviewer: Matěj Suchánek <matejsuchane...@gmail.com>
Gerrit-Reviewer: Xqt <i...@gno.de>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged
_______________________________________________
Pywikibot-commits mailing list -- pywikibot-commits@lists.wikimedia.org
To unsubscribe send an email to pywikibot-commits-le...@lists.wikimedia.org

Reply via email to