From d95a756ce932ac7683d7f2373f447671a7a4cf62 Mon Sep 17 00:00:00 2001 From: Daniel Konrad Date: Sun, 27 Nov 2022 00:11:14 +0100 Subject: [PATCH 1/4] return diff to improve dx --- diffsync/__init__.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/diffsync/__init__.py b/diffsync/__init__.py index 9a0dd039..9b8bd4f8 100644 --- a/diffsync/__init__.py +++ b/diffsync/__init__.py @@ -533,7 +533,7 @@ def sync_from( flags: DiffSyncFlags = DiffSyncFlags.NONE, callback: Optional[Callable[[Text, int, int], None]] = None, diff: Optional[Diff] = None, - ): # pylint: disable=too-many-arguments: + ) -> Diff: # pylint: disable=too-many-arguments: """Synchronize data from the given source DiffSync object into the current DiffSync object. Args: @@ -543,6 +543,10 @@ def sync_from( callback (function): Function with parameters (stage, current, total), to be called at intervals as the calculation of the diff and subsequent sync proceed. diff (Diff): An existing diff to be used rather than generating a completely new diff. + Returns: + Diff: Diff between origin object and source + Raises: + DiffClassMismatch: The provided diff's class does not match the diff_class """ if diff_class and diff: if not isinstance(diff, diff_class): @@ -557,6 +561,8 @@ def sync_from( result = syncer.perform_sync() if result: self.sync_complete(source, diff, flags, syncer.base_logger) + + return diff def sync_to( self, @@ -565,7 +571,7 @@ def sync_to( flags: DiffSyncFlags = DiffSyncFlags.NONE, callback: Optional[Callable[[Text, int, int], None]] = None, diff: Optional[Diff] = None, - ): # pylint: disable=too-many-arguments + ) -> Diff: # pylint: disable=too-many-arguments """Synchronize data from the current DiffSync object into the given target DiffSync object. Args: @@ -575,8 +581,12 @@ def sync_to( callback (function): Function with parameters (stage, current, total), to be called at intervals as the calculation of the diff and subsequent sync proceed. diff (Diff): An existing diff that will be used when determining what needs to be synced. + Returns: + Diff: Diff between origin object and target + Raises: + DiffClassMismatch: The provided diff's class does not match the diff_class """ - target.sync_from(self, diff_class=diff_class, flags=flags, callback=callback, diff=diff) + return target.sync_from(self, diff_class=diff_class, flags=flags, callback=callback, diff=diff) def sync_complete( self, From a29dc61add2c3b37d7660e92c491dd3655739548 Mon Sep 17 00:00:00 2001 From: Daniel Konrad Date: Sun, 27 Nov 2022 10:32:45 +0100 Subject: [PATCH 2/4] added tests for sync_to and sync_from methods --- tests/unit/test_diffsync.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/unit/test_diffsync.py b/tests/unit/test_diffsync.py index 6d2588b5..600e273c 100644 --- a/tests/unit/test_diffsync.py +++ b/tests/unit/test_diffsync.py @@ -42,7 +42,9 @@ def test_diffsync_diff_self_with_no_data_has_no_diffs(generic_diffsync): def test_diffsync_sync_self_with_no_data_is_noop(generic_diffsync): generic_diffsync.sync_complete = mock.Mock() generic_diffsync.sync_from(generic_diffsync) - generic_diffsync.sync_to(generic_diffsync) + diff = generic_diffsync.sync_to(generic_diffsync) + # Check if the returning Diff object has diffs + assert not diff.has_diffs() # sync_complete() should only be called if something actually changed assert not generic_diffsync.sync_complete.called @@ -486,12 +488,13 @@ def test_diffsync_sync_to_w_diff(backend_a, backend_b): backend_a.diff_from = mock.Mock() backend_a.diff_to = mock.Mock() # Perform full sync - backend_b.sync_to(backend_a, diff=diff) + result_diff = backend_b.sync_to(backend_a, diff=diff) # Assert none of the diff methods have been called assert not backend_b.diff_from.called assert not backend_b.diff_to.called assert not backend_a.diff_from.called assert not backend_a.diff_to.called + assert result_diff.has_diffs() def test_diffsync_sync_from_w_diff(backend_a, backend_b): From 258599617b93a049908902f7e594cb534ed299cc Mon Sep 17 00:00:00 2001 From: Daniel Konrad Date: Mon, 28 Nov 2022 12:45:42 +0100 Subject: [PATCH 3/4] run black on init --- diffsync/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/diffsync/__init__.py b/diffsync/__init__.py index 9b8bd4f8..b9129030 100644 --- a/diffsync/__init__.py +++ b/diffsync/__init__.py @@ -561,7 +561,7 @@ def sync_from( result = syncer.perform_sync() if result: self.sync_complete(source, diff, flags, syncer.base_logger) - + return diff def sync_to( From e43ae8fbe7833ce8b83e54e1034d23c6aa5055de Mon Sep 17 00:00:00 2001 From: Daniel Konrad Date: Mon, 28 Nov 2022 13:36:33 +0100 Subject: [PATCH 4/4] moved pylint: disable=too-many-arguments comment --- diffsync/__init__.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/diffsync/__init__.py b/diffsync/__init__.py index b9129030..5b9b61f7 100644 --- a/diffsync/__init__.py +++ b/diffsync/__init__.py @@ -526,14 +526,14 @@ def load_from_dict(self, data: Dict): # Synchronization between DiffSync instances # ------------------------------------------------------------------------------ - def sync_from( + def sync_from( # pylint: disable=too-many-arguments self, source: "DiffSync", diff_class: Type[Diff] = Diff, flags: DiffSyncFlags = DiffSyncFlags.NONE, callback: Optional[Callable[[Text, int, int], None]] = None, diff: Optional[Diff] = None, - ) -> Diff: # pylint: disable=too-many-arguments: + ) -> Diff: """Synchronize data from the given source DiffSync object into the current DiffSync object. Args: @@ -564,14 +564,14 @@ def sync_from( return diff - def sync_to( + def sync_to( # pylint: disable=too-many-arguments self, target: "DiffSync", diff_class: Type[Diff] = Diff, flags: DiffSyncFlags = DiffSyncFlags.NONE, callback: Optional[Callable[[Text, int, int], None]] = None, diff: Optional[Diff] = None, - ) -> Diff: # pylint: disable=too-many-arguments + ) -> Diff: """Synchronize data from the current DiffSync object into the given target DiffSync object. Args: