networktocode / diffsync

A utility library for comparing and synchronizing different datasets.
https://diffsync.readthedocs.io/
Other
155 stars 26 forks source link

Have a DiffSyncModel property (like a datetime) be a tiebreaker if there is a diff #200

Open draggeta opened 1 year ago

draggeta commented 1 year ago

Environment

Proposed Functionality

I do not know if this is possible with a custom diff, but I would love to have the capability to check if items should be synchronized based on a value like modified date.

Use Case

Basically if an object looks like this:

class Issue(DiffSyncModel):
    _modelname = "issue"
    _identifiers = ("id",)
    _shortname = ()
    _attributes = ("assignee",)
    _children = {}

    id: str
    assignee: str
    modified_date: datetime.DateTime

I'd like to be able to decide which side wins (if there is a diff) based on the modified_date. This would mean that modified_date is ignored in the diff unless there is a difference. In those cases it will be the tiebreaker.

Kircheneer commented 1 year ago

So what you are proposing is to have an attribute on a model that decides what the direction of the sync should be? As in, you instantiate both of your DiffSync subclass instances, and then instead of calling sync_from or sync_to, your proposal is to just call something like diffsync_a.sync(diffsync_b) and have each individual model decide which record "wins"?

draggeta commented 1 year ago

Hi @Kircheneer,

It could be a sync method or a call to sync_to or sync_from, where diffsync will use the same property to check if it should overwrite the destination (or not).