32 lines
1.4 KiB
Python
32 lines
1.4 KiB
Python
from abc import ABC, abstractmethod
|
|
|
|
import django.db.models
|
|
from django.db.models import QuerySet
|
|
from typing import List, Tuple
|
|
import benchcoach.models
|
|
|
|
class AbstractSyncEngine(ABC):
|
|
'''
|
|
Class used for importing and syncing Bench Coach models.
|
|
'''
|
|
models: List[benchcoach.models.BenchcoachModel]
|
|
|
|
@abstractmethod
|
|
def sync(self, qs: django.db.models.QuerySet = None, instance: benchcoach.models.BenchcoachModel = None, direction='download') -> List[Tuple[django.db.models.Model, bool]]:
|
|
'''
|
|
Syncs the input from/to the service. Either a query set or instance should be provided, but not both.
|
|
It does not create Bench Coach objects.
|
|
:param qs: the queryset to be updated.
|
|
:param instance: the instance to be updated.
|
|
:param direction: the sync direction, either 'download' or 'upload'. If set to 'download', it will be updated from the service, if set to upload, its contents
|
|
will be sent to the service
|
|
:return: a list of BenchCoach objects that have been iterated (but not necessarily changed) during sync.
|
|
'''
|
|
|
|
@abstractmethod
|
|
def import_items(self):
|
|
'''
|
|
Imports the items from the service. It imports all models specified in the class property 'model'.
|
|
It creates BenchCoach objects, but should not create duplicates.
|
|
:return: a list of BenchCoach objects that have been iterated (but not necessarily changed) during import.
|
|
''' |