def _redirect_legacy_id(): if not request.view_args or request.endpoint in _non_standard_id_endpoints: return key = event_id = None if 'confId' in request.view_args: key = 'confId' event_id = request.view_args['confId'] elif 'event_id' in request.view_args: key = 'event_id' event_id = request.view_args['event_id'] if event_id is None or not is_legacy_id(event_id): return if request.method != 'GET': raise BadRequest('Unexpected non-GET request with legacy event ID') mapping = LegacyEventMapping.find_first(legacy_event_id=event_id) if mapping is None: raise NotFound(f'Legacy event {event_id} does not exist') request.view_args[key] = str(mapping.event_id) return redirect( url_for(request.endpoint, **dict(request.args.to_dict(), **request.view_args)), 301)
def event_or_shorturl(confId, shorturl_namespace=False, force_overview=False): func = None event_ = Event.get(int(confId)) if confId.isdigit() else None if event_ and event_.is_deleted: raise NotFound(_('This event has been deleted.')) elif event_: # For obvious reasons an event id always comes first. # If it's used within the short url namespace we redirect to the event namespace, otherwise # we call the RH to display the event if shorturl_namespace: func = lambda: redirect(event_.url) else: request.view_args['confId'] = int(request.view_args['confId']) func = lambda: RHDisplayEvent().process() else: shorturl_event = (Event.query .filter(db.func.lower(Event.url_shortcut) == confId.lower(), ~Event.is_deleted) .one_or_none()) if (shorturl_namespace or config.ROUTE_OLD_URLS) and shorturl_event: if shorturl_namespace: # Correct namespace => redirect to the event func = lambda: redirect(shorturl_event.url) else: # Old event namespace => 301-redirect to the new shorturl first to get Google etc. to update it func = lambda: redirect(shorturl_event.short_url, 301) elif is_legacy_id(confId): mapping = LegacyEventMapping.find_first(legacy_event_id=confId) if mapping is not None: url = url_for('events.display', confId=mapping.event_id) func = lambda: redirect(url, 301) if func is None: raise NotFound(_('An event with this ID/shortcut does not exist.')) return func()
def event_or_shorturl(confId, shorturl_namespace=False, force_overview=False): func = None event_ = Event.get(int(confId)) if confId.isdigit() else None if event_ and event_.is_deleted: raise NotFound(_('This event has been deleted.')) elif event_: # For obvious reasons an event id always comes first. # If it's used within the short url namespace we redirect to the event namespace, otherwise # we call the RH to display the event if shorturl_namespace: func = lambda: redirect(event_.url) else: request.view_args['confId'] = int(request.view_args['confId']) func = lambda: RHDisplayEvent().process() else: shorturl_event = (Event.query.filter( db.func.lower(Event.url_shortcut) == confId.lower(), ~Event.is_deleted).one_or_none()) if (shorturl_namespace or config.ROUTE_OLD_URLS) and shorturl_event: if shorturl_namespace: # Correct namespace => redirect to the event func = lambda: redirect(shorturl_event.url) else: # Old event namespace => 301-redirect to the new shorturl first to get Google etc. to update it func = lambda: redirect(shorturl_event.short_url, 301) elif is_legacy_id(confId): mapping = LegacyEventMapping.find_first(legacy_event_id=confId) if mapping is not None: url = url_for('events.display', confId=mapping.event_id) func = lambda: redirect(url, 301) if func is None: raise NotFound(_('An event with this ID/shortcut does not exist.')) return func()
def getById(self, id, quiet=False): id = str(id) if is_legacy_id(id): mapping = LegacyEventMapping.find_first(legacy_event_id=id) id = str(mapping.event_id) if mapping is not None else None event = self._getIdx().get(id) if id is not None else None if event is None and not quiet: raise NotFoundError( _("The event with id '{}' does not exist or has been deleted" ).format(id), title=_("Event not found")) return event
def _event_or_shorturl(confId, shorturl_namespace=False, ovw=False): from MaKaC.conference import ConferenceHolder from MaKaC.common.url import ShortURLMapper func = None with DBMgr.getInstance().global_connection(): ch = ConferenceHolder() su = ShortURLMapper() if ch.hasKey(confId): # For obvious reasons an event id always comes first. # If it's used within the short url namespace we redirect to the event namespace, otherwise # we call the RH to display the event if shorturl_namespace: url = UHConferenceDisplay.getURL(ch.getById(confId)) func = lambda: redirect(url) else: params = request.args.to_dict() params['confId'] = confId if ovw: params['ovw'] = 'True' func = lambda: conferenceDisplay.RHConferenceDisplay().process( params) elif (shorturl_namespace or app.config['INDICO_COMPAT_ROUTES']) and su.hasKey(confId): if shorturl_namespace: # Correct namespace => redirect to the event url = UHConferenceDisplay.getURL(su.getById(confId)) func = lambda: redirect(url) else: # Old event namespace => 301-redirect to the new shorturl first to get Google etc. to update it url = url_for('.shorturl', confId=confId) func = lambda: redirect(url, 301) elif is_legacy_id(confId): mapping = LegacyEventMapping.find_first(legacy_event_id=confId) if mapping is not None: url = url_for('event.conferenceDisplay', confId=mapping.event_id) func = lambda: redirect(url, 301) if func is None: raise NotFound( _('The specified event with id or tag "{}" does not exist or has been deleted' ).format(confId)) return func()
def _event_or_shorturl(confId, shorturl_namespace=False, ovw=False): from MaKaC.conference import ConferenceHolder from MaKaC.common.url import ShortURLMapper func = None with DBMgr.getInstance().global_connection(): ch = ConferenceHolder() su = ShortURLMapper() if ch.hasKey(confId): # For obvious reasons an event id always comes first. # If it's used within the short url namespace we redirect to the event namespace, otherwise # we call the RH to display the event if shorturl_namespace: url = UHConferenceDisplay.getURL(ch.getById(confId)) func = lambda: redirect(url) else: params = request.args.to_dict() params['confId'] = confId if ovw: params['ovw'] = 'True' func = lambda: conferenceDisplay.RHConferenceDisplay().process(params) elif (shorturl_namespace or app.config['INDICO_COMPAT_ROUTES']) and su.hasKey(confId): if shorturl_namespace: # Correct namespace => redirect to the event url = UHConferenceDisplay.getURL(su.getById(confId)) func = lambda: redirect(url) else: # Old event namespace => 301-redirect to the new shorturl first to get Google etc. to update it url = url_for('.shorturl', confId=confId) func = lambda: redirect(url, 301) elif is_legacy_id(confId): mapping = LegacyEventMapping.find_first(legacy_event_id=confId) if mapping is not None: url = url_for('event.conferenceDisplay', confId=mapping.event_id) func = lambda: redirect(url, 301) if func is None: raise NotFound(_('The specified event with id or tag "{}" does not exist or has been deleted').format(confId)) return func()
def _redirect_legacy_id(): if not request.view_args or request.endpoint in _shorturl_endpoints: return key = event_id = None if 'confId' in request.view_args: key = 'confId' event_id = request.view_args['confId'] elif 'event_id' in request.view_args: key = 'event_id' event_id = request.view_args['event_id'] if event_id is None or not is_legacy_id(event_id): return if request.method != 'GET': raise BadRequest('Unexpected non-GET request with legacy event ID') mapping = LegacyEventMapping.find_first(legacy_event_id=event_id) if mapping is None: raise NotFound('Legacy event {} does not exist'.format(event_id)) request.view_args[key] = unicode(mapping.event_id) return redirect(url_for(request.endpoint, **dict(request.args.to_dict(), **request.view_args)), 301)
def _redirect_legacy_id(): if not request.view_args or request.endpoint in _non_standard_id_endpoints: return key = event_id = None if "confId" in request.view_args: key = "confId" event_id = request.view_args["confId"] elif "event_id" in request.view_args: key = "event_id" event_id = request.view_args["event_id"] if event_id is None or not is_legacy_id(event_id): return if request.method != "GET": raise BadRequest("Unexpected non-GET request with legacy event ID") mapping = LegacyEventMapping.find_first(legacy_event_id=event_id) if mapping is None: raise NotFound("Legacy event {} does not exist".format(event_id)) request.view_args[key] = unicode(mapping.event_id) return redirect(url_for(request.endpoint, **dict(request.args.to_dict(), **request.view_args)), 301)