chore: executable paths
This commit is contained in:
@@ -10,3 +10,26 @@ dependencies = [
|
|||||||
"pycryptodomex==3.17",
|
"pycryptodomex==3.17",
|
||||||
"requests==2.31.0",
|
"requests==2.31.0",
|
||||||
]
|
]
|
||||||
|
[project.scripts]
|
||||||
|
degourou = "degourou.DeGourou:main"
|
||||||
|
|
||||||
|
[tool.uv.pip]
|
||||||
|
no-binary = ["charset-normalizer"]
|
||||||
|
|
||||||
|
[tool.uv.workspace]
|
||||||
|
members = [
|
||||||
|
".",
|
||||||
|
]
|
||||||
|
|
||||||
|
[tool.uv.sources]
|
||||||
|
degourou = { workspace = true }
|
||||||
|
|
||||||
|
[build-system]
|
||||||
|
requires = ["setuptools>=64", "setuptools_scm>=8"]
|
||||||
|
|
||||||
|
[dependency-groups]
|
||||||
|
dev = [
|
||||||
|
"degourou",
|
||||||
|
"lxml-stubs>=0.5.1",
|
||||||
|
]
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
from setup.loginAccount import loginAndGetKey
|
from degourou.setup.loginAccount import loginAndGetKey
|
||||||
from setup.fulfill import downloadFile
|
from degourou.setup.fulfill import downloadFile
|
||||||
|
|
||||||
from decrypt.decodePDF import decryptPDF
|
from degourou.decrypt.decodePDF import decryptPDF, getPDFencryptionType
|
||||||
from decrypt.decodeEPUB import decryptEPUB
|
from degourou.decrypt.decodeEPUB import decryptEPUB
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
from os import mkdir, remove, rename
|
from os import mkdir, remove, rename
|
||||||
from os.path import exists
|
from os.path import exists
|
||||||
|
|
||||||
from setup.params import FILE_DEVICEKEY, FILE_DEVICEXML, FILE_ACTIVATIONXML
|
from degourou.setup.params import FILE_DEVICEKEY, FILE_DEVICEXML, FILE_ACTIVATIONXML
|
||||||
from decrypt.params import KEYPATH
|
from degourou.decrypt.params import KEYPATH
|
||||||
from setup.data import createDefaultFiles
|
from degourou.setup.data import createDefaultFiles
|
||||||
from setup.ia import SESSION_FILE, manage_login, get_book, return_book
|
from degourou.setup.ia import SESSION_FILE, manage_login, get_book, return_book
|
||||||
|
|
||||||
|
|
||||||
def loginADE(email, password):
|
def loginADE(email, password):
|
||||||
@@ -31,7 +31,7 @@ def loginIA(email,password):
|
|||||||
manage_login(email,password)
|
manage_login(email,password)
|
||||||
print()
|
print()
|
||||||
|
|
||||||
def main(acsmFile, outputFilename):
|
def run(acsmFile, outputFilename):
|
||||||
if not exists('account'): mkdir('account')
|
if not exists('account'): mkdir('account')
|
||||||
|
|
||||||
# setting up the account and keys
|
# setting up the account and keys
|
||||||
@@ -80,13 +80,12 @@ def handle_IA(url,format):
|
|||||||
if acsmFile is None:
|
if acsmFile is None:
|
||||||
print("Could not get Book, try using ACSm file as input")
|
print("Could not get Book, try using ACSm file as input")
|
||||||
return
|
return
|
||||||
main(acsmFile,None)
|
run(acsmFile,None)
|
||||||
remove(acsmFile)
|
remove(acsmFile)
|
||||||
if(return_book(url) is None):
|
if(return_book(url) is None):
|
||||||
print("Please return it yourself")
|
print("Please return it yourself")
|
||||||
|
|
||||||
|
def main():
|
||||||
if __name__ == "__main__":
|
|
||||||
parser = argparse.ArgumentParser(description="Download and Decrypt an encrypted PDF or EPUB file.")
|
parser = argparse.ArgumentParser(description="Download and Decrypt an encrypted PDF or EPUB file.")
|
||||||
parser.add_argument("-f", type=str, nargs='?', default=None, help="path to the ACSM file")
|
parser.add_argument("-f", type=str, nargs='?', default=None, help="path to the ACSM file")
|
||||||
parser.add_argument("-u", type=str, nargs='?', default=None, help="book url from InternetArchive")
|
parser.add_argument("-u", type=str, nargs='?', default=None, help="book url from InternetArchive")
|
||||||
@@ -133,8 +132,12 @@ if __name__ == "__main__":
|
|||||||
elif args.f == None:
|
elif args.f == None:
|
||||||
if exists("URLLink.acsm"):
|
if exists("URLLink.acsm"):
|
||||||
args.f = "URLLink.acsm"
|
args.f = "URLLink.acsm"
|
||||||
main(args.f, args.o)
|
run(args.f, args.o)
|
||||||
else: parser.print_help()
|
else: parser.print_help()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
main(args.f, args.o)
|
run(args.f, args.o)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
0
src/degourou/decrypt/__init__.py
Normal file
0
src/degourou/decrypt/__init__.py
Normal file
@@ -11,7 +11,7 @@
|
|||||||
Decrypt Adobe Digital Editions encrypted ePub books.
|
Decrypt Adobe Digital Editions encrypted ePub books.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from decrypt.params import KEYPATH
|
from .params import KEYPATH
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__version__ = "8.0"
|
__version__ = "8.0"
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ import traceback
|
|||||||
import base64
|
import base64
|
||||||
import zlib
|
import zlib
|
||||||
from zipfile import ZipInfo, ZipFile, ZIP_STORED, ZIP_DEFLATED
|
from zipfile import ZipInfo, ZipFile, ZIP_STORED, ZIP_DEFLATED
|
||||||
from decrypt.zeroedzipinfo import ZeroedZipInfo
|
from .zeroedzipinfo import ZeroedZipInfo
|
||||||
from contextlib import closing
|
from contextlib import closing
|
||||||
from lxml import etree
|
from lxml import etree
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
Decrypts Adobe ADEPT-encrypted PDF files.
|
Decrypts Adobe ADEPT-encrypted PDF files.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from decrypt.params import KEYPATH
|
from .params import KEYPATH
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__version__ = "10.0.4"
|
__version__ = "10.0.4"
|
||||||
|
|
||||||
@@ -2305,5 +2305,3 @@ def decryptPDF(inpath):
|
|||||||
else:
|
else:
|
||||||
print("Decryption failed")
|
print("Decryption failed")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
0
src/degourou/setup/__init__.py
Normal file
0
src/degourou/setup/__init__.py
Normal file
@@ -1,5 +1,5 @@
|
|||||||
from setup.params import FILE_DEVICEKEY, FILE_DEVICEXML, FILE_ACTIVATIONXML
|
from .params import FILE_DEVICEKEY, FILE_DEVICEXML, FILE_ACTIVATIONXML
|
||||||
from decrypt.params import KEYPATH
|
from degourou.decrypt.params import KEYPATH
|
||||||
|
|
||||||
keyContent = b'0\x82\x02\\\x02\x01\x00\x02\x81\x81\x00\xad*E\x8e0\n\x91\xd6\xbaj\xc1t3\xc2R2h\xa6\x18\x063i\xfd\x9bR/e\xa6\xec\x87\xab\x11\n\'\xb7\x93\x14\xb6\xbbm\xfa\xf0\xf4\xe8=\x18\xa6\xe9\x15$\xdao\xb3\x8d\xf5\xddT\n\xf5\t<\xe8\xb2\x93k\x02zi\xe6\x86\x10F\x13\xc9m\xcfZ\x83\xe6=\xd6G\xf2/]3\xff\x8ch#\xea|\xa9I\x9a\xf6\xbf\x19\xd9\x10\xe0\x18\xa1\rb\x801k~\xc03f\x84\x07{v\x88\x18\x9bH\x91+o \x90\x9b\xb7\xf5\x02\x03\x01\x00\x01\x02\x81\x80\x05\xfd\x95\xd3\x886\x9a\xba\x8ck\xc1\xb5\xc21\x86\xab\x1a\xa8^\x1af%\x9b\x8a\xc0\x96\xc6\x10}\xb6\xf6\xeb\x80\xc4R\xc2@\x9d\xf9F\xa1\xf7\xe6\x06jPs\xad\xc3w\xd3\xea\xb7\xca\xec\x03\x17\xcf\xff\x01u\x96\x15\n\x0e&\xb0\xc7\x90F\xc4\xdaZ"\xc1)>\xee\x19\xf6\x05\xa5\xba\x00H)\xa8>\x1fC\x02\xd3\xba\xa8){\x06^D\xb4\xfd"\x05\x05\xec\xef\xdb.tbZ8\xabU<,+\xb6\xfaI\x98\xcc7H\xedr\xa9\xfd\x02A\x00\xc27%\xc5\xa0\xff\xd5l\xaa\x7f=\x1dx\xab?\xd8~\xf7v\x1f!\x0cCh\xc9\xb4\x1a\x8b\xb2\xaeC\xa0\xf9\x91\xcc\x99<\x11\xfbQ\xae\x8fG\xb0\xd1b\x0c=\xebR\x19\xb4\x15\xd4\x1c\xbe\xf4\xc7E\xe8\xea\xe1\xb3\x0b\x02A\x00\xe4@\xcb(\xdd\x04F\xe4jT\xe5a\xaaj\xaf=F\xa1\xaf\x1c\xa6F\x93\xc7V1\xd9\xb1\x96\xdb\x1b\xf5\x86\r\xb11\x10\x12\x18\xc5\xee\xaeD\xa3\xc1/\xe3\xf2\x8f\xaf\xad\xda\xe6\t\x8d\x9d\x99z\x04\xeeK\xdb \xff\x02A\x00\xad_\x9d\x90v\xd0\xeb->f\xa7\xa0\x0f\x80\x90V+\xc1\xac\xe8\xcd\x0f\xad}u\xd2\x19\x80k\xd9\xb4\xf5\x96\xd4\xd8\xd8R\x0f\x9bR\xa7\x89\xb0m\xdf\xfc\xaf\x00\xf7y+\x08\xe0\x13\xa25\xb5=\xce\xe2\xc6\x0b\x05Q\x02@\x18\xee\xf7\x02\\\xbaU\xe0\'\xb9da9\xd3s\x97\x16\xfb\x1c|\xdd\xb1\x01\xfd\x99m\xd2\xa0\xf2\xa0\xb6\xba(M\xa0\x98\x82o\xe7\xa2\xdf\x82\xcb\xde\xb3\x80\xbe\xbe\xc5qdep\x11\x85\x15\xbd)6\x16\xad\xd4\x9f\x13\x02@\x0f\x15\xc1Y"b\x19\x81Q\x81\x8d\x006\xe4\xf0e\xa2\xa7\xb8\x98{\x1c\x12\xe0\nw\xbe\x86A-\xd0\x1c7\xf3\x169\xadd3\x85\xaf\x13\x99\x08\x97e)c\xaf\xb1V\xf1\x15\xf6K\r\x16\xb4\xf9\xd1\x10\xe2\x92\xf9'
|
keyContent = b'0\x82\x02\\\x02\x01\x00\x02\x81\x81\x00\xad*E\x8e0\n\x91\xd6\xbaj\xc1t3\xc2R2h\xa6\x18\x063i\xfd\x9bR/e\xa6\xec\x87\xab\x11\n\'\xb7\x93\x14\xb6\xbbm\xfa\xf0\xf4\xe8=\x18\xa6\xe9\x15$\xdao\xb3\x8d\xf5\xddT\n\xf5\t<\xe8\xb2\x93k\x02zi\xe6\x86\x10F\x13\xc9m\xcfZ\x83\xe6=\xd6G\xf2/]3\xff\x8ch#\xea|\xa9I\x9a\xf6\xbf\x19\xd9\x10\xe0\x18\xa1\rb\x801k~\xc03f\x84\x07{v\x88\x18\x9bH\x91+o \x90\x9b\xb7\xf5\x02\x03\x01\x00\x01\x02\x81\x80\x05\xfd\x95\xd3\x886\x9a\xba\x8ck\xc1\xb5\xc21\x86\xab\x1a\xa8^\x1af%\x9b\x8a\xc0\x96\xc6\x10}\xb6\xf6\xeb\x80\xc4R\xc2@\x9d\xf9F\xa1\xf7\xe6\x06jPs\xad\xc3w\xd3\xea\xb7\xca\xec\x03\x17\xcf\xff\x01u\x96\x15\n\x0e&\xb0\xc7\x90F\xc4\xdaZ"\xc1)>\xee\x19\xf6\x05\xa5\xba\x00H)\xa8>\x1fC\x02\xd3\xba\xa8){\x06^D\xb4\xfd"\x05\x05\xec\xef\xdb.tbZ8\xabU<,+\xb6\xfaI\x98\xcc7H\xedr\xa9\xfd\x02A\x00\xc27%\xc5\xa0\xff\xd5l\xaa\x7f=\x1dx\xab?\xd8~\xf7v\x1f!\x0cCh\xc9\xb4\x1a\x8b\xb2\xaeC\xa0\xf9\x91\xcc\x99<\x11\xfbQ\xae\x8fG\xb0\xd1b\x0c=\xebR\x19\xb4\x15\xd4\x1c\xbe\xf4\xc7E\xe8\xea\xe1\xb3\x0b\x02A\x00\xe4@\xcb(\xdd\x04F\xe4jT\xe5a\xaaj\xaf=F\xa1\xaf\x1c\xa6F\x93\xc7V1\xd9\xb1\x96\xdb\x1b\xf5\x86\r\xb11\x10\x12\x18\xc5\xee\xaeD\xa3\xc1/\xe3\xf2\x8f\xaf\xad\xda\xe6\t\x8d\x9d\x99z\x04\xeeK\xdb \xff\x02A\x00\xad_\x9d\x90v\xd0\xeb->f\xa7\xa0\x0f\x80\x90V+\xc1\xac\xe8\xcd\x0f\xad}u\xd2\x19\x80k\xd9\xb4\xf5\x96\xd4\xd8\xd8R\x0f\x9bR\xa7\x89\xb0m\xdf\xfc\xaf\x00\xf7y+\x08\xe0\x13\xa25\xb5=\xce\xe2\xc6\x0b\x05Q\x02@\x18\xee\xf7\x02\\\xbaU\xe0\'\xb9da9\xd3s\x97\x16\xfb\x1c|\xdd\xb1\x01\xfd\x99m\xd2\xa0\xf2\xa0\xb6\xba(M\xa0\x98\x82o\xe7\xa2\xdf\x82\xcb\xde\xb3\x80\xbe\xbe\xc5qdep\x11\x85\x15\xbd)6\x16\xad\xd4\x9f\x13\x02@\x0f\x15\xc1Y"b\x19\x81Q\x81\x8d\x006\xe4\xf0e\xa2\xa7\xb8\x98{\x1c\x12\xe0\nw\xbe\x86A-\xd0\x1c7\xf3\x169\xadd3\x85\xaf\x13\x99\x08\x97e)c\xaf\xb1V\xf1\x15\xf6K\r\x16\xb4\xf9\xd1\x10\xe2\x92\xf9'
|
||||||
|
|
||||||
@@ -12,9 +12,9 @@ import os, time, shutil
|
|||||||
import zipfile
|
import zipfile
|
||||||
from lxml import etree
|
from lxml import etree
|
||||||
|
|
||||||
from setup.libadobe import sendHTTPRequest_DL2FILE
|
from .libadobe import sendHTTPRequest_DL2FILE
|
||||||
from setup.libadobeFulfill import buildRights, fulfill
|
from .libadobeFulfill import buildRights, fulfill
|
||||||
from setup.libpdf import patch_drm_into_pdf
|
from .libpdf import patch_drm_into_pdf
|
||||||
|
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
from charset_normalizer import md__mypyc
|
|
||||||
from os import path, mkdir
|
from os import path, mkdir
|
||||||
from requests import Session
|
from requests import Session
|
||||||
import random
|
import random
|
||||||
@@ -30,7 +30,7 @@ except ImportError:
|
|||||||
|
|
||||||
#@@CALIBRE_COMPAT_CODE@@
|
#@@CALIBRE_COMPAT_CODE@@
|
||||||
|
|
||||||
from setup.customRSA import CustomRSA
|
from .customRSA import CustomRSA
|
||||||
|
|
||||||
from cryptography.hazmat.primitives.serialization.pkcs12 import load_key_and_certificates
|
from cryptography.hazmat.primitives.serialization.pkcs12 import load_key_and_certificates
|
||||||
from cryptography.hazmat.primitives import serialization
|
from cryptography.hazmat.primitives import serialization
|
||||||
@@ -38,7 +38,7 @@ from cryptography.hazmat.primitives import serialization
|
|||||||
VAR_ACS_SERVER_HTTP = "http://adeactivate.adobe.com/adept"
|
VAR_ACS_SERVER_HTTP = "http://adeactivate.adobe.com/adept"
|
||||||
VAR_ACS_SERVER_HTTPS = "https://adeactivate.adobe.com/adept"
|
VAR_ACS_SERVER_HTTPS = "https://adeactivate.adobe.com/adept"
|
||||||
|
|
||||||
from setup.params import FILE_DEVICEKEY, FILE_DEVICEXML, FILE_ACTIVATIONXML
|
from .params import FILE_DEVICEKEY, FILE_DEVICEXML, FILE_ACTIVATIONXML
|
||||||
|
|
||||||
# Lists of different ADE "versions" we know about
|
# Lists of different ADE "versions" we know about
|
||||||
VAR_VER_SUPP_CONFIG_NAMES = [ "ADE 1.7.2", "ADE 2.0.1", "ADE 3.0.1", "ADE 4.0.3", "ADE 4.5.10", "ADE 4.5.11" ]
|
VAR_VER_SUPP_CONFIG_NAMES = [ "ADE 1.7.2", "ADE 2.0.1", "ADE 3.0.1", "ADE 4.0.3", "ADE 4.5.10", "ADE 4.5.11" ]
|
||||||
@@ -15,12 +15,12 @@ except ImportError:
|
|||||||
#@@CALIBRE_COMPAT_CODE@@
|
#@@CALIBRE_COMPAT_CODE@@
|
||||||
|
|
||||||
|
|
||||||
from setup.libadobe import addNonce, sign_node, sendRequestDocu, sendHTTPRequest
|
from .libadobe import addNonce, sign_node, sendRequestDocu, sendHTTPRequest
|
||||||
from setup.libadobe import makeFingerprint, makeSerial, encrypt_with_device_key, decrypt_with_device_key
|
from .libadobe import makeFingerprint, makeSerial, encrypt_with_device_key, decrypt_with_device_key
|
||||||
from setup.libadobe import get_devkey_path, get_device_path, get_activation_xml_path
|
from .libadobe import get_devkey_path, get_device_path, get_activation_xml_path
|
||||||
from setup.libadobe import VAR_VER_SUPP_CONFIG_NAMES, VAR_VER_HOBBES_VERSIONS, VAR_VER_OS_IDENTIFIERS
|
from .libadobe import VAR_VER_SUPP_CONFIG_NAMES, VAR_VER_HOBBES_VERSIONS, VAR_VER_OS_IDENTIFIERS
|
||||||
from setup.libadobe import VAR_VER_ALLOWED_BUILD_IDS_SWITCH_TO, VAR_VER_SUPP_VERSIONS, VAR_ACS_SERVER_HTTP
|
from .libadobe import VAR_VER_ALLOWED_BUILD_IDS_SWITCH_TO, VAR_VER_SUPP_VERSIONS, VAR_ACS_SERVER_HTTP
|
||||||
from setup.libadobe import VAR_ACS_SERVER_HTTPS, VAR_VER_BUILD_IDS, VAR_VER_NEED_HTTPS_BUILD_ID_LIMIT, VAR_VER_ALLOWED_BUILD_IDS_AUTHORIZE
|
from .libadobe import VAR_ACS_SERVER_HTTPS, VAR_VER_BUILD_IDS, VAR_VER_NEED_HTTPS_BUILD_ID_LIMIT, VAR_VER_ALLOWED_BUILD_IDS_AUTHORIZE
|
||||||
|
|
||||||
|
|
||||||
def createDeviceFile(randomSerial, useVersionIndex = 0):
|
def createDeviceFile(randomSerial, useVersionIndex = 0):
|
||||||
@@ -5,10 +5,10 @@ import time
|
|||||||
|
|
||||||
#@@CALIBRE_COMPAT_CODE@@
|
#@@CALIBRE_COMPAT_CODE@@
|
||||||
|
|
||||||
from setup.libadobe import addNonce, sign_node, get_cert_from_pkcs12, sendRequestDocu, sendRequestDocuRC, sendHTTPRequest
|
from .libadobe import addNonce, sign_node, get_cert_from_pkcs12, sendRequestDocu, sendRequestDocuRC, sendHTTPRequest
|
||||||
from setup.libadobe import get_devkey_path, get_device_path, get_activation_xml_path
|
from .libadobe import get_devkey_path, get_device_path, get_activation_xml_path
|
||||||
from setup.libadobe import VAR_VER_SUPP_VERSIONS, VAR_VER_HOBBES_VERSIONS
|
from .libadobe import VAR_VER_SUPP_VERSIONS, VAR_VER_HOBBES_VERSIONS
|
||||||
from setup.libadobe import VAR_VER_BUILD_IDS, VAR_VER_USE_DIFFERENT_NOTIFICATION_XML_ORDER
|
from .libadobe import VAR_VER_BUILD_IDS, VAR_VER_USE_DIFFERENT_NOTIFICATION_XML_ORDER
|
||||||
|
|
||||||
|
|
||||||
def buildFulfillRequest(acsm):
|
def buildFulfillRequest(acsm):
|
||||||
@@ -5,14 +5,14 @@
|
|||||||
This is an experimental Python version of libgourou.
|
This is an experimental Python version of libgourou.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
from setup.libadobe import createDeviceKeyFile, FILE_DEVICEKEY, FILE_DEVICEXML, FILE_ACTIVATIONXML
|
from .libadobe import createDeviceKeyFile, FILE_DEVICEKEY, FILE_DEVICEXML, FILE_ACTIVATIONXML
|
||||||
from setup.libadobeAccount import createDeviceFile, createUser, signIn, activateDevice, exportAccountEncryptionKeyDER, getAccountUUID
|
from .libadobeAccount import createDeviceFile, createUser, signIn, activateDevice, exportAccountEncryptionKeyDER, getAccountUUID
|
||||||
from os.path import exists
|
from os.path import exists
|
||||||
|
from degourou.decrypt.params import KEYPATH
|
||||||
|
|
||||||
VAR_MAIL = ""
|
VAR_MAIL = ""
|
||||||
VAR_PASS = ""
|
VAR_PASS = ""
|
||||||
VAR_VER = 1 # None # 1 for ADE2.0.1, 2 for ADE3.0.1
|
VAR_VER = 1 # None # 1 for ADE2.0.1, 2 for ADE3.0.1
|
||||||
from decrypt.params import KEYPATH
|
|
||||||
|
|
||||||
#################################################################
|
#################################################################
|
||||||
|
|
||||||
23
uv.lock
generated
23
uv.lock
generated
@@ -110,7 +110,7 @@ wheels = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "degourou"
|
name = "degourou"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = { virtual = "." }
|
source = { editable = "." }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "cryptography" },
|
{ name = "cryptography" },
|
||||||
{ name = "lxml" },
|
{ name = "lxml" },
|
||||||
@@ -118,6 +118,12 @@ dependencies = [
|
|||||||
{ name = "requests" },
|
{ name = "requests" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[package.dev-dependencies]
|
||||||
|
dev = [
|
||||||
|
{ name = "degourou" },
|
||||||
|
{ name = "lxml-stubs" },
|
||||||
|
]
|
||||||
|
|
||||||
[package.metadata]
|
[package.metadata]
|
||||||
requires-dist = [
|
requires-dist = [
|
||||||
{ name = "cryptography", specifier = "==41.0.1" },
|
{ name = "cryptography", specifier = "==41.0.1" },
|
||||||
@@ -126,6 +132,12 @@ requires-dist = [
|
|||||||
{ name = "requests", specifier = "==2.31.0" },
|
{ name = "requests", specifier = "==2.31.0" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[package.metadata.requires-dev]
|
||||||
|
dev = [
|
||||||
|
{ name = "degourou", editable = "." },
|
||||||
|
{ name = "lxml-stubs", specifier = ">=0.5.1" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "idna"
|
name = "idna"
|
||||||
version = "3.10"
|
version = "3.10"
|
||||||
@@ -197,6 +209,15 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/0a/44/9613f300201b8700215856e5edd056d4e58dd23368699196b58877d4408b/lxml-6.0.1-cp314-cp314-win_arm64.whl", hash = "sha256:2834377b0145a471a654d699bdb3a2155312de492142ef5a1d426af2c60a0a31", size = 3753901, upload-time = "2025-08-22T10:34:45.799Z" },
|
{ url = "https://files.pythonhosted.org/packages/0a/44/9613f300201b8700215856e5edd056d4e58dd23368699196b58877d4408b/lxml-6.0.1-cp314-cp314-win_arm64.whl", hash = "sha256:2834377b0145a471a654d699bdb3a2155312de492142ef5a1d426af2c60a0a31", size = 3753901, upload-time = "2025-08-22T10:34:45.799Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "lxml-stubs"
|
||||||
|
version = "0.5.1"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/99/da/1a3a3e5d159b249fc2970d73437496b908de8e4716a089c69591b4ffa6fd/lxml-stubs-0.5.1.tar.gz", hash = "sha256:e0ec2aa1ce92d91278b719091ce4515c12adc1d564359dfaf81efa7d4feab79d", size = 14778, upload-time = "2024-01-10T09:37:46.521Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/1f/c9/e0f8e4e6e8a69e5959b06499582dca6349db6769cc7fdfb8a02a7c75a9ae/lxml_stubs-0.5.1-py3-none-any.whl", hash = "sha256:1f689e5dbc4b9247cb09ae820c7d34daeb1fdbd1db06123814b856dae7787272", size = 13584, upload-time = "2024-01-10T09:37:44.931Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pycparser"
|
name = "pycparser"
|
||||||
version = "2.22"
|
version = "2.22"
|
||||||
|
|||||||
Reference in New Issue
Block a user