diffsync icon indicating copy to clipboard operation
diffsync copied to clipboard

Docs Update: Clarify sublassing DiffSyncModels for different backends

Open tyler-8 opened this issue 3 years ago • 1 comments

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.

tyler-8 avatar Jun 03 '21 04:06 tyler-8

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

dgarros avatar Jun 18 '21 21:06 dgarros