Пример #1
0
def by_feed(feed_slug, start, age):
    latest_query = '''
        SELECT time
        FROM timeseries
        WHERE feed = ? AND
              time <= ?
        ORDER BY time DESC
        LIMIT 1;
    '''
    entries_query = '''
        SELECT  feed, entry
        FROM    timeseries
        WHERE   feed = ? AND
                time > ? AND time <= ?
        ORDER BY time DESC;
    '''
    with timeseries() as ts:
        arguments = (feed_slug, start.isoformat() + 'Z')
        try:
            (latest,), = ts.execute(latest_query, arguments)
        except ValueError:
            latest = start
        else:
            latest = datetime_from_iso(latest)
        arguments = (feed_slug, (latest - age).isoformat() + 'Z', latest.isoformat() + 'Z')
        yield from from_timeseries_cursor(ts.execute(entries_query, arguments))
Пример #2
0
def feed_stats():
    query = """
    SELECT  feed,
            COUNT(*),
            MIN(time),
            MAX(time)
    FROM    timeseries
    GROUP BY feed;
    """
    stats = defaultdict(lambda: (0, None, None))
    with timeseries() as ts:
        stats.update({
            feed_slug: (count, datetime_from_iso(min_time), datetime_from_iso(max_time))
            for feed_slug, count, min_time, max_time in ts.execute(query)
        })
    return stats
Пример #3
0
def full_entry(feed_slug, entry_slug):
    feed_dir = join(STORAGE_ROOT, 'feeds', feed_slug)
    entry_dir = join(feed_dir, entry_slug)

    with open_file_from(feed_dir, 'feed.json', 'r') as feed_file, \
         open_file_from(entry_dir, 'entry.json', 'r') as entry_file, \
         open_file_from(entry_dir, 'entry.html', 'r') as entry_html:

        entry = json.load(entry_file)
        entry['published'] = datetime_from_iso(entry['published'])
        entry['feed'] = json.load(feed_file)
        entry['feed']['slug'] = feed_slug
        entry['body'] = entry_html.read()
        return entry
Пример #4
0
def date_from_entry_slug(entry_slug):
    if entry_slug[19] == '.':
        date_part = entry_slug[:26]
    else:
        date_part = entry_slug[:19]
    return datetime_from_iso(date_part + 'Z')