import io from nose.tools import eq_, raises from ..map import map SAMPLE_XML = """ Wikipedia http://en.wikipedia.org/wiki/Main_Page MediaWiki 1.22wmf2 first-letter Talk Foo 0 1 1 2004-08-09T09:04:08Z Gen0cide 92182 Revision 1 text g9chqqg94myzq11c56ixvq7o1yg75n9 wikitext text/x-wiki 2 2004-08-10T09:04:08Z 222.152.210.109 Revision 2 text g9chqqg94myzq11c56ixvq7o1yg75n9 wikitext Comment 2 text/x-wiki Bar 1 2 3 2004-08-11T09:04:08Z 222.152.210.22 Revision 3 text g9chqqg94myzq11c56ixvq7o1yg75n9 wikitext text/x-wiki """ def test_map(): f = io.StringIO(SAMPLE_XML) def process_dump(dump, path): for page in dump: count = 0 for rev in page: count += 1 yield {'page_id': page.id, 'revisions': count} pages = 0 for doc in map([f], process_dump): page_id = doc['page_id'] revisions = doc['revisions'] if page_id == 1: eq_(revisions, 2) elif page_id == 2: eq_(revisions, 1) else: assert False pages += 1 eq_(pages, 2) def test_dict_yield(): def test_map(): f = io.StringIO(SAMPLE_XML) def process_dump(dump, path): for page in dump: count = 0 for rev in page: count += 1 yield {'page_id': page.id, 'revisions': count} pages = 0 for doc in map([f], process_dump): page_id = doc['page_id'] revisions = doc['revisions'] if page_id == 1: eq_(revisions, 2) elif page_id == 2: eq_(revisions, 1) else: assert False pages += 1 eq_(pages, 2) @raises(TypeError) def test_map_error(): f = io.StringIO(SAMPLE_XML) def process_dump(dump, path): for page in dump: if page.id == 2: raise TypeError("Fake error") pages = 0 for doc in map([f], process_dump): page_id = doc['page_id'] def test_map_error_handler(): f = io.StringIO(SAMPLE_XML) def process_dump(dump, path, handle_error=lambda exp, stack: None): for page in dump: count = 0 for rev in page: count += 1 if count > 2: raise TypeError("Fake type error.") yield {'page_id': page.id, 'revisions': count} pages = 0 for doc in map([f], process_dump): page_id = doc['page_id'] revisions = doc['revisions'] if page_id == 1: eq_(revisions, 2) elif page_id == 2: eq_(revisions, 1) else: assert False pages += 1 eq_(pages, 2)