Ejemplo n.º 1
0
def update_podcast_subscribers(podcast_id):
    """ Updates the subscriber count of a podcast """

    try:
        podcast = podcast_by_id(podcast_id)

        # calculate current number of subscribers
        subscriber_count = podcast_subscriber_count(podcast)
        subs_cur = SubscriberData(timestamp=datetime.utcnow(), subscriber_count=subscriber_count)

        # sort all subscriber data entries
        subs_all = sorted(podcast.subscribers + [subs_cur], key=lambda e: e.timestamp)

        # move all but latest two to history
        subs_history = subscriberdata_for_podcast(podcast_id)
        subs_history.subscribers = subs_all[:-2]
        subs_history.save()

        # move latest two to podcast
        podcast.subscribers = subs_all[-2:]
        podcast.save()

    # TODO: which exceptions?
    except Exception as ex:
        raise update_podcast_subscribers.retry(exc=ex)
Ejemplo n.º 2
0
Archivo: utils.py Proyecto: fk-lx/mygpo
def subscriber_data(podcasts):
    coll_data = collections.defaultdict(int)

    for podcast in podcasts:
        create_entry = lambda r: (r.timestamp.strftime('%y-%m'), r.subscriber_count)

        subdata = podcast.subscribers + subscriberdata_for_podcast(podcast.get_id()).subscribers

        data = dict(map(create_entry, subdata))

        for k in data:
            coll_data[k] += data[k]

    # create a list of {'x': label, 'y': value}
    coll_data = sorted([dict(x=a, y=b) for (a, b) in coll_data.items()], key=lambda x: x['x'])

    return coll_data
Ejemplo n.º 3
0
    def handle(self, *args, **options):

        total = podcast_count()
        podcasts = all_podcasts()
        actions = Counter()

        for n, podcast in enumerate(podcasts):

            psubscriber = subscriberdata_for_podcast(podcast.get_id())

            res = self.update_subscriber_data(podcast, data=psubscriber)
            self.update_podcast(podcast=podcast)

            action = 'updated' if res else 'skipped'
            actions[action] += 1

            status_str = ', '.join('%s: %d' % x for x in actions.items())
            progress(n+1, total, status_str)