Exemple #1
0
def test_opml_parse():

    opml = """<?xml version="1.0" encoding="utf-8"?>
    <opml version="1.1">
    <head>
        <title>Subscriptions</title>
        <dateCreated>Fri, 06 Jul 2007 21:36:50 GMT</dateCreated>
        <ownerName></ownerName>
    </head>
    <body>
       <outline title="ABC Blog" text="abc" htmlUrl="http://www.example.org/blog/abc" type="rss" xmlUrl="http://www.example.org/blog/abc/atom.xml"/>
       <outline title="DEF Blog" text="def" htmlUrl="http://www.example.org/blog/def" type="rss" xmlUrl="http://www.example.org/blog/def/atom.xml"/>
       <outline title="GHI Blog" text="ghi" htmlUrl="http://www.example.org/blog/ghi" type="rss" xmlUrl="http://www.example.org/blog/ghi/atom.xml"/>
    </body>
    </opml>
    """

    expected_feeds = ["http://www.example.org/blog/abc/atom.xml",
                      "http://www.example.org/blog/def/atom.xml",
                      "http://www.example.org/blog/ghi/atom.xml"]
    out_feeds = feeds_in_opml(opml)
    
    assert len(out_feeds) == len(expected_feeds)
    for url in expected_feeds:
        assert url in out_feeds
Exemple #2
0
def test_opml_loop():
    in_feeds = ["http://www.abc.com/def", "http://www.foo.bar.org/quux", "http://example.org/feed"]
    out_feeds = feeds_in_opml(dump_opml(in_feeds))
    
    assert len(out_feeds) == len(in_feeds)
    for url in in_feeds:
        assert url in out_feeds
Exemple #3
0
def test_opml_loop_titles():
    in_feeds = ["http://www.abc.com/def", 
                "http://www.foo.bar.org/quux",
                "http://example.org/feed"]

    feed_titles = {}
    feed_titles[in_feeds[0]] = 'Title 0'
    feed_titles[in_feeds[1]] = 'Title 1'
    # feed_titles[in_feeds[2]] = 'Title 2' NO TITLE

    out_feeds = feeds_in_opml(dump_opml(in_feeds, feed_titles=feed_titles), titles=True)
    
    assert len(out_feeds) == len(in_feeds)
    for url, title in out_feeds:
        assert url in in_feeds
        assert feed_titles.get(url, '') == title
Exemple #4
0
    def set_opml(self, id):
        composite = Composite.get(id, ctx)
        if composite is None:
            abort(404)

        opml_data = get_posted_data()
        try:
            feeds = set(feeds_in_opml(opml_data))
        except:
            import traceback

            log.error(traceback.format_exc())
            abort(400)

        result = defaultdict(list)
        oldfeeds = set(i.url for i in composite.subscriptions.itervalues())
        remove = oldfeeds - feeds
        for url in remove:
            feed = RemoteFeed.get_by_url(url, ctx)
            if feed is not None:
                composite.unsubscribe(feed)
                result["unsubscribed"].append(url)
                log.debug('Unsubscribed composite "%s" from %s' % (id, url))
            else:
                result["unsubscribe_failed"].append(url)
                log.error('Expected composite "%s" to have RemoteFeed for %s' % (id, url))

        for url in feeds:
            if url not in oldfeeds:
                feed = get_or_immediate_create_by_url(url, ctx)
                if feed is None:
                    result["subscribe_failed"].append(url)
                    log.warn("Could not get or create feed for %s" % url)
                    continue
                composite.subscribe(feed)
                result["subscribed"].append(url)
                log.debug('Subscribed composite "%s" to %s' % (id, url))
            else:
                result["unchanged"].append(url)

        composite.save()
        log.debug('Composite "%s" saved' % id)
        return json_response(result)