Title: [270365] trunk/Tools
Revision
270365
Author
[email protected]
Date
2020-12-02 13:03:17 -0800 (Wed, 02 Dec 2020)

Log Message

[webkitscmpy] Json encode Contributor
https://bugs.webkit.org/show_bug.cgi?id=217932
<rdar://problem/70462473>

Reviewed by Dewei Zhu.

* Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
* Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:
(Commit.Encoder.default): Use Json encoding for Contributor.
* Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py:
(Contributor.Encoder): Encode Contributor object as dictionary.
* Scripts/libraries/webkitscmpy/webkitscmpy/test/commit_unittest.py:
* Scripts/libraries/webkitscmpy/webkitscmpy/test/contributor_unittest.py:
(TestContributor.test_json_encode):
(TestContributor.test_json_decode):
* Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py:

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (270364 => 270365)


--- trunk/Tools/ChangeLog	2020-12-02 20:33:27 UTC (rev 270364)
+++ trunk/Tools/ChangeLog	2020-12-02 21:03:17 UTC (rev 270365)
@@ -1,3 +1,22 @@
+2020-12-02  Jonathan Bedard  <[email protected]>
+
+        [webkitscmpy] Json encode Contributor
+        https://bugs.webkit.org/show_bug.cgi?id=217932
+        <rdar://problem/70462473>
+
+        Reviewed by Dewei Zhu.
+
+        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Bump version.
+        * Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:
+        (Commit.Encoder.default): Use Json encoding for Contributor.
+        * Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py:
+        (Contributor.Encoder): Encode Contributor object as dictionary.
+        * Scripts/libraries/webkitscmpy/webkitscmpy/test/commit_unittest.py:
+        * Scripts/libraries/webkitscmpy/webkitscmpy/test/contributor_unittest.py:
+        (TestContributor.test_json_encode):
+        (TestContributor.test_json_decode):
+        * Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py:
+
 2020-12-02  Megan Gardner  <[email protected]>
 
         Create and draw app highlights

Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py (270364 => 270365)


--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py	2020-12-02 20:33:27 UTC (rev 270364)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py	2020-12-02 21:03:17 UTC (rev 270365)
@@ -46,7 +46,7 @@
         "Please install webkitcorepy with `pip install webkitcorepy --extra-index-url <package index URL>`"
     )
 
-version = Version(0, 4, 3)
+version = Version(0, 4, 4)
 
 AutoInstall.register(Package('dateutil', Version(2, 8, 1), pypi_name='python-dateutil'))
 AutoInstall.register(Package('fasteners', Version(0, 15, 0)))

Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py (270364 => 270365)


--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py	2020-12-02 20:33:27 UTC (rev 270364)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py	2020-12-02 21:03:17 UTC (rev 270365)
@@ -48,7 +48,7 @@
                     result[attribute] = value
 
             if obj.author:
-                result['author'] = obj.author.email or obj.author.name
+                result['author'] = Contributor.Encoder().default(obj.author)
 
             if obj.identifier is not None:
                 result['identifier'] = str(obj)
@@ -194,6 +194,8 @@
             )
             if not self.author:
                 raise ValueError("'{}' does not match a known contributor")
+        elif author and isinstance(author, dict) and author.get('name'):
+            self.author = Contributor(author.get('name'), author.get('emails'))
         elif author and not isinstance(author, Contributor):
             raise TypeError("Expected 'author' to be of type {}, got '{}'".format(Contributor, author))
         else:

Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py (270364 => 270365)


--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py	2020-12-02 20:33:27 UTC (rev 270364)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/contributor.py	2020-12-02 21:03:17 UTC (rev 270365)
@@ -20,6 +20,7 @@
 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+import json
 import re
 
 from webkitcorepy import string_utils
@@ -34,6 +35,18 @@
     by_email = dict()
     by_name = dict()
 
+    class Encoder(json.JSONEncoder):
+
+        def default(self, obj):
+            if not isinstance(obj, Contributor):
+                return super(Contributor.Encoder, self).default(obj)
+
+            result = dict(name=obj.name)
+            if obj.emails:
+                result['emails'] = [str(email) for email in obj.emails]
+
+            return result
+
     @classmethod
     def clear(cls):
         cls.by_email = dict()

Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/commit_unittest.py (270364 => 270365)


--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/commit_unittest.py	2020-12-02 20:33:27 UTC (rev 270364)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/commit_unittest.py	2020-12-02 21:03:17 UTC (rev 270365)
@@ -228,8 +228,10 @@
                 branch='main',
                 identifier='1@main',
                 timestamp=1000,
-                author='[email protected]',
-                message='Message',
+                author=dict(
+                    name='Jonathan Bedard',
+                    emails=['[email protected]'],
+                ), message='Message',
             ), json.loads(json.dumps(Commit(
                 revision=1,
                 hash='c3bd784f8b88bd03f64467ddd3304ed8be28acbe',

Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/contributor_unittest.py (270364 => 270365)


--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/contributor_unittest.py	2020-12-02 20:33:27 UTC (rev 270364)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/contributor_unittest.py	2020-12-02 21:03:17 UTC (rev 270365)
@@ -20,6 +20,7 @@
 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+import json
 import unittest
 
 from webkitcorepy import string_utils
@@ -137,3 +138,25 @@
             str(Contributor(u'Michael Br\u00fcning', ['[email protected]'])),
             string_utils.encode(u'Michael Br\u00fcning <[email protected]>', target_type=str),
         )
+
+    def test_json_encode(self):
+        self.assertDictEqual(
+            dict(
+                name='Jonathan Bedard',
+                emails=['[email protected]', '[email protected]'],
+            ), json.loads(json.dumps(Contributor(
+                name='Jonathan Bedard',
+                emails=['[email protected]', '[email protected]'],
+            ), cls=Contributor.Encoder))
+        )
+
+    def test_json_decode(self):
+        contributor_a = Contributor(
+            name='Jonathan Bedard',
+            emails=['[email protected]', '[email protected]'],
+        )
+
+        dictionary = json.loads(json.dumps(contributor_a, cls=Contributor.Encoder))
+        contributor_b = Contributor(**dictionary)
+
+        self.assertEqual(contributor_a, contributor_b)

Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py (270364 => 270365)


--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py	2020-12-02 20:33:27 UTC (rev 270364)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/find_unittest.py	2020-12-02 21:03:17 UTC (rev 270365)
@@ -169,8 +169,10 @@
                 identifier='3@main',
                 hash='1abe25b443e985f93b90d830e4a7e3731336af4d',
                 revision=4,
-                author='[email protected]',
-                timestamp=1601663000,
+                author=dict(
+                    name='Jonathan Bedard',
+                    emails=['[email protected]'],
+                ), timestamp=1601663000,
                 branch='main',
                 message='4th commit\nsvn-id: https://svn.webkit.orgrepository/repository/trunk@4 268f45cc-cd09-0410-ab3c-d52691b4dbfc',
             ))
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to