def test_meta_type02(self): """Use "site" if it's "marked" and has sitemap.xml""" index_file = os.path.join(self.test_input, 'data', '20200101010101', 'index.html') sitemap_file = os.path.join(self.test_input, 'data', '20200101010101', 'sitemap.xml') os.makedirs(os.path.dirname(sitemap_file)) with open(index_file, 'w', encoding='UTF-8') as fh: pass with open(sitemap_file, 'w', encoding='UTF-8') as fh: pass with open(self.test_input_rdf, 'w', encoding='UTF-8') as fh: fh.write("""\ <?xml version="1.0"?> <RDF:RDF xmlns:NS1="http://amb.vis.ne.jp/mozilla/scrapbook-rdf#" xmlns:NC="http://home.netscape.com/NC-rdf#" xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <RDF:Description RDF:about="urn:scrapbook:item20200101010101" NS1:type="marked" /> </RDF:RDF> """) for info in sb2wsb.run(self.test_input, self.test_output): pass book = Host(self.test_output).books[''] book.load_meta_files() self.assertEqual(book.meta['20200101010101']['type'], 'site') self.assertTrue(book.meta['20200101010101']['marked'])
def test_meta_modify02(self): """Don't take mtime of index.html if not newer.""" index_file = os.path.join(self.test_input, 'data', '20200102030405', 'index.html') os.makedirs(os.path.dirname(index_file)) with open(index_file, 'w', encoding='UTF-8') as fh: pass t = time.mktime((2020, 1, 1, 0, 0, 0, 0, 0, -1)) os.utime(index_file, (t, t)) with open(self.test_input_rdf, 'w', encoding='UTF-8') as fh: fh.write("""\ <?xml version="1.0"?> <RDF:RDF xmlns:NS1="http://amb.vis.ne.jp/mozilla/scrapbook-rdf#" xmlns:NC="http://home.netscape.com/NC-rdf#" xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <RDF:Description RDF:about="urn:scrapbook:item20200102030405" NS1:id="20200102030405" NS1:type="" NS1:create="20200102030406" NS1:modify="20200102030407" /> </RDF:RDF> """) for info in sb2wsb.run(self.test_input, self.test_output): pass book = Host(self.test_output).books[''] book.load_meta_files() self.assertEqual( book.meta['20200102030405']['modify'], util.datetime_to_id(util.id_to_datetime_legacy('20200102030407')))
def test_meta_basic03(self): """Default value for missing keys. - type: "" - create: infer from id - modify: infer from create (and then id) """ with open(self.test_input_rdf, 'w', encoding='UTF-8') as fh: fh.write("""\ <?xml version="1.0"?> <RDF:RDF xmlns:NS1="http://amb.vis.ne.jp/mozilla/scrapbook-rdf#" xmlns:NC="http://home.netscape.com/NC-rdf#" xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <RDF:Description RDF:about="urn:scrapbook:item20200102030405" /> </RDF:RDF> """) for info in sb2wsb.run(self.test_input, self.test_output): pass book = Host(self.test_output).books[''] book.load_meta_files() self.assertDictEqual(book.meta['20200102030405'], { 'index': '20200102030405/index.html', 'type': '', 'create': util.datetime_to_id(util.id_to_datetime_legacy('20200102030405')), 'modify': util.datetime_to_id(util.id_to_datetime_legacy('20200102030405')), })
def test_meta_basic02(self): """A typical item sample of legacy ScrapBook.""" with open(self.test_input_rdf, 'w', encoding='UTF-8') as fh: fh.write("""\ <?xml version="1.0"?> <RDF:RDF xmlns:NS1="http://amb.vis.ne.jp/mozilla/scrapbook-rdf#" xmlns:NC="http://home.netscape.com/NC-rdf#" xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <RDF:Description RDF:about="urn:scrapbook:item20200102030405" NS1:id="20200102030405" NS1:type="" NS1:title="dummy title" NS1:chars="" NS1:comment="dummy comment __BR__ 2nd line" NS1:icon="favicon.ico" NS1:source="http://example.com/foo" /> </RDF:RDF> """) for info in sb2wsb.run(self.test_input, self.test_output): pass book = Host(self.test_output).books[''] book.load_meta_files() self.assertDictEqual(book.meta['20200102030405'], { 'index': '20200102030405/index.html', 'title': 'dummy title', 'type': '', 'create': util.datetime_to_id(util.id_to_datetime_legacy('20200102030405')), 'modify': util.datetime_to_id(util.id_to_datetime_legacy('20200102030405')), 'source': 'http://example.com/foo', 'icon': 'favicon.ico', 'comment': 'dummy comment\n2nd line', })
def test_path03(self): """<input dir>/index.html should be indexed as single html page """ index_file = os.path.join(self.test_input, 'index.html') with open(index_file, 'w', encoding='UTF-8') as fh: fh.write("""\ <!DOCTYPE html> <html data-scrapbook-create="20200101000000000" data-scrapbook-modify="20200101000000000" data-scrapbook-source="http://example.com"> <head> <meta charset="UTF-8"> <title>MyTitle 中文</title> </head> <body> page content </body> </html> """) for info in file2wsb.run(self.test_input, self.test_output): pass book = Host(self.test_output).books[''] book.load_meta_files() book.load_toc_files() ids = list(book.meta.keys()) id_item = ids[0] self.assertDictEqual( book.meta, { id_item: { 'title': 'MyTitle 中文', 'type': '', 'index': f'{id_item}.html', 'create': '20200101000000000', 'modify': '20200101000000000', 'source': 'http://example.com', 'icon': '', 'comment': '', }, }) self.assertDictEqual(book.toc, { 'root': [ id_item, ], }) self.assertEqual( set( glob.iglob(os.path.join(self.test_output, '**'), recursive=True)), { os.path.join(self.test_output, ''), os.path.join(self.test_output, f'{id_item}.html'), })
def test_meta_basic04(self): """Should work correctly for another NS name (seen in some scrapbook.rdf files) """ with open(self.test_input_rdf, 'w', encoding='UTF-8') as fh: fh.write("""\ <?xml version="1.0"?> <RDF:RDF xmlns:NS2="http://amb.vis.ne.jp/mozilla/scrapbook-rdf#" xmlns:NC="http://home.netscape.com/NC-rdf#" xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <RDF:Description RDF:about="urn:scrapbook:item20200102030405" NS2:id="20200102030405" NS2:type="" NS2:title="title" NS2:comment="comment" NS2:icon="favicon.ico" NS2:source="http://example.com" /> </RDF:RDF> """) for info in sb2wsb.run(self.test_input, self.test_output): pass book = Host(self.test_output).books[''] book.load_meta_files() self.assertDictEqual( book.meta['20200102030405'], { 'index': '20200102030405/index.html', 'type': '', 'create': util.datetime_to_id( util.id_to_datetime_legacy('20200102030405')), 'modify': util.datetime_to_id( util.id_to_datetime_legacy('20200102030405')), 'title': 'title', 'comment': 'comment', 'icon': 'favicon.ico', 'source': 'http://example.com', })
def test_meta_icon01(self): """Resolve resource://scrapbook/data/<self-id>/...""" with open(self.test_input_rdf, 'w', encoding='UTF-8') as fh: fh.write("""\ <?xml version="1.0"?> <RDF:RDF xmlns:NS1="http://amb.vis.ne.jp/mozilla/scrapbook-rdf#" xmlns:NC="http://home.netscape.com/NC-rdf#" xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <RDF:Description RDF:about="urn:scrapbook:item20200102030405" NS1:icon="resource://scrapbook/data/20200102030405/favicon.ico" /> </RDF:RDF> """) for info in sb2wsb.run(self.test_input, self.test_output): pass book = Host(self.test_output).books[''] book.load_meta_files() self.assertEqual(book.meta['20200102030405']['icon'], 'favicon.ico')
def test_meta_icon05(self): """Handle special chars.""" with open(self.test_input_rdf, 'w', encoding='UTF-8') as fh: fh.write("""\ <?xml version="1.0"?> <RDF:RDF xmlns:NS1="http://amb.vis.ne.jp/mozilla/scrapbook-rdf#" xmlns:NC="http://home.netscape.com/NC-rdf#" xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <RDF:Description RDF:about="urn:scrapbook:item20200102030405" NS1:icon="resource://scrapbook/%E4%B8%AD%E6%96%87%25%23abc.png" /> </RDF:RDF> """) for info in sb2wsb.run(self.test_input, self.test_output): pass book = Host(self.test_output).books[''] book.load_meta_files() self.assertEqual(book.meta['20200102030405']['icon'], '../../%E4%B8%AD%E6%96%87%25%23abc.png')
def test_meta_type01(self): """Translate types.""" with open(self.test_input_rdf, 'w', encoding='UTF-8') as fh: fh.write("""\ <?xml version="1.0"?> <RDF:RDF xmlns:NS1="http://amb.vis.ne.jp/mozilla/scrapbook-rdf#" xmlns:NC="http://home.netscape.com/NC-rdf#" xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <RDF:Description RDF:about="urn:scrapbook:item20200101010101" NS1:type="" /> <RDF:Description RDF:about="urn:scrapbook:item20200101010102" NS1:type="combine" /> <RDF:Description RDF:about="urn:scrapbook:item20200101010103" NS1:type="marked" /> <RDF:Description RDF:about="urn:scrapbook:item20200101010104" NS1:type="note" /> <RDF:Description RDF:about="urn:scrapbook:item20200101010105" NS1:type="notex" /> </RDF:RDF> """) for info in sb2wsb.run(self.test_input, self.test_output): pass book = Host(self.test_output).books[''] book.load_meta_files() self.assertEqual(book.meta['20200101010101']['type'], '') self.assertIsNone(book.meta['20200101010101'].get('marked')) self.assertEqual(book.meta['20200101010102']['type'], 'combine') self.assertIsNone(book.meta['20200101010102'].get('marked')) self.assertEqual(book.meta['20200101010103']['type'], '') self.assertTrue(book.meta['20200101010103']['marked']) self.assertEqual(book.meta['20200101010104']['type'], 'postit') self.assertIsNone(book.meta['20200101010104'].get('marked')) self.assertEqual(book.meta['20200101010105']['type'], 'note') self.assertIsNone(book.meta['20200101010105'].get('marked'))
def test_path01(self): """Test hierarchical folders for */index.html """ index_file = os.path.join(self.test_input, 'folder1#中文', 'folder2', 'folder_data', 'index.html') os.makedirs(os.path.dirname(index_file), exist_ok=True) with open(index_file, 'w', encoding='UTF-8') as fh: fh.write("""\ <!DOCTYPE html> <html data-scrapbook-create="20200101000000000" data-scrapbook-modify="20200101000000000" data-scrapbook-source="http://example.com"> <head> <meta charset="UTF-8"> <title>MyTitle 中文</title> </head> <body> page content </body> </html> """) for info in file2wsb.run(self.test_input, self.test_output): pass book = Host(self.test_output).books[''] book.load_meta_files() book.load_toc_files() ids = list(book.meta.keys()) id_folder1 = ids[0] id_folder2 = ids[1] id_item = ids[2] self.assertDictEqual( book.meta, { id_folder1: { 'title': 'folder1#中文', 'type': 'folder', 'create': id_folder1, 'modify': id_folder1, }, id_folder2: { 'title': 'folder2', 'type': 'folder', 'create': id_folder2, 'modify': id_folder2, }, id_item: { 'title': 'MyTitle 中文', 'type': '', 'index': f'{id_item}/index.html', 'create': '20200101000000000', 'modify': '20200101000000000', 'source': 'http://example.com', 'icon': '', 'comment': '', }, }) self.assertDictEqual( book.toc, { 'root': [ id_folder1, ], id_folder1: [ id_folder2, ], id_folder2: [ id_item, ], }) self.assertEqual( set( glob.iglob(os.path.join(self.test_output, '**'), recursive=True)), { os.path.join(self.test_output, ''), os.path.join(self.test_output, id_item), os.path.join(self.test_output, id_item, 'index.html'), })
def test_supporting_folder02(self): """Test for supporting folder *_files """ index_file = os.path.join(self.test_input, 'mypage.html') with open(index_file, 'w', encoding='UTF-8') as fh: fh.write("""\ <!DOCTYPE html> <html data-scrapbook-create="20200101000000000" data-scrapbook-modify="20200101000000000" data-scrapbook-source="http://example.com"> <head> <meta charset="UTF-8"> <title>MyTitle 中文</title> </head> <body> page content <img src="mypage_files/picture.bmp"> </body> </html> """) img_file = os.path.join(self.test_input, 'mypage_files', 'picture.bmp') os.makedirs(os.path.dirname(img_file), exist_ok=True) with open(img_file, 'wb') as fh: fh.write(b'dummy') for info in file2wsb.run(self.test_input, self.test_output): pass book = Host(self.test_output).books[''] book.load_meta_files() book.load_toc_files() ids = list(book.meta.keys()) id_item = ids[0] self.assertDictEqual( book.meta, { id_item: { 'title': 'MyTitle 中文', 'type': '', 'index': f'{id_item}/index.html', 'create': '20200101000000000', 'modify': '20200101000000000', 'source': 'http://example.com', 'icon': '', 'comment': '', }, }) self.assertDictEqual(book.toc, { 'root': [ id_item, ], }) self.assertEqual( set( glob.iglob(os.path.join(self.test_output, '**'), recursive=True)), { os.path.join(self.test_output, ''), os.path.join(self.test_output, id_item), os.path.join(self.test_output, id_item, 'index.html'), os.path.join(self.test_output, id_item, 'mypage.html'), os.path.join(self.test_output, id_item, 'mypage_files'), os.path.join(self.test_output, id_item, 'mypage_files', 'picture.bmp'), })