diff --git a/.update_version.py b/.update_version.py index bbd39d2..31e09b4 100644 --- a/.update_version.py +++ b/.update_version.py @@ -39,9 +39,9 @@ def update_poetry_version(file_path, new_version): # Update the version under tool.poetry if "tool" in data and "poetry" in data["tool"] and "version" in data["tool"]["poetry"]: data["tool"]["poetry"]["version"] = new_version - data["tool"]["briefcase"]["version"] = new_version - data["tool"]["briefcase"]["app"]["bitcoin-safe"]["linux"]["flatpak"]["version"] = new_version - data["tool"]["briefcase"]["app"]["bitcoin-safe"]["linux"]["appimage"]["version"] = new_version + # data["tool"]["briefcase"]["version"] = new_version + # data["tool"]["briefcase"]["app"]["bitcoin-safe"]["linux"]["flatpak"]["version"] = new_version + # data["tool"]["briefcase"]["app"]["bitcoin-safe"]["linux"]["appimage"]["version"] = new_version # Write the updated data back to pyproject.toml with open(file_path, "w") as file: diff --git a/README.md b/README.md index 9ed1ae6..47356d6 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ - **Easy** Multisig-Wallet Setup - Step-by-Step instructions for a secure MultiSig setup with PDF backup sheets - Test transactions ensure that all hardware signers are ready - - Full support for [Coldcard](https://store.coinkite.com/promo/8BFF877000C34A86F410), [Coldcard Q](https://store.coinkite.com/promo/8BFF877000C34A86F410), [Bitbox02](https://shiftcrypto.ch/bitbox02/?ref=MOB4dk7gpm), [Blockstream Jade](https://store.blockstream.com/?code=XEocg5boS77D), [Trezor](https://trezor.io), [Foundation Passport](https://foundation.xyz/passport), [Keystone](https://keyst.one), [Specter DIY](https://specter.solutions/hardware), using *QR*, *USB*, and *SD-card* + - Full support for [Coldcard](https://store.coinkite.com/promo/8BFF877000C34A86F410), [Coldcard Q](https://store.coinkite.com/promo/8BFF877000C34A86F410), [Bitbox02](https://shiftcrypto.ch/bitbox02/?ref=MOB4dk7gpm), [Blockstream Jade](https://store.blockstream.com/?code=XEocg5boS77D), [Trezor](https://trezor.io), [Foundation Passport](https://foundation.xyz/passport), [Keystone](https://keyst.one), [Ledger](https://shop.ledger.com/pages/ledger-nano-s-plus), [Specter DIY](https://specter.solutions/hardware), using *QR*, *USB*, and *SD-card* - **Secure**: Hardware signers only - All wallets require hardware signers/wallets for safe seed storage - Powered by **[BDK](https://github.com/bitcoindevkit/bdk)** @@ -21,7 +21,7 @@ - **Sending** for non-technical users - 1-click fee selection via mempool-blocks - Automatic merging of utxos when fees are low -- **SyncChat**: +- **Sync & Chat**: - Encrypted cloud backup (via nostr) of labels - Label synchronization between different computers - Wallet chat and PSBTs sharing between different computers diff --git a/bitcoin_safe/__init__.py b/bitcoin_safe/__init__.py index 59690c3..dc32bc7 100644 --- a/bitcoin_safe/__init__.py +++ b/bitcoin_safe/__init__.py @@ -1,2 +1,2 @@ # this is the source of the version information -__version__ = "1.0.0b5" +__version__ = "1.0.0rc1" diff --git a/bitcoin_safe/config.py b/bitcoin_safe/config.py index 58468e8..504f75b 100644 --- a/bitcoin_safe/config.py +++ b/bitcoin_safe/config.py @@ -46,11 +46,7 @@ from .network_config import NetworkConfig, NetworkConfigs from .storage import BaseSaveableClass -from .util import ( - briefcase_project_dir, - path_to_rel_home_path, - rel_home_path_to_abs_path, -) +from .util import current_project_dir, path_to_rel_home_path, rel_home_path_to_abs_path MIN_RELAY_FEE = 1 FEE_RATIO_HIGH_WARNING = 0.05 # warn user if fee/amount for on-chain tx is higher than this @@ -65,7 +61,7 @@ class UserConfig(BaseSaveableClass): VERSION = "0.1.6" app_name = "bitcoin_safe" - locales_path = briefcase_project_dir() / "gui" / "locales" + locales_path = current_project_dir() / "gui" / "locales" config_dir = Path(appdirs.user_config_dir(app_name)) config_file = config_dir / (app_name + ".conf") diff --git a/bitcoin_safe/gui/locales/app_ar_AE.qm b/bitcoin_safe/gui/locales/app_ar_AE.qm index 63a2728..6e5dede 100644 Binary files a/bitcoin_safe/gui/locales/app_ar_AE.qm and b/bitcoin_safe/gui/locales/app_ar_AE.qm differ diff --git a/bitcoin_safe/gui/locales/app_ar_AE.ts b/bitcoin_safe/gui/locales/app_ar_AE.ts index 35ff896..c34d21c 100644 --- a/bitcoin_safe/gui/locales/app_ar_AE.ts +++ b/bitcoin_safe/gui/locales/app_ar_AE.ts @@ -127,6 +127,17 @@ توليف إلى العناوين المحددة + + AmountAnalyzer + + Amount too small + المبلغ صغير جدًا + + + Amount too large + المبلغ كبير جدًا + + BTCSpinBox @@ -946,8 +957,8 @@ Location of signing device: ..... مزامنة متعددة الأجهزة والدردشة - Choose trusted computers in SyncChat tab on each computer. - اختر الحواسيب الموثوقة في تبويب SyncChat على كل جهاز. + Choose trusted computers in Sync & Chat tab on each computer. + اختر الحواسيب الموثوقة في تبويب المزامنة والدردشة على كل جهاز. See video @@ -1720,8 +1731,8 @@ Location of signing device: ..... استيراد التسميات - SyncChat - SyncChat + Sync && Chat + المزامنة && الدردشة All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json) @@ -2742,8 +2753,8 @@ below {rate} تسجيل multisig على الموقعين - SyncChat - SyncChat + Sync & Chat + المزامنة & الدردشة Send test {j} @@ -3254,6 +3265,10 @@ It is best to use your own server, such as {link}. Seed backup of {id} نسخة احتياطية لبذور {id} + + Total + الإجمالي + Created at {date} with أُنشئ في {date} مع diff --git a/bitcoin_safe/gui/locales/app_de_DE.qm b/bitcoin_safe/gui/locales/app_de_DE.qm index 0de808e..59e18b5 100644 Binary files a/bitcoin_safe/gui/locales/app_de_DE.qm and b/bitcoin_safe/gui/locales/app_de_DE.qm differ diff --git a/bitcoin_safe/gui/locales/app_de_DE.ts b/bitcoin_safe/gui/locales/app_de_DE.ts index bb1b422..68a4bbf 100644 --- a/bitcoin_safe/gui/locales/app_de_DE.ts +++ b/bitcoin_safe/gui/locales/app_de_DE.ts @@ -127,6 +127,17 @@ Für ausgewählte Adressen generieren + + AmountAnalyzer + + Amount too small + Betrag zu klein + + + Amount too large + Betrag zu groß + + BTCSpinBox @@ -946,8 +957,8 @@ Location of signing device: ..... Mehr-Computer-Synchronisation und Chat - Choose trusted computers in SyncChat tab on each computer. - Wählen Sie vertrauenswürdige Computer im SyncChat-Tab auf jedem Computer aus. + Choose trusted computers in Sync & Chat tab on each computer. + Wählen Sie vertrauenswürdige Computer im Synchronisieren & Chatten-Tab auf jedem Computer aus. See video @@ -1717,8 +1728,8 @@ Location of signing device: ..... Etiketten importieren - SyncChat - SyncChat + Sync && Chat + Synchronisieren && Chatten All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json) @@ -2739,8 +2750,8 @@ below {rate} Multisig auf Signern registrieren - SyncChat - SyncChat + Sync & Chat + Synchronisieren & Chatten Send test {j} @@ -3251,6 +3262,10 @@ It is best to use your own server, such as {link}. Seed backup of {id} Seed-Backup von {id} + + Total + Gesamt + Created at {date} with Erstellt am {date} mit diff --git a/bitcoin_safe/gui/locales/app_es_ES.qm b/bitcoin_safe/gui/locales/app_es_ES.qm index ca90367..2c06632 100644 Binary files a/bitcoin_safe/gui/locales/app_es_ES.qm and b/bitcoin_safe/gui/locales/app_es_ES.qm differ diff --git a/bitcoin_safe/gui/locales/app_es_ES.ts b/bitcoin_safe/gui/locales/app_es_ES.ts index 1f82023..622c7c4 100644 --- a/bitcoin_safe/gui/locales/app_es_ES.ts +++ b/bitcoin_safe/gui/locales/app_es_ES.ts @@ -127,6 +127,17 @@ Generar para direcciones seleccionadas + + AmountAnalyzer + + Amount too small + Cantidad demasiado pequeña + + + Amount too large + Cantidad demasiado grande + + BTCSpinBox @@ -946,8 +957,8 @@ Location of signing device: ..... Sincronización entre múltiples computadoras y chat - Choose trusted computers in SyncChat tab on each computer. - Elija computadoras de confianza en la pestaña SyncChat en cada computadora. + Choose trusted computers in Sync & Chat tab on each computer. + Elija computadoras de confianza en la pestaña Sincronizar & Chatear en cada computadora. See video @@ -1720,8 +1731,8 @@ Location of signing device: ..... Importar etiquetas - SyncChat - SyncChat + Sync && Chat + Sincronizar && Chatear All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json) @@ -2742,8 +2753,8 @@ below {rate} Registrar multisig en firmantes - SyncChat - SyncChat + Sync & Chat + Sincronizar & Chatear Send test {j} @@ -3254,6 +3265,10 @@ It is best to use your own server, such as {link}. Seed backup of {id} Copia de seguridad de semilla de {id} + + Total + Total + Created at {date} with Creado el {date} con diff --git a/bitcoin_safe/gui/locales/app_fr_FR.qm b/bitcoin_safe/gui/locales/app_fr_FR.qm index 06845f2..9a5f7df 100644 Binary files a/bitcoin_safe/gui/locales/app_fr_FR.qm and b/bitcoin_safe/gui/locales/app_fr_FR.qm differ diff --git a/bitcoin_safe/gui/locales/app_fr_FR.ts b/bitcoin_safe/gui/locales/app_fr_FR.ts index a938f5b..56c965d 100644 --- a/bitcoin_safe/gui/locales/app_fr_FR.ts +++ b/bitcoin_safe/gui/locales/app_fr_FR.ts @@ -127,6 +127,17 @@ Générer aux adresses sélectionnées + + AmountAnalyzer + + Amount too small + Montant trop petit + + + Amount too large + Montant trop grand + + BTCSpinBox @@ -946,8 +957,8 @@ Location of signing device: ..... Synchronisation multi-ordinateur et chat - Choose trusted computers in SyncChat tab on each computer. - Choisissez des ordinateurs de confiance dans l'onglet SyncChat sur chaque ordinateur. + Choose trusted computers in Sync & Chat tab on each computer. + Choisissez des ordinateurs de confiance dans l'onglet Synchroniser & Discuter sur chaque ordinateur. See video @@ -1720,8 +1731,8 @@ Voulez-vous continuer malgré tout ? Importer les étiquettes - SyncChat - SyncChat + Sync && Chat + Synchroniser && Discuter All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json) @@ -2742,8 +2753,8 @@ below {rate} Enregistrer le multisig sur les signataires - SyncChat - SyncChat + Sync & Chat + Synchroniser & Discuter Send test {j} @@ -3254,6 +3265,10 @@ It is best to use your own server, such as {link}. Seed backup of {id} Sauvegarde de graine de {id} + + Total + Total + Created at {date} with Créé le {date} avec diff --git a/bitcoin_safe/gui/locales/app_hi_IN.qm b/bitcoin_safe/gui/locales/app_hi_IN.qm index 0310fae..ffebe63 100644 Binary files a/bitcoin_safe/gui/locales/app_hi_IN.qm and b/bitcoin_safe/gui/locales/app_hi_IN.qm differ diff --git a/bitcoin_safe/gui/locales/app_hi_IN.ts b/bitcoin_safe/gui/locales/app_hi_IN.ts index 2145b10..9edf51a 100644 --- a/bitcoin_safe/gui/locales/app_hi_IN.ts +++ b/bitcoin_safe/gui/locales/app_hi_IN.ts @@ -127,6 +127,17 @@ चयनित पतों के लिए उत्पन्न करें + + AmountAnalyzer + + Amount too small + राशि बहुत छोटी है + + + Amount too large + राशि बहुत बड़ी है + + BTCSpinBox @@ -946,8 +957,8 @@ Location of signing device: ..... मल्टी-कंप्यूटर सिंक्रोनाइजेशन और चैट - Choose trusted computers in SyncChat tab on each computer. - प्रत्येक कंप्यूटर पर SyncChat टैब में विश्वसनीय कंप्यूटरों का चयन करें। + Choose trusted computers in Sync & Chat tab on each computer. + प्रत्येक कंप्यूटर पर सिंक और चैट टैब में विश्वसनीय कंप्यूटरों का चयन करें। See video @@ -1720,8 +1731,8 @@ Location of signing device: ..... लेबल आयात करें - SyncChat - SyncChat + Sync && Chat + सिंक && चैट All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json) @@ -2742,8 +2753,8 @@ below {rate} साइनर्स पर मल्टीसिग पंजीकृत करें - SyncChat - SyncChat + Sync & Chat + सिंक & चैट Send test {j} @@ -3254,6 +3265,10 @@ It is best to use your own server, such as {link}. Seed backup of {id} {id} का सीड बैकअप + + Total + कुल + Created at {date} with {date} को बनाया गया diff --git a/bitcoin_safe/gui/locales/app_it_IT.qm b/bitcoin_safe/gui/locales/app_it_IT.qm index 39a04fd..3a81ab1 100644 Binary files a/bitcoin_safe/gui/locales/app_it_IT.qm and b/bitcoin_safe/gui/locales/app_it_IT.qm differ diff --git a/bitcoin_safe/gui/locales/app_it_IT.ts b/bitcoin_safe/gui/locales/app_it_IT.ts index db6b71f..67cd03f 100644 --- a/bitcoin_safe/gui/locales/app_it_IT.ts +++ b/bitcoin_safe/gui/locales/app_it_IT.ts @@ -127,6 +127,17 @@ Genera agli indirizzi selezionati + + AmountAnalyzer + + Amount too small + Importo troppo piccolo + + + Amount too large + Importo troppo grande + + BTCSpinBox @@ -946,8 +957,8 @@ Location of signing device: ..... Sincronizzazione tra più computer e chat - Choose trusted computers in SyncChat tab on each computer. - Scegli computer fidati nella scheda SyncChat su ogni computer. + Choose trusted computers in Sync & Chat tab on each computer. + Scegli computer fidati nella scheda Sincronizza & Chatta su ogni computer. See video @@ -1720,8 +1731,8 @@ Vuoi procedere comunque? Importa etichette - SyncChat - SyncChat + Sync && Chat + Sincronizza && Chatta All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json) @@ -2742,8 +2753,8 @@ below {rate} Registra multisig sui firmatari - SyncChat - SyncChat + Sync & Chat + Sincronizza & Chatta Send test {j} @@ -3254,6 +3265,10 @@ It is best to use your own server, such as {link}. Seed backup of {id} Backup del seme di {id} + + Total + Totale + Created at {date} with Creato il {date} con diff --git a/bitcoin_safe/gui/locales/app_ja_JP.qm b/bitcoin_safe/gui/locales/app_ja_JP.qm index a182e44..6b1353b 100644 Binary files a/bitcoin_safe/gui/locales/app_ja_JP.qm and b/bitcoin_safe/gui/locales/app_ja_JP.qm differ diff --git a/bitcoin_safe/gui/locales/app_ja_JP.ts b/bitcoin_safe/gui/locales/app_ja_JP.ts index f8ccd1f..51f9ffe 100644 --- a/bitcoin_safe/gui/locales/app_ja_JP.ts +++ b/bitcoin_safe/gui/locales/app_ja_JP.ts @@ -127,6 +127,17 @@ 選択したアドレスに生成 + + AmountAnalyzer + + Amount too small + 金額が小さすぎます + + + Amount too large + 金額が大きすぎます + + BTCSpinBox @@ -946,8 +957,8 @@ Location of signing device: ..... マルチコンピュータ同期とチャット - Choose trusted computers in SyncChat tab on each computer. - 各コンピューターのSyncChatタブで信頼できるコンピューターを選択してください。 + Choose trusted computers in Sync & Chat tab on each computer. + 各コンピューターの同期&チャットタブで信頼できるコンピューターを選択してください。 See video @@ -1720,8 +1731,8 @@ Location of signing device: ..... ラベルのインポート - SyncChat - SyncChat + Sync && Chat + 同期 && チャット All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json) @@ -2742,8 +2753,8 @@ below {rate} マルチシグをサイナーに登録 - SyncChat - SyncChat + Sync & Chat + 同期 & チャット Send test {j} @@ -3254,6 +3265,10 @@ It is best to use your own server, such as {link}. Seed backup of {id} {id}のシードバックアップ + + Total + 合計 + Created at {date} with {date}に作成された diff --git a/bitcoin_safe/gui/locales/app_pt_PT.qm b/bitcoin_safe/gui/locales/app_pt_PT.qm index ebc193e..f1f9170 100644 Binary files a/bitcoin_safe/gui/locales/app_pt_PT.qm and b/bitcoin_safe/gui/locales/app_pt_PT.qm differ diff --git a/bitcoin_safe/gui/locales/app_pt_PT.ts b/bitcoin_safe/gui/locales/app_pt_PT.ts index d99b064..756eaa2 100644 --- a/bitcoin_safe/gui/locales/app_pt_PT.ts +++ b/bitcoin_safe/gui/locales/app_pt_PT.ts @@ -127,6 +127,17 @@ Gerar para endereços selecionados + + AmountAnalyzer + + Amount too small + Montante demasiado pequeno + + + Amount too large + Montante demasiado grande + + BTCSpinBox @@ -946,8 +957,8 @@ Location of signing device: ..... Sincronização entre múltiplos computadores e chat - Choose trusted computers in SyncChat tab on each computer. - Escolha computadores de confiança na aba SyncChat em cada computador. + Choose trusted computers in Sync & Chat tab on each computer. + Escolha computadores de confiança na aba Sincronizar & Conversar em cada computador. See video @@ -1720,8 +1731,8 @@ Deseja prosseguir mesmo assim? Importar etiquetas - SyncChat - SyncChat + Sync && Chat + Sincronizar && Conversar All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json) @@ -2742,8 +2753,8 @@ below {rate} Registrar multisig nos assinantes - SyncChat - SyncChat + Sync & Chat + Sincronizar & Conversar Send test {j} @@ -3254,6 +3265,10 @@ It is best to use your own server, such as {link}. Seed backup of {id} Cópia de segurança da semente de {id} + + Total + Total + Created at {date} with Criado em {date} com diff --git a/bitcoin_safe/gui/locales/app_ru_RU.qm b/bitcoin_safe/gui/locales/app_ru_RU.qm index 0a1784d..daffddd 100644 Binary files a/bitcoin_safe/gui/locales/app_ru_RU.qm and b/bitcoin_safe/gui/locales/app_ru_RU.qm differ diff --git a/bitcoin_safe/gui/locales/app_ru_RU.ts b/bitcoin_safe/gui/locales/app_ru_RU.ts index 330a306..c051130 100644 --- a/bitcoin_safe/gui/locales/app_ru_RU.ts +++ b/bitcoin_safe/gui/locales/app_ru_RU.ts @@ -127,6 +127,17 @@ Генерировать на выбранные адреса + + AmountAnalyzer + + Amount too small + Сумма слишком мала + + + Amount too large + Сумма слишком велика + + BTCSpinBox @@ -946,8 +957,8 @@ Location of signing device: ..... Синхронизация и чат на нескольких компьютерах - Choose trusted computers in SyncChat tab on each computer. - Выберите доверенные компьютеры на вкладке SyncChat на каждом компьютере. + Choose trusted computers in Sync & Chat tab on each computer. + Выберите доверенные компьютеры на вкладке Синхронизация & Чат на каждом компьютере. See video @@ -1720,8 +1731,8 @@ Location of signing device: ..... Импортировать метки - SyncChat - SyncChat + Sync && Chat + Синхронизация && Чат All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json) @@ -2742,8 +2753,8 @@ below {rate} Зарегистрировать мультисиг на подписывающих устройствах - SyncChat - SyncChat + Sync & Chat + Синхронизация & Чат Send test {j} @@ -3254,6 +3265,10 @@ It is best to use your own server, such as {link}. Seed backup of {id} Резервная копия семени {id} + + Total + Итого + Created at {date} with Создано {date} с diff --git a/bitcoin_safe/gui/locales/app_zh_CN.qm b/bitcoin_safe/gui/locales/app_zh_CN.qm index 3885588..c29d135 100644 Binary files a/bitcoin_safe/gui/locales/app_zh_CN.qm and b/bitcoin_safe/gui/locales/app_zh_CN.qm differ diff --git a/bitcoin_safe/gui/locales/app_zh_CN.ts b/bitcoin_safe/gui/locales/app_zh_CN.ts index fd4f88a..7cf5dfd 100644 --- a/bitcoin_safe/gui/locales/app_zh_CN.ts +++ b/bitcoin_safe/gui/locales/app_zh_CN.ts @@ -127,6 +127,17 @@ 生成到选定地址 + + AmountAnalyzer + + Amount too small + 金额太小 + + + Amount too large + 金额太大 + + BTCSpinBox @@ -947,8 +958,8 @@ Location of signing device: ..... 多电脑同步和聊天 - Choose trusted computers in SyncChat tab on each computer. - 在每台电脑上的SyncChat标签中选择受信任的电脑。 + Choose trusted computers in Sync & Chat tab on each computer. + 在每台电脑上的同步与聊天标签中选择受信任的电脑。 See video @@ -1723,8 +1734,8 @@ Location of signing device: ..... 导入标签 - SyncChat - SyncChat + Sync && Chat + 同步 && 聊天 All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json) @@ -2748,8 +2759,8 @@ below {rate} 在签名器上注册多签 - SyncChat - SyncChat + Sync & Chat + 同步 & 聊天 Send test {j} @@ -3261,6 +3272,10 @@ It is best to use your own server, such as {link}. Seed backup of {id} {id}的种子备份 + + Total + 总计 + Created at {date} with 在 {date} 创建的 diff --git a/bitcoin_safe/gui/qt/analyzers.py b/bitcoin_safe/gui/qt/analyzers.py index f39ba7f..8149cc9 100644 --- a/bitcoin_safe/gui/qt/analyzers.py +++ b/bitcoin_safe/gui/qt/analyzers.py @@ -168,3 +168,18 @@ def analyze(self, input: str, pos: int = 0) -> AnalyzerMessage: return AnalyzerMessage(self.tr("Valid Address"), AnalyzerState.Valid) else: return AnalyzerMessage(self.tr("Invalid Address"), AnalyzerState.Invalid) + + +class AmountAnalyzer(QObject): + def __init__(self, parent: QObject | None = None) -> None: + super().__init__(parent) + self.max_amount = 0 + self.min_amount = 0 + + def analyze(self, input: float) -> AnalyzerMessage: # type: ignore + if input < self.min_amount: + return AnalyzerMessage(self.tr("Amount too small"), AnalyzerState.Invalid) + if input > self.max_amount: + return AnalyzerMessage(self.tr("Amount too large"), AnalyzerState.Invalid) + + return AnalyzerMessage("Amount within allowed range", AnalyzerState.Valid) diff --git a/bitcoin_safe/gui/qt/custom_edits.py b/bitcoin_safe/gui/qt/custom_edits.py index 66c982d..e3b18a8 100644 --- a/bitcoin_safe/gui/qt/custom_edits.py +++ b/bitcoin_safe/gui/qt/custom_edits.py @@ -79,6 +79,23 @@ def worst_message(l: List[AnalyzerMessage]): return l[states.index(worst_state)] +class BaseIntAnalyzer: + @abstractmethod + def analyze(self, input: int) -> AnalyzerMessage: + raise NotImplementedError() + + def normalize(self, input: int) -> int: + return input + + @staticmethod + def worst_message(l: List[AnalyzerMessage]): + if not l: + return AnalyzerMessage("", AnalyzerState.Valid) + states = [message.state for message in l] + worst_state = max(states) + return l[states.index(worst_state)] + + class AnalyzerLineEdit(QLineEdit): def __init__(self, parent=None) -> None: super().__init__(parent=parent) diff --git a/bitcoin_safe/gui/qt/qt_wallet.py b/bitcoin_safe/gui/qt/qt_wallet.py index 5b32bff..d68d2e3 100644 --- a/bitcoin_safe/gui/qt/qt_wallet.py +++ b/bitcoin_safe/gui/qt/qt_wallet.py @@ -398,7 +398,7 @@ def wallet_signals(self) -> WalletSignals: def updateUi(self) -> None: self.tabs.setTabText(self.tabs.indexOf(self.send_tab), self.tr("Send")) self.tabs.setTabText(self.tabs.indexOf(self.wallet_descriptor_tab), self.tr("Descriptor")) - self.tabs.setTabText(self.tabs.indexOf(self.sync_tab_widget), self.tr("SyncChat")) + self.tabs.setTabText(self.tabs.indexOf(self.sync_tab_widget), self.tr("Sync && Chat")) self.tabs.setTabText(self.tabs.indexOf(self.history_tab), self.tr("History")) self.tabs.setTabText(self.tabs.indexOf(self.addresses_tab), self.tr("Receive")) diff --git a/bitcoin_safe/gui/qt/recipients.py b/bitcoin_safe/gui/qt/recipients.py index 5b23858..420e167 100644 --- a/bitcoin_safe/gui/qt/recipients.py +++ b/bitcoin_safe/gui/qt/recipients.py @@ -32,6 +32,7 @@ from pathlib import Path from bitcoin_safe.gui.qt.address_edit import AddressEdit +from bitcoin_safe.gui.qt.analyzers import AmountAnalyzer from bitcoin_safe.gui.qt.labeledit import WalletLabelAndCategoryEdit from bitcoin_safe.gui.qt.util import Message, MessageType, read_QIcon from bitcoin_safe.gui.qt.wrappers import Menu @@ -121,6 +122,10 @@ def __init__( self.amount_layout = QHBoxLayout() self.amount_spin_box = BTCSpinBox(self.signals.get_network()) + amount_analyzer = AmountAnalyzer() + amount_analyzer.min_amount = 0 + amount_analyzer.max_amount = int(21e6 * 1e8) + self.amount_spin_box.setAnalyzer(amount_analyzer) self.label_unit = QLabel(unit_str(self.signals.get_network())) self.send_max_button = QPushButton() self.send_max_button.setCheckable(True) diff --git a/bitcoin_safe/gui/qt/spinbox.py b/bitcoin_safe/gui/qt/spinbox.py index 97da859..10f922b 100644 --- a/bitcoin_safe/gui/qt/spinbox.py +++ b/bitcoin_safe/gui/qt/spinbox.py @@ -27,15 +27,50 @@ # SOFTWARE. -from typing import Tuple +from typing import Optional, Tuple import bdkpython as bdk from PyQt6 import QtGui, QtWidgets +from PyQt6.QtWidgets import QWidget + +from bitcoin_safe.gui.qt.analyzers import AmountAnalyzer +from bitcoin_safe.gui.qt.custom_edits import AnalyzerState from ...util import Satoshis -class BTCSpinBox(QtWidgets.QDoubleSpinBox): +class AnalyzerSpinBox(QtWidgets.QDoubleSpinBox): + def __init__(self, parent: QWidget | None = None) -> None: + super().__init__(parent) + self._smart_state: Optional[AmountAnalyzer] = None + self.valueChanged.connect(self.format_and_apply_validator) + + def setAnalyzer(self, smart_state: AmountAnalyzer): + """Set a custom validator.""" + self._smart_state = smart_state + + def analyzer(self) -> Optional[AmountAnalyzer]: + return self._smart_state + + def format_as_error(self, value: bool) -> None: + if value: + self.setStyleSheet(f"{self.__class__.__name__}" + " { background-color: #ff6c54; }") + else: + self.setStyleSheet("") + + def format_and_apply_validator(self) -> None: + analyzer = self.analyzer() + if not analyzer: + self.format_as_error(False) + return + + analysis = analyzer.analyze(self.value()) + error = bool(self.text()) and (analysis.state != AnalyzerState.Valid) + self.format_as_error(error) + self.setToolTip(analysis.msg if error else "") + + +class BTCSpinBox(AnalyzerSpinBox): "A Satoshi Spin Box. The value stored is in Satoshis." def __init__(self, network: bdk.Network, parent=None) -> None: @@ -45,6 +80,10 @@ def __init__(self, network: bdk.Network, parent=None) -> None: self.setDecimals(0) # Set the number of decimal places self.setRange(0, 21e6 * 1e8) # Define range as required + def setValue(self, val: float) -> None: + super().setValue(val) + self.format_and_apply_validator() + def set_max(self, value: bool) -> None: self.setDisabled(value) self._is_max = value @@ -74,3 +113,9 @@ def validate(self, text: str | None, pos: int) -> Tuple[QtGui.QValidator.State, except ValueError: # If it fails, the text is not valid return QtGui.QValidator.State.Invalid, text, pos + + def set_warning_maximum(self, value: int) -> None: + if not self._smart_state: + return + self._smart_state.max_amount = value + self.format_and_apply_validator() diff --git a/bitcoin_safe/gui/qt/tutorial_screenshots.py b/bitcoin_safe/gui/qt/tutorial_screenshots.py index da95b91..a505ace 100644 --- a/bitcoin_safe/gui/qt/tutorial_screenshots.py +++ b/bitcoin_safe/gui/qt/tutorial_screenshots.py @@ -45,14 +45,7 @@ class ScreenshotsTutorial(QWidget): - enabled_hardware_signers = [ - HardwareSigners.q, - HardwareSigners.coldcard, - HardwareSigners.bitbox02, - HardwareSigners.jade, - HardwareSigners.passport, - HardwareSigners.specterdiy, - ] + enabled_hardware_signers = HardwareSigners.as_list() # activate all of them def __init__( self, diff --git a/bitcoin_safe/gui/qt/tx_export.py b/bitcoin_safe/gui/qt/tx_export.py index 16d91fc..c474961 100644 --- a/bitcoin_safe/gui/qt/tx_export.py +++ b/bitcoin_safe/gui/qt/tx_export.py @@ -84,7 +84,7 @@ def __init__( self.button_copy = CopyToolButton(data=self.data, network=network, parent=self) self.add_button(self.button_copy) - # SyncChat + # Sync & Chat self.button_sync_share = SyncChatToolButton( data=self.data, network=network, sync_tabs=sync_tabs, parent=self ) diff --git a/bitcoin_safe/gui/qt/ui_tx.py b/bitcoin_safe/gui/qt/ui_tx.py index 7604dac..3282619 100644 --- a/bitcoin_safe/gui/qt/ui_tx.py +++ b/bitcoin_safe/gui/qt/ui_tx.py @@ -1597,14 +1597,16 @@ def get_global_xpub_dict(self, wallets: List[Wallet]) -> Dict[str, Tuple[str, st def reapply_max_amounts(self, fee_amount: int) -> None: recipient_group_boxes = self.recipients.get_recipient_group_boxes() for recipient_group_box in recipient_group_boxes: - recipient_group_box.recipient_widget.amount_spin_box.setMaximum(self.get_total_input_value()) + recipient_group_box.recipient_widget.amount_spin_box.set_warning_maximum( + self.get_total_input_value() + ) recipient_group_boxes_max_checked = [ recipient_group_box for recipient_group_box in recipient_group_boxes if recipient_group_box.recipient_widget.send_max_button.isChecked() ] - total_change_amount = self.get_total_change_amount(include_max_checked=False) - fee_amount + total_change_amount = max(0, self.get_total_change_amount(include_max_checked=False) - fee_amount) for recipient_group_box in recipient_group_boxes_max_checked: self.set_max_amount( recipient_group_box, total_change_amount // len(recipient_group_boxes_max_checked) diff --git a/bitcoin_safe/gui/qt/wizard.py b/bitcoin_safe/gui/qt/wizard.py index a61e921..cd5f53a 100644 --- a/bitcoin_safe/gui/qt/wizard.py +++ b/bitcoin_safe/gui/qt/wizard.py @@ -1378,7 +1378,7 @@ def updateUi(self) -> None:
  • {self.tr('Multi-computer synchronization and chat')}
  • """, @@ -1840,7 +1840,7 @@ def updateUi(self) -> None: TutorialStep.receive: self.tr("Receive Test"), TutorialStep.distribute: self.tr("Put in secure locations"), TutorialStep.register: self.tr("Register multisig on signers"), - TutorialStep.sync: self.tr("SyncChat"), + TutorialStep.sync: self.tr("Sync & Chat"), } for i, tutoral_step in enumerate(self.get_send_tests_steps()): labels[tutoral_step] = ( diff --git a/bitcoin_safe/gui/screenshots/bitbox02-wallet-export.png b/bitcoin_safe/gui/screenshots/bitbox02-wallet-export.png index 3b2791e..1542dfb 100644 Binary files a/bitcoin_safe/gui/screenshots/bitbox02-wallet-export.png and b/bitcoin_safe/gui/screenshots/bitbox02-wallet-export.png differ diff --git a/bitcoin_safe/gui/screenshots/ledger-generate-seed.png b/bitcoin_safe/gui/screenshots/ledger-generate-seed.png new file mode 100644 index 0000000..13d541b Binary files /dev/null and b/bitcoin_safe/gui/screenshots/ledger-generate-seed.png differ diff --git a/bitcoin_safe/gui/screenshots/ledger-register-multisig-decriptor.png b/bitcoin_safe/gui/screenshots/ledger-register-multisig-decriptor.png new file mode 100644 index 0000000..4fc9616 Binary files /dev/null and b/bitcoin_safe/gui/screenshots/ledger-register-multisig-decriptor.png differ diff --git a/bitcoin_safe/gui/screenshots/ledger-view-seed.png b/bitcoin_safe/gui/screenshots/ledger-view-seed.png new file mode 100644 index 0000000..6d913b9 Binary files /dev/null and b/bitcoin_safe/gui/screenshots/ledger-view-seed.png differ diff --git a/bitcoin_safe/gui/screenshots/ledger-wallet-export.png b/bitcoin_safe/gui/screenshots/ledger-wallet-export.png new file mode 100644 index 0000000..aa641bc Binary files /dev/null and b/bitcoin_safe/gui/screenshots/ledger-wallet-export.png differ diff --git a/bitcoin_safe/gui/screenshots/trezor-generate-seed.png b/bitcoin_safe/gui/screenshots/trezor-generate-seed.png new file mode 100644 index 0000000..14bc056 Binary files /dev/null and b/bitcoin_safe/gui/screenshots/trezor-generate-seed.png differ diff --git a/bitcoin_safe/gui/screenshots/trezor-register-multisig-decriptor.png b/bitcoin_safe/gui/screenshots/trezor-register-multisig-decriptor.png new file mode 100644 index 0000000..57c38cb Binary files /dev/null and b/bitcoin_safe/gui/screenshots/trezor-register-multisig-decriptor.png differ diff --git a/bitcoin_safe/gui/screenshots/trezor-wallet-export.png b/bitcoin_safe/gui/screenshots/trezor-wallet-export.png new file mode 100644 index 0000000..9b023e9 Binary files /dev/null and b/bitcoin_safe/gui/screenshots/trezor-wallet-export.png differ diff --git a/bitcoin_safe/hardware_signers.py b/bitcoin_safe/hardware_signers.py index a320940..d455123 100644 --- a/bitcoin_safe/hardware_signers.py +++ b/bitcoin_safe/hardware_signers.py @@ -158,6 +158,20 @@ class HardwareSigners: qr_types=[QrExportTypes.ur, DescriptorQrExportTypes.keystone], descriptor_export_types=[DescriptorExportTypes.keystone], ) + trezor = HardwareSigner( + "trezor", + "Trezor", + usb_preferred=True, + qr_types=[], + descriptor_export_types=[], + ) + ledger = HardwareSigner( + "ledger", + "Ledger", + usb_preferred=True, + qr_types=[], + descriptor_export_types=[], + ) specterdiy = HardwareSigner( "specterdiy", "Specter-DIY", diff --git a/bitcoin_safe/pdf_statement.py b/bitcoin_safe/pdf_statement.py index aac7f2c..70ae4eb 100644 --- a/bitcoin_safe/pdf_statement.py +++ b/bitcoin_safe/pdf_statement.py @@ -137,6 +137,8 @@ def create_balance_table( ("ALIGN", (0, 0), (-1, -1), "CENTER"), # Default alignment to center ("GRID", (0, 0), (-1, -1), 0.5, colors.black), # Grid color and size ("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"), # Font style for header + ("BACKGROUND", (0, -1), (-1, -1), colors.lightgrey), # Header background color + ("TEXTCOLOR", (0, -1), (-1, -1), colors.whitesmoke), # Header text color ] ) @@ -176,11 +178,11 @@ def create_invisible_table(columns: List[Any], col_widths: List[int]) -> Table: def add_page_break(self) -> None: self.elements.append(PageBreak()) # Add a page break between documents if needed - def _address_table(self, address_info: List[Tuple[str, str]]) -> None: + def _address_table(self, address_info: List[Tuple[str, str]], total_amount: str) -> None: self.elements.append( self.create_balance_table( - table=np.array(address_info), + table=np.array(address_info + [(translate("pdf", "Total"), total_amount)]), widths=[400, 120], header=["Address", f"Balance [{unit_str(self.network)}]"], styles=[self.style_paragraph_left, self.style_paragraph_right], @@ -221,6 +223,7 @@ def create_pdf( wallet_descriptor_string: str, address_info: List[Tuple[str, str]], threshold: int, + total_amount: str, ) -> None: self.elements.append(Paragraph(title, style=self.style_heading)) @@ -239,7 +242,7 @@ def create_pdf( self._descriptor_part(wallet_descriptor_string, threshold) - self._address_table(address_info=address_info) + self._address_table(address_info=address_info, total_amount=total_amount) def save_pdf(self, filename: str) -> None: @@ -270,9 +273,11 @@ def make_and_open_pdf_statement(wallet: Wallet, lang_code: str) -> None: info = DescriptorInfo.from_str(wallet.multipath_descriptor.as_string()) address_info: List[Tuple[str, str]] = [] + total_amount = 0 for address in wallet.get_addresses(): balance = wallet.get_addr_balance(address).total if balance: + total_amount += balance address_info.append( ( address, @@ -300,6 +305,9 @@ def make_and_open_pdf_statement(wallet: Wallet, lang_code: str) -> None: wallet_descriptor_string=wallet.multipath_descriptor.as_string(), address_info=address_info, threshold=info.threshold, + total_amount=Satoshis(value=total_amount, network=wallet.network).format( + color_formatting="rich", show_unit=False, unicode_space_character=False + ), ) temp_file = os.path.join(Path.home(), f"{file_title}.pdf") diff --git a/bitcoin_safe/signature_manager.py b/bitcoin_safe/signature_manager.py index a85b963..62d9c48 100644 --- a/bitcoin_safe/signature_manager.py +++ b/bitcoin_safe/signature_manager.py @@ -31,11 +31,12 @@ import logging import os import platform +import re import shutil import subprocess from dataclasses import dataclass from pathlib import Path -from typing import Any, Dict, List, Optional, Union +from typing import Any, Dict, List, Optional, Tuple, Union import pgpy # Python-native OpenPGP library import requests @@ -45,36 +46,72 @@ @dataclass -class SimpleGPGKey: - key: str - repository: str # org/repo_name - prefix: str - manifest_ending: Optional[str] = None +class FilenameInfo: + app_name: str + extension: str + version: str + architecture: Optional[str] = None + extra_info: Optional[str] = None - @staticmethod - def extract_prefix_and_version(filename: str) -> tuple[Optional[str], Optional[str]]: - import re + @classmethod + def modify_filename_remove_architecture(cls, filename: str) -> Optional[Tuple[str, str]]: + # Capture architecture specifically + arch_regex = r"(.*?)([-_.](x86_64|arm64|aarch64|amd64))(.*)" + match = re.match(arch_regex, filename) + if match: + # Reconstruct the filename without the architecture part + parts_without_arch = match.group(1) + match.group(4) + architecture = match.group(3) # Capture the architecture + return (parts_without_arch, architecture) + return None # Return None if no architecture or matching issue - if filename.endswith(".deb"): - match = re.search(r"(.+)_(.+?)(?:-.+)?_.*\.deb", filename) - if match: - return (match.group(1), match.group(2)) + @classmethod + def from_filename(cls, filename: str) -> Optional["FilenameInfo"]: + architecture = None + if res := cls.modify_filename_remove_architecture(filename=filename): + filename, architecture = res + + # try with 4 digit version numbering + regex = ( + r"(?P.+?)" # Capture app name up to the version, non-greedy + r"[-_.](?P\d+\.\d+\.\d+\.\d+[a-zA-Z0-9]*)?" # Capture version number, potentially including additional alphanumeric characters + r"(?:[-_.](?P[^-]+))?" # Optionally capture extra info with generalized separator + r"\.(?P[^._-]+)$" # Capture the extension, ensure no inclusion of '-' or '_' + ) - # try with - separator - match = re.search(r"(.*?)-([\d\.]+[a-zA-Z0-9]*)", filename) + match = re.match(regex, filename) if match: - return (match.group(1), match.group(2)) + return FilenameInfo(**match.groupdict(), architecture=architecture) + + # try with 3 digit version numbering + regex = ( + r"(?P.+?)" # Capture app name up to the version, non-greedy + r"[-_.](?P\d+\.\d+\.\d+[a-zA-Z0-9]*)?" # Capture version number, potentially including additional alphanumeric characters + r"(?:[-_.](?P[^-]+))?" # Optionally capture extra info with generalized separator + r"\.(?P[^._-]+)$" # Capture the extension, ensure no inclusion of '-' or '_' + ) - # try with _ separator - match = re.search(r"(.*?)_([\d\.]+[a-zA-Z0-9]*)", filename) + match = re.match(regex, filename) if match: - return (match.group(1), match.group(2)) - return (None, None) + return FilenameInfo(**match.groupdict(), architecture=architecture) + + return None + + +@dataclass +class SimpleGPGKey: + key: str + repository: str # org/repo_name + prefix: str + manifest_ending: Optional[str] = None def get_tag_if_mine(self, filename: str) -> Optional[str]: - prefix, version = self.extract_prefix_and_version(filename) - if prefix and prefix.lower() == self.prefix.lower(): - return version + info = FilenameInfo.from_filename(filename) + if not info or not info.app_name or not info.version: + return None + + if info.app_name.lower() == self.prefix.lower(): + return info.version return None diff --git a/bitcoin_safe/util.py b/bitcoin_safe/util.py index e05801f..290acf6 100644 --- a/bitcoin_safe/util.py +++ b/bitcoin_safe/util.py @@ -846,7 +846,7 @@ def calculate_ema( return ema -def briefcase_project_dir() -> Path: +def current_project_dir() -> Path: # __file__ == /tmp/.mount_Bitcoix7tQIZ/usr/app/bitcoin_safe/util.py return Path(__file__).parent diff --git a/poetry.lock b/poetry.lock index 38dcd67..5e619da 100644 --- a/poetry.lock +++ b/poetry.lock @@ -22,25 +22,6 @@ files = [ {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, ] -[[package]] -name = "arrow" -version = "1.3.0" -description = "Better dates & times for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, - {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, -] - -[package.dependencies] -python-dateutil = ">=2.7.0" -types-python-dateutil = ">=2.8.10" - -[package.extras] -doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] -test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] - [[package]] name = "base58" version = "2.1.1" @@ -76,20 +57,6 @@ files = [ {file = "bdkpython-0.31.0-cp39-cp39-win_amd64.whl", hash = "sha256:6d6d844a62fcf758ac5ebcdffe263c1fed4f5add9287400bc50a110f39d93476"}, ] -[[package]] -name = "binaryornot" -version = "0.4.4" -description = "Ultra-lightweight pure Python package to check if a file is binary or text." -optional = false -python-versions = "*" -files = [ - {file = "binaryornot-0.4.4-py2.py3-none-any.whl", hash = "sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4"}, - {file = "binaryornot-0.4.4.tar.gz", hash = "sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061"}, -] - -[package.dependencies] -chardet = ">=3.0.2" - [[package]] name = "bitcoin-nostr-chat" version = "0.5.1" @@ -110,13 +77,13 @@ requests = ">=2.31.0,<3.0.0" [[package]] name = "bitcoin-qr-tools" -version = "1.0.0" +version = "1.0.1" description = "Python bitcoin qr reader and generator" optional = false python-versions = "<3.13,>=3.9" files = [ - {file = "bitcoin_qr_tools-1.0.0-py3-none-any.whl", hash = "sha256:ba1af1135d741ba414fae6e6ab2b570c21600e99dd9ee6e6782e1312158c6c06"}, - {file = "bitcoin_qr_tools-1.0.0.tar.gz", hash = "sha256:cc45e3236ed8bba5ac9055db332a8cbe6102514ff09c54b392c7cbf2fd80bb66"}, + {file = "bitcoin_qr_tools-1.0.1-py3-none-any.whl", hash = "sha256:873077fc385566200d640b181edec8f026f08579ad3c5450bd4a37116e6b5fa3"}, + {file = "bitcoin_qr_tools-1.0.1.tar.gz", hash = "sha256:f0ef6c0d3e78b4b06c6654c4982efb283616bd7248164cbb93e613dfc9be3d03"}, ] [package.dependencies] @@ -153,38 +120,6 @@ python-bitcointx = "1.1.4" requests = ">=2.32.3,<3.0.0" trezor = ">=0.13.9,<0.14.0" -[[package]] -name = "briefcase" -version = "0.3.19" -description = "Tools to support converting a Python project into a standalone native application." -optional = false -python-versions = ">=3.8" -files = [ - {file = "briefcase-0.3.19-py3-none-any.whl", hash = "sha256:d5f47ddd23fe7ea79870e13ea9bf43bbb51d238a2fdd3ef75d1a59bffdeff3f1"}, - {file = "briefcase-0.3.19.tar.gz", hash = "sha256:53d8344b73f357b155f892e3fcf19be97bcabb8b3997ebeaa483eb692d326748"}, -] - -[package.dependencies] -build = ">=0.10" -cookiecutter = ">=2.6.0,<3.0" -dmgbuild = {version = ">=1.6,<2.0", markers = "sys_platform == \"darwin\""} -GitPython = ">=3.1,<4.0" -packaging = ">=22.0" -pip = ">=23.1.2" -platformdirs = ">=2.6,<5.0" -psutil = ">=5.9,<6.0" -python-dateutil = ">=2.9.0.post0" -requests = ">=2.28,<3.0" -rich = ">=12.6,<14.0" -setuptools = ">=60" -tomli = {version = ">=2.0,<3.0", markers = "python_version <= \"3.10\""} -tomli-w = ">=1.0,<2.0" -wheel = ">=0.37" - -[package.extras] -dev = ["coverage-conditional-plugin (==0.9.0)", "coverage[toml] (==7.5.3)", "pre-commit (==3.5.0)", "pre-commit (==3.7.1)", "pytest (==8.2.2)", "pytest-xdist (==3.6.1)", "setuptools-scm (==8.1.0)", "tox (==4.15.1)"] -docs = ["furo (==2024.5.6)", "pyenchant (==3.2.2)", "sphinx (==7.1.2)", "sphinx (==7.3.7)", "sphinx-autobuild (==2021.3.14)", "sphinx-autobuild (==2024.4.16)", "sphinx-copybutton (==0.5.2)", "sphinx-tabs (==3.4.5)", "sphinxcontrib-spelling (==8.0.0)"] - [[package]] name = "build" version = "1.2.2.post1" @@ -403,116 +338,103 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.4.0" +version = "3.4.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false -python-versions = ">=3.7.0" -files = [ - {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"}, - {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, - {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, +python-versions = ">=3.7" +files = [ + {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"}, + {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, + {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, ] [[package]] @@ -532,13 +454,13 @@ rapidfuzz = ">=3.0.0,<4.0.0" [[package]] name = "click" -version = "8.1.7" +version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, + {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, + {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, ] [package.dependencies] @@ -583,27 +505,6 @@ files = [ [package.dependencies] construct = ">=2.10,<3.0" -[[package]] -name = "cookiecutter" -version = "2.6.0" -description = "A command-line utility that creates projects from project templates, e.g. creating a Python package project from a Python package project template." -optional = false -python-versions = ">=3.7" -files = [ - {file = "cookiecutter-2.6.0-py3-none-any.whl", hash = "sha256:a54a8e37995e4ed963b3e82831072d1ad4b005af736bb17b99c2cbd9d41b6e2d"}, - {file = "cookiecutter-2.6.0.tar.gz", hash = "sha256:db21f8169ea4f4fdc2408d48ca44859349de2647fbe494a9d6c3edfc0542c21c"}, -] - -[package.dependencies] -arrow = "*" -binaryornot = ">=0.4.4" -click = ">=7.0,<9.0.0" -Jinja2 = ">=2.7,<4.0.0" -python-slugify = ">=4.0.0" -pyyaml = ">=5.3.1" -requests = ">=2.23.0" -rich = "*" - [[package]] name = "crashtest" version = "0.4.1" @@ -731,44 +632,6 @@ files = [ {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, ] -[[package]] -name = "dmgbuild" -version = "1.6.2" -description = "macOS command line utility to build disk images" -optional = false -python-versions = ">=3.8" -files = [ - {file = "dmgbuild-1.6.2-py3-none-any.whl", hash = "sha256:f78200b992027ccd2aa63872ed6ed11464e9149249303b8eee477e65280993d1"}, - {file = "dmgbuild-1.6.2.tar.gz", hash = "sha256:dba01d29f10c6804f2d72301600ddd03724daa41cd21a95409c44a3e199b19aa"}, -] - -[package.dependencies] -ds-store = ">=1.1.0" -mac-alias = ">=2.0.1" - -[package.extras] -dev = ["coverage (==7.6.0)", "pre-commit (==3.5.0)", "pre-commit (==3.8.0)", "pytest (==8.3.2)", "pytest-cov (==5.0.0)", "tox (==4.16.0)"] -docs = ["sphinx (==7.1.2)", "sphinx (==7.4.7)", "sphinx-autobuild (==2021.3.14)", "sphinx-autobuild (==2024.4.16)", "sphinx-rtd-theme (==2.0.0)"] - -[[package]] -name = "ds-store" -version = "1.3.1" -description = "Manipulate Finder .DS_Store files from Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "ds_store-1.3.1-py3-none-any.whl", hash = "sha256:fbacbb0bd5193ab3e66e5a47fff63619f15e374ffbec8ae29744251a6c8f05b5"}, - {file = "ds_store-1.3.1.tar.gz", hash = "sha256:c27d413caf13c19acb85d75da4752673f1f38267f9eb6ba81b3b5aa99c2d207c"}, -] - -[package.dependencies] -mac-alias = ">=2.0.1" - -[package.extras] -dev = ["pre-commit", "tox"] -docs = ["sphinx", "sphinx-autobuild", "sphinx-rtd-theme"] -test = ["pytest", "pytest-cov", "pytest-tldr"] - [[package]] name = "dulwich" version = "0.21.7" @@ -1007,38 +870,6 @@ defusedxml = "*" fonttools = ">=4.34.0" Pillow = ">=6.2.2,<9.2.dev0 || >=9.3.dev0" -[[package]] -name = "gitdb" -version = "4.0.11" -description = "Git Object Database" -optional = false -python-versions = ">=3.7" -files = [ - {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"}, - {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"}, -] - -[package.dependencies] -smmap = ">=3.0.1,<6" - -[[package]] -name = "gitpython" -version = "3.1.43" -description = "GitPython is a Python library used to interact with Git repositories" -optional = false -python-versions = ">=3.7" -files = [ - {file = "GitPython-3.1.43-py3-none-any.whl", hash = "sha256:eec7ec56b92aad751f9912a73404bc02ba212a23adb2c7098ee668417051a1ff"}, - {file = "GitPython-3.1.43.tar.gz", hash = "sha256:35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c"}, -] - -[package.dependencies] -gitdb = ">=4.0.1,<5" - -[package.extras] -doc = ["sphinx (==4.3.2)", "sphinx-autodoc-typehints", "sphinx-rtd-theme", "sphinxcontrib-applehelp (>=1.0.2,<=1.0.4)", "sphinxcontrib-devhelp (==1.0.2)", "sphinxcontrib-htmlhelp (>=2.0.0,<=2.0.1)", "sphinxcontrib-qthelp (==1.0.3)", "sphinxcontrib-serializinghtml (==1.1.5)"] -test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"] - [[package]] name = "hidapi" version = "0.14.0.post4" @@ -1263,23 +1094,6 @@ files = [ test = ["async-timeout", "pytest", "pytest-asyncio (>=0.17)", "pytest-trio", "testpath", "trio"] trio = ["async_generator", "trio"] -[[package]] -name = "jinja2" -version = "3.1.4" -description = "A very fast and expressive template engine." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, - {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, -] - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - [[package]] name = "keyring" version = "24.3.1" @@ -1470,22 +1284,6 @@ html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] source = ["Cython (>=3.0.11)"] -[[package]] -name = "mac-alias" -version = "2.2.2" -description = "Generate/parse Mac OS Alias records from Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mac_alias-2.2.2-py3-none-any.whl", hash = "sha256:504ab8ac546f35bbd75ad014d6ad977c426660aa721f2cd3acf3dc2f664141bd"}, - {file = "mac_alias-2.2.2.tar.gz", hash = "sha256:c99c728eb512e955c11f1a6203a0ffa8883b26549e8afe68804031aa5da856b7"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -docs = ["sphinx", "sphinx-autobuild", "sphinx-rtd-theme"] -test = ["pytest", "pytest-cov", "pytest-tldr"] - [[package]] name = "macholib" version = "1.16.3" @@ -1500,111 +1298,6 @@ files = [ [package.dependencies] altgraph = ">=0.17" -[[package]] -name = "markdown-it-py" -version = "3.0.0" -description = "Python port of markdown-it. Markdown parsing, done right!" -optional = false -python-versions = ">=3.8" -files = [ - {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, - {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, -] - -[package.dependencies] -mdurl = ">=0.1,<1.0" - -[package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark"] -code-style = ["pre-commit (>=3.0,<4.0)"] -compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] -linkify = ["linkify-it-py (>=1,<3)"] -plugins = ["mdit-py-plugins"] -profiling = ["gprof2dot"] -rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - -[[package]] -name = "markupsafe" -version = "3.0.2" -description = "Safely add untrusted strings to HTML/XML markup." -optional = false -python-versions = ">=3.9" -files = [ - {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, - {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, -] - -[[package]] -name = "mdurl" -version = "0.1.2" -description = "Markdown URL utilities" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, -] - [[package]] name = "mnemonic" version = "0.21" @@ -1771,66 +1464,66 @@ files = [ [[package]] name = "numpy" -version = "2.2.0" +version = "2.2.1" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.10" files = [ - {file = "numpy-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1e25507d85da11ff5066269d0bd25d06e0a0f2e908415534f3e603d2a78e4ffa"}, - {file = "numpy-2.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a62eb442011776e4036af5c8b1a00b706c5bc02dc15eb5344b0c750428c94219"}, - {file = "numpy-2.2.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:b606b1aaf802e6468c2608c65ff7ece53eae1a6874b3765f69b8ceb20c5fa78e"}, - {file = "numpy-2.2.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:36b2b43146f646642b425dd2027730f99bac962618ec2052932157e213a040e9"}, - {file = "numpy-2.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fe8f3583e0607ad4e43a954e35c1748b553bfe9fdac8635c02058023277d1b3"}, - {file = "numpy-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:122fd2fcfafdefc889c64ad99c228d5a1f9692c3a83f56c292618a59aa60ae83"}, - {file = "numpy-2.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3f2f5cddeaa4424a0a118924b988746db6ffa8565e5829b1841a8a3bd73eb59a"}, - {file = "numpy-2.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7fe4bb0695fe986a9e4deec3b6857003b4cfe5c5e4aac0b95f6a658c14635e31"}, - {file = "numpy-2.2.0-cp310-cp310-win32.whl", hash = "sha256:b30042fe92dbd79f1ba7f6898fada10bdaad1847c44f2dff9a16147e00a93661"}, - {file = "numpy-2.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:54dc1d6d66f8d37843ed281773c7174f03bf7ad826523f73435deb88ba60d2d4"}, - {file = "numpy-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9874bc2ff574c40ab7a5cbb7464bf9b045d617e36754a7bc93f933d52bd9ffc6"}, - {file = "numpy-2.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0da8495970f6b101ddd0c38ace92edea30e7e12b9a926b57f5fabb1ecc25bb90"}, - {file = "numpy-2.2.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0557eebc699c1c34cccdd8c3778c9294e8196df27d713706895edc6f57d29608"}, - {file = "numpy-2.2.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:3579eaeb5e07f3ded59298ce22b65f877a86ba8e9fe701f5576c99bb17c283da"}, - {file = "numpy-2.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40deb10198bbaa531509aad0cd2f9fadb26c8b94070831e2208e7df543562b74"}, - {file = "numpy-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2aed8fcf8abc3020d6a9ccb31dbc9e7d7819c56a348cc88fd44be269b37427e"}, - {file = "numpy-2.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a222d764352c773aa5ebde02dd84dba3279c81c6db2e482d62a3fa54e5ece69b"}, - {file = "numpy-2.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4e58666988605e251d42c2818c7d3d8991555381be26399303053b58a5bbf30d"}, - {file = "numpy-2.2.0-cp311-cp311-win32.whl", hash = "sha256:4723a50e1523e1de4fccd1b9a6dcea750c2102461e9a02b2ac55ffeae09a4410"}, - {file = "numpy-2.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:16757cf28621e43e252c560d25b15f18a2f11da94fea344bf26c599b9cf54b73"}, - {file = "numpy-2.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cff210198bb4cae3f3c100444c5eaa573a823f05c253e7188e1362a5555235b3"}, - {file = "numpy-2.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b92a5828bd4d9aa0952492b7de803135038de47343b2aa3cc23f3b71a3dc4e"}, - {file = "numpy-2.2.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:ebe5e59545401fbb1b24da76f006ab19734ae71e703cdb4a8b347e84a0cece67"}, - {file = "numpy-2.2.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:e2b8cd48a9942ed3f85b95ca4105c45758438c7ed28fff1e4ce3e57c3b589d8e"}, - {file = "numpy-2.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57fcc997ffc0bef234b8875a54d4058afa92b0b0c4223fc1f62f24b3b5e86038"}, - {file = "numpy-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85ad7d11b309bd132d74397fcf2920933c9d1dc865487128f5c03d580f2c3d03"}, - {file = "numpy-2.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cb24cca1968b21355cc6f3da1a20cd1cebd8a023e3c5b09b432444617949085a"}, - {file = "numpy-2.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0798b138c291d792f8ea40fe3768610f3c7dd2574389e37c3f26573757c8f7ef"}, - {file = "numpy-2.2.0-cp312-cp312-win32.whl", hash = "sha256:afe8fb968743d40435c3827632fd36c5fbde633b0423da7692e426529b1759b1"}, - {file = "numpy-2.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:3a4199f519e57d517ebd48cb76b36c82da0360781c6a0353e64c0cac30ecaad3"}, - {file = "numpy-2.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f8c8b141ef9699ae777c6278b52c706b653bf15d135d302754f6b2e90eb30367"}, - {file = "numpy-2.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0f0986e917aca18f7a567b812ef7ca9391288e2acb7a4308aa9d265bd724bdae"}, - {file = "numpy-2.2.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:1c92113619f7b272838b8d6702a7f8ebe5edea0df48166c47929611d0b4dea69"}, - {file = "numpy-2.2.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5a145e956b374e72ad1dff82779177d4a3c62bc8248f41b80cb5122e68f22d13"}, - {file = "numpy-2.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18142b497d70a34b01642b9feabb70156311b326fdddd875a9981f34a369b671"}, - {file = "numpy-2.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7d41d1612c1a82b64697e894b75db6758d4f21c3ec069d841e60ebe54b5b571"}, - {file = "numpy-2.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a98f6f20465e7618c83252c02041517bd2f7ea29be5378f09667a8f654a5918d"}, - {file = "numpy-2.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e09d40edfdb4e260cb1567d8ae770ccf3b8b7e9f0d9b5c2a9992696b30ce2742"}, - {file = "numpy-2.2.0-cp313-cp313-win32.whl", hash = "sha256:3905a5fffcc23e597ee4d9fb3fcd209bd658c352657548db7316e810ca80458e"}, - {file = "numpy-2.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:a184288538e6ad699cbe6b24859206e38ce5fba28f3bcfa51c90d0502c1582b2"}, - {file = "numpy-2.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7832f9e8eb00be32f15fdfb9a981d6955ea9adc8574c521d48710171b6c55e95"}, - {file = "numpy-2.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f0dd071b95bbca244f4cb7f70b77d2ff3aaaba7fa16dc41f58d14854a6204e6c"}, - {file = "numpy-2.2.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:b0b227dcff8cdc3efbce66d4e50891f04d0a387cce282fe1e66199146a6a8fca"}, - {file = "numpy-2.2.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6ab153263a7c5ccaf6dfe7e53447b74f77789f28ecb278c3b5d49db7ece10d6d"}, - {file = "numpy-2.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e500aba968a48e9019e42c0c199b7ec0696a97fa69037bea163b55398e390529"}, - {file = "numpy-2.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:440cfb3db4c5029775803794f8638fbdbf71ec702caf32735f53b008e1eaece3"}, - {file = "numpy-2.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a55dc7a7f0b6198b07ec0cd445fbb98b05234e8b00c5ac4874a63372ba98d4ab"}, - {file = "numpy-2.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4bddbaa30d78c86329b26bd6aaaea06b1e47444da99eddac7bf1e2fab717bd72"}, - {file = "numpy-2.2.0-cp313-cp313t-win32.whl", hash = "sha256:30bf971c12e4365153afb31fc73f441d4da157153f3400b82db32d04de1e4066"}, - {file = "numpy-2.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d35717333b39d1b6bb8433fa758a55f1081543de527171543a2b710551d40881"}, - {file = "numpy-2.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e12c6c1ce84628c52d6367863773f7c8c8241be554e8b79686e91a43f1733773"}, - {file = "numpy-2.2.0-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:b6207dc8fb3c8cb5668e885cef9ec7f70189bec4e276f0ff70d5aa078d32c88e"}, - {file = "numpy-2.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a50aeff71d0f97b6450d33940c7181b08be1441c6c193e678211bff11aa725e7"}, - {file = "numpy-2.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:df12a1f99b99f569a7c2ae59aa2d31724e8d835fc7f33e14f4792e3071d11221"}, - {file = "numpy-2.2.0.tar.gz", hash = "sha256:140dd80ff8981a583a60980be1a655068f8adebf7a45a06a6858c873fcdcd4a0"}, + {file = "numpy-2.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5edb4e4caf751c1518e6a26a83501fda79bff41cc59dac48d70e6d65d4ec4440"}, + {file = "numpy-2.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa3017c40d513ccac9621a2364f939d39e550c542eb2a894b4c8da92b38896ab"}, + {file = "numpy-2.2.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:61048b4a49b1c93fe13426e04e04fdf5a03f456616f6e98c7576144677598675"}, + {file = "numpy-2.2.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:7671dc19c7019103ca44e8d94917eba8534c76133523ca8406822efdd19c9308"}, + {file = "numpy-2.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4250888bcb96617e00bfa28ac24850a83c9f3a16db471eca2ee1f1714df0f957"}, + {file = "numpy-2.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7746f235c47abc72b102d3bce9977714c2444bdfaea7888d241b4c4bb6a78bf"}, + {file = "numpy-2.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:059e6a747ae84fce488c3ee397cee7e5f905fd1bda5fb18c66bc41807ff119b2"}, + {file = "numpy-2.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f62aa6ee4eb43b024b0e5a01cf65a0bb078ef8c395e8713c6e8a12a697144528"}, + {file = "numpy-2.2.1-cp310-cp310-win32.whl", hash = "sha256:48fd472630715e1c1c89bf1feab55c29098cb403cc184b4859f9c86d4fcb6a95"}, + {file = "numpy-2.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:b541032178a718c165a49638d28272b771053f628382d5e9d1c93df23ff58dbf"}, + {file = "numpy-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:40f9e544c1c56ba8f1cf7686a8c9b5bb249e665d40d626a23899ba6d5d9e1484"}, + {file = "numpy-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f9b57eaa3b0cd8db52049ed0330747b0364e899e8a606a624813452b8203d5f7"}, + {file = "numpy-2.2.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:bc8a37ad5b22c08e2dbd27df2b3ef7e5c0864235805b1e718a235bcb200cf1cb"}, + {file = "numpy-2.2.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:9036d6365d13b6cbe8f27a0eaf73ddcc070cae584e5ff94bb45e3e9d729feab5"}, + {file = "numpy-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51faf345324db860b515d3f364eaa93d0e0551a88d6218a7d61286554d190d73"}, + {file = "numpy-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38efc1e56b73cc9b182fe55e56e63b044dd26a72128fd2fbd502f75555d92591"}, + {file = "numpy-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:31b89fa67a8042e96715c68e071a1200c4e172f93b0fbe01a14c0ff3ff820fc8"}, + {file = "numpy-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4c86e2a209199ead7ee0af65e1d9992d1dce7e1f63c4b9a616500f93820658d0"}, + {file = "numpy-2.2.1-cp311-cp311-win32.whl", hash = "sha256:b34d87e8a3090ea626003f87f9392b3929a7bbf4104a05b6667348b6bd4bf1cd"}, + {file = "numpy-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:360137f8fb1b753c5cde3ac388597ad680eccbbbb3865ab65efea062c4a1fd16"}, + {file = "numpy-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:694f9e921a0c8f252980e85bce61ebbd07ed2b7d4fa72d0e4246f2f8aa6642ab"}, + {file = "numpy-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3683a8d166f2692664262fd4900f207791d005fb088d7fdb973cc8d663626faa"}, + {file = "numpy-2.2.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:780077d95eafc2ccc3ced969db22377b3864e5b9a0ea5eb347cc93b3ea900315"}, + {file = "numpy-2.2.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:55ba24ebe208344aa7a00e4482f65742969a039c2acfcb910bc6fcd776eb4355"}, + {file = "numpy-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b1d07b53b78bf84a96898c1bc139ad7f10fda7423f5fd158fd0f47ec5e01ac7"}, + {file = "numpy-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5062dc1a4e32a10dc2b8b13cedd58988261416e811c1dc4dbdea4f57eea61b0d"}, + {file = "numpy-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:fce4f615f8ca31b2e61aa0eb5865a21e14f5629515c9151850aa936c02a1ee51"}, + {file = "numpy-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:67d4cda6fa6ffa073b08c8372aa5fa767ceb10c9a0587c707505a6d426f4e046"}, + {file = "numpy-2.2.1-cp312-cp312-win32.whl", hash = "sha256:32cb94448be47c500d2c7a95f93e2f21a01f1fd05dd2beea1ccd049bb6001cd2"}, + {file = "numpy-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:ba5511d8f31c033a5fcbda22dd5c813630af98c70b2661f2d2c654ae3cdfcfc8"}, + {file = "numpy-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f1d09e520217618e76396377c81fba6f290d5f926f50c35f3a5f72b01a0da780"}, + {file = "numpy-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3ecc47cd7f6ea0336042be87d9e7da378e5c7e9b3c8ad0f7c966f714fc10d821"}, + {file = "numpy-2.2.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f419290bc8968a46c4933158c91a0012b7a99bb2e465d5ef5293879742f8797e"}, + {file = "numpy-2.2.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5b6c390bfaef8c45a260554888966618328d30e72173697e5cabe6b285fb2348"}, + {file = "numpy-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:526fc406ab991a340744aad7e25251dd47a6720a685fa3331e5c59fef5282a59"}, + {file = "numpy-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f74e6fdeb9a265624ec3a3918430205dff1df7e95a230779746a6af78bc615af"}, + {file = "numpy-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:53c09385ff0b72ba79d8715683c1168c12e0b6e84fb0372e97553d1ea91efe51"}, + {file = "numpy-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f3eac17d9ec51be534685ba877b6ab5edc3ab7ec95c8f163e5d7b39859524716"}, + {file = "numpy-2.2.1-cp313-cp313-win32.whl", hash = "sha256:9ad014faa93dbb52c80d8f4d3dcf855865c876c9660cb9bd7553843dd03a4b1e"}, + {file = "numpy-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:164a829b6aacf79ca47ba4814b130c4020b202522a93d7bff2202bfb33b61c60"}, + {file = "numpy-2.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4dfda918a13cc4f81e9118dea249e192ab167a0bb1966272d5503e39234d694e"}, + {file = "numpy-2.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:733585f9f4b62e9b3528dd1070ec4f52b8acf64215b60a845fa13ebd73cd0712"}, + {file = "numpy-2.2.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:89b16a18e7bba224ce5114db863e7029803c179979e1af6ad6a6b11f70545008"}, + {file = "numpy-2.2.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:676f4eebf6b2d430300f1f4f4c2461685f8269f94c89698d832cdf9277f30b84"}, + {file = "numpy-2.2.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27f5cdf9f493b35f7e41e8368e7d7b4bbafaf9660cba53fb21d2cd174ec09631"}, + {file = "numpy-2.2.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1ad395cf254c4fbb5b2132fee391f361a6e8c1adbd28f2cd8e79308a615fe9d"}, + {file = "numpy-2.2.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:08ef779aed40dbc52729d6ffe7dd51df85796a702afbf68a4f4e41fafdc8bda5"}, + {file = "numpy-2.2.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:26c9c4382b19fcfbbed3238a14abf7ff223890ea1936b8890f058e7ba35e8d71"}, + {file = "numpy-2.2.1-cp313-cp313t-win32.whl", hash = "sha256:93cf4e045bae74c90ca833cba583c14b62cb4ba2cba0abd2b141ab52548247e2"}, + {file = "numpy-2.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bff7d8ec20f5f42607599f9994770fa65d76edca264a87b5e4ea5629bce12268"}, + {file = "numpy-2.2.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7ba9cc93a91d86365a5d270dee221fdc04fb68d7478e6bf6af650de78a8339e3"}, + {file = "numpy-2.2.1-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:3d03883435a19794e41f147612a77a8f56d4e52822337844fff3d4040a142964"}, + {file = "numpy-2.2.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4511d9e6071452b944207c8ce46ad2f897307910b402ea5fa975da32e0102800"}, + {file = "numpy-2.2.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5c5cc0cbabe9452038ed984d05ac87910f89370b9242371bd9079cb4af61811e"}, + {file = "numpy-2.2.1.tar.gz", hash = "sha256:45681fd7128c8ad1c379f0ca0776a8b0c6583d2f69889ddac01559dfe4390918"}, ] [[package]] @@ -2002,17 +1695,6 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa typing = ["typing-extensions"] xmp = ["defusedxml"] -[[package]] -name = "pip" -version = "24.3.1" -description = "The PyPA recommended tool for installing Python packages." -optional = false -python-versions = ">=3.8" -files = [ - {file = "pip-24.3.1-py3-none-any.whl", hash = "sha256:3790624780082365f47549d032f3770eeb2b1e8bd1f7b2e02dace1afa361b4ed"}, - {file = "pip-24.3.1.tar.gz", hash = "sha256:ebcb60557f2aefabc2e0f918751cd24ea0d56d8ec5445fe1807f1d2109660b99"}, -] - [[package]] name = "pkginfo" version = "1.12.0" @@ -2158,34 +1840,6 @@ files = [ {file = "protobuf-4.25.5.tar.gz", hash = "sha256:7f8249476b4a9473645db7f8ab42b02fe1488cbe5fb72fddd445e0665afd8584"}, ] -[[package]] -name = "psutil" -version = "5.9.8" -description = "Cross-platform lib for process and system monitoring in Python." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" -files = [ - {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"}, - {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"}, - {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"}, - {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"}, - {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"}, - {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"}, - {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"}, - {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"}, - {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"}, - {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4"}, - {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"}, - {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"}, - {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"}, - {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"}, - {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"}, - {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"}, -] - -[package.extras] -test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] - [[package]] name = "ptyprocess" version = "0.7.0" @@ -2298,20 +1952,6 @@ files = [ {file = "pygame-2.6.1.tar.gz", hash = "sha256:56fb02ead529cee00d415c3e007f75e0780c655909aaa8e8bf616ee09c9feb1f"}, ] -[[package]] -name = "pygments" -version = "2.18.0" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = ">=3.8" -files = [ - {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, - {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, -] - -[package.extras] -windows-terminal = ["colorama (>=0.4.6)"] - [[package]] name = "pyinstaller" version = "6.11.1" @@ -2348,13 +1988,13 @@ hook-testing = ["execnet (>=1.5.0)", "psutil", "pytest (>=2.7.3)"] [[package]] name = "pyinstaller-hooks-contrib" -version = "2024.10" +version = "2024.11" description = "Community maintained hooks for PyInstaller" optional = false python-versions = ">=3.8" files = [ - {file = "pyinstaller_hooks_contrib-2024.10-py3-none-any.whl", hash = "sha256:ad47db0e153683b4151e10d231cb91f2d93c85079e78d76d9e0f57ac6c8a5e10"}, - {file = "pyinstaller_hooks_contrib-2024.10.tar.gz", hash = "sha256:8a46655e5c5b0186b5e527399118a9b342f10513eb1425c483fa4f6d02e8800c"}, + {file = "pyinstaller_hooks_contrib-2024.11-py3-none-any.whl", hash = "sha256:2781d121a1ee961152ba7287a262c65a1078da30c9ef7621cb8c819326884fd5"}, + {file = "pyinstaller_hooks_contrib-2024.11.tar.gz", hash = "sha256:84399af6b4b902030958063df25f657abbff249d0f329c5344928355c9833ab4"}, ] [package.dependencies] @@ -2444,6 +2084,7 @@ python-versions = "*" files = [ {file = "PyQt6_Charts_Qt6-6.8.1-py3-none-macosx_10_14_x86_64.whl", hash = "sha256:40df5c70482e6f10ab1d5f7ac1744ddde97e14722e8db1e41d01e25b540ea5d8"}, {file = "PyQt6_Charts_Qt6-6.8.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:eeb435a44344db843711bbeae7b09b524230501a607238c4c6734606e7593489"}, + {file = "PyQt6_Charts_Qt6-6.8.1-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:80dcef5bab01901aa50643680a7dbc5132b577f8aa5d68f3617b9e006f4732f4"}, {file = "PyQt6_Charts_Qt6-6.8.1-py3-none-manylinux_2_35_x86_64.whl", hash = "sha256:fcd77a96bc1c2e2f92ffead543d6bba951eaec4c1b63c894e2ff9f7d314af075"}, {file = "PyQt6_Charts_Qt6-6.8.1-py3-none-manylinux_2_39_aarch64.whl", hash = "sha256:ec473791fa79b124539cc154d577cb8958997b65f4aff6dd0139fcad217695db"}, {file = "PyQt6_Charts_Qt6-6.8.1-py3-none-win_amd64.whl", hash = "sha256:404be7fb5ded6a0285f6e16c6d5457f57e95425caed65878b41bd5a084c84ec8"}, @@ -2459,6 +2100,7 @@ python-versions = "*" files = [ {file = "PyQt6_Qt6-6.8.1-py3-none-macosx_10_14_x86_64.whl", hash = "sha256:1eb8460a1fdb38d0b2458c2974c01d471c1e59e4eb19ea63fc447aaba3ad530e"}, {file = "PyQt6_Qt6-6.8.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:9f3790c4ce4dc576e48b8718d55fb8743057e6cbd53a6ca1dd253ffbac9b7287"}, + {file = "PyQt6_Qt6-6.8.1-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:d6ca5d2b9d2ec0ee4a814b2175f641a5c4299cb80b45e0f5f8356632663f89b3"}, {file = "PyQt6_Qt6-6.8.1-py3-none-manylinux_2_35_x86_64.whl", hash = "sha256:08065d595f1e6fc2dde9f4450eeff89082f4bad26f600a8e9b9cc5966716bfcf"}, {file = "PyQt6_Qt6-6.8.1-py3-none-manylinux_2_39_aarch64.whl", hash = "sha256:20843cb86bd94942d1cd99e39bf1aeabb875b241a35a8ab273e4bbbfa63776db"}, {file = "PyQt6_Qt6-6.8.1-py3-none-win_amd64.whl", hash = "sha256:006d786693d0511fbcf184a862edbd339c6ed1bb3bd9de363d73a19ed4b23dff"}, @@ -2578,20 +2220,6 @@ files = [ {file = "python_bitcointx-1.1.4-py3-none-any.whl", hash = "sha256:075a05a46920e31024fef226d8977f443e8405c65d669f1f1246fe58ba1df873"}, ] -[[package]] -name = "python-dateutil" -version = "2.9.0.post0" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -files = [ - {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, - {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, -] - -[package.dependencies] -six = ">=1.5" - [[package]] name = "python-gnupg" version = "0.5.3" @@ -2603,23 +2231,6 @@ files = [ {file = "python_gnupg-0.5.3-py2.py3-none-any.whl", hash = "sha256:2f8a4c6f63766feca6cc1416408f8b84e1b914fe7b54514e570fc5cbe92e9248"}, ] -[[package]] -name = "python-slugify" -version = "8.0.4" -description = "A Python slugify application that also handles Unicode" -optional = false -python-versions = ">=3.7" -files = [ - {file = "python-slugify-8.0.4.tar.gz", hash = "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856"}, - {file = "python_slugify-8.0.4-py2.py3-none-any.whl", hash = "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8"}, -] - -[package.dependencies] -text-unidecode = ">=1.3" - -[package.extras] -unidecode = ["Unidecode (>=1.1.1)"] - [[package]] name = "pyvirtualdisplay" version = "3.0" @@ -2874,25 +2485,6 @@ files = [ [package.dependencies] requests = ">=2.0.1,<3.0.0" -[[package]] -name = "rich" -version = "13.9.4" -description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, - {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, -] - -[package.dependencies] -markdown-it-py = ">=2.2.0" -pygments = ">=2.13.0,<3.0.0" -typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.11\""} - -[package.extras] -jupyter = ["ipywidgets (>=7.5.1,<9)"] - [[package]] name = "secretstorage" version = "3.3.3" @@ -2972,17 +2564,6 @@ files = [ {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, ] -[[package]] -name = "smmap" -version = "5.0.1" -description = "A pure Python implementation of a sliding window memory map manager" -optional = false -python-versions = ">=3.7" -files = [ - {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"}, - {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, -] - [[package]] name = "snakeviz" version = "2.2.2" @@ -2997,17 +2578,6 @@ files = [ [package.dependencies] tornado = ">=2.0" -[[package]] -name = "text-unidecode" -version = "1.3" -description = "The most basic Text::Unidecode port" -optional = false -python-versions = "*" -files = [ - {file = "text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93"}, - {file = "text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8"}, -] - [[package]] name = "tomli" version = "2.2.1" @@ -3049,17 +2619,6 @@ files = [ {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, ] -[[package]] -name = "tomli-w" -version = "1.1.0" -description = "A lil' TOML writer" -optional = false -python-versions = ">=3.9" -files = [ - {file = "tomli_w-1.1.0-py3-none-any.whl", hash = "sha256:1403179c78193e3184bfaade390ddbd071cba48a32a2e62ba11aae47490c63f7"}, - {file = "tomli_w-1.1.0.tar.gz", hash = "sha256:49e847a3a304d516a169a601184932ef0f6b61623fe680f836a2aa7128ed0d33"}, -] - [[package]] name = "tomlkit" version = "0.13.2" @@ -3093,13 +2652,13 @@ files = [ [[package]] name = "translate-toolkit" -version = "3.14.4" +version = "3.14.5" description = "Tools and API for translation and localization engineering." optional = false python-versions = ">=3.9" files = [ - {file = "translate_toolkit-3.14.4-py3-none-any.whl", hash = "sha256:d190de7eba3e6d604203e71dcdade20a35550ddeff964d2d448fd369a8e7ee3e"}, - {file = "translate_toolkit-3.14.4.tar.gz", hash = "sha256:6bf58e151385b32e45c9643b24c80b3cd46ad5bcc4665afa5332974bc94cf79b"}, + {file = "translate_toolkit-3.14.5-py3-none-any.whl", hash = "sha256:9fc0d1b011c4a1af6f970905df5775206f9c5f76b26eae0c8c0e2693c817d976"}, + {file = "translate_toolkit-3.14.5.tar.gz", hash = "sha256:2846180b74a0b8cb7f51e7a70ae410c1310e9be37b7c6c849247c049e5c53dd0"}, ] [package.dependencies] @@ -3107,8 +2666,8 @@ cwcwidth = ">=0.1.9" lxml = ">=4.6.3" [package.extras] -all = ["BeautifulSoup4 (>=4.10.0)", "aeidon (==1.15)", "charset-normalizer (==3.4.0)", "cheroot (==10.0.1)", "fluent.syntax (==0.19.0)", "iniparse (==0.5)", "mistletoe (==1.4.0)", "phply (==1.2.6)", "pyenchant (==3.2.2)", "pyparsing (==3.2.0)", "python-Levenshtein (>=0.21.0)", "ruamel.yaml (==0.18.6)", "vobject (==0.9.9)"] -chardet = ["charset-normalizer (==3.4.0)"] +all = ["BeautifulSoup4 (>=4.10.0)", "aeidon (==1.15)", "charset-normalizer (==3.4.1)", "cheroot (==10.0.1)", "fluent.syntax (==0.19.0)", "iniparse (==0.5)", "mistletoe (==1.4.0)", "phply (==1.2.6)", "pyenchant (==3.2.2)", "pyparsing (==3.2.0)", "python-Levenshtein (>=0.21.0)", "ruamel.yaml (==0.18.6)", "vobject (==0.9.9)"] +chardet = ["charset-normalizer (==3.4.1)"] fluent = ["fluent.syntax (==0.19.0)"] ical = ["vobject (==0.9.9)"] ini = ["iniparse (==0.5)"] @@ -3163,17 +2722,6 @@ files = [ {file = "trove_classifiers-2024.10.21.16.tar.gz", hash = "sha256:17cbd055d67d5e9d9de63293a8732943fabc21574e4c7b74edf112b4928cf5f3"}, ] -[[package]] -name = "types-python-dateutil" -version = "2.9.0.20241206" -description = "Typing stubs for python-dateutil" -optional = false -python-versions = ">=3.8" -files = [ - {file = "types_python_dateutil-2.9.0.20241206-py3-none-any.whl", hash = "sha256:e248a4bc70a486d3e3ec84d0dc30eec3a5f979d6e7ee4123ae043eedbb987f53"}, - {file = "types_python_dateutil-2.9.0.20241206.tar.gz", hash = "sha256:18f493414c26ffba692a72369fea7a154c502646301ebfe3d56a04b3767284cb"}, -] - [[package]] name = "typing-extensions" version = "4.12.2" @@ -3187,13 +2735,13 @@ files = [ [[package]] name = "urllib3" -version = "2.2.3" +version = "2.3.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, - {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, + {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, + {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, ] [package.extras] @@ -3222,20 +2770,6 @@ platformdirs = ">=3.9.1,<5" docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] -[[package]] -name = "wheel" -version = "0.45.1" -description = "A built-package format for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "wheel-0.45.1-py3-none-any.whl", hash = "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248"}, - {file = "wheel-0.45.1.tar.gz", hash = "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729"}, -] - -[package.extras] -test = ["pytest (>=6.0.0)", "setuptools (>=65)"] - [[package]] name = "xattr" version = "1.1.0" @@ -3331,4 +2865,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.11" -content-hash = "180a6d96f61eca3dd6207ec3d1e83d2066934bd8740ba8ddf79d4e4d4dd62ff1" +content-hash = "0b1c9204be3f7985e7789121c49a25d09522107987582d1d3b6ae39afd22e7cb" diff --git a/pyproject.toml b/pyproject.toml index 0520966..21483da 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,7 +12,7 @@ line-length = 110 name = "bitcoin-safe" # the version here and in all other places in this toml are updated automatically # from the source: bitcoin_safe/__init__.py -version = "1.0.0b5" +version = "1.0.0rc1" description = "A bitcoin savings wallet for the entire family." authors = [ "andreasgriffin ",] license = "GPL-3.0" @@ -39,48 +39,18 @@ python-gnupg = "^0.5.2" # bitcoin-qr-tools = {path="../bitcoin-qr-tools"} # "^0.10.15" # bitcoin-nostr-chat = {path="../bitcoin-nostr-chat"} # "^0.2.6" # bitcoin-usb = {path="../bitcoin-usb"} # "^0.3.3" -bitcoin-qr-tools = "^1.0.0" +bitcoin-qr-tools = "^1.0.1" bitcoin-nostr-chat = "^0.5.1" bitcoin-usb = "^0.7.0" numpy = "^2.0.1" pgpy = "^0.6.0" -[tool.pytest.ini_options] -markers = [ - "marker_qt_1: marks tests as marker_qt_1 (deselect by default)", - "marker_qt_2: marks tests as marker_qt_2 (deselect by default)" -] - - -[tool.briefcase] -project_name = "Bitcoin-Safe" -bundle = "org.bitcoin-safe" -version = "1.0.0b5" -url = "www.bitcoin-safe.org" -author = "Andreas Griffin" -author_email = "andreasgriffin@proton.me" - -[tool.briefcase.license] -file = "LICENSE" - -[tool.briefcase.app.bitcoin-safe] -formal_name = "Bitcoin-Safe" -description = "A bitcoin wallet for the entire family." -long_description = "More details about the app should go here.\n" -sources = [ "bitcoin_safe",] -test_sources = [ "tests",] -test_requires = [ "pytest",] -resources = [ "bitcoin_safe/gui/locales/*.qm",] -# these requirements are updated from the poetry lock file automatically -requires = ["altgraph==0.17.4", "appdirs==1.4.4", "arrow==1.3.0", "base58==2.1.1", "bdkpython==0.31.0", "binaryornot==0.4.4", "bitcoin-nostr-chat==0.5.1", "bitcoin-qr-tools==1.0.0", "bitcoin-usb==0.7.0", "briefcase==0.3.19", "build==1.2.2.post1", "cachecontrol==0.14.1", "cbor2==5.6.5", "certifi==2024.8.30", "cffi==1.17.1", "cfgv==3.4.0", "chardet==5.2.0", "charset-normalizer==3.4.0", "cleo==2.1.0", "click==8.1.7", "colorama==0.4.6", "construct==2.10.70", "construct-classes==0.1.2", "cookiecutter==2.6.0", "crashtest==0.4.1", "cryptography==43.0.3", "cwcwidth==0.1.9", "defusedxml==0.7.1", "distlib==0.3.9", "dmgbuild==1.6.2", "ds-store==1.3.1", "dulwich==0.21.7", "ecdsa==0.19.0", "exceptiongroup==1.2.2", "fastjsonschema==2.21.1", "filelock==3.16.1", "fonttools==4.55.3", "fpdf2==2.8.1", "gitdb==4.0.11", "gitpython==3.1.43", "hidapi==0.14.0.post4", "hwi==3.1.0", "identify==2.6.3", "idna==3.10", "importlib-metadata==8.5.0", "iniconfig==2.0.0", "installer==0.7.0", "jaraco-classes==3.4.0", "jeepney==0.8.0", "jinja2==3.1.4", "keyring==24.3.1", "libusb1==3.1.0", "lxml==5.3.0", "mac-alias==2.2.2", "macholib==1.16.3", "markdown-it-py==3.0.0", "markupsafe==3.0.2", "mdurl==0.1.2", "mnemonic==0.21", "more-itertools==10.5.0", "msgpack==1.1.0", "mss==9.0.2", "nodeenv==1.9.1", "noiseprotocol==0.3.1", "nostr-sdk==0.32.2", "numpy==2.2.0", "opencv-python-headless==4.10.0.84", "packaging==24.2", "pefile==2023.2.7", "pexpect==4.9.0", "pgpy==0.6.0", "pillow==10.4.0", "pip==24.3.1", "pkginfo==1.12.0", "platformdirs==4.3.6", "pluggy==1.5.0", "poetry-core==1.9.1", "poetry-plugin-export==1.8.0", "pre-commit==3.8.0", "protobuf==4.25.5", "psutil==5.9.8", "ptyprocess==0.7.0", "pyaes==1.6.1", "pyasn1==0.6.1", "pycparser==2.22", "pygame==2.6.1", "pygments==2.18.0", "pyinstaller==6.11.1", "pyinstaller-hooks-contrib==2024.10", "pyprof2calltree==1.4.5", "pyproject-hooks==1.2.0", "pyqrcode==1.2.1", "pyqt6==6.8.0", "pyqt6-charts==6.8.0", "pyqt6-charts-qt6==6.8.1", "pyqt6-qt6==6.8.1", "pyqt6-sip==13.9.1", "pyserial==3.5", "pytest==8.3.4", "pytest-qt==4.4.0", "pytest-xvfb==3.0.0", "python-bitcointx==1.1.4", "python-dateutil==2.9.0.post0", "python-gnupg==0.5.3", "python-slugify==8.0.4", "pyvirtualdisplay==3.0", "pywin32-ctypes==0.2.3", "pyyaml==6.0.2", "pyzbar==0.1.9", "rapidfuzz==3.10.1", "reportlab==4.0.8", "requests==2.32.3", "requests-toolbelt==1.0.0", "rich==13.9.4", "secretstorage==3.3.3", "segno==1.6.1", "semver==3.0.2", "setuptools==75.6.0", "shellingham==1.5.4", "six==1.17.0", "smmap==5.0.1", "snakeviz==2.2.2", "text-unidecode==1.3", "tomli==2.2.1", "tomli-w==1.1.0", "tomlkit==0.13.2", "tornado==6.4.2", "translate-toolkit==3.14.2", "trezor==0.13.9", "trove-classifiers==2024.10.21.16", "types-python-dateutil==2.9.0.20241206", "typing-extensions==4.12.2", "urllib3==2.2.3", "virtualenv==20.28.0", "wheel==0.45.1", "zipp==3.21.0"] - - [tool.poetry.group.dev.dependencies] pytest = "^8.2.2" pytest-qt = ">=4.4.0" -briefcase = "0.3.19" +# briefcase = "0.3.19" requests = "^2.31.0" pre-commit = "^3.8.0" python-gnupg = "^0.5.2" @@ -93,61 +63,93 @@ poetry = "^1.8.4" pyinstaller = "^6.11.0" poetry-plugin-export = "^1.8.0" -[tool.briefcase.app.bitcoin-safe.macOS] -universal_build = true -requires = [ "std-nslog~=1.0.0",] -system_runtime_requires = [ "libzbar0", "libsecp256k1-1",] -[tool.briefcase.app.bitcoin-safe.linux] -icon = "tools/resources/icon" +[tool.pytest.ini_options] +markers = [ + "marker_qt_1: marks tests as marker_qt_1 (deselect by default)", + "marker_qt_2: marks tests as marker_qt_2 (deselect by default)" +] + + +# [tool.briefcase] +# project_name = "Bitcoin-Safe" +# bundle = "org.bitcoin-safe" +# version = "1.0.0b5" +# url = "www.bitcoin-safe.org" +# author = "Andreas Griffin" +# author_email = "andreasgriffin@proton.me" + +# [tool.briefcase.license] +# file = "LICENSE" + +# [tool.briefcase.app.bitcoin-safe] +# formal_name = "Bitcoin-Safe" +# description = "A bitcoin wallet for the entire family." +# long_description = "More details about the app should go here.\n" +# sources = [ "bitcoin_safe",] +# test_sources = [ "tests",] +# test_requires = [ "pytest",] +# resources = [ "bitcoin_safe/gui/locales/*.qm",] +# # these requirements are updated from the poetry lock file automatically +# requires = ["altgraph==0.17.4", "appdirs==1.4.4", "arrow==1.3.0", "base58==2.1.1", "bdkpython==0.31.0", "binaryornot==0.4.4", "bitcoin-nostr-chat==0.5.1", "bitcoin-qr-tools==1.0.0", "bitcoin-usb==0.7.0", "briefcase==0.3.19", "build==1.2.2.post1", "cachecontrol==0.14.1", "cbor2==5.6.5", "certifi==2024.8.30", "cffi==1.17.1", "cfgv==3.4.0", "chardet==5.2.0", "charset-normalizer==3.4.0", "cleo==2.1.0", "click==8.1.7", "colorama==0.4.6", "construct==2.10.70", "construct-classes==0.1.2", "cookiecutter==2.6.0", "crashtest==0.4.1", "cryptography==43.0.3", "cwcwidth==0.1.9", "defusedxml==0.7.1", "distlib==0.3.9", "dmgbuild==1.6.2", "ds-store==1.3.1", "dulwich==0.21.7", "ecdsa==0.19.0", "exceptiongroup==1.2.2", "fastjsonschema==2.21.1", "filelock==3.16.1", "fonttools==4.55.3", "fpdf2==2.8.1", "gitdb==4.0.11", "gitpython==3.1.43", "hidapi==0.14.0.post4", "hwi==3.1.0", "identify==2.6.3", "idna==3.10", "importlib-metadata==8.5.0", "iniconfig==2.0.0", "installer==0.7.0", "jaraco-classes==3.4.0", "jeepney==0.8.0", "jinja2==3.1.4", "keyring==24.3.1", "libusb1==3.1.0", "lxml==5.3.0", "mac-alias==2.2.2", "macholib==1.16.3", "markdown-it-py==3.0.0", "markupsafe==3.0.2", "mdurl==0.1.2", "mnemonic==0.21", "more-itertools==10.5.0", "msgpack==1.1.0", "mss==9.0.2", "nodeenv==1.9.1", "noiseprotocol==0.3.1", "nostr-sdk==0.32.2", "numpy==2.2.0", "opencv-python-headless==4.10.0.84", "packaging==24.2", "pefile==2023.2.7", "pexpect==4.9.0", "pgpy==0.6.0", "pillow==10.4.0", "pip==24.3.1", "pkginfo==1.12.0", "platformdirs==4.3.6", "pluggy==1.5.0", "poetry-core==1.9.1", "poetry-plugin-export==1.8.0", "pre-commit==3.8.0", "protobuf==4.25.5", "psutil==5.9.8", "ptyprocess==0.7.0", "pyaes==1.6.1", "pyasn1==0.6.1", "pycparser==2.22", "pygame==2.6.1", "pygments==2.18.0", "pyinstaller==6.11.1", "pyinstaller-hooks-contrib==2024.10", "pyprof2calltree==1.4.5", "pyproject-hooks==1.2.0", "pyqrcode==1.2.1", "pyqt6==6.8.0", "pyqt6-charts==6.8.0", "pyqt6-charts-qt6==6.8.1", "pyqt6-qt6==6.8.1", "pyqt6-sip==13.9.1", "pyserial==3.5", "pytest==8.3.4", "pytest-qt==4.4.0", "pytest-xvfb==3.0.0", "python-bitcointx==1.1.4", "python-dateutil==2.9.0.post0", "python-gnupg==0.5.3", "python-slugify==8.0.4", "pyvirtualdisplay==3.0", "pywin32-ctypes==0.2.3", "pyyaml==6.0.2", "pyzbar==0.1.9", "rapidfuzz==3.10.1", "reportlab==4.0.8", "requests==2.32.3", "requests-toolbelt==1.0.0", "rich==13.9.4", "secretstorage==3.3.3", "segno==1.6.1", "semver==3.0.2", "setuptools==75.6.0", "shellingham==1.5.4", "six==1.17.0", "smmap==5.0.1", "snakeviz==2.2.2", "text-unidecode==1.3", "tomli==2.2.1", "tomli-w==1.1.0", "tomlkit==0.13.2", "tornado==6.4.2", "translate-toolkit==3.14.2", "trezor==0.13.9", "trove-classifiers==2024.10.21.16", "types-python-dateutil==2.9.0.20241206", "typing-extensions==4.12.2", "urllib3==2.2.3", "virtualenv==20.28.0", "wheel==0.45.1", "zipp==3.21.0"] + + + +# [tool.briefcase.app.bitcoin-safe.macOS] +# universal_build = true +# requires = [ "std-nslog~=1.0.0",] +# system_runtime_requires = [ "libzbar0", "libsecp256k1-1",] + +# [tool.briefcase.app.bitcoin-safe.linux] +# icon = "tools/resources/icon" -[tool.briefcase.app.bitcoin-safe.windows] -requires = [] -use_full_install_path = false +# [tool.briefcase.app.bitcoin-safe.windows] +# requires = [] +# use_full_install_path = false -[tool.briefcase.app.bitcoin-safe.iOS] -supported = false +# [tool.briefcase.app.bitcoin-safe.iOS] +# supported = false -[tool.briefcase.app.bitcoin-safe.android] -supported = false +# [tool.briefcase.app.bitcoin-safe.android] +# supported = false -[tool.briefcase.app.bitcoin-safe.web] -supported = false +# [tool.briefcase.app.bitcoin-safe.web] +# supported = false -[tool.briefcase.app.bitcoin-safe.macOS.entitlement] -"com.apple.security.device.camera" = true +# [tool.briefcase.app.bitcoin-safe.macOS.entitlement] +# "com.apple.security.device.camera" = true -[tool.briefcase.app.bitcoin-safe.macOS.info] -NSCameraUsageDescription = "This application supports scanning QR-codes." +# [tool.briefcase.app.bitcoin-safe.macOS.info] +# NSCameraUsageDescription = "This application supports scanning QR-codes." -[tool.briefcase.app.bitcoin-safe.linux.appimage] -# deprecated. appimage are build using the -# dedicated docker container -manylinux = "manylinux_2_28" -icon = "tools/resources/icon" -resources = [ "tools/resources/icon/*.png", "tools/resources/icon/*.svg",] -version = "1.0.0b5" -# system_requires = [ "cmake", "gcc", "gcc-c++", "make", "perl", "git", "libxcb", "libxcb-devel", "xcb-util", "xcb-util-devel", "mesa-libGL-devel", "openssl-devel", "bison", "flex", "gperf", "sqlite-devel", "libicu-devel"] +# [tool.briefcase.app.bitcoin-safe.linux.appimage] +# # deprecated. appimage are build using the +# # dedicated docker container +# manylinux = "manylinux_2_28" +# icon = "tools/resources/icon" +# resources = [ "tools/resources/icon/*.png", "tools/resources/icon/*.svg",] +# version = "1.0.0b5" +# # system_requires = [ "cmake", "gcc", "gcc-c++", "make", "perl", "git", "libxcb", "libxcb-devel", "xcb-util", "xcb-util-devel", "mesa-libGL-devel", "openssl-devel", "bison", "flex", "gperf", "sqlite-devel", "libicu-devel"] -[tool.briefcase.app.bitcoin-safe.linux.flatpak] -bundle = "org.bitcoinsafe" -flatpak_runtime = "org.kde.Platform" -flatpak_runtime_version = "6.6" -flatpak_sdk = "org.kde.Sdk" +# [tool.briefcase.app.bitcoin-safe.linux.flatpak] +# bundle = "org.bitcoinsafe" +# flatpak_runtime = "org.kde.Platform" +# flatpak_runtime_version = "6.6" +# flatpak_sdk = "org.kde.Sdk" -version = "1.0.0b5" +# version = "1.0.0b5" -[tool.briefcase.app.bitcoin-safe.linux.system.debian] +# [tool.briefcase.app.bitcoin-safe.linux.system.debian] -[tool.briefcase.app.bitcoin-safe.linux.system.rhel] -system_runtime_requires = [ "qt6-qtbase-gui",] +# [tool.briefcase.app.bitcoin-safe.linux.system.rhel] +# system_runtime_requires = [ "qt6-qtbase-gui",] -[tool.briefcase.app.bitcoin-safe.linux.system.suse] -system_runtime_requires = [ "libQt6Gui6",] +# [tool.briefcase.app.bitcoin-safe.linux.system.suse] +# system_runtime_requires = [ "libQt6Gui6",] -[tool.briefcase.app.bitcoin-safe.linux.system.arch] +# [tool.briefcase.app.bitcoin-safe.linux.system.arch] diff --git a/tests/non_gui/test_filename_info.py b/tests/non_gui/test_filename_info.py new file mode 100644 index 0000000..3a13f19 --- /dev/null +++ b/tests/non_gui/test_filename_info.py @@ -0,0 +1,182 @@ +# +# Bitcoin Safe +# Copyright (C) 2024 Andreas Griffin +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of version 3 of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see https://www.gnu.org/licenses/gpl-3.0.html +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import logging + +from bitcoin_safe.signature_manager import FilenameInfo + +logger = logging.getLogger(__name__) + + +def test_name_splitting_sparrow(): + filename = "Sparrow-2.0.0-aarch64.dmg" + info = FilenameInfo.from_filename(filename) + assert ( + str(info) + == "FilenameInfo(app_name='Sparrow', extension='dmg', version='2.0.0', architecture='aarch64', extra_info=None)" + ) + + filename = "Sparrow-2.0.0.msi" + info = FilenameInfo.from_filename(filename) + assert ( + str(info) + == "FilenameInfo(app_name='Sparrow', extension='msi', version='2.0.0', architecture=None, extra_info=None)" + ) + + filename = "Sparrow-2.0.0.zip" + info = FilenameInfo.from_filename(filename) + assert ( + str(info) + == "FilenameInfo(app_name='Sparrow', extension='zip', version='2.0.0', architecture=None, extra_info=None)" + ) + + filename = "sparrow_2.0.0-1_amd64.deb" + info = FilenameInfo.from_filename(filename) + assert ( + str(info) + == "FilenameInfo(app_name='sparrow', extension='deb', version='2.0.0', architecture='amd64', extra_info='1')" + ) + + filename = "sparrow-2.0.0-1.x86_64.rpm" + info = FilenameInfo.from_filename(filename) + assert ( + str(info) + == "FilenameInfo(app_name='sparrow', extension='rpm', version='2.0.0', architecture='x86_64', extra_info='1')" + ) + + filename = "sparrow-2.0.0-x86_64.tar.gz" + info = FilenameInfo.from_filename(filename) + assert ( + str(info) + == "FilenameInfo(app_name='sparrow', extension='gz', version='2.0.0', architecture='x86_64', extra_info='tar')" + ) + + filename = "sparrow_2.0.0-1_arm64.deb" + info = FilenameInfo.from_filename(filename) + assert ( + str(info) + == "FilenameInfo(app_name='sparrow', extension='deb', version='2.0.0', architecture='arm64', extra_info='1')" + ) + + filename = "sparrow-2.0.0-1.aarch64.rpm" + info = FilenameInfo.from_filename(filename) + assert ( + str(info) + == "FilenameInfo(app_name='sparrow', extension='rpm', version='2.0.0', architecture='aarch64', extra_info='1')" + ) + + filename = "sparrow-2.0.0-aarch64.tar.gz" + info = FilenameInfo.from_filename(filename) + assert ( + str(info) + == "FilenameInfo(app_name='sparrow', extension='gz', version='2.0.0', architecture='aarch64', extra_info='tar')" + ) + + filename = "sparrow-2.0.0-manifest.txt.asc" + info = FilenameInfo.from_filename(filename) + assert ( + str(info) + == "FilenameInfo(app_name='sparrow', extension='asc', version='2.0.0', architecture=None, extra_info='manifest.txt')" + ) + + filename = "sparrow-2.0.0-manifest.txt" + info = FilenameInfo.from_filename(filename) + assert ( + str(info) + == "FilenameInfo(app_name='sparrow', extension='txt', version='2.0.0', architecture=None, extra_info='manifest')" + ) + + filename = "sparrow-server-2.0.0-1.x86_64.rpm" + info = FilenameInfo.from_filename(filename) + assert ( + str(info) + == "FilenameInfo(app_name='sparrow-server', extension='rpm', version='2.0.0', architecture='x86_64', extra_info='1')" + ) + + +def test_name_bitcoin_safe(): + + filename = "Bitcoin-Safe-1.0.0b4-portable.exe" + info = FilenameInfo.from_filename(filename) + assert ( + str(info) + == "FilenameInfo(app_name='Bitcoin-Safe', extension='exe', version='1.0.0b4', architecture=None, extra_info='portable')" + ) + + filename = "Bitcoin-Safe-1.0.0b4-setup.exe" + info = FilenameInfo.from_filename(filename) + assert ( + str(info) + == "FilenameInfo(app_name='Bitcoin-Safe', extension='exe', version='1.0.0b4', architecture=None, extra_info='setup')" + ) + + for arch in ["arm64", "x86_64"]: + filename = f"Bitcoin-Safe-1.0.0b4_{arch}-setup.exe" + info = FilenameInfo.from_filename(filename) + assert info.app_name == "Bitcoin-Safe" + assert info.version == "1.0.0b4" + assert info.architecture == arch + assert info.extra_info == "setup" + + filename = "Bitcoin-Safe-1.0.3-x86_64.AppImage" + info = FilenameInfo.from_filename(filename) + assert ( + str(info) + == "FilenameInfo(app_name='Bitcoin-Safe', extension='AppImage', version='1.0.3', architecture='x86_64', extra_info=None)" + ) + + filename = "Bitcoin-Safe_11.022.333beta3-x86_64_extra_info.AppImage" + info = FilenameInfo.from_filename(filename) + assert ( + str(info) + == "FilenameInfo(app_name='Bitcoin-Safe', extension='AppImage', version='11.022.333beta3', architecture='x86_64', extra_info='extra_info')" + ) + + filename = "Bitcoin-Safe_11.022.333beta3-x86_64.AppImage" + info = FilenameInfo.from_filename(filename) + assert ( + str(info) + == "FilenameInfo(app_name='Bitcoin-Safe', extension='AppImage', version='11.022.333beta3', architecture='x86_64', extra_info=None)" + ) + + filename = "Bitcoin-Safe-1.0.3.dmg" + info = FilenameInfo.from_filename(filename) + assert ( + str(info) + == "FilenameInfo(app_name='Bitcoin-Safe', extension='dmg', version='1.0.3', architecture=None, extra_info=None)" + ) + + +def test_name_splitting_linux_packages(): + + filename = "libreoffice-qt6-7.6.7.2-r0.apk" + info = FilenameInfo.from_filename(filename) + assert ( + str(info) + == "FilenameInfo(app_name='libreoffice-qt6', extension='apk', version='7.6.7.2', architecture=None, extra_info='r0')" + ) diff --git a/tools/build.py b/tools/build.py index 0d52ccf..f182bc8 100644 --- a/tools/build.py +++ b/tools/build.py @@ -36,7 +36,6 @@ from pathlib import Path from typing import List, Literal -import tomlkit from translation_handler import TranslationHandler, run_local from bitcoin_safe import __version__ @@ -81,49 +80,49 @@ def app_name_formatter(module_name: str) -> str: return "-".join(parts) - def update_briefcase_requires( - self, - pyproject_path="pyproject.toml", - poetry_lock_path="poetry.lock", - additional_requires=[], - ): - - # Load pyproject.toml - with open(pyproject_path, "r") as file: - pyproject_data = tomlkit.load(file) - - # Load and parse poetry lock file - with open(poetry_lock_path, "r") as file: - poetry_lock_data = tomlkit.load(file) - - briefcase_requires = [] - # Extract packages from the lock file - for package in poetry_lock_data["package"]: - name = package["name"] - if name in ["xattr", "poetry"]: - continue - version = package["version"] - if package.get("source"): - briefcase_requires.append(package.get("source", {}).get("url")) - else: - briefcase_requires.append(f"{name}=={version}") - - # Append any additional requires - briefcase_requires.extend(additional_requires) - - # Ensure the structure exists before updating it - pyproject_data.setdefault("tool", {}).setdefault("briefcase", {}).setdefault("app", {}).setdefault( - "bitcoin-safe", {} - )["requires"] = briefcase_requires - - # update version - pyproject_data.setdefault("tool", {}).setdefault("briefcase", {})["version"] = self.version - # update version - pyproject_data.setdefault("tool", {}).setdefault("poetry", {})["version"] = self.version - - # Write updated pyproject.toml - with open(pyproject_path, "w") as file: - tomlkit.dump(pyproject_data, file) + # def update_briefcase_requires( + # self, + # pyproject_path="pyproject.toml", + # poetry_lock_path="poetry.lock", + # additional_requires=[], + # ): + + # # Load pyproject.toml + # with open(pyproject_path, "r") as file: + # pyproject_data = tomlkit.load(file) + + # # Load and parse poetry lock file + # with open(poetry_lock_path, "r") as file: + # poetry_lock_data = tomlkit.load(file) + + # briefcase_requires = [] + # # Extract packages from the lock file + # for package in poetry_lock_data["package"]: + # name = package["name"] + # if name in ["xattr", "poetry"]: + # continue + # version = package["version"] + # if package.get("source"): + # briefcase_requires.append(package.get("source", {}).get("url")) + # else: + # briefcase_requires.append(f"{name}=={version}") + + # # Append any additional requires + # briefcase_requires.extend(additional_requires) + + # # Ensure the structure exists before updating it + # pyproject_data.setdefault("tool", {}).setdefault("briefcase", {}).setdefault("app", {}).setdefault( + # "bitcoin-safe", {} + # )["requires"] = briefcase_requires + + # # update version + # pyproject_data.setdefault("tool", {}).setdefault("briefcase", {})["version"] = self.version + # # update version + # pyproject_data.setdefault("tool", {}).setdefault("poetry", {})["version"] = self.version + + # # Write updated pyproject.toml + # with open(pyproject_path, "w") as file: + # tomlkit.dump(pyproject_data, file) def build_appimage_docker( self, no_cache=False, build_commit: None | str | Literal["current_commit"] = "current_commit" @@ -298,40 +297,40 @@ def build_dmg( # Perform the move shutil.move(str(file), str(DISTDIR / new_dir_name)) - def briefcase_appimage(self, **kwargs): - # briefcase appimage building works on some systems, but not on others... unknown why. - # so we build using the bitcoin_safe docker by default - run_local("poetry run briefcase -u package linux appimage") + # def briefcase_appimage(self, **kwargs): + # # briefcase appimage building works on some systems, but not on others... unknown why. + # # so we build using the bitcoin_safe docker by default + # run_local("poetry run briefcase -u package linux appimage") - def briefcase_windows(self, **kwargs): - run_local("poetry run briefcase -u package windows") + # def briefcase_windows(self, **kwargs): + # run_local("poetry run briefcase -u package windows") - def briefcase_mac(self, **kwargs): - run_local("python3 -m poetry run briefcase -u package macOS app --no-notarize") + # def briefcase_mac(self, **kwargs): + # run_local("python3 -m poetry run briefcase -u package macOS app --no-notarize") - def briefcase_deb(self, **kwargs): - # _run_local(" briefcase -u package --target ubuntu:23.10") # no bdkpython for python3.11 - # _run_local(" briefcase -u package --target ubuntu:23.04") # no bdkpython for python3.11 - run_local("poetry run briefcase -u package --target ubuntu:22.04 -p deb") + # def briefcase_deb(self, **kwargs): + # # _run_local(" briefcase -u package --target ubuntu:23.10") # no bdkpython for python3.11 + # # _run_local(" briefcase -u package --target ubuntu:23.04") # no bdkpython for python3.11 + # run_local("poetry run briefcase -u package --target ubuntu:22.04 -p deb") - def briefcase_flatpak(self, **kwargs): - run_local("poetry run briefcase package linux flatpak") + # def briefcase_flatpak(self, **kwargs): + # run_local("poetry run briefcase package linux flatpak") - shutil.rmtree("build") + # shutil.rmtree("build") def package_application( self, targets: List[TARGET_LITERAL], build_commit: None | str | Literal["current_commit"] = None, ): - self.update_briefcase_requires() + # self.update_briefcase_requires() f_map = { "appimage": self.build_appimage_docker, "windows": self.build_windows_exe_and_installer_docker, "mac": self.build_dmg, - "deb": self.briefcase_deb, - "flatpak": self.briefcase_flatpak, + # "deb": self.briefcase_deb, + # "flatpak": self.briefcase_flatpak, "snap": self.build_snap, }