diffsync
diffsync copied to clipboard
Docs Update: Clarify sublassing DiffSyncModels for different backends
Environment
- DiffSync version: 1.3.0
Proposed Functionality
The README makes mention of extending a "base" DiffSyncModel for handling CRUD actions in a backend, but doesn't do a great job of visualizing this concept.
you need to extend your DiffSyncModel class(es) to define your own create, update and/or delete methods for each model.
I think extending the example out a little more would go a long way to showing how to build your models and adapters.
class Device(DiffSyncModel):
"""Example model of a network Device."""
_modelname = "device"
_identifiers = ("name",)
_attributes = ()
_children = {"interface": "interfaces"}
name: str
site_name: Optional[str] # note that this attribute is NOT included in _attributes
role: Optional[str] # note that this attribute is NOT included in _attributes
interfaces: List = list()
class SystemADevice(Device):
system_A_unique_field: Optional[str] = None
@classmethod
def create(cls, diffsync, ids, attrs):
"""Talk to SystemA to create device"""
pass
class SystemBDevice(Device):
system_B_unique_field: Optional[str] = None
@classmethod
def create(cls, diffsync, ids, attrs):
"""Talk to SystemB to create device"""
pass
Use Case
This should help newbies (like myself) to get a better idea of how to architect a diffsync-based integration.
I've created a new example that partially address this issue #53 but nonetheless we should plan to have a dedicated section of the doc on this