2024-04-05 02:45:27 +00:00
|
|
|
import re
|
|
|
|
import json
|
2024-03-25 09:42:15 +00:00
|
|
|
from rest_framework import serializers
|
|
|
|
from .models import Fact
|
2024-04-05 02:45:27 +00:00
|
|
|
from launchpad.utils import fetch_group_members
|
2024-03-25 09:42:15 +00:00
|
|
|
|
|
|
|
class FactSerializer(serializers.ModelSerializer):
|
|
|
|
author_name = serializers.SerializerMethodField()
|
2024-04-05 02:45:27 +00:00
|
|
|
value = serializers.SerializerMethodField()
|
2024-03-25 09:42:15 +00:00
|
|
|
class Meta:
|
|
|
|
model = Fact
|
|
|
|
fields = ['id', 'name', 'value', 'ftype', 'author_name', 'create_date', 'change_date', 'popularity']
|
|
|
|
|
|
|
|
def get_author_name(self, obj):
|
|
|
|
# Assuming the author field can be null
|
2024-04-05 02:45:27 +00:00
|
|
|
return obj.author.username if obj.author else None
|
|
|
|
|
|
|
|
def get_value(self, obj):
|
|
|
|
value = obj.value # The original text with placeholders
|
|
|
|
launchpad_group_pattern = r'\{launchpad_group\.([^}]+)\}'
|
|
|
|
matches = re.findall(launchpad_group_pattern, value)
|
|
|
|
if not matches:
|
|
|
|
return value
|
|
|
|
group_name = matches[0]
|
|
|
|
members = fetch_group_members(group_name)
|
|
|
|
if members is None:
|
|
|
|
return value
|
|
|
|
if 'mxids' in members:
|
|
|
|
return value.replace( '{launchpad_group.' + group_name + '}', 'https://matrix.to/#/' + ' https://matrix.to/#/'.join(members['mxids']))
|
|
|
|
|
|
|
|
return value
|
|
|
|
|