From 9c27ea1f6f3504fe5919e3e4d3baec40c7463004 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Thu, 11 Sep 2025 20:16:05 +0200 Subject: [PATCH] chore: Implement Annotation sort and equality dunders --- papis_extract/annotation.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/papis_extract/annotation.py b/papis_extract/annotation.py index d3dadb9..0df9d39 100644 --- a/papis_extract/annotation.py +++ b/papis_extract/annotation.py @@ -1,4 +1,5 @@ import math +from types import NotImplementedType from typing import Any, cast import chevron @@ -144,3 +145,35 @@ class Annotation: def __repr__(self) -> str: return f"Annotation(type={self.type}, file='{self.file}', color={self.color}, tag='{self.tag}', page={self.page}, content='{self.content}', note='{self.note}', minimum_similarity_color={self.minimum_similarity_color})" + + def __eq__(self, other: object) -> bool | NotImplementedType: + if not isinstance(other, Annotation): + return NotImplemented + + return ( + self.content.lower(), + self.note.lower(), + self.type, + self.file, + self.color, + self.tag, + self.page, + ) == ( + other.content.lower(), + other.note.lower(), + other.type, + other.file, + other.color, + other.tag, + other.page, + ) + + def __lt__(self, other: object) -> bool: + if not hasattr(other, "page"): + return NotImplemented + + other = cast("Annotation", other) + selfpage = self.page if self.page != 0 else float("inf") + otherpage = other.page if other.page != 0 else float("inf") + + return selfpage < otherpage