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',
))