caselawclient.managers.merge

 1import caselawclient.managers.merge.checks as checks
 2from caselawclient.models.documents import Document
 3from caselawclient.types import SuccessFailureMessageTuple
 4
 5
 6def _combine_list_of_successfailure_results(
 7    validations: list[SuccessFailureMessageTuple],
 8) -> SuccessFailureMessageTuple:
 9    """Given a list of SuccessFailureMessageTuples, combine the success/failure states and any messages into a single new object representing the overall success/failure state."""
10    success = True
11    messages: list[str] = []
12
13    for validation in validations:
14        if validation.success is False:
15            success = False
16
17        messages += validation.messages
18
19    return SuccessFailureMessageTuple(success, messages)
20
21
22class MergeManager:
23    @classmethod
24    def check_document_is_safe_as_merge_source(cls, source_document: Document) -> SuccessFailureMessageTuple:
25        """
26        Is the given document safe to be considered as a merge source?
27        """
28
29        return _combine_list_of_successfailure_results(
30            [
31                checks.check_document_is_not_version(source_document),
32                checks.check_document_has_only_one_version(source_document),
33                checks.check_document_has_never_been_published(source_document),
34                checks.check_document_is_safe_to_delete(source_document),
35            ]
36        )
37
38    @classmethod
39    def check_source_document_is_safe_to_merge_into_target(
40        cls, source_document: Document, target_document: Document
41    ) -> SuccessFailureMessageTuple:
42        """Is the given source document safe to merge into a given target?"""
43
44        return _combine_list_of_successfailure_results(
45            [
46                checks.check_documents_are_not_same_document(source_document, target_document),
47                checks.check_document_is_not_version(target_document),
48                checks.check_documents_are_same_type(source_document, target_document),
49                checks.check_source_document_is_newer_than_target(source_document, target_document),
50            ]
51        )
class MergeManager:
23class MergeManager:
24    @classmethod
25    def check_document_is_safe_as_merge_source(cls, source_document: Document) -> SuccessFailureMessageTuple:
26        """
27        Is the given document safe to be considered as a merge source?
28        """
29
30        return _combine_list_of_successfailure_results(
31            [
32                checks.check_document_is_not_version(source_document),
33                checks.check_document_has_only_one_version(source_document),
34                checks.check_document_has_never_been_published(source_document),
35                checks.check_document_is_safe_to_delete(source_document),
36            ]
37        )
38
39    @classmethod
40    def check_source_document_is_safe_to_merge_into_target(
41        cls, source_document: Document, target_document: Document
42    ) -> SuccessFailureMessageTuple:
43        """Is the given source document safe to merge into a given target?"""
44
45        return _combine_list_of_successfailure_results(
46            [
47                checks.check_documents_are_not_same_document(source_document, target_document),
48                checks.check_document_is_not_version(target_document),
49                checks.check_documents_are_same_type(source_document, target_document),
50                checks.check_source_document_is_newer_than_target(source_document, target_document),
51            ]
52        )
@classmethod
def check_document_is_safe_as_merge_source( cls, source_document: caselawclient.models.documents.Document) -> caselawclient.types.SuccessFailureMessageTuple:
24    @classmethod
25    def check_document_is_safe_as_merge_source(cls, source_document: Document) -> SuccessFailureMessageTuple:
26        """
27        Is the given document safe to be considered as a merge source?
28        """
29
30        return _combine_list_of_successfailure_results(
31            [
32                checks.check_document_is_not_version(source_document),
33                checks.check_document_has_only_one_version(source_document),
34                checks.check_document_has_never_been_published(source_document),
35                checks.check_document_is_safe_to_delete(source_document),
36            ]
37        )

Is the given document safe to be considered as a merge source?

@classmethod
def check_source_document_is_safe_to_merge_into_target( cls, source_document: caselawclient.models.documents.Document, target_document: caselawclient.models.documents.Document) -> caselawclient.types.SuccessFailureMessageTuple:
39    @classmethod
40    def check_source_document_is_safe_to_merge_into_target(
41        cls, source_document: Document, target_document: Document
42    ) -> SuccessFailureMessageTuple:
43        """Is the given source document safe to merge into a given target?"""
44
45        return _combine_list_of_successfailure_results(
46            [
47                checks.check_documents_are_not_same_document(source_document, target_document),
48                checks.check_document_is_not_version(target_document),
49                checks.check_documents_are_same_type(source_document, target_document),
50                checks.check_source_document_is_newer_than_target(source_document, target_document),
51            ]
52        )

Is the given source document safe to merge into a given target?