mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Move pickle implementation into the serialize module
And make it work on both py2 and py3. Note that unpickling of data between python major versions is not likely to work well.
This commit is contained in:
parent
6ad782cb29
commit
7e670497eb
@ -5,11 +5,12 @@ __copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
|
|||||||
Backend that implements storage of ebooks in an sqlite database.
|
Backend that implements storage of ebooks in an sqlite database.
|
||||||
'''
|
'''
|
||||||
import sqlite3 as sqlite
|
import sqlite3 as sqlite
|
||||||
import datetime, re, cPickle, sre_constants
|
import datetime, re, sre_constants
|
||||||
from zlib import compress, decompress
|
from zlib import compress, decompress
|
||||||
|
|
||||||
from calibre.ebooks.metadata import MetaInformation
|
from calibre.ebooks.metadata import MetaInformation
|
||||||
from calibre.ebooks.metadata import string_to_authors
|
from calibre.ebooks.metadata import string_to_authors
|
||||||
|
from calibre.utils.serialize import pickle_loads, pickle_dumps
|
||||||
from calibre import isbytestring
|
from calibre import isbytestring
|
||||||
from polyglot.builtins import unicode_type
|
from polyglot.builtins import unicode_type
|
||||||
|
|
||||||
@ -1090,7 +1091,7 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE;
|
|||||||
def conversion_options(self, id, format):
|
def conversion_options(self, id, format):
|
||||||
data = self.conn.get('SELECT data FROM conversion_options WHERE book=? AND format=?', (id, format.upper()), all=False)
|
data = self.conn.get('SELECT data FROM conversion_options WHERE book=? AND format=?', (id, format.upper()), all=False)
|
||||||
if data:
|
if data:
|
||||||
return cPickle.loads(str(data))
|
return pickle_loads(bytes(data))
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def has_conversion_options(self, ids, format='PIPE'):
|
def has_conversion_options(self, ids, format='PIPE'):
|
||||||
@ -1166,7 +1167,7 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE;
|
|||||||
self.set_tags(id, val.split(','), append=False)
|
self.set_tags(id, val.split(','), append=False)
|
||||||
|
|
||||||
def set_conversion_options(self, id, format, options):
|
def set_conversion_options(self, id, format, options):
|
||||||
data = sqlite.Binary(cPickle.dumps(options, -1))
|
data = sqlite.Binary(pickle_dumps(options))
|
||||||
oid = self.conn.get('SELECT id FROM conversion_options WHERE book=? AND format=?', (id, format.upper()), all=False)
|
oid = self.conn.get('SELECT id FROM conversion_options WHERE book=? AND format=?', (id, format.upper()), all=False)
|
||||||
if oid:
|
if oid:
|
||||||
self.conn.execute('UPDATE conversion_options SET data=? WHERE id=?', (data, oid))
|
self.conn.execute('UPDATE conversion_options SET data=? WHERE id=?', (data, oid))
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
from __future__ import absolute_import, division, print_function, unicode_literals
|
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||||
|
|
||||||
from polyglot.builtins import unicode_type
|
from polyglot.builtins import unicode_type
|
||||||
|
from calibre.constants import ispy3
|
||||||
|
|
||||||
|
|
||||||
MSGPACK_MIME = 'application/x-msgpack'
|
MSGPACK_MIME = 'application/x-msgpack'
|
||||||
@ -114,3 +115,24 @@ def msgpack_loads(dump):
|
|||||||
def json_loads(data):
|
def json_loads(data):
|
||||||
import json
|
import json
|
||||||
return json.loads(data, object_hook=json_decoder)
|
return json.loads(data, object_hook=json_decoder)
|
||||||
|
|
||||||
|
|
||||||
|
if ispy3:
|
||||||
|
|
||||||
|
def pickle_dumps(data):
|
||||||
|
import pickle
|
||||||
|
return pickle.dumps(data, -1)
|
||||||
|
|
||||||
|
def pickle_loads(dump):
|
||||||
|
import pickle
|
||||||
|
return pickle.loads(dump, encoding='utf-8')
|
||||||
|
|
||||||
|
else:
|
||||||
|
|
||||||
|
def pickle_dumps(data):
|
||||||
|
import cPickle as pickle
|
||||||
|
return pickle.dumps(data, -1)
|
||||||
|
|
||||||
|
def pickle_loads(dump):
|
||||||
|
import cPickle as pickle
|
||||||
|
return pickle.loads(dump)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user