mirror of
				https://github.com/kovidgoyal/calibre.git
				synced 2025-11-03 19:17:02 -05:00 
			
		
		
		
	py3: More unicode literals porting
This commit is contained in:
		
							parent
							
								
									e2b51378ad
								
							
						
					
					
						commit
						f27b3d7c28
					
				@ -1,18 +1,16 @@
 | 
				
			|||||||
#!/usr/bin/env python2
 | 
					#!/usr/bin/env python2
 | 
				
			||||||
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
 | 
					# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
 | 
				
			||||||
from __future__ import print_function, with_statement
 | 
					# License: GPLv3 Copyright: 2009, Kovid Goyal <kovid at kovidgoyal.net>
 | 
				
			||||||
 | 
					from __future__ import absolute_import, division, print_function, unicode_literals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
__license__   = 'GPL v3'
 | 
					import os
 | 
				
			||||||
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
 | 
					import shutil
 | 
				
			||||||
__docformat__ = 'restructuredtext en'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import os, shutil
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
from calibre.constants import plugins, preferred_encoding
 | 
					from calibre.constants import plugins, preferred_encoding
 | 
				
			||||||
from calibre.ebooks.metadata import authors_to_string
 | 
					from calibre.ebooks.metadata import authors_to_string
 | 
				
			||||||
from calibre.ptempfile import TemporaryDirectory
 | 
					from calibre.ptempfile import TemporaryDirectory
 | 
				
			||||||
from calibre.utils.ipc.simple_worker import fork_job, WorkerError
 | 
					from calibre.utils.ipc.simple_worker import WorkerError, fork_job
 | 
				
			||||||
from polyglot.builtins import unicode_type, range
 | 
					from polyglot.builtins import range, unicode_type
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def get_podofo():
 | 
					def get_podofo():
 | 
				
			||||||
@ -24,15 +22,15 @@ def get_podofo():
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
def prep(val):
 | 
					def prep(val):
 | 
				
			||||||
    if not val:
 | 
					    if not val:
 | 
				
			||||||
        return u''
 | 
					        return ''
 | 
				
			||||||
    if not isinstance(val, unicode_type):
 | 
					    if not isinstance(val, unicode_type):
 | 
				
			||||||
        val = val.decode(preferred_encoding, 'replace')
 | 
					        val = val.decode(preferred_encoding, 'replace')
 | 
				
			||||||
    return val.strip()
 | 
					    return val.strip()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def set_metadata(stream, mi):
 | 
					def set_metadata(stream, mi):
 | 
				
			||||||
    with TemporaryDirectory(u'_podofo_set_metadata') as tdir:
 | 
					    with TemporaryDirectory('_podofo_set_metadata') as tdir:
 | 
				
			||||||
        with open(os.path.join(tdir, u'input.pdf'), 'wb') as f:
 | 
					        with open(os.path.join(tdir, 'input.pdf'), 'wb') as f:
 | 
				
			||||||
            shutil.copyfileobj(stream, f)
 | 
					            shutil.copyfileobj(stream, f)
 | 
				
			||||||
        from calibre.ebooks.metadata.xmp import metadata_to_xmp_packet
 | 
					        from calibre.ebooks.metadata.xmp import metadata_to_xmp_packet
 | 
				
			||||||
        xmp_packet = metadata_to_xmp_packet(mi)
 | 
					        xmp_packet = metadata_to_xmp_packet(mi)
 | 
				
			||||||
@ -44,7 +42,7 @@ def set_metadata(stream, mi):
 | 
				
			|||||||
        except WorkerError as e:
 | 
					        except WorkerError as e:
 | 
				
			||||||
            raise Exception('Failed to set PDF metadata in (%s): %s'%(mi.title, e.orig_tb))
 | 
					            raise Exception('Failed to set PDF metadata in (%s): %s'%(mi.title, e.orig_tb))
 | 
				
			||||||
        if touched:
 | 
					        if touched:
 | 
				
			||||||
            with open(os.path.join(tdir, u'output.pdf'), 'rb') as f:
 | 
					            with open(os.path.join(tdir, 'output.pdf'), 'rb') as f:
 | 
				
			||||||
                f.seek(0, 2)
 | 
					                f.seek(0, 2)
 | 
				
			||||||
                if f.tell() > 100:
 | 
					                if f.tell() > 100:
 | 
				
			||||||
                    f.seek(0)
 | 
					                    f.seek(0)
 | 
				
			||||||
@ -59,7 +57,7 @@ def set_metadata_(tdir, title, authors, bkp, tags, xmp_packet):
 | 
				
			|||||||
    podofo = get_podofo()
 | 
					    podofo = get_podofo()
 | 
				
			||||||
    os.chdir(tdir)
 | 
					    os.chdir(tdir)
 | 
				
			||||||
    p = podofo.PDFDoc()
 | 
					    p = podofo.PDFDoc()
 | 
				
			||||||
    p.open(u'input.pdf')
 | 
					    p.open('input.pdf')
 | 
				
			||||||
    title = prep(title)
 | 
					    title = prep(title)
 | 
				
			||||||
    touched = False
 | 
					    touched = False
 | 
				
			||||||
    if title and title != p.title:
 | 
					    if title and title != p.title:
 | 
				
			||||||
@ -77,7 +75,7 @@ def set_metadata_(tdir, title, authors, bkp, tags, xmp_packet):
 | 
				
			|||||||
        touched = True
 | 
					        touched = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    try:
 | 
					    try:
 | 
				
			||||||
        tags = prep(u', '.join([x.strip() for x in tags if x.strip()]))
 | 
					        tags = prep(', '.join([x.strip() for x in tags if x.strip()]))
 | 
				
			||||||
        if tags != p.keywords:
 | 
					        if tags != p.keywords:
 | 
				
			||||||
            p.keywords = tags
 | 
					            p.keywords = tags
 | 
				
			||||||
            touched = True
 | 
					            touched = True
 | 
				
			||||||
@ -95,7 +93,7 @@ def set_metadata_(tdir, title, authors, bkp, tags, xmp_packet):
 | 
				
			|||||||
        pass
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if touched:
 | 
					    if touched:
 | 
				
			||||||
        p.save(u'output.pdf')
 | 
					        p.save('output.pdf')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return touched
 | 
					    return touched
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -115,7 +113,7 @@ def delete_all_but(path, pages):
 | 
				
			|||||||
            p.delete_page(page)
 | 
					            p.delete_page(page)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    with open(path, 'wb') as f:
 | 
					    with open(path, 'wb') as f:
 | 
				
			||||||
        f.save_to_fileobj(path)
 | 
					        p.save_to_fileobj(f)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def get_xmp_metadata(path):
 | 
					def get_xmp_metadata(path):
 | 
				
			||||||
@ -143,9 +141,9 @@ def test_outline(src):
 | 
				
			|||||||
        raw = f.read()
 | 
					        raw = f.read()
 | 
				
			||||||
    p.load(raw)
 | 
					    p.load(raw)
 | 
				
			||||||
    total = p.page_count()
 | 
					    total = p.page_count()
 | 
				
			||||||
    root = p.create_outline(u'Table of Contents')
 | 
					    root = p.create_outline('Table of Contents')
 | 
				
			||||||
    for i in range(0, total):
 | 
					    for i in range(0, total):
 | 
				
			||||||
        root.create(u'Page %d'%i, i, True)
 | 
					        root.create('Page %d'%i, i, True)
 | 
				
			||||||
    raw = p.write()
 | 
					    raw = p.write()
 | 
				
			||||||
    out = '/tmp/outlined.pdf'
 | 
					    out = '/tmp/outlined.pdf'
 | 
				
			||||||
    with open(out, 'wb') as f:
 | 
					    with open(out, 'wb') as f:
 | 
				
			||||||
@ -170,7 +168,7 @@ def test_podofo():
 | 
				
			|||||||
    from calibre.ebooks.metadata.book.base import Metadata
 | 
					    from calibre.ebooks.metadata.book.base import Metadata
 | 
				
			||||||
    from calibre.ebooks.metadata.xmp import metadata_to_xmp_packet
 | 
					    from calibre.ebooks.metadata.xmp import metadata_to_xmp_packet
 | 
				
			||||||
    raw = b"%PDF-1.1\n%\xe2\xe3\xcf\xd3\n1 0 obj<</Type/Catalog/Metadata 6 0 R/Pages 2 0 R>>\nendobj\n2 0 obj<</Type/Pages/Count 1/Kids[ 3 0 R]/MediaBox[ 0 0 300 144]>>\nendobj\n3 0 obj<</Type/Page/Contents 4 0 R/Parent 2 0 R/Resources<</Font<</F1<</Type/Font/BaseFont/Times-Roman/Subtype/Type1>>>>>>>>\nendobj\n4 0 obj<</Length 55>>\nstream\n  BT\n    /F1 18 Tf\n    0 0 Td\n    (Hello World) Tj\n  ET\nendstream\nendobj\n5 0 obj<</Author(\xfe\xff\x00U\x00n\x00k\x00n\x00o\x00w\x00n)/CreationDate(D:20140919134038+05'00')/Producer(PoDoFo - http://podofo.sf.net)/Title(\xfe\xff\x00n\x00e\x00w\x00t)>>\nendobj\n6 0 obj<</Type/Metadata/Filter/FlateDecode/Length 584/Subtype/XML>>\nstream\nx\x9c\xed\x98\xcd\xb2\x930\x14\xc7\xf7}\n&.\x1d\x1ahoGa\x80\x8e\xb6\xe3x\x17ua\xaf\xe3\xd2\t\xc9i\x1b\x0b\x81&a\xc0\xfbj.|$_\xc1\xd0r\xe9\xb7V\x9d\xbb\x83\x15\x9c\x9c\xff\xff\x97\x8fs\xb2 \x18W9\xa1k\xd0V\x0cK.B\xf4\xf3\xfb\x0fdq\x16\xa2\xcf\xa3\x993\xcb'\xb0\xe2\xef\x1f%\xcc\x1f?<\xd0\xc75\xf5\x18\x1aG\xbd\xa0\xf2\xab4OA\x13\xabJ\x13\xa1\xfc*D\x84e1\xf8\xe6\xbd\x0ec\x14\xf5,+\x90l\xe1\x7f\x9c\xbek\x92\xccW\x88VZ\xe7>\xc6eY\xf6\xcba?\x93K\xecz\x9e\x87\x9d\x01\x1e\x0cl\x93a\xaboB\x93\xca\x16\xea\xc5\xd6\xa3q\x99\x82\xa2\x92\xe7\x9ag\xa2qc\xb45\xcb\x0b\x99l\xad\x18\xc5\x90@\nB+\xec\xf6]\x8c\xacZK\xe2\xac\xd0!j\xec\x8c!\xa3>\xdb\xfb=\x85\x1b\xd2\x9bD\xef#M,\xe15\xd4O\x88X\x86\xa8\xb2\x19,H\x91h\x14\x05x7z`\x81O<\x02|\x99VOBs\x9d\xc0\x7f\xe0\x05\x94\xfa\xd6)\x1c\xb1jx^\xc4\tW+\x90'\x13xK\x96\xf8Hy\x96X\xabU\x11\x7f\x05\xaa\xff\xa4=I\xab\x95T\x02\xd1\xd9)u\x0e\x9b\x0b\xcb\x8e>\x89\xb5\xc8Jqm\x91\x07\xaa-\xee\xc8{\x972=\xdd\xfa+\xe5d\xea\xb9\xad'\xa1\xfa\xdbj\xee\xd3,\xc5\x15\xc9M-9\xa6\x96\xdaD\xce6Wr\xd3\x1c\xdf3S~|\xc1A\xe2MA\x92F{\xb1\x0eM\xba?3\xdd\xc2\x88&S\xa2!\x1a8\xee\x9d\xedx\xb6\xeb=\xb8C\xff\xce\xf1\x87\xaf\xfb\xde\xe0\xd5\xc8\xf3^:#\x7f\xe8\x04\xf8L\xf2\x0fK\xcd%W\xe9\xbey\xea/\xa5\x89`D\xb2m\x17\t\x92\x822\xb7\x02(\x1c\x13\xc5)\x1e\x9c-\x01\xff\x1e\xc0\x16\xd5\xe5\r\xaaG\xcc\x8e\x0c\xff\xca\x8e\x92\x84\xc7\x12&\x93\xd6\xb3\x89\xd8\x10g\xd9\xfai\xe7\xedv\xde6-\x94\xceR\x9bfI\x91\n\x85\x8e}nu9\x91\xcd\xefo\xc6+\x90\x1c\x94\xcd\x05\x83\xea\xca\xd17\x16\xbb\xb6\xfc\xa22\xa9\x9bn\xbe0p\xfd\x88wAs\xc3\x9a+\x19\xb7w\xf2a#=\xdf\xd3A:H\x07\xe9 \x1d\xa4\x83t\x90\x0e\xd2A:H\x07yNH/h\x7f\xd6\x80`!*\xd18\xfa\x05\x94\x80P\xb0\nendstream\nendobj\nxref\n0 7\n0000000000 65535 f \n0000000015 00000 n \n0000000074 00000 n \n0000000148 00000 n \n0000000280 00000 n \n0000000382 00000 n \n0000000522 00000 n \ntrailer\n<</ID[<4D028D512DEBEFD964756764AD8FF726><4D028D512DEBEFD964756764AD8FF726>]/Info 5 0 R/Root 1 0 R/Size 7>>\nstartxref\n1199\n%%EOF\n"  # noqa
 | 
					    raw = b"%PDF-1.1\n%\xe2\xe3\xcf\xd3\n1 0 obj<</Type/Catalog/Metadata 6 0 R/Pages 2 0 R>>\nendobj\n2 0 obj<</Type/Pages/Count 1/Kids[ 3 0 R]/MediaBox[ 0 0 300 144]>>\nendobj\n3 0 obj<</Type/Page/Contents 4 0 R/Parent 2 0 R/Resources<</Font<</F1<</Type/Font/BaseFont/Times-Roman/Subtype/Type1>>>>>>>>\nendobj\n4 0 obj<</Length 55>>\nstream\n  BT\n    /F1 18 Tf\n    0 0 Td\n    (Hello World) Tj\n  ET\nendstream\nendobj\n5 0 obj<</Author(\xfe\xff\x00U\x00n\x00k\x00n\x00o\x00w\x00n)/CreationDate(D:20140919134038+05'00')/Producer(PoDoFo - http://podofo.sf.net)/Title(\xfe\xff\x00n\x00e\x00w\x00t)>>\nendobj\n6 0 obj<</Type/Metadata/Filter/FlateDecode/Length 584/Subtype/XML>>\nstream\nx\x9c\xed\x98\xcd\xb2\x930\x14\xc7\xf7}\n&.\x1d\x1ahoGa\x80\x8e\xb6\xe3x\x17ua\xaf\xe3\xd2\t\xc9i\x1b\x0b\x81&a\xc0\xfbj.|$_\xc1\xd0r\xe9\xb7V\x9d\xbb\x83\x15\x9c\x9c\xff\xff\x97\x8fs\xb2 \x18W9\xa1k\xd0V\x0cK.B\xf4\xf3\xfb\x0fdq\x16\xa2\xcf\xa3\x993\xcb'\xb0\xe2\xef\x1f%\xcc\x1f?<\xd0\xc75\xf5\x18\x1aG\xbd\xa0\xf2\xab4OA\x13\xabJ\x13\xa1\xfc*D\x84e1\xf8\xe6\xbd\x0ec\x14\xf5,+\x90l\xe1\x7f\x9c\xbek\x92\xccW\x88VZ\xe7>\xc6eY\xf6\xcba?\x93K\xecz\x9e\x87\x9d\x01\x1e\x0cl\x93a\xaboB\x93\xca\x16\xea\xc5\xd6\xa3q\x99\x82\xa2\x92\xe7\x9ag\xa2qc\xb45\xcb\x0b\x99l\xad\x18\xc5\x90@\nB+\xec\xf6]\x8c\xacZK\xe2\xac\xd0!j\xec\x8c!\xa3>\xdb\xfb=\x85\x1b\xd2\x9bD\xef#M,\xe15\xd4O\x88X\x86\xa8\xb2\x19,H\x91h\x14\x05x7z`\x81O<\x02|\x99VOBs\x9d\xc0\x7f\xe0\x05\x94\xfa\xd6)\x1c\xb1jx^\xc4\tW+\x90'\x13xK\x96\xf8Hy\x96X\xabU\x11\x7f\x05\xaa\xff\xa4=I\xab\x95T\x02\xd1\xd9)u\x0e\x9b\x0b\xcb\x8e>\x89\xb5\xc8Jqm\x91\x07\xaa-\xee\xc8{\x972=\xdd\xfa+\xe5d\xea\xb9\xad'\xa1\xfa\xdbj\xee\xd3,\xc5\x15\xc9M-9\xa6\x96\xdaD\xce6Wr\xd3\x1c\xdf3S~|\xc1A\xe2MA\x92F{\xb1\x0eM\xba?3\xdd\xc2\x88&S\xa2!\x1a8\xee\x9d\xedx\xb6\xeb=\xb8C\xff\xce\xf1\x87\xaf\xfb\xde\xe0\xd5\xc8\xf3^:#\x7f\xe8\x04\xf8L\xf2\x0fK\xcd%W\xe9\xbey\xea/\xa5\x89`D\xb2m\x17\t\x92\x822\xb7\x02(\x1c\x13\xc5)\x1e\x9c-\x01\xff\x1e\xc0\x16\xd5\xe5\r\xaaG\xcc\x8e\x0c\xff\xca\x8e\x92\x84\xc7\x12&\x93\xd6\xb3\x89\xd8\x10g\xd9\xfai\xe7\xedv\xde6-\x94\xceR\x9bfI\x91\n\x85\x8e}nu9\x91\xcd\xefo\xc6+\x90\x1c\x94\xcd\x05\x83\xea\xca\xd17\x16\xbb\xb6\xfc\xa22\xa9\x9bn\xbe0p\xfd\x88wAs\xc3\x9a+\x19\xb7w\xf2a#=\xdf\xd3A:H\x07\xe9 \x1d\xa4\x83t\x90\x0e\xd2A:H\x07yNH/h\x7f\xd6\x80`!*\xd18\xfa\x05\x94\x80P\xb0\nendstream\nendobj\nxref\n0 7\n0000000000 65535 f \n0000000015 00000 n \n0000000074 00000 n \n0000000148 00000 n \n0000000280 00000 n \n0000000382 00000 n \n0000000522 00000 n \ntrailer\n<</ID[<4D028D512DEBEFD964756764AD8FF726><4D028D512DEBEFD964756764AD8FF726>]/Info 5 0 R/Root 1 0 R/Size 7>>\nstartxref\n1199\n%%EOF\n"  # noqa
 | 
				
			||||||
    mi = Metadata(u'title1', [u'author1'])
 | 
					    mi = Metadata('title1', ['author1'])
 | 
				
			||||||
    xmp_packet = metadata_to_xmp_packet(mi)
 | 
					    xmp_packet = metadata_to_xmp_packet(mi)
 | 
				
			||||||
    podofo = get_podofo()
 | 
					    podofo = get_podofo()
 | 
				
			||||||
    p = podofo.PDFDoc()
 | 
					    p = podofo.PDFDoc()
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user