ubottu-web/ubottu/factoids/serializers.py

51 lines
1.8 KiB
Python
Raw Normal View History

import re
import json
2024-03-25 09:42:15 +00:00
from rest_framework import serializers
from .models import Fact
from launchpad.utils import fetch_group_members
2024-03-25 09:42:15 +00:00
class FactSerializer(serializers.ModelSerializer):
author_name = serializers.SerializerMethodField()
value = serializers.SerializerMethodField()
2024-05-07 21:40:10 +00:00
user_ids = serializers.SerializerMethodField()
2024-03-25 09:42:15 +00:00
class Meta:
model = Fact
2024-05-07 21:40:10 +00:00
fields = ['id', 'name', 'user_ids', 'value', 'ftype', 'author_name', 'create_date', 'change_date', 'popularity']
2024-03-25 09:42:15 +00:00
def get_author_name(self, obj):
# Assuming the author field can be null
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\.([^}]+)\}'
2024-05-07 21:40:10 +00:00
matches = re.findall(launchpad_group_pattern, obj.value)
if not matches:
return value
group_name = matches[0]
2024-05-07 21:40:10 +00:00
if group_name.endswith('.mentions'):
return value.replace('{launchpad_group.' + group_name + '}', '')
members = fetch_group_members(group_name)
2024-05-07 21:40:10 +00:00
if not isinstance(members, dict):
return value
if 'mxids' in members:
2024-05-07 21:40:10 +00:00
return value.replace( '{launchpad_group.' + group_name + '}', ' '.join(members['mxids']))
return False
def get_user_ids(self, obj):
value = obj.value.replace('.mentions', '')
launchpad_group_pattern = r'\{launchpad_group\.([^}]+)\}'
matches = re.findall(launchpad_group_pattern, value)
if not matches:
return {}
group_name = matches[0]
members = fetch_group_members(group_name)
if not members:
return {}
if 'mxids' in members:
return members['mxids']
2024-05-07 21:40:10 +00:00
return {}