def gather_new_streams( realm: Realm, recent_streams: List[Stream], # streams only need id and name can_access_public: bool, ) -> Tuple[int, Dict[str, List[str]]]: if can_access_public: new_streams = [ stream for stream in recent_streams if not stream.invite_only ] else: new_streams = [ stream for stream in recent_streams if stream.is_web_public ] base_url = f"{realm.uri}/#narrow/stream/" streams_html = [] streams_plain = [] for stream in new_streams: narrow_url = base_url + encode_stream(stream.id, stream.name) stream_link = f"<a href='{narrow_url}'>{stream.name}</a>" streams_html.append(stream_link) streams_plain.append(stream.name) return len(new_streams), {"html": streams_html, "plain": streams_plain}
def gather_new_streams( user_profile: UserProfile, threshold: datetime.datetime) -> Tuple[int, Dict[str, List[str]]]: if user_profile.is_guest: new_streams = list( get_active_streams(user_profile.realm).filter( is_web_public=True, date_created__gt=threshold)) elif user_profile.can_access_public_streams(): new_streams = list( get_active_streams(user_profile.realm).filter( invite_only=False, date_created__gt=threshold)) base_url = f"{user_profile.realm.uri}/#narrow/stream/" streams_html = [] streams_plain = [] for stream in new_streams: narrow_url = base_url + encode_stream(stream.id, stream.name) stream_link = f"<a href='{narrow_url}'>{stream.name}</a>" streams_html.append(stream_link) streams_plain.append(stream.name) return len(new_streams), {"html": streams_html, "plain": streams_plain}
def get_message_url(event: Dict[str, Any], request_data: Dict[str, Any]) -> str: bot_user = get_user_profile_by_id(event['user_profile_id']) message = event['message'] if message['type'] == 'stream': stream_url_frag = encode_stream(message.get('stream_id'), message['display_recipient']) message_url = ( "%(server)s/#narrow/stream/%(stream)s/subject/%(subject)s/near/%(id)s" % { 'server': bot_user.realm.uri, 'stream': stream_url_frag, 'subject': message['subject'], 'id': str(message['id']) }) else: recipient_emails = ','.join( [recipient['email'] for recipient in message['display_recipient']]) recipient_email_encoded = urllib.parse.quote(recipient_emails).replace( '.', '%2E').replace('%', '.') message_url = ( "%(server)s/#narrow/pm-with/%(recipient_emails)s/near/%(id)s" % { 'server': bot_user.realm.uri, 'recipient_emails': recipient_email_encoded, 'id': str(message['id']) }) return message_url
def get_message_url(event: Dict[str, Any], request_data: Dict[str, Any]) -> str: bot_user = get_user_profile_by_id(event['user_profile_id']) message = event['message'] if message['type'] == 'stream': stream_url_frag = encode_stream(message.get('stream_id'), message['display_recipient']) message_url = ("%(server)s/#narrow/stream/%(stream)s/subject/%(subject)s/near/%(id)s" % {'server': bot_user.realm.uri, 'stream': stream_url_frag, 'subject': message['subject'], 'id': str(message['id'])}) else: recipient_emails = ','.join([recipient['email'] for recipient in message['display_recipient']]) recipient_email_encoded = urllib.parse.quote(recipient_emails).replace('.', '%2E').replace('%', '.') message_url = ("%(server)s/#narrow/pm-with/%(recipient_emails)s/near/%(id)s" % {'server': bot_user.realm.uri, 'recipient_emails': recipient_email_encoded, 'id': str(message['id'])}) return message_url
def gather_new_streams(user_profile: UserProfile, threshold: datetime.datetime) -> Tuple[int, Dict[str, List[str]]]: if user_profile.can_access_public_streams(): new_streams = list(get_active_streams(user_profile.realm).filter( invite_only=False, date_created__gt=threshold)) else: new_streams = [] base_url = "%s/#narrow/stream/" % (user_profile.realm.uri,) streams_html = [] streams_plain = [] for stream in new_streams: narrow_url = base_url + encode_stream(stream.id, stream.name) stream_link = "<a href='%s'>%s</a>" % (narrow_url, stream.name) streams_html.append(stream_link) streams_plain.append(stream.name) return len(new_streams), {"html": streams_html, "plain": streams_plain}