Skip to content

Docs Update: Clarify sublassing DiffSyncModels for different backends #52

Open
@tyler-8

Description

@tyler-8

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"""
        passclass 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.

Metadata

Metadata

Assignees

Labels

status: acceptedThis issue has been accepted by the maintainers team for implementationstatus: help wantedThis issue is tentatively accepted pending a volunteer committed to its implementationtype: documentation

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions