feat: Support hyphen in the tags
authorChristianAvila <redacted>
Fri, 6 Dec 2024 21:43:39 +0000 (16:43 -0500)
committerChristianAvila <redacted>
Fri, 6 Dec 2024 21:43:39 +0000 (16:43 -0500)
This requires an index rebuild that can be set as an environment
variable during startup and is run during the first call.

server/notes/file_system/file_system.py

index a463b41236b72123457fcc604c5b7f8a68f540ea..6393f922688a039da593d9e1a0f81902705cabc9 100644 (file)
@@ -41,9 +41,9 @@ class IndexSchema(SchemaClass):
 \r
 \r
 class FileSystemNotes(BaseNotes):\r
-    TAGS_RE = re.compile(r"(?:(?<=^#)|(?<=\s#))\w+(?=\s|$)")\r
+    TAGS_RE = re.compile(r"(?:(?<=^#)|(?<=\s#))[a-zA-Z0-9_-]+(?=\s|$)")\r
     CODEBLOCK_RE = re.compile(r"`{1,3}.*?`{1,3}", re.DOTALL)\r
-    TAGS_WITH_HASH_RE = re.compile(r"(?:(?<=^)|(?<=\s))#\w+(?=\s|$)")\r
+    TAGS_WITH_HASH_RE = re.compile(r"(?:(?<=^)|(?<=\s))#[a-zA-Z0-9_-]+(?=\s|$)")\r
 \r
     def __init__(self):\r
         self.storage_path = get_env("FLATNOTES_PATH", mandatory=True)\r
@@ -52,7 +52,8 @@ class FileSystemNotes(BaseNotes):
                 f"'{self.storage_path}' is not a valid directory."\r
             )\r
         self.index = self._load_index()\r
-        self._sync_index_with_retry(optimize=True)\r
+        clean = get_env("FLATNOTES_CLEAN_INDEX", default=False, cast_bool=True)\r
+        self._sync_index_with_retry(optimize=True, clean=clean)\r
 \r
     def create(self, data: NoteCreate) -> Note:\r
         """Create a new note."""\r
@@ -196,8 +197,11 @@ class FileSystemNotes(BaseNotes):
         - The content without the tags.\r
         - A set of tags converted to lowercase."""\r
         content_ex_codeblock = re.sub(cls.CODEBLOCK_RE, "", content)\r
+        logger.debug(f"Content without codeblocks: {content_ex_codeblock}")\r
         _, tags = cls._re_extract(cls.TAGS_RE, content_ex_codeblock)\r
+        logger.debug(f"Tags extracted: {tags}")\r
         content_ex_tags, _ = cls._re_extract(cls.TAGS_RE, content)\r
+        logger.debug(f"Content without tags: {content_ex_tags}")\r
         try:\r
             tags = [tag.lower() for tag in tags]\r
             return (content_ex_tags, set(tags))\r
@@ -235,6 +239,7 @@ class FileSystemNotes(BaseNotes):
         indexed = set()\r
         writer = self.index.writer()\r
         if clean:\r
+            logger.info(f"Cleaning index {clean}")\r
             writer.mergetype = writing.CLEAR  # Clear the index\r
         with self.index.searcher() as searcher:\r
             for idx_note in searcher.all_stored_fields():\r
@@ -264,6 +269,7 @@ class FileSystemNotes(BaseNotes):
                     writer, self._get_by_filename(filename)\r
                 )\r
                 logger.info(f"'{filename}' added to index")\r
+\r
         writer.commit(optimize=optimize)\r
         logger.info("Index synchronized")\r
 \r
git clone https://git.99rst.org/PROJECT