Exemple #1
0
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
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #4
0
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)
Exemple #5
0
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)
Exemple #6
0
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)