def GET_happening_now(self): """ Get some basic information about the currently featured live thread. Returns an empty 204 response for api requests if no thread is currently featured. See also: [/api/live/*thread*/about](#GET_api_live_{thread}_about). """ if not is_api() or not feature.is_enabled('live_happening_now'): self.abort404() event_id = NamedGlobals.get(HAPPENING_NOW_KEY, None) if not event_id: response.status_code = 204 return try: event = LiveUpdateEvent._byID(event_id) except NotFound: response.status_code = 204 return else: c.liveupdate_event = event content = Wrapped(event) return pages.LiveUpdateEventPage(content).render()
def GET_happening_now(self): """ Get some basic information about the currently featured live thread. Returns an empty 204 response for api requests if no thread is currently featured. See also: [/api/live/*thread*/about](#GET_api_live_{thread}_about). """ if not is_api() or not feature.is_enabled('live_happening_now'): self.abort404() event_id = NamedGlobals.get(HAPPENING_NOW_KEY, None) if not event_id: response.status_code = 204 return try: event = LiveUpdateEvent._byID(event_id) except NotFound: response.status_code = 204 return else: c.liveupdate_event = event content = Wrapped(event) return pages.LiveUpdateEventPage(content).render()
def __before__(self, event): RedditController.__before__(self) if event: try: c.liveupdate_event = LiveUpdateEvent._byID(event) except tdb_cassandra.NotFound: pass if not c.liveupdate_event: self.abort404() if c.user_is_loggedin: c.liveupdate_permissions = \ c.liveupdate_event.get_permissions(c.user) # revoke some permissions from everyone after closing if c.liveupdate_event.state != "live": c.liveupdate_permissions = (c.liveupdate_permissions .without("update") .without("close") ) if c.user_is_admin: c.liveupdate_permissions = ContributorPermissionSet.SUPERUSER else: c.liveupdate_permissions = ContributorPermissionSet.NONE
def parse_embeds(event_id, liveupdate_id, maxwidth=_EMBED_WIDTH): """Find, scrape, and store any embeddable URLs in this liveupdate. Return the newly altered liveupdate for convenience. Note: This should be used in async contexts only. """ if isinstance(liveupdate_id, basestring): liveupdate_id = uuid.UUID(liveupdate_id) try: event = LiveUpdateEvent._byID( event_id, read_consistency_level=tdb_cassandra.CL.QUORUM) liveupdate = LiveUpdateStream.get_update( event, liveupdate_id, read_consistency_level=tdb_cassandra.CL.QUORUM) except tdb_cassandra.NotFound: g.log.warning("Couldn't find event/liveupdate for embedding: %r / %r", event_id, liveupdate_id) return urls = _extract_isolated_urls(liveupdate.body) liveupdate.media_objects = _scrape_media_objects(urls, maxwidth=maxwidth) liveupdate.mobile_objects = _scrape_mobile_media_objects(urls) LiveUpdateStream.add_update(event, liveupdate) return liveupdate
def parse_embeds(event_id, liveupdate_id, maxwidth=_EMBED_WIDTH): """Find, scrape, and store any embeddable URLs in this liveupdate. Return the newly altered liveupdate for convenience. Note: This should be used in async contexts only. """ if isinstance(liveupdate_id, basestring): liveupdate_id = uuid.UUID(liveupdate_id) try: event = LiveUpdateEvent._byID( event_id, read_consistency_level=tdb_cassandra.CL.QUORUM) liveupdate = LiveUpdateStream.get_update( event, liveupdate_id, read_consistency_level=tdb_cassandra.CL.QUORUM) except tdb_cassandra.NotFound: g.log.warning("Couldn't find event/liveupdate for embedding: %r / %r", event_id, liveupdate_id) return urls = _extract_isolated_urls(liveupdate.body) liveupdate.media_objects = _scrape_media_objects(urls, maxwidth=maxwidth) liveupdate.mobile_objects = _scrape_mobile_media_objects(urls) LiveUpdateStream.add_update(event, liveupdate) return liveupdate
def GET_happening_now(self): current_thread_id = NamedGlobals.get(HAPPENING_NOW_KEY, None) if current_thread_id: current_thread = LiveUpdateEvent._byID(current_thread_id) else: current_thread = None return AdminPage(content=pages.HappeningNowAdmin(current_thread), title='live: happening now', nav_menus=[]).render()
def GET_happening_now(self): featured_event_ids = NamedGlobals.get(HAPPENING_NOW_KEY, None) or {} featured_events = {} for target, event_id in featured_event_ids.iteritems(): event = LiveUpdateEvent._byID(event_id) featured_events[target] = event return AdminPage(content=pages.HappeningNowAdmin(featured_events), title='live: happening now', nav_menus=[]).render()
def __before__(self, event): MinimalController.__before__(self) if event: try: c.liveupdate_event = LiveUpdateEvent._byID(event) except tdb_cassandra.NotFound: pass if not c.liveupdate_event: self.abort404()
def GET_happening_now(self): current_thread_id = NamedGlobals.get(HAPPENING_NOW_KEY, None) if current_thread_id: current_thread = LiveUpdateEvent._byID(current_thread_id) else: current_thread = None return AdminPage( content=pages.HappeningNowAdmin(current_thread), title='live: happening now', nav_menus=[] ).render()
def __before__(self, event): MinimalController.__before__(self) if event: try: c.liveupdate_event = LiveUpdateEvent._byID(event) except tdb_cassandra.NotFound: pass if not c.liveupdate_event: self.abort404()
def get_featured_event(): """Return the currently featured live thread for the given user.""" featured_events = NamedGlobals.get(HAPPENING_NOW_KEY, None) location = geoip.get_request_location(request, c) event_id = None if featured_events: event_id = featured_events.get(location) or featured_events.get("ANY") if not event_id: return None try: return LiveUpdateEvent._byID(event_id) except NotFound: return None
def __before__(self, event): RedditController.__before__(self) if event: try: c.liveupdate_event = LiveUpdateEvent._byID(event) except tdb_cassandra.NotFound: pass if not c.liveupdate_event: self.abort404() c.liveupdate_can_manage = (c.liveupdate_event.state == "live" and (c.user_is_loggedin and c.user_is_admin)) c.liveupdate_can_edit = (c.liveupdate_event.state == "live" and (c.user_is_loggedin and (c.liveupdate_event.is_editor(c.user) or c.user_is_admin)))
def __before__(self, event): RedditController.__before__(self) if event: try: c.liveupdate_event = LiveUpdateEvent._byID(event) except tdb_cassandra.NotFound: pass if not c.liveupdate_event: self.abort404() if c.user_is_loggedin: c.liveupdate_permissions = \ c.liveupdate_event.get_permissions(c.user) # revoke some permissions from everyone after closing if c.liveupdate_event.state != "live": c.liveupdate_permissions = (c.liveupdate_permissions .without("update") .without("close") ) if c.user_is_admin: c.liveupdate_permissions = ContributorPermissionSet.SUPERUSER else: c.liveupdate_permissions = ContributorPermissionSet.NONE if c.liveupdate_event.banned and not c.liveupdate_permissions: error_page = RedditError( title=_("this thread has been banned"), message="", image="subreddit-banned.png", ) request.environ["usable_error_content"] = error_page.render() self.abort403() if (c.liveupdate_event.nsfw and not c.over18 and request.host != g.media_domain and # embeds are special c.render_style == "html"): return self.intermediate_redirect("/over18", sr_path=False)
def __before__(self, event): RedditController.__before__(self) if event: try: c.liveupdate_event = LiveUpdateEvent._byID(event) except tdb_cassandra.NotFound: pass if not c.liveupdate_event: self.abort404() if c.user_is_loggedin: c.liveupdate_permissions = \ c.liveupdate_event.get_permissions(c.user) # revoke some permissions from everyone after closing if c.liveupdate_event.state != "live": c.liveupdate_permissions = (c.liveupdate_permissions .without("update") .without("close") ) if c.user_is_admin: c.liveupdate_permissions = ContributorPermissionSet.SUPERUSER else: c.liveupdate_permissions = ContributorPermissionSet.NONE if c.liveupdate_event.banned and not c.liveupdate_permissions: error_page = RedditError( title=_("this thread has been banned"), message="", image="subreddit-banned.png", ) request.environ["usable_error_content"] = error_page.render() self.abort403() if (c.liveupdate_event.nsfw and not c.over18 and request.host != g.media_domain and # embeds are special c.render_style == "html"): return self.intermediate_redirect("/over18", sr_path=False)
def add_featured_live_thread(controller): """If we have a live thread featured, display it on the homepage.""" if not feature.is_enabled('live_happening_now'): return None # Not on front page if not isinstance(c.site, DefaultSR): return None # Not on first page of front page if getattr(controller, 'listing_obj') and controller.listing_obj.prev: return None event_id = NamedGlobals.get(HAPPENING_NOW_KEY, None) if not event_id: return None try: event = LiveUpdateEvent._byID(event_id) except NotFound: return None else: return pages.LiveUpdateHappeningNowBar(event=event)
def add_featured_live_thread(controller): """If we have a live thread featured, display it on the homepage.""" if not feature.is_enabled('live_happening_now'): return None # Not on front page if not isinstance(c.site, DefaultSR): return None # Not on first page of front page if getattr(controller, 'listing_obj') and controller.listing_obj.prev: return None event_id = NamedGlobals.get(HAPPENING_NOW_KEY, None) if not event_id: return None try: event = LiveUpdateEvent._byID(event_id) except NotFound: return None else: return pages.LiveUpdateHappeningNowBar(event=event)
def thing_lookup(self, names): return LiveUpdateEvent._byID(names, return_dict=False)
def thing_lookup(self, names): return LiveUpdateEvent._byID(names, return_dict=False)