Bugfixes in standalone code for Calibre < 5 / Python 2

This commit is contained in:
NoDRM 2021-12-29 11:36:59 +01:00
parent dbf4b54026
commit b11aadcca6
17 changed files with 100 additions and 43 deletions

View file

@ -0,0 +1,14 @@
#@@CALIBRE_COMPAT_CODE_START@@
import sys, os
# Explicitly allow importing the parent folder
if os.path.dirname(os.path.dirname(os.path.abspath(__file__))) not in sys.path:
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# Bugfix for Calibre < 5:
if "calibre" in sys.modules and sys.version_info[0] == 2:
from calibre.utils.config import config_dir
if os.path.join(config_dir, "plugins", "DeDRM.zip") not in sys.path:
sys.path.insert(0, os.path.join(config_dir, "plugins", "DeDRM.zip"))
#@@CALIBRE_COMPAT_CODE_END@@

View file

@ -1,6 +1,8 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import print_function
# __init__.py for DeDRM_plugin # __init__.py for DeDRM_plugin
# Copyright © 2008-2020 Apprentice Harper et al. # Copyright © 2008-2020 Apprentice Harper et al.
# Copyright © 2021 NoDRM # Copyright © 2021 NoDRM
@ -97,9 +99,7 @@ import sys, os
import time import time
import traceback import traceback
# Calibre stuff - so we can import from our ZIP without absolute module name #@@CALIBRE_COMPAT_CODE@@
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
class DeDRMError(Exception): class DeDRMError(Exception):
pass pass
@ -162,7 +162,7 @@ class DeDRM(FileTypePlugin):
def cli_main(self, data): def cli_main(self, data):
from standalone import main from .standalone import main
main(data) main(data)
def initialize(self): def initialize(self):

View file

@ -16,8 +16,8 @@ from PyQt5.Qt import (Qt, QWidget, QHBoxLayout, QVBoxLayout, QLabel, QLineEdit,
from PyQt5 import Qt as QtGui from PyQt5 import Qt as QtGui
from zipfile import ZipFile from zipfile import ZipFile
# Calibre stuff - so we can import from our ZIP without absolute module name
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) #@@CALIBRE_COMPAT_CODE@@
# calibre modules and constants. # calibre modules and constants.

View file

@ -71,9 +71,7 @@ __version__='1.00'
import sys, re import sys, re
import struct, binascii, getopt, zlib, os, os.path, urllib, tempfile, traceback import struct, binascii, getopt, zlib, os, os.path, urllib, tempfile, traceback
# Calibre stuff - so we can import from our ZIP without absolute module name #@@CALIBRE_COMPAT_CODE@@
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
# Wrap a stream so that output gets flushed immediately # Wrap a stream so that output gets flushed immediately
# and also make sure that any unicode strings get # and also make sure that any unicode strings get

View file

@ -35,8 +35,7 @@ import getopt
from struct import pack from struct import pack
from struct import unpack from struct import unpack
# Calibre stuff - so we can import from our ZIP without absolute module name #@@CALIBRE_COMPAT_CODE@@
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
class TpzDRMError(Exception): class TpzDRMError(Exception):

View file

@ -72,8 +72,7 @@ import time
import html.entities import html.entities
import json import json
# Calibre stuff - so we can import from our ZIP without absolute module name #@@CALIBRE_COMPAT_CODE@@
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
class DrmException(Exception): class DrmException(Exception):

View file

@ -15,8 +15,9 @@ import zipfile
from io import BytesIO from io import BytesIO
# Calibre stuff - so we can import from our ZIP without absolute module name
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) #@@CALIBRE_COMPAT_CODE@@
from ion import DrmIon, DrmIonVoucher from ion import DrmIon, DrmIonVoucher

View file

@ -8,8 +8,8 @@ __license__ = 'GPL v3'
import os, sys import os, sys
import traceback import traceback
# Calibre stuff - so we can import from our ZIP without absolute module name
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) #@@CALIBRE_COMPAT_CODE@@
from calibre.utils.config import JSONConfig from calibre.utils.config import JSONConfig

View file

@ -6,8 +6,8 @@
import sys import sys
import os import os
# Calibre stuff - so we can import from our ZIP without absolute module name
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) #@@CALIBRE_COMPAT_CODE@@
import re import re

View file

@ -3,6 +3,8 @@
# CLI interface for the DeDRM plugin (useable without Calibre, too) # CLI interface for the DeDRM plugin (useable without Calibre, too)
from __future__ import absolute_import, print_function
# Copyright © 2021 NoDRM # Copyright © 2021 NoDRM
OPT_SHORT_TO_LONG = [ OPT_SHORT_TO_LONG = [
@ -16,15 +18,11 @@ OPT_SHORT_TO_LONG = [
["f", "force"] ["f", "force"]
] ]
import sys, os #@@CALIBRE_COMPAT_CODE@@
IS_CALIBRE = False
if "calibre" in sys.modules:
IS_CALIBRE = True
# Explicitly allow importing the parent folder
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# Explicitly set the package identifier so we are allowed to import stuff ... # Explicitly set the package identifier so we are allowed to import stuff ...
__package__ = "DeDRM_plugin" __package__ = "DeDRM_plugin"
import os, sys
global _additional_data global _additional_data
@ -46,7 +44,7 @@ def print_help():
print("Based on DeDRM Calibre plugin by Apprentice Harper, Apprentice Alf and others.") print("Based on DeDRM Calibre plugin by Apprentice Harper, Apprentice Alf and others.")
print("See https://github.com/noDRM/DeDRM_tools for more information.") print("See https://github.com/noDRM/DeDRM_tools for more information.")
print() print()
if IS_CALIBRE: if "calibre" in sys.modules:
print("This plugin can be run through Calibre - like you are doing right now - ") print("This plugin can be run through Calibre - like you are doing right now - ")
print("but it can also be executed with a standalone Python interpreter.") print("but it can also be executed with a standalone Python interpreter.")
else: else:
@ -81,11 +79,11 @@ def handle_single_argument(arg, next):
if arg == "--help": if arg == "--help":
print_help() print_help()
exit(0) sys.exit(0)
elif arg == "--credits": elif arg == "--credits":
print_credits() print_credits()
exit(0) sys.exit(0)
elif arg in ["--username", "--password"]: elif arg in ["--username", "--password"]:
used_up = 1 used_up = 1
@ -93,7 +91,7 @@ def handle_single_argument(arg, next):
if next is None: if next is None:
print_err_header() print_err_header()
print("Missing parameter for argument " + arg) print("Missing parameter for argument " + arg)
exit(1) sys.exit(1)
else: else:
_additional_params.append(next[0]) _additional_params.append(next[0])
@ -104,7 +102,7 @@ def handle_single_argument(arg, next):
else: else:
print_err_header() print_err_header()
print("Unknown argument: " + arg) print("Unknown argument: " + arg)
exit(1) sys.exit(1)
# Used up 0 additional arguments # Used up 0 additional arguments
@ -132,7 +130,7 @@ def main(argv):
skip_opts = False skip_opts = False
# First element is always the ZIP name, remove that. # First element is always the ZIP name, remove that.
if not arguments[0].lower().endswith(".zip") and not IS_CALIBRE: if not arguments[0].lower().endswith(".zip") and not "calibre" in sys.modules:
print("Warning: File name does not end in .zip ...") print("Warning: File name does not end in .zip ...")
print(arguments) print(arguments)
arguments.pop(0) arguments.pop(0)

View file

@ -14,8 +14,8 @@ __version__ = '6.0'
import sys import sys
import os, csv, getopt import os, csv, getopt
# Calibre stuff - so we can import from our ZIP without absolute module name #@@CALIBRE_COMPAT_CODE@@
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
import zlib, zipfile, tempfile, shutil import zlib, zipfile, tempfile, shutil
import traceback import traceback

View file

@ -1,10 +1,7 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import sys, os #@@CALIBRE_COMPAT_CODE@@
# Calibre stuff - so we can import from our ZIP without absolute module name
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from ignoblekeyGenPassHash import generate_key from ignoblekeyGenPassHash import generate_key

View file

@ -5,7 +5,10 @@ __license__ = 'GPL v3'
# Standard Python modules. # Standard Python modules.
import os, sys, re, hashlib, traceback import os, sys, re, hashlib, traceback
from calibre_plugins.dedrm.__init__ import PLUGIN_NAME, PLUGIN_VERSION
#@@CALIBRE_COMPAT_CODE@@
from __init__ import PLUGIN_NAME, PLUGIN_VERSION
class NoWinePython3Exception(Exception): class NoWinePython3Exception(Exception):

View file

@ -22,8 +22,7 @@ __version__ = "1.1"
import sys, os import sys, os
# Calibre stuff - so we can import from our ZIP without absolute module name #@@CALIBRE_COMPAT_CODE@@
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
import zlib import zlib
import zipfilerugged import zipfilerugged

View file

@ -788,7 +788,7 @@ def cli_main():
books = [lib.books[num - 1]] books = [lib.books[num - 1]]
except (ValueError, IndexError): except (ValueError, IndexError):
print("Invalid choice. Exiting...") print("Invalid choice. Exiting...")
exit() sys.exit()
results = [decrypt_book(book, lib) for book in books] results = [decrypt_book(book, lib) for book in books]
lib.close() lib.close()

View file

@ -739,7 +739,7 @@ def cli_main():
books = [lib.books[num - 1]] books = [lib.books[num - 1]]
except (ValueError, IndexError): except (ValueError, IndexError):
print("Invalid choice. Exiting...") print("Invalid choice. Exiting...")
exit() sys.exit()
results = [decrypt_book(book, lib) for book in books] results = [decrypt_book(book, lib) for book in books]
lib.close() lib.close()

View file

@ -14,19 +14,65 @@ import shutil
DEDRM_SRC_DIR = 'DeDRM_plugin' DEDRM_SRC_DIR = 'DeDRM_plugin'
DEDRM_SRC_TMP_DIR = 'DeDRM_plugin_temp'
DEDRM_README= 'DeDRM_plugin_ReadMe.txt' DEDRM_README= 'DeDRM_plugin_ReadMe.txt'
OBOK_SRC_DIR = 'Obok_plugin' OBOK_SRC_DIR = 'Obok_plugin'
OBOK_README = 'obok_plugin_ReadMe.txt' OBOK_README = 'obok_plugin_ReadMe.txt'
RELEASE_DIR = 'release' RELEASE_DIR = 'release'
def patch_file(filepath):
f = open(filepath, "rb")
fn = open(filepath + ".tmp", "wb")
patch = open(os.path.join(DEDRM_SRC_DIR, "__calibre_compat_code.py"), "rb")
patchdata = patch.read()
patch.close()
while True:
line = f.readline()
if len(line) == 0:
break
if line.strip().startswith(b"#@@CALIBRE_COMPAT_CODE@@"):
fn.write(patchdata)
else:
fn.write(line)
f.close()
fn.close()
shutil.move(filepath + ".tmp", filepath)
def make_release(version): def make_release(version):
try: try:
shutil.rmtree(RELEASE_DIR) shutil.rmtree(RELEASE_DIR)
except: except:
pass pass
try:
shutil.rmtree(DEDRM_SRC_TMP_DIR)
except:
pass
os.mkdir(RELEASE_DIR) os.mkdir(RELEASE_DIR)
shutil.make_archive(DEDRM_SRC_DIR, 'zip', DEDRM_SRC_DIR)
# Copy folder
shutil.copytree(DEDRM_SRC_DIR, DEDRM_SRC_TMP_DIR)
# Modify folder
try:
shutil.rmtree(os.path.join(os.path.abspath(DEDRM_SRC_TMP_DIR), "__pycache__"))
except:
pass
# Patch file to add compat code.
for root, dirs, files in os.walk(DEDRM_SRC_TMP_DIR):
for name in files:
if name.endswith(".py"):
patch_file(os.path.join(root, name))
# Package
shutil.make_archive(DEDRM_SRC_DIR, 'zip', DEDRM_SRC_TMP_DIR)
shutil.make_archive(OBOK_SRC_DIR, 'zip', OBOK_SRC_DIR) shutil.make_archive(OBOK_SRC_DIR, 'zip', OBOK_SRC_DIR)
shutil.move(DEDRM_SRC_DIR+'.zip', RELEASE_DIR) shutil.move(DEDRM_SRC_DIR+'.zip', RELEASE_DIR)
shutil.move(OBOK_SRC_DIR+'.zip', RELEASE_DIR) shutil.move(OBOK_SRC_DIR+'.zip', RELEASE_DIR)
@ -34,6 +80,9 @@ def make_release(version):
shutil.copy(OBOK_README, RELEASE_DIR) shutil.copy(OBOK_README, RELEASE_DIR)
shutil.copy("ReadMe_Overview.txt", RELEASE_DIR) shutil.copy("ReadMe_Overview.txt", RELEASE_DIR)
# Remove temp folder:
shutil.rmtree(DEDRM_SRC_TMP_DIR)
if version is not None: if version is not None:
release_name = 'DeDRM_tools_{}'.format(version) release_name = 'DeDRM_tools_{}'.format(version)
else: else: