Jelajahi Sumber

Fix serialization

Angel Rey 5 tahun lalu
induk
melakukan
f26c0c6cd8
2 mengubah file dengan 21 tambahan dan 9 penghapusan
  1. 9 1
      archivebox/core/models.py
  2. 12 8
      archivebox/index/__init__.py

+ 9 - 1
archivebox/core/models.py

@@ -50,7 +50,8 @@ class Snapshot(models.Model):
         args = args or self.keys
         args = args or self.keys
         return {
         return {
             key: getattr(self, key)
             key: getattr(self, key)
-            for key in args
+            if key != 'tags' else self.get_tags_str()
+            for key in args 
         }
         }
 
 
     def as_link(self) -> Link:
     def as_link(self) -> Link:
@@ -59,6 +60,13 @@ class Snapshot(models.Model):
     def as_link_with_details(self) -> Link:
     def as_link_with_details(self) -> Link:
         from ..index import load_link_details
         from ..index import load_link_details
         return load_link_details(self.as_link())
         return load_link_details(self.as_link())
+    
+    def get_tags_str(self) -> str:
+        tags = ','.join(
+            tag.name
+            for tag in self.tags.all()
+        ) if self.tags.all() else ''
+        return tags
 
 
     @cached_property
     @cached_property
     def bookmarked(self):
     def bookmarked(self):

+ 12 - 8
archivebox/index/__init__.py

@@ -86,16 +86,20 @@ def merge_links(a: Link, b: Link) -> Link:
     )
     )
 
 
     # all unique, truthy tags
     # all unique, truthy tags
-    tags_a = []
-    if a.tags:
-        tags_a = a.tags.all()
-    tags_b = []
-    if b.tags:
-        tags_b = b.tags.all()
+    #tags_a = []
+    #if a.tags:
+    #    tags_a = a.tags.all()
+    #tags_b = []
+    #if b.tags:
+    #    tags_b = b.tags.all()
    
    
+    #tags_set = (
+    #    set(tag.name.strip() for tag in tags_a)
+    #    | set(tag.name.strip() for tag in tags_b)
+    #)
     tags_set = (
     tags_set = (
-        set(tag.name.strip() for tag in tags_a)
-        | set(tag.name.strip() for tag in tags_b)
+        set(tag.strip() for tag in (a.tags or '').split(','))
+        | set(tag.strip() for tag in (b.tags or '').split(','))
     )
     )
     tags = ','.join(tags_set) or None
     tags = ','.join(tags_set) or None