fix ndjson exporter

This commit is contained in:
mein Name 2025-03-06 11:23:15 -05:00 committed by Henri Dickson
parent 2e409eb560
commit 25e3536985

View file

@ -6,15 +6,20 @@ import tempfile
from django.conf import settings from django.conf import settings
from django.utils import timezone from django.utils import timezone
from loguru import logger
from catalog.common import ProxiedImageDownloader from catalog.common import ProxiedImageDownloader
from common.utils import GenerateDateUUIDMediaFilePath from common.utils import GenerateDateUUIDMediaFilePath
from journal.models import ShelfMember from journal.models import (
from journal.models.collection import Collection Collection,
from journal.models.common import Content Content,
from journal.models.note import Note Note,
from journal.models.review import Review Review,
from journal.models.shelf import ShelfLogEntry ShelfLogEntry,
ShelfMember,
Tag,
TagMember,
)
from takahe.models import Post from takahe.models import Post
from users.models import Task from users.models import Task
@ -72,7 +77,13 @@ class NdjsonExporter(Task):
os.path.join(settings.MEDIA_ROOT, url[len(settings.MEDIA_URL) :]) os.path.join(settings.MEDIA_ROOT, url[len(settings.MEDIA_URL) :])
) )
if p.startswith(settings.MEDIA_ROOT): if p.startswith(settings.MEDIA_ROOT):
shutil.copy2(p, attachment_path) try:
shutil.copy2(p, attachment_path)
except Exception as e:
logger.error(
f"error copying {p} to {attachment_path}",
extra={"exception": e},
)
return p return p
return url return url
@ -104,7 +115,13 @@ class NdjsonExporter(Task):
dest = os.path.join( dest = os.path.join(
attachment_path, os.path.basename(a.file.name) attachment_path, os.path.basename(a.file.name)
) )
shutil.copy2(a.file.path, dest) try:
shutil.copy2(a.file.path, dest)
except Exception as e:
logger.error(
f"error copying {a.file.path} to {dest}",
extra={"exception": e},
)
collections = Collection.objects.filter(owner=user.identity) collections = Collection.objects.filter(owner=user.identity)
for c in collections: for c in collections:
@ -121,16 +138,35 @@ class NdjsonExporter(Task):
} }
f.write(json.dumps(o, default=str) + "\n") f.write(json.dumps(o, default=str) + "\n")
tags = Tag.objects.filter(owner=user.identity)
for t in tags:
total += 1
o = {
"type": "Tag",
"name": t.title,
"visibility": t.visibility,
"pinned": t.pinned,
}
f.write(json.dumps(o, default=str) + "\n")
tags = TagMember.objects.filter(owner=user.identity)
for t in tags:
total += 1
o = {
"type": "TagMember",
"content": t.ap_object,
"visibility": t.visibility,
"metadata": t.metadata,
}
f.write(json.dumps(o, default=str) + "\n")
marks = ShelfMember.objects.filter(owner=user.identity) marks = ShelfMember.objects.filter(owner=user.identity)
for m in marks: for m in marks:
total += 1 total += 1
o = { o = {
"type": "ShelfMember", "type": "ShelfMember",
"item": self.ref(m.item), "content": m.ap_object,
"status": m.shelf_type,
"visibility": m.visibility, "visibility": m.visibility,
"metadata": m.metadata, "metadata": m.metadata,
"published": self.created_time.isoformat(),
} }
f.write(json.dumps(o, default=str) + "\n") f.write(json.dumps(o, default=str) + "\n")
@ -140,8 +176,9 @@ class NdjsonExporter(Task):
o = { o = {
"type": "ShelfLog", "type": "ShelfLog",
"item": self.ref(log.item), "item": self.ref(log.item),
"status": log.shelf_type,
"posts": list(log.all_post_ids()), "posts": list(log.all_post_ids()),
"timestamp": log.created_time, "timestamp": log.timestamp,
} }
f.write(json.dumps(o, default=str) + "\n") f.write(json.dumps(o, default=str) + "\n")
@ -154,7 +191,13 @@ class NdjsonExporter(Task):
o = {"type": "post", "post": p.to_mastodon_json()} o = {"type": "post", "post": p.to_mastodon_json()}
for a in p.attachments.all(): for a in p.attachments.all():
dest = os.path.join(attachment_path, os.path.basename(a.file.name)) dest = os.path.join(attachment_path, os.path.basename(a.file.name))
shutil.copy2(a.file.path, dest) try:
shutil.copy2(a.file.path, dest)
except Exception as e:
logger.error(
f"error copying {a.file.path} to {dest}",
extra={"exception": e},
)
f.write(json.dumps(o, default=str) + "\n") f.write(json.dumps(o, default=str) + "\n")
filename = os.path.join(temp_folder_path, "catalog.ndjson") filename = os.path.join(temp_folder_path, "catalog.ndjson")