fix import/export
This commit is contained in:
parent
0411550335
commit
e31a2f3ab1
7 changed files with 33 additions and 30 deletions
|
@ -33,7 +33,7 @@ def export_marks_task(user):
|
|||
user.preference.export_status["marks_pending"] = True
|
||||
user.preference.save(update_fields=["export_status"])
|
||||
filename = GenerateDateUUIDMediaFilePath(
|
||||
None, "f.xlsx", settings.MEDIA_ROOT + settings.EXPORT_FILE_PATH_ROOT
|
||||
None, "f.xlsx", settings.MEDIA_ROOT + "/" + settings.EXPORT_FILE_PATH_ROOT
|
||||
)
|
||||
if not os.path.exists(os.path.dirname(filename)):
|
||||
os.makedirs(os.path.dirname(filename))
|
||||
|
@ -266,7 +266,11 @@ def export_marks_task(user):
|
|||
]:
|
||||
ws = wb.create_sheet(title=label)
|
||||
q = q_item_in_category(category)
|
||||
reviews = Review.objects.filter(owner=user).filter(q).order_by("created_time")
|
||||
reviews = (
|
||||
Review.objects.filter(owner=user.identity)
|
||||
.filter(q)
|
||||
.order_by("created_time")
|
||||
)
|
||||
ws.append(review_heading)
|
||||
for review in reviews:
|
||||
title = review.title
|
||||
|
|
|
@ -31,7 +31,7 @@ def _fetch_remote_image(url):
|
|||
f = GenerateDateUUIDMediaFilePath(
|
||||
None, f"x.{ext}", settings.MARKDOWNX_MEDIA_PATH
|
||||
)
|
||||
file = settings.MEDIA_ROOT + f
|
||||
file = settings.MEDIA_ROOT + "/" + f
|
||||
local_url = settings.MEDIA_URL + f
|
||||
os.makedirs(os.path.dirname(file), exist_ok=True)
|
||||
with open(file, "wb") as binary_file:
|
||||
|
@ -93,8 +93,12 @@ class DoubanImporter:
|
|||
uploaded_file, read_only=True, data_only=True, keep_links=False
|
||||
)
|
||||
wb.close()
|
||||
file = settings.MEDIA_ROOT + GenerateDateUUIDMediaFilePath(
|
||||
None, "x.xlsx", settings.SYNC_FILE_PATH_ROOT
|
||||
file = (
|
||||
settings.MEDIA_ROOT
|
||||
+ "/"
|
||||
+ GenerateDateUUIDMediaFilePath(
|
||||
None, "x.xlsx", settings.SYNC_FILE_PATH_ROOT
|
||||
)
|
||||
)
|
||||
os.makedirs(os.path.dirname(file), exist_ok=True)
|
||||
with open(file, "wb") as destination:
|
||||
|
@ -106,7 +110,8 @@ class DoubanImporter:
|
|||
django_rq.get_queue("import").enqueue(
|
||||
self.import_from_file_task, job_id=jid
|
||||
)
|
||||
except Exception:
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
return False
|
||||
return True
|
||||
|
||||
|
@ -248,7 +253,7 @@ class DoubanImporter:
|
|||
if not item:
|
||||
logger.warning(f"{self.user} | match/fetch {url} failed")
|
||||
return
|
||||
mark = Mark(self.user, item)
|
||||
mark = Mark(self.user.identity, item)
|
||||
if self.mode == 0 and (
|
||||
mark.shelf_type == shelf_type
|
||||
or mark.shelf_type == ShelfType.COMPLETE
|
||||
|
@ -264,7 +269,7 @@ class DoubanImporter:
|
|||
)
|
||||
print("+", end="", flush=True)
|
||||
if tags:
|
||||
TagManager.tag_item(item, self.user, tags)
|
||||
TagManager.tag_item(item, self.user.identity, tags)
|
||||
return 1
|
||||
|
||||
def import_review_sheet(self, worksheet, sheet_name):
|
||||
|
@ -353,7 +358,7 @@ class DoubanImporter:
|
|||
return
|
||||
if (
|
||||
self.mode == 1
|
||||
and Review.objects.filter(owner=self.user, item=item).exists()
|
||||
and Review.objects.filter(owner=self.user.identity, item=item).exists()
|
||||
):
|
||||
return 2
|
||||
content = re.sub(
|
||||
|
@ -374,5 +379,7 @@ class DoubanImporter:
|
|||
"body": content,
|
||||
"visibility": self.visibility,
|
||||
}
|
||||
Review.objects.update_or_create(owner=self.user, item=item, defaults=params)
|
||||
Review.objects.update_or_create(
|
||||
owner=self.user.identity, item=item, defaults=params
|
||||
)
|
||||
return 1
|
||||
|
|
|
@ -59,7 +59,7 @@ class GoodreadsImporter:
|
|||
+ "\n\nImported from [Goodreads]("
|
||||
+ url
|
||||
+ ")",
|
||||
owner=user,
|
||||
owner=user.identity,
|
||||
)
|
||||
for book in shelf["books"]:
|
||||
collection.append_item(book["book"], note=book["review"])
|
||||
|
@ -77,7 +77,7 @@ class GoodreadsImporter:
|
|||
shelf_url = shelves.get(shelf_type)
|
||||
shelf = cls.parse_shelf(shelf_url, user)
|
||||
for book in shelf["books"]:
|
||||
mark = Mark(user, book["book"])
|
||||
mark = Mark(user.identity, book["book"])
|
||||
if (
|
||||
(
|
||||
mark.shelf_type == shelf_type
|
||||
|
|
|
@ -33,7 +33,7 @@ class OPMLImporter:
|
|||
with set_actor(self.user):
|
||||
if self.mode == 1:
|
||||
collection = Collection.objects.create(
|
||||
owner=self.user, title=f"{self.user.display_name}的播客订阅列表"
|
||||
owner=self.user.identity, title=f"{self.user.display_name}的播客订阅列表"
|
||||
)
|
||||
for feed in feeds:
|
||||
logger.info(f"{self.user} import {feed.url}")
|
||||
|
@ -43,7 +43,7 @@ class OPMLImporter:
|
|||
continue
|
||||
item = res.item
|
||||
if self.mode == 0:
|
||||
mark = Mark(self.user, item)
|
||||
mark = Mark(self.user.identity, item)
|
||||
if mark.shelfmember:
|
||||
logger.info(f"{self.user} marked, skip {feed.url}")
|
||||
skip += 1
|
||||
|
|
|
@ -86,10 +86,9 @@ def export_reviews(request):
|
|||
@login_required
|
||||
def export_marks(request):
|
||||
if request.method == "POST":
|
||||
if not request.user.preference.export_status.get("marks_pending"):
|
||||
django_rq.get_queue("export").enqueue(export_marks_task, request.user)
|
||||
request.user.preference.export_status["marks_pending"] = True
|
||||
request.user.preference.save()
|
||||
django_rq.get_queue("export").enqueue(export_marks_task, request.user)
|
||||
request.user.preference.export_status["marks_pending"] = True
|
||||
request.user.preference.save()
|
||||
messages.add_message(request, messages.INFO, _("导出已开始。"))
|
||||
return redirect(reverse("users:data"))
|
||||
else:
|
||||
|
|
|
@ -17,7 +17,6 @@ from django.utils.deconstruct import deconstructible
|
|||
from django.utils.translation import gettext_lazy as _
|
||||
from loguru import logger
|
||||
|
||||
from common.utils import GenerateDateUUIDMediaFilePath
|
||||
from management.models import Announcement
|
||||
from mastodon.api import *
|
||||
from takahe.utils import Takahe
|
||||
|
|
|
@ -88,7 +88,7 @@
|
|||
value=""
|
||||
placeholder="例如 https://www.goodreads.com/user/show/12345-janedoe"
|
||||
required>
|
||||
<input type="submit" value="{% trans '导入' %}" id="uploadBtn" />
|
||||
<input type="submit" value="{% trans '导入' %}" />
|
||||
</div>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -128,7 +128,7 @@
|
|||
<br>
|
||||
选择OPML文件
|
||||
<input type="file" name="file" id="excel" required accept=".opml,.xml">
|
||||
<input type="submit" value="{% trans '导入' %}" id="uploadBtn" />
|
||||
<input type="submit" value="{% trans '导入' %}" />
|
||||
</div>
|
||||
</form>
|
||||
</details>
|
||||
|
@ -140,14 +140,8 @@
|
|||
method="post"
|
||||
enctype="multipart/form-data">
|
||||
{% csrf_token %}
|
||||
{% if export_status.marks_pending %}
|
||||
<input type="submit"
|
||||
value="{% trans '正在导出标记、短评和评论' %}"
|
||||
id="uploadBtn"
|
||||
disabled />
|
||||
{% else %}
|
||||
<input type="submit" value="{% trans '导出标记、短评和评论' %}" id="uploadBtn" />
|
||||
{% endif %}
|
||||
<input type="submit"
|
||||
{% if export_status.marks_pending %} value="{% trans '正在导出标记、短评和评论' %}" onclick="return confirm('短期重复导出可能有无法预期的效果,确定现在导出吗?')" {% else %} value="{% trans '导出标记、短评和评论' %}" {% endif %} />
|
||||
{% if export_status.marks_file %}
|
||||
<a href="{% url 'users:export_marks' %}" download>下载 {{ export_status.marks_date }} 的导出</a>
|
||||
{% endif %}
|
||||
|
@ -159,7 +153,7 @@
|
|||
<summary>{% trans '重置所有标记和短评可见性' %}</summary>
|
||||
<form action="{% url 'users:reset_visibility' %}" method="post">
|
||||
{% csrf_token %}
|
||||
<input type="submit" value="{% trans '重置' %}" id="uploadBtn" />
|
||||
<input type="submit" value="{% trans '重置' %}" />
|
||||
<div>
|
||||
<input type="radio" name="visibility" id="visPublic" value="0" checked>
|
||||
<label for="visPublic">{% trans '公开' %}</label>
|
||||
|
|
Loading…
Add table
Reference in a new issue