summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNoDRM <[email protected]>2021-12-29 11:36:59 +0100
committerNoDRM <[email protected]>2021-12-29 11:39:48 +0100
commitb11aadcca6e80621c421a644ec1cd305c2b0a479 (patch)
tree3b1c0b15e9c71d52d2fc9b67d3a167c3503871e5
parentdbf4b5402614d2f714559f91e7b7d414efa892a5 (diff)
Bugfixes in standalone code for Calibre < 5 / Python 2
-rw-r--r--DeDRM_plugin/__calibre_compat_code.py14
-rw-r--r--DeDRM_plugin/__init__.py8
-rwxr-xr-xDeDRM_plugin/config.py4
-rwxr-xr-xDeDRM_plugin/erdr2pml.py4
-rw-r--r--DeDRM_plugin/genbook.py3
-rw-r--r--DeDRM_plugin/k4mobidedrm.py3
-rw-r--r--DeDRM_plugin/kfxdedrm.py5
-rwxr-xr-xDeDRM_plugin/prefs.py4
-rw-r--r--DeDRM_plugin/scriptinterface.py4
-rw-r--r--DeDRM_plugin/standalone/__init__.py22
-rw-r--r--DeDRM_plugin/topazextract.py4
-rw-r--r--DeDRM_plugin/utilities.py5
-rw-r--r--DeDRM_plugin/wineutils.py5
-rw-r--r--DeDRM_plugin/zipfix.py3
-rw-r--r--Obok_plugin/obok/obok.py2
-rw-r--r--Other_Tools/Kobo/obok.py2
-rwxr-xr-xmake_release.py51
17 files changed, 100 insertions, 43 deletions
diff --git a/DeDRM_plugin/__calibre_compat_code.py b/DeDRM_plugin/__calibre_compat_code.py
new file mode 100644
index 0000000..4896dd6
--- /dev/null
+++ b/DeDRM_plugin/__calibre_compat_code.py
@@ -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@@
diff --git a/DeDRM_plugin/__init__.py b/DeDRM_plugin/__init__.py
index 80f7f28..ac11d0f 100644
--- a/DeDRM_plugin/__init__.py
+++ b/DeDRM_plugin/__init__.py
@@ -1,6 +1,8 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
+from __future__ import print_function
+
# __init__.py for DeDRM_plugin
# Copyright © 2008-2020 Apprentice Harper et al.
# Copyright © 2021 NoDRM
@@ -97,9 +99,7 @@ import sys, os
import time
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@@
class DeDRMError(Exception):
pass
@@ -162,7 +162,7 @@ class DeDRM(FileTypePlugin):
def cli_main(self, data):
- from standalone import main
+ from .standalone import main
main(data)
def initialize(self):
diff --git a/DeDRM_plugin/config.py b/DeDRM_plugin/config.py
index 4cdb2ea..79e7c4d 100755
--- a/DeDRM_plugin/config.py
+++ b/DeDRM_plugin/config.py
@@ -16,8 +16,8 @@ from PyQt5.Qt import (Qt, QWidget, QHBoxLayout, QVBoxLayout, QLabel, QLineEdit,
from PyQt5 import Qt as QtGui
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.
diff --git a/DeDRM_plugin/erdr2pml.py b/DeDRM_plugin/erdr2pml.py
index 70d7b46..26c947d 100755
--- a/DeDRM_plugin/erdr2pml.py
+++ b/DeDRM_plugin/erdr2pml.py
@@ -71,9 +71,7 @@ __version__='1.00'
import sys, re
import struct, binascii, getopt, zlib, os, os.path, urllib, tempfile, 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@@
# Wrap a stream so that output gets flushed immediately
# and also make sure that any unicode strings get
diff --git a/DeDRM_plugin/genbook.py b/DeDRM_plugin/genbook.py
index a0e0d0d..21186b8 100644
--- a/DeDRM_plugin/genbook.py
+++ b/DeDRM_plugin/genbook.py
@@ -35,8 +35,7 @@ import getopt
from struct import pack
from struct import unpack
-# 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@@
class TpzDRMError(Exception):
diff --git a/DeDRM_plugin/k4mobidedrm.py b/DeDRM_plugin/k4mobidedrm.py
index 1a6465b..ec108d4 100644
--- a/DeDRM_plugin/k4mobidedrm.py
+++ b/DeDRM_plugin/k4mobidedrm.py
@@ -72,8 +72,7 @@ import time
import html.entities
import json
-# 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@@
class DrmException(Exception):
diff --git a/DeDRM_plugin/kfxdedrm.py b/DeDRM_plugin/kfxdedrm.py
index 0674d63..cec764c 100644
--- a/DeDRM_plugin/kfxdedrm.py
+++ b/DeDRM_plugin/kfxdedrm.py
@@ -15,8 +15,9 @@ import zipfile
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
diff --git a/DeDRM_plugin/prefs.py b/DeDRM_plugin/prefs.py
index ae44213..4db9618 100755
--- a/DeDRM_plugin/prefs.py
+++ b/DeDRM_plugin/prefs.py
@@ -8,8 +8,8 @@ __license__ = 'GPL v3'
import os, sys
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
diff --git a/DeDRM_plugin/scriptinterface.py b/DeDRM_plugin/scriptinterface.py
index 3351ee7..e65f426 100644
--- a/DeDRM_plugin/scriptinterface.py
+++ b/DeDRM_plugin/scriptinterface.py
@@ -6,8 +6,8 @@
import sys
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
diff --git a/DeDRM_plugin/standalone/__init__.py b/DeDRM_plugin/standalone/__init__.py
index fceda3b..dbf0cab 100644
--- a/DeDRM_plugin/standalone/__init__.py
+++ b/DeDRM_plugin/standalone/__init__.py
@@ -3,6 +3,8 @@
# CLI interface for the DeDRM plugin (useable without Calibre, too)
+from __future__ import absolute_import, print_function
+
# Copyright © 2021 NoDRM
OPT_SHORT_TO_LONG = [
@@ -16,15 +18,11 @@ OPT_SHORT_TO_LONG = [
["f", "force"]
]
-import sys, os
-IS_CALIBRE = False
-if "calibre" in sys.modules:
- IS_CALIBRE = True
+#@@CALIBRE_COMPAT_CODE@@
-# 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 ...
__package__ = "DeDRM_plugin"
+import os, sys
global _additional_data
@@ -46,7 +44,7 @@ def print_help():
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()
- if IS_CALIBRE:
+ if "calibre" in sys.modules:
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.")
else:
@@ -81,11 +79,11 @@ def handle_single_argument(arg, next):
if arg == "--help":
print_help()
- exit(0)
+ sys.exit(0)
elif arg == "--credits":
print_credits()
- exit(0)
+ sys.exit(0)
elif arg in ["--username", "--password"]:
used_up = 1
@@ -93,7 +91,7 @@ def handle_single_argument(arg, next):
if next is None:
print_err_header()
print("Missing parameter for argument " + arg)
- exit(1)
+ sys.exit(1)
else:
_additional_params.append(next[0])
@@ -104,7 +102,7 @@ def handle_single_argument(arg, next):
else:
print_err_header()
print("Unknown argument: " + arg)
- exit(1)
+ sys.exit(1)
# Used up 0 additional arguments
@@ -132,7 +130,7 @@ def main(argv):
skip_opts = False
# 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(arguments)
arguments.pop(0)
diff --git a/DeDRM_plugin/topazextract.py b/DeDRM_plugin/topazextract.py
index 4db5072..8be96a2 100644
--- a/DeDRM_plugin/topazextract.py
+++ b/DeDRM_plugin/topazextract.py
@@ -14,8 +14,8 @@ __version__ = '6.0'
import sys
import os, csv, getopt
-# 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 zlib, zipfile, tempfile, shutil
import traceback
diff --git a/DeDRM_plugin/utilities.py b/DeDRM_plugin/utilities.py
index 1efd8ce..bd008b5 100644
--- a/DeDRM_plugin/utilities.py
+++ b/DeDRM_plugin/utilities.py
@@ -1,10 +1,7 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
-import sys, 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@@
from ignoblekeyGenPassHash import generate_key
diff --git a/DeDRM_plugin/wineutils.py b/DeDRM_plugin/wineutils.py
index 071e0da..cd79b4c 100644
--- a/DeDRM_plugin/wineutils.py
+++ b/DeDRM_plugin/wineutils.py
@@ -5,7 +5,10 @@ __license__ = 'GPL v3'
# Standard Python modules.
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):
diff --git a/DeDRM_plugin/zipfix.py b/DeDRM_plugin/zipfix.py
index 079e49a..3fbfbce 100644
--- a/DeDRM_plugin/zipfix.py
+++ b/DeDRM_plugin/zipfix.py
@@ -22,8 +22,7 @@ __version__ = "1.1"
import sys, 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 zlib
import zipfilerugged
diff --git a/Obok_plugin/obok/obok.py b/Obok_plugin/obok/obok.py
index f680341..e80e9ae 100644
--- a/Obok_plugin/obok/obok.py
+++ b/Obok_plugin/obok/obok.py
@@ -788,7 +788,7 @@ def cli_main():
books = [lib.books[num - 1]]
except (ValueError, IndexError):
print("Invalid choice. Exiting...")
- exit()
+ sys.exit()
results = [decrypt_book(book, lib) for book in books]
lib.close()
diff --git a/Other_Tools/Kobo/obok.py b/Other_Tools/Kobo/obok.py
index 6f87114..ae08800 100644
--- a/Other_Tools/Kobo/obok.py
+++ b/Other_Tools/Kobo/obok.py
@@ -739,7 +739,7 @@ def cli_main():
books = [lib.books[num - 1]]
except (ValueError, IndexError):
print("Invalid choice. Exiting...")
- exit()
+ sys.exit()
results = [decrypt_book(book, lib) for book in books]
lib.close()
diff --git a/make_release.py b/make_release.py
index e600af8..95bebf6 100755
--- a/make_release.py
+++ b/make_release.py
@@ -14,19 +14,65 @@ import shutil
DEDRM_SRC_DIR = 'DeDRM_plugin'
+DEDRM_SRC_TMP_DIR = 'DeDRM_plugin_temp'
DEDRM_README= 'DeDRM_plugin_ReadMe.txt'
OBOK_SRC_DIR = 'Obok_plugin'
OBOK_README = 'obok_plugin_ReadMe.txt'
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):
try:
shutil.rmtree(RELEASE_DIR)
except:
pass
+ try:
+ shutil.rmtree(DEDRM_SRC_TMP_DIR)
+ except:
+ pass
+
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.move(DEDRM_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("ReadMe_Overview.txt", RELEASE_DIR)
+ # Remove temp folder:
+ shutil.rmtree(DEDRM_SRC_TMP_DIR)
+
if version is not None:
release_name = 'DeDRM_tools_{}'.format(version)
else: