def next_talks(query=None): """ A dictionary with keys the seminar_ids and values datetimes (either the next talk in that seminar, or datetime.max if no talk scheduled so that they sort at the end. """ if query is None: query = { "end_time": { "$gte": datetime.now(pytz.UTC) }, "hidden": False } # ignore hidden talks by default ans = defaultdict(lambda: pytz.UTC.localize(datetime.max)) from seminars.talk import _counter as talks_counter _selecter = SQL(""" SELECT DISTINCT ON (seminar_id) {0} FROM (SELECT DISTINCT ON (seminar_id, seminar_ctr) {1} FROM {2} ORDER BY seminar_id, seminar_ctr, id DESC) tmp{3} """) for rec in search_distinct(db.talks, _selecter, talks_counter, db.talks._search_iterator, query, projection=["seminar_id", "start_time"], sort=["seminar_id", "start_time"]): ans[rec["seminar_id"]] = rec["start_time"] return ans
def seminars_search(*args, **kwds): """ Replacement for db.seminars.search to account for versioning, return WebSeminar objects. Doesn't support split_ors or raw. Always computes count. """ objects = kwds.pop("objects", True) col_projection = (len(args) > 1 and isinstance(args[1], str) or "projection" in kwds and isinstance(kwds["projection"], str)) if "organizer_dict" in kwds: organizer_dict = kwds.pop("organizer_dict") elif objects and not col_projection: organizer_dict = all_organizers() else: organizer_dict = {} # unused in this case sanitized = kwds.pop("sanitized", False) if sanitized: table = sanitized_table("seminars") else: table = db.seminars more = kwds.get("more", False) return search_distinct( table, _selecter, _counter, _iterator(organizer_dict, objects=objects, more=more), *args, **kwds)
def talks_search(*args, **kwds): """ Replacement for db.talks.search to account for versioning, return WebTalk objects. Doesn't support split_ors or raw. Always computes count. """ return search_distinct(db.talks, _selecter, _counter, _iterator, *args, **kwds)
def seminars_search(*args, **kwds): """ Replacement for db.seminars.search to account for versioning, return WebSeminar objects. Doesn't support split_ors or raw. Always computes count. """ organizer_dict = kwds.pop("organizer_dict", {}) return search_distinct(db.seminars, _selecter, _counter, _iterator(organizer_dict), *args, **kwds)
def talks_search(*args, **kwds): """ Replacement for db.talks.search to account for versioning, return WebTalk objects. Doesn't support split_ors or raw. Always computes count. """ seminar_dict = kwds.pop("seminar_dict", {}) objects = kwds.pop("objects", True) return search_distinct(db.talks, _selecter, _counter, _iterator(seminar_dict, objects=objects), *args, **kwds)
def talks_search(*args, **kwds): """ Replacement for db.talks.search to account for versioning, return WebTalk objects. Doesn't support split_ors or raw. Always computes count. """ seminar_dict = kwds.pop("seminar_dict", {}) objects = kwds.pop("objects", True) sanitized = kwds.pop("sanitized", False) if sanitized: table = sanitized_table("talks") else: table = db.talks more = kwds.get("more", False) return search_distinct(table, _selecter, _counter, _iterator(seminar_dict, objects=objects, more=more), *args, **kwds)