mirror of
https://github.com/zulip/zulip.git
synced 2026-07-09 21:21:47 +08:00
This migration applies under the assumption that extra_data_json has been populated for all existing and coming audit log entries. - This removes the manual conversions back and forth for extra_data throughout the codebase including the orjson.loads(), orjson.dumps(), and str() calls. - The custom handler used for converting Decimal is removed since DjangoJSONEncoder handles that for extra_data. - We remove None-checks for extra_data because it is now no longer nullable. - Meanwhile, we want the bouncer to support processing RealmAuditLog entries for remote servers before and after the JSONField migration on extra_data. - Since now extra_data should always be a dict for the newer remote server, which is now migrated, the test cases are updated to create RealmAuditLog objects by passing a dict for extra_data before sending over the analytics data. Note that while JSONField allows for non-dict values, a proper remote server always passes a dict for extra_data. - We still test out the legacy extra_data format because not all remote servers have migrated to use JSONField extra_data. This verifies that support for extra_data being a string or None has not been dropped. Co-authored-by: Siddharth Asthana <siddharthasthana31@gmail.com> Signed-off-by: Zixuan James Li <p359101898@gmail.com>
27 lines
1.0 KiB
Python
27 lines
1.0 KiB
Python
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_on_commit
|
|
|
|
|
|
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_on_commit(user_profile.realm, event, [user_profile.id])
|
|
|
|
|
|
def do_delete_realm_export(user_profile: UserProfile, export: RealmAuditLog) -> None:
|
|
export_data = 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 = export_data
|
|
export.save(update_fields=["extra_data"])
|
|
notify_realm_export(user_profile)
|