fix sharing error

This commit is contained in:
Your Name 2023-07-18 17:31:51 -04:00 committed by Henri Dickson
parent af0e3c24a9
commit 85af2783a3
4 changed files with 29 additions and 12 deletions

View file

@ -13,6 +13,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ site_name }} - {% trans '错误' %}</title>
{% include "common_libs.html" with jquery=0 v2=1 %}
{% if url %}<meta http-equiv="refresh" content="3;url={{ url }}">{% endif %}
</head>
<body>
{% include "_header.html" %}

View file

@ -24,6 +24,7 @@ from catalog.models import *
from .renderers import render_md, render_text
from catalog.common import jsondata
from django.db import connection
from django.core.exceptions import PermissionDenied
_logger = logging.getLogger(__name__)
@ -1215,8 +1216,12 @@ class Mark:
else None
)
self.save = lambda **args: None
if not share_mark(self):
raise ValueError("sharing failed")
result, code = share_mark(self)
if not result:
if code == 401:
raise PermissionDenied()
else:
raise ValueError(code)
if self.shelfmember.metadata.get("shared_link") != self.shared_link:
self.shelfmember.metadata["shared_link"] = self.shared_link
self.shelfmember.save()

View file

@ -190,9 +190,20 @@ def mark(request, item_uuid):
share_to_mastodon=share_to_mastodon,
created_time=mark_date,
)
except ValueError as e:
_logger.warn(f"post to mastodon error {e}")
except PermissionDenied as e:
_logger.warn(f"post to mastodon error 401 {request.user}")
return render_relogin(request)
except ValueError as e:
_logger.warn(f"post to mastodon error {e} {request.user}")
err = _("内容长度超出实例限制") if str(e) == "422" else str(e)
return render(
request,
"common/error.html",
{
"msg": _("标记已保存,但是未能分享到联邦宇宙"),
"secondary_msg": err,
},
)
return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
raise BadRequest()

View file

@ -92,12 +92,12 @@ def post_toot(
try:
if update_id:
response = put(url + "/" + update_id, headers=headers, data=payload)
if update_id is None or (response and response.status_code != 200):
if not update_id or (response is not None and response.status_code != 200):
headers["Idempotency-Key"] = random_string_generator(16)
response = post(url, headers=headers, data=payload)
if response and response.status_code == 201:
if response is not None and response.status_code == 201:
response.status_code = 200
if response and response.status_code != 200:
if response is not None and response.status_code != 200:
logger.error(f"Error {url} {response.status_code}")
except Exception:
response = None
@ -394,16 +394,16 @@ def share_mark(mark):
update_id,
spoiler_text,
)
if response and response.status_code in [200, 201]:
if response is not None and response.status_code in [200, 201]:
j = response.json()
if "url" in j:
mark.shared_link = j["url"]
if mark.shared_link:
mark.save(update_fields=["shared_link"])
return True
return True, 200
else:
logger.error(response)
return False
return False, response.status_code if response is not None else -1
def share_review(review):
@ -438,7 +438,7 @@ def share_review(review):
response = post_toot(
user.mastodon_site, content, visibility, user.mastodon_token, False, update_id
)
if response and response.status_code in [200, 201]:
if response is not None and response.status_code in [200, 201]:
j = response.json()
if "url" in j:
review.metadata["shared_link"] = j["url"]
@ -473,7 +473,7 @@ def share_collection(collection, comment, user, visibility_no):
)
content = f"分享{user_str}的收藏单《{collection.title}\n{collection.absolute_url}\n{comment}{tags}"
response = post_toot(user.mastodon_site, content, visibility, user.mastodon_token)
if response and response.status_code in [200, 201]:
if response is not None and response.status_code in [200, 201]:
return True
else:
return False