72 lines
3.4 KiB
Python
72 lines
3.4 KiB
Python
from datetime import datetime, timedelta
|
|
from enumerations import ReplicationPackageStatusEnum
|
|
from models import CorrectingReplicationOutPackage, ReplicantInfo
|
|
from typing import List
|
|
import xml.etree.ElementTree as ET
|
|
|
|
|
|
class CorrectingReplicationService:
|
|
EVENT_TYPE: str = 'correcting_replication'
|
|
object_list_size: int = 0
|
|
deleted_objects_count: int = 0
|
|
PACKAGE_TAG_NAME: str = 'package'
|
|
PACKAGE_ID_ATTRIBUTE_NAME: str = 'pkg_id'
|
|
SERVER_VERSION_ATTRIBUTE_NAME: str = 'server_version'
|
|
SERVER_ID_ATTRIBUTE_NAME: str = 'server_id'
|
|
OBJECTS_TAG_NAME: str = 'objects'
|
|
OBJECT_TAG_NAME: str = 'object'
|
|
OBJECT_ID_ATTRIBUTE_NAME: str = 'id'
|
|
IS_RSC_OBJECT: str = 'is_rsc'
|
|
OBJECT_SOURCE_ATTRIBUTE_NAME: str = 'source'
|
|
OBJECT_VERSION_ATTRIBUTE_NAME: str = 'version'
|
|
METADATA_VERSION_ATTRIBUTE_NAME: str = 'md_version'
|
|
ACTUAL_VERSION_DATE_ATTRIBUTE_NAME: str = 'version_date'
|
|
OBJECT_MISSING_ATTRIBUTE_NAME: str = 'missing'
|
|
CLASSIFIER_VERSION_ATTRIBUTE_NAME: str = 'metadata_clientVersion'
|
|
RESULT_TAG_NAME: str = 'result'
|
|
RESULT_MESSAGE_ATTRIBUTE_NAME: str = 'result_message'
|
|
VERSION_ID_ATTRIBUTE_NAME: str = 'version_id'
|
|
VERSION_SOURCE_ATTRIBUTE_NAME: str = 'version_source'
|
|
|
|
def start_correcting_replication(self, replicant_id: str, replication_period: int, replication_timeout: int,
|
|
manual_run: bool):
|
|
replicant = ReplicantInfo()
|
|
self.start_correcting_replication(replicant, replication_period, replication_timeout, manual_run)
|
|
|
|
def start_correcting_replication(self, except_replicant_id: List[str], replication_period: int,
|
|
replication_timeout: int, manual_run: bool):
|
|
pass
|
|
|
|
def start_correcting_replication(self, replicant: ReplicantInfo, replication_period: int, replication_timeout: int,
|
|
manual_run: bool):
|
|
pass
|
|
|
|
def create_replication_package(self, replicant: ReplicantInfo, replication_period: int, replication_timeout: int) -> CorrectingReplicationOutPackage:
|
|
pkg = CorrectingReplicationOutPackage()
|
|
pkg.filter_string = replicant.filter_string
|
|
pkg.replicant_id = replicant.replicant_id
|
|
pkg.server_address = replicant.server_address
|
|
pkg.replication_period = replication_period
|
|
pkg.replication_timeout = replication_timeout
|
|
pkg.status = ReplicationPackageStatusEnum.SENT_REQUEST_TO_CHILD
|
|
date = datetime.now()
|
|
pkg.replication_date = date
|
|
if replication_period:
|
|
delta = timedelta(days=-replication_period)
|
|
pkg.from_date = date + delta
|
|
if replication_timeout:
|
|
delta = timedelta(seconds=replication_timeout)
|
|
pkg.replication_timeout_date = date + delta
|
|
return pkg
|
|
|
|
def get_package_xml(self, pkg: CorrectingReplicationOutPackage, request_uuid: str) -> str:
|
|
request_xml: ET.Element = xml_service.get_common_request_xml(request_uuid)
|
|
element = ET.SubElement(request_xml, self.PACKAGE_TAG_NAME, {
|
|
self.PACKAGE_ID_ATTRIBUTE_NAME: pkg.package_id,
|
|
self.SERVER_VERSION_ATTRIBUTE_NAME: '1.0.0',
|
|
self.SERVER_ID_ATTRIBUTE_NAME: 'ipd-server',
|
|
self.CLASSIFIER_VERSION_ATTRIBUTE_NAME: classifier.,
|
|
})
|
|
xml_service.set_request_uuid(request_xml, request_uuid)
|
|
return ET.tostring(request_xml, encoding='unicode', xml_declaration=True)
|