diff --git a/zerver/actions/realm_export.py b/zerver/actions/realm_export.py new file mode 100644 index 0000000000..f59c009bcf --- /dev/null +++ b/zerver/actions/realm_export.py @@ -0,0 +1,31 @@ +import orjson +from django.utils.timezone import now as timezone_now + +from zerver.lib.export import get_realm_exports_serialized +from zerver.lib.upload import delete_export_tarball +from zerver.models import RealmAuditLog, UserProfile +from zerver.tornado.django_api import send_event + + +def notify_realm_export(user_profile: UserProfile) -> None: + # In the future, we may want to send this event to all realm admins. + event = dict(type="realm_export", exports=get_realm_exports_serialized(user_profile)) + send_event(user_profile.realm, event, [user_profile.id]) + + +def do_delete_realm_export(user_profile: UserProfile, export: RealmAuditLog) -> None: + # Give mypy a hint so it knows `orjson.loads` + # isn't being passed an `Optional[str]`. + export_extra_data = export.extra_data + assert export_extra_data is not None + export_data = orjson.loads(export_extra_data) + export_path = export_data.get("export_path") + + if export_path: + # Allow removal even if the export failed. + delete_export_tarball(export_path) + + export_data.update(deleted_timestamp=timezone_now().timestamp()) + export.extra_data = orjson.dumps(export_data).decode() + export.save(update_fields=["extra_data"]) + notify_realm_export(user_profile) diff --git a/zerver/lib/actions.py b/zerver/lib/actions.py index 12c52512f2..c0e83bb35f 100644 --- a/zerver/lib/actions.py +++ b/zerver/lib/actions.py @@ -85,7 +85,6 @@ from zerver.lib.exceptions import ( StreamWithIDDoesNotExistError, ZephyrMessageAlreadySentException, ) -from zerver.lib.export import get_realm_exports_serialized from zerver.lib.external_accounts import DEFAULT_EXTERNAL_ACCOUNTS from zerver.lib.i18n import get_language_name from zerver.lib.markdown import MessageRenderingResult, topic_links @@ -177,7 +176,6 @@ from zerver.lib.types import ( from zerver.lib.upload import ( claim_attachment, delete_avatar_image, - delete_export_tarball, delete_message_image, upload_emoji_image, ) @@ -7667,30 +7665,6 @@ def do_send_realm_reactivation_email(realm: Realm, *, acting_user: Optional[User ) -def notify_realm_export(user_profile: UserProfile) -> None: - # In the future, we may want to send this event to all realm admins. - event = dict(type="realm_export", exports=get_realm_exports_serialized(user_profile)) - send_event(user_profile.realm, event, [user_profile.id]) - - -def do_delete_realm_export(user_profile: UserProfile, export: RealmAuditLog) -> None: - # Give mypy a hint so it knows `orjson.loads` - # isn't being passed an `Optional[str]`. - export_extra_data = export.extra_data - assert export_extra_data is not None - export_data = orjson.loads(export_extra_data) - export_path = export_data.get("export_path") - - if export_path: - # Allow removal even if the export failed. - delete_export_tarball(export_path) - - export_data.update(deleted_timestamp=timezone_now().timestamp()) - export.extra_data = orjson.dumps(export_data).decode() - export.save(update_fields=["extra_data"]) - notify_realm_export(user_profile) - - def get_topic_messages(user_profile: UserProfile, stream: Stream, topic_name: str) -> List[Message]: query = UserMessage.objects.filter( user_profile=user_profile, diff --git a/zerver/views/realm_export.py b/zerver/views/realm_export.py index 727f1fc472..4571a4e9db 100644 --- a/zerver/views/realm_export.py +++ b/zerver/views/realm_export.py @@ -7,8 +7,8 @@ from django.utils.timezone import now as timezone_now from django.utils.translation import gettext as _ from analytics.models import RealmCount +from zerver.actions.realm_export import do_delete_realm_export, notify_realm_export from zerver.decorator import require_realm_admin -from zerver.lib.actions import do_delete_realm_export, notify_realm_export from zerver.lib.exceptions import JsonableError from zerver.lib.export import get_realm_exports_serialized from zerver.lib.queue import queue_json_publish diff --git a/zerver/worker/queue_processors.py b/zerver/worker/queue_processors.py index 6de7cdcb0d..840d85f93c 100644 --- a/zerver/worker/queue_processors.py +++ b/zerver/worker/queue_processors.py @@ -47,6 +47,7 @@ from sentry_sdk import add_breadcrumb, configure_scope from zulip_bots.lib import extract_query_without_mention from zerver.actions.invites import do_send_confirmation_email +from zerver.actions.realm_export import notify_realm_export from zerver.context_processors import common_context from zerver.lib.actions import ( do_mark_stream_messages_as_read, @@ -55,7 +56,6 @@ from zerver.lib.actions import ( do_update_user_activity_interval, do_update_user_presence, internal_send_private_message, - notify_realm_export, render_incoming_message, ) from zerver.lib.bot_lib import EmbeddedBotHandler, EmbeddedBotQuitException, get_bot_handler