def handle(self, *arg, **kwargs):

        # Grab the profile for supplied user name
        p = Profile.view(PROFILES_BY_USER_NAME_VIEW,
                         key=kwargs['user_name']).first()
        if not p:
            raise CommandError('No profile named %s found' %
                               kwargs['user_name'])

        subs = FeedSubscription.view(FEEDSUBSCRIPTION_BY_PROFILE_ID_VIEW,
                                     key=p._id).all()
        for s in subs:
            self.fetchSubscription(s)
    def handle(self, *arg, **kwargs):

        # Grab the profile for supplied user name
        p = Profile.view(PROFILES_BY_USER_NAME_VIEW,
                         key=kwargs['profile']).first()
        if not p:
            raise CommandError('No profile named %s found' %
                               kwargs['profile'])

        sub = FeedSubscription.get_or_create('%s:%s' %
                ('FeedSubscription', kwargs['url']))
        sub.feed_type = kwargs['type']
        sub.profile_id = p._id
        sub.url = kwargs['url']
        sub.link = kwargs['link']
        sub.title = kwargs['title']
        sub.save()
    def handle(self, *arg, **kwargs):
        if len(arg) < 1:
            raise CommandError('OPML filename required')

        # Grab the profile for supplied user name
        p = Profile.view(PROFILES_BY_USER_NAME_VIEW,
                         key=kwargs['user_name']).first()
        if not p:
            raise CommandError('No profile named %s found' %
                               kwargs['user_name'])

        # Look up subscriptions for profile.
        subs = FeedSubscription.view(FEEDSUBSCRIPTION_BY_PROFILE_ID_VIEW,
                                     key=p._id).all()
        subs_by_url = dict((s.url, s) for s in subs)

        with open(arg[0]) as fin:
            entries = opml.get_subscriptions(fin)
            for entry in entries:
                
                url = unicode(entry['xmlurl'])
                if url in subs_by_url:
                    sub = subs_by_url[url]
                    print "Updating %s" % entry['title']
                else:
                    sub = FeedSubscription.get_or_create()
                    print "Creating %s" % entry['title']

                sub.profile_id = p._id
                sub.feed_type = 'rss'
                sub.url = url
                sub.link = entry['url']
                sub.title = entry['title']
                sub.parents = [x['title'] for x in entry['parents']]

                sub.save()
    def handle(self, *arg, **kwargs):

        # Grab the profile for supplied user name
        p = Profile.view(PROFILES_BY_USER_NAME_VIEW,
                         key=kwargs['user_name']).first()
        if not p:
            raise CommandError('No profile named %s found' %
                               kwargs['user_name'])

        # Look up subscriptions for profile.
        subs = FeedSubscription.view(FEEDSUBSCRIPTION_BY_PROFILE_ID_VIEW,
                                     key=p._id).all()
        subs_by_url = dict((s.url, s) for s in subs)

        uid = kwargs['stream']
        if uid.startswith('https://plus.google.com'):
            uid = uid.split('/')[3]

        lookup_url = LOOKUP_URL.format(uid)

        r = requests.get(lookup_url)
        ids = [line.split('"')[1] 
               for line in r.content.split("\n") 
               if line.startswith(',[[,,')]
        urls = [STREAM_URL.format(id, kwargs['apikey'])
                for id in ids]
        
        open(kwargs['output'], 'w').write("\n".join(urls))

        for url in urls:
            
            r = requests.get(url)
            print "(%s) %s" % (r.status_code, url)
            if 200 != r.status_code:
                continue

            now = int(time.time() * 1000)

            stream = json.loads(r.content)
                
            if url in subs_by_url:
                sub = subs_by_url[url]
                print "Updating %s" % url
            else:
                sub = FeedSubscription.get_or_create()
                print "Creating %s" % url
            
            sub.profile_id = p._id
            sub.feed_type = 'as-json'
            sub.url = url
            sub.title = stream['title']
            sub.link = len(stream['items']) and stream['items'][0]['actor']['url'] or url
            sub.last_fetch_time = now

            sub.save()

            hr_id = HttpResource.new_id(url)
            hr = HttpResource.get_or_create(hr_id)
            hr.url = url
            hr.status = r.status_code
            hr.headers = r.headers
            hr.last_fetch_time = now
            hr.save()

            hr.put_attachment(r.content, 'body', hr.headers['content-type'])