mirror of
https://github.com/zulip/zulip.git
synced 2025-11-05 22:43:42 +00:00
Extract topic.py library.
We start by including functions that do custom queries for topic history. The goal of this library is partly to quarantine the legacy "subject" column on Message.
This commit is contained in:
@@ -217,90 +217,6 @@ def realm_user_count(realm: Realm) -> int:
|
||||
def activity_change_requires_seat_update(user: UserProfile) -> bool:
|
||||
return user.realm.has_seat_based_plan and not user.is_bot
|
||||
|
||||
def generate_topic_history_from_db_rows(rows: List[Tuple[str, int]]) -> List[Dict[str, Any]]:
|
||||
canonical_topic_names = {} # type: Dict[str, Tuple[int, str]]
|
||||
|
||||
# Sort rows by max_message_id so that if a topic
|
||||
# has many different casings, we use the most
|
||||
# recent row.
|
||||
rows = sorted(rows, key=lambda tup: tup[1])
|
||||
|
||||
for (topic_name, max_message_id) in rows:
|
||||
canonical_name = topic_name.lower()
|
||||
canonical_topic_names[canonical_name] = (max_message_id, topic_name)
|
||||
|
||||
history = []
|
||||
for canonical_topic, (max_message_id, topic_name) in canonical_topic_names.items():
|
||||
history.append(dict(
|
||||
name=topic_name,
|
||||
max_id=max_message_id)
|
||||
)
|
||||
return sorted(history, key=lambda x: -x['max_id'])
|
||||
|
||||
def get_topic_history_for_stream(user_profile: UserProfile,
|
||||
recipient: Recipient,
|
||||
public_history: bool) -> List[Dict[str, Any]]:
|
||||
cursor = connection.cursor()
|
||||
if public_history:
|
||||
query = '''
|
||||
SELECT
|
||||
"zerver_message"."subject" as topic,
|
||||
max("zerver_message".id) as max_message_id
|
||||
FROM "zerver_message"
|
||||
WHERE (
|
||||
"zerver_message"."recipient_id" = %s
|
||||
)
|
||||
GROUP BY (
|
||||
"zerver_message"."subject"
|
||||
)
|
||||
ORDER BY max("zerver_message".id) DESC
|
||||
'''
|
||||
cursor.execute(query, [recipient.id])
|
||||
else:
|
||||
query = '''
|
||||
SELECT
|
||||
"zerver_message"."subject" as topic,
|
||||
max("zerver_message".id) as max_message_id
|
||||
FROM "zerver_message"
|
||||
INNER JOIN "zerver_usermessage" ON (
|
||||
"zerver_usermessage"."message_id" = "zerver_message"."id"
|
||||
)
|
||||
WHERE (
|
||||
"zerver_usermessage"."user_profile_id" = %s AND
|
||||
"zerver_message"."recipient_id" = %s
|
||||
)
|
||||
GROUP BY (
|
||||
"zerver_message"."subject"
|
||||
)
|
||||
ORDER BY max("zerver_message".id) DESC
|
||||
'''
|
||||
cursor.execute(query, [user_profile.id, recipient.id])
|
||||
rows = cursor.fetchall()
|
||||
cursor.close()
|
||||
|
||||
return generate_topic_history_from_db_rows(rows)
|
||||
|
||||
def get_topic_history_for_web_public_stream(recipient: Recipient) -> List[Dict[str, Any]]:
|
||||
cursor = connection.cursor()
|
||||
query = '''
|
||||
SELECT
|
||||
"zerver_message"."subject" as topic,
|
||||
max("zerver_message".id) as max_message_id
|
||||
FROM "zerver_message"
|
||||
WHERE (
|
||||
"zerver_message"."recipient_id" = %s
|
||||
)
|
||||
GROUP BY (
|
||||
"zerver_message"."subject"
|
||||
)
|
||||
ORDER BY max("zerver_message".id) DESC
|
||||
'''
|
||||
cursor.execute(query, [recipient.id])
|
||||
rows = cursor.fetchall()
|
||||
cursor.close()
|
||||
|
||||
return generate_topic_history_from_db_rows(rows)
|
||||
|
||||
def send_signup_message(sender: UserProfile, admin_realm_signup_notifications_stream: str,
|
||||
user_profile: UserProfile, internal: bool=False,
|
||||
realm: Optional[Realm]=None) -> None:
|
||||
|
||||
Reference in New Issue
Block a user