From fda6c9f6491055829d1700ce60b9454e3b46fbe2 Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Wed, 5 Oct 2016 21:59:01 +0200 Subject: [PATCH 01/45] [IMP] avoid to crash during analysis, if repository is not correct; [IMP] remove warning when analysing Odoo modules manifest, if docutils raise warning --- oca_custom/README.rst | 37 +++++++++++++++++++++++++ oca_custom/__init__.py | 2 ++ oca_custom/__openerp__.py | 22 +++++++++++++++ oca_custom/models/__init__.py | 2 ++ oca_custom/models/res_partner.py | 14 ++++++++++ oca_custom/static/description/icon.png | Bin 0 -> 16821 bytes oca_custom/views/view_res_partner.xml | 30 ++++++++++++++++++++ 7 files changed, 107 insertions(+) create mode 100644 oca_custom/README.rst create mode 100644 oca_custom/__init__.py create mode 100644 oca_custom/__openerp__.py create mode 100644 oca_custom/models/__init__.py create mode 100644 oca_custom/models/res_partner.py create mode 100644 oca_custom/static/description/icon.png create mode 100644 oca_custom/views/view_res_partner.xml diff --git a/oca_custom/README.rst b/oca_custom/README.rst new file mode 100644 index 0000000..b235c3e --- /dev/null +++ b/oca_custom/README.rst @@ -0,0 +1,37 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :alt: License: AGPL-3 + +=================== +OCA Custom Settings +=================== + +Custom module for OCA Instance. + +Features +======== + +* The module add an extra field x_github_login, related to the github_login field + +Credits +======= + +Contributors +------------ + +* Sylvain LE GAL (https://twitter.com/legalsylvain) +* Benoit GUILLOT (benoit.guillot@akretion.com) + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit http://odoo-community.org. diff --git a/oca_custom/__init__.py b/oca_custom/__init__.py new file mode 100644 index 0000000..402ac47 --- /dev/null +++ b/oca_custom/__init__.py @@ -0,0 +1,2 @@ +# -#- coding: utf-8 -#- +from . import models diff --git a/oca_custom/__openerp__.py b/oca_custom/__openerp__.py new file mode 100644 index 0000000..8b3b14c --- /dev/null +++ b/oca_custom/__openerp__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2016-Today: Odoo Community Association (OCA) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + 'name': 'OCA Custom Settings', + 'summary': 'Custom Settings for OCA Instance', + 'version': '8.0.0.0.0', + 'category': 'Custom', + 'author': [ + 'GRAP', + 'Akretion', + 'Odoo Community Association (OCA)', + ], + 'depends': [ + 'github_connector', + ], + 'data': [ + 'views/view_res_partner.xml', + ], + 'installable': True, +} diff --git a/oca_custom/models/__init__.py b/oca_custom/models/__init__.py new file mode 100644 index 0000000..1bcc806 --- /dev/null +++ b/oca_custom/models/__init__.py @@ -0,0 +1,2 @@ +# -#- coding: utf-8 -#- +from . import res_partner diff --git a/oca_custom/models/res_partner.py b/oca_custom/models/res_partner.py new file mode 100644 index 0000000..0708c63 --- /dev/null +++ b/oca_custom/models/res_partner.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2016-Today: Odoo Community Association (OCA) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import models, fields + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + github_login = fields.Char(readonly=False) + + x_github_login = fields.Char(related='github_login', store=True) diff --git a/oca_custom/static/description/icon.png b/oca_custom/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bb2e48547168ed69b819857a323b0009aa5ca92b GIT binary patch literal 16821 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 literal 0 HcmV?d00001 diff --git a/oca_custom/views/view_res_partner.xml b/oca_custom/views/view_res_partner.xml new file mode 100644 index 0000000..f62e3c2 --- /dev/null +++ b/oca_custom/views/view_res_partner.xml @@ -0,0 +1,30 @@ + + + + + + res.partner + + + + + + + + + + + res.partner + + + + 1 + + + + + From c07187742da624c37136c4874d85627a5d679c4e Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Mon, 31 Jul 2017 17:33:12 +0200 Subject: [PATCH 02/45] [ADD] initial 10.0 commit --- oca_custom/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oca_custom/__openerp__.py b/oca_custom/__openerp__.py index 8b3b14c..9a1d717 100644 --- a/oca_custom/__openerp__.py +++ b/oca_custom/__openerp__.py @@ -5,7 +5,7 @@ { 'name': 'OCA Custom Settings', 'summary': 'Custom Settings for OCA Instance', - 'version': '8.0.0.0.0', + 'version': '10.0.0.0.0', 'category': 'Custom', 'author': [ 'GRAP', From 7a14db14c38568562130403eca7c06de1ae1a6ce Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Tue, 1 Aug 2017 17:27:02 +0200 Subject: [PATCH 03/45] [DEL] custom field and views using it --- oca_custom/__openerp__.py | 1 - oca_custom/models/res_partner.py | 2 -- oca_custom/views/view_res_partner.xml | 30 --------------------------- 3 files changed, 33 deletions(-) delete mode 100644 oca_custom/views/view_res_partner.xml diff --git a/oca_custom/__openerp__.py b/oca_custom/__openerp__.py index 9a1d717..5694571 100644 --- a/oca_custom/__openerp__.py +++ b/oca_custom/__openerp__.py @@ -16,7 +16,6 @@ 'github_connector', ], 'data': [ - 'views/view_res_partner.xml', ], 'installable': True, } diff --git a/oca_custom/models/res_partner.py b/oca_custom/models/res_partner.py index 0708c63..0f18748 100644 --- a/oca_custom/models/res_partner.py +++ b/oca_custom/models/res_partner.py @@ -10,5 +10,3 @@ class ResPartner(models.Model): _inherit = 'res.partner' github_login = fields.Char(readonly=False) - - x_github_login = fields.Char(related='github_login', store=True) diff --git a/oca_custom/views/view_res_partner.xml b/oca_custom/views/view_res_partner.xml deleted file mode 100644 index f62e3c2..0000000 --- a/oca_custom/views/view_res_partner.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - res.partner - - - - - - - - - - - res.partner - - - - 1 - - - - - From e1b5fbcc9cbbee262d8a7f15bcb8c499305cd623 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul=20=28ACSONE=29?= Date: Tue, 9 Jan 2018 19:18:54 +0100 Subject: [PATCH 04/45] Make the github login field editable (#16) * [FIX] make the github page always visible So the github_login field can be set manually. --- oca_custom/README.rst | 4 +++- oca_custom/__openerp__.py | 1 + oca_custom/views/res_partner.xml | 16 ++++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 oca_custom/views/res_partner.xml diff --git a/oca_custom/README.rst b/oca_custom/README.rst index b235c3e..5d96d76 100644 --- a/oca_custom/README.rst +++ b/oca_custom/README.rst @@ -10,7 +10,8 @@ Custom module for OCA Instance. Features ======== -* The module add an extra field x_github_login, related to the github_login field +* Make the github_login field from connector_github editable so it can + be set manually (eg when registering new CLA's) Credits ======= @@ -20,6 +21,7 @@ Contributors * Sylvain LE GAL (https://twitter.com/legalsylvain) * Benoit GUILLOT (benoit.guillot@akretion.com) +* Stéphane Bidoul (stephane.bidoul@acsone.eu) Maintainer ---------- diff --git a/oca_custom/__openerp__.py b/oca_custom/__openerp__.py index 5694571..daa4991 100644 --- a/oca_custom/__openerp__.py +++ b/oca_custom/__openerp__.py @@ -16,6 +16,7 @@ 'github_connector', ], 'data': [ + 'views/res_partner.xml', ], 'installable': True, } diff --git a/oca_custom/views/res_partner.xml b/oca_custom/views/res_partner.xml new file mode 100644 index 0000000..dd634b6 --- /dev/null +++ b/oca_custom/views/res_partner.xml @@ -0,0 +1,16 @@ + + + + + res.partner.github.visible.form + res.partner + + + + + + + + + + From 6f2667b53e1a991b726b8b145ce52050e82e8eb8 Mon Sep 17 00:00:00 2001 From: cubells Date: Mon, 21 May 2018 12:51:02 +0200 Subject: [PATCH 05/45] [MIG] oca_custom: Migration to 11.0 --- oca_custom/README.rst | 70 ++- oca_custom/__init__.py | 1 - .../{__openerp__.py => __manifest__.py} | 12 +- oca_custom/models/__init__.py | 1 - oca_custom/models/res_partner.py | 3 +- oca_custom/readme/CONTRIBUTORS.rst | 4 + oca_custom/readme/DESCRIPTION.rst | 1 + oca_custom/readme/ROADMAP.rst | 2 + oca_custom/static/description/index.html | 431 ++++++++++++++++++ oca_custom/views/res_partner.xml | 22 +- 10 files changed, 512 insertions(+), 35 deletions(-) rename oca_custom/{__openerp__.py => __manifest__.py} (73%) create mode 100644 oca_custom/readme/CONTRIBUTORS.rst create mode 100644 oca_custom/readme/DESCRIPTION.rst create mode 100644 oca_custom/readme/ROADMAP.rst create mode 100644 oca_custom/static/description/index.html diff --git a/oca_custom/README.rst b/oca_custom/README.rst index 5d96d76..324ee19 100644 --- a/oca_custom/README.rst +++ b/oca_custom/README.rst @@ -1,39 +1,83 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :alt: License: AGPL-3 - =================== OCA Custom Settings =================== +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Foca--custom-lightgray.png?logo=github + :target: https://github.com/OCA/oca-custom/tree/11.0/oca_custom + :alt: OCA/oca-custom +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/oca-custom-11-0/oca-custom-11-0-oca_custom + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/273/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + Custom module for OCA Instance. -Features -======== +**Table of contents** + +.. contents:: + :local: + +Known issues / Roadmap +====================== + +* Make the github_login field from connector_github editable so it can be set + manually (eg when registering new CLA's) -* Make the github_login field from connector_github editable so it can - be set manually (eg when registering new CLA's) +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. Credits ======= +Authors +~~~~~~~ + +* GRAP +* Akretion + Contributors ------------- +~~~~~~~~~~~~ * Sylvain LE GAL (https://twitter.com/legalsylvain) * Benoit GUILLOT (benoit.guillot@akretion.com) * Stéphane Bidoul (stephane.bidoul@acsone.eu) +* Vicent Cubells (vicent.cubells@tecnativa.com) -Maintainer ----------- +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. .. image:: https://odoo-community.org/logo.png :alt: Odoo Community Association :target: https://odoo-community.org -This module is maintained by the OCA. - OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -To contribute to this module, please visit http://odoo-community.org. +This module is part of the `OCA/oca-custom `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/oca_custom/__init__.py b/oca_custom/__init__.py index 402ac47..0650744 100644 --- a/oca_custom/__init__.py +++ b/oca_custom/__init__.py @@ -1,2 +1 @@ -# -#- coding: utf-8 -#- from . import models diff --git a/oca_custom/__openerp__.py b/oca_custom/__manifest__.py similarity index 73% rename from oca_custom/__openerp__.py rename to oca_custom/__manifest__.py index daa4991..ad87742 100644 --- a/oca_custom/__openerp__.py +++ b/oca_custom/__manifest__.py @@ -1,17 +1,15 @@ -# -*- coding: utf-8 -*- # Copyright (C) 2016-Today: Odoo Community Association (OCA) # @author: Sylvain LE GAL (https://twitter.com/legalsylvain) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { 'name': 'OCA Custom Settings', 'summary': 'Custom Settings for OCA Instance', - 'version': '10.0.0.0.0', + 'version': '11.0.1.1.0', 'category': 'Custom', - 'author': [ - 'GRAP', - 'Akretion', - 'Odoo Community Association (OCA)', - ], + 'author': 'GRAP, ' + 'Akretion, ' + 'Odoo Community Association (OCA)', + 'license': 'AGPL-3', 'depends': [ 'github_connector', ], diff --git a/oca_custom/models/__init__.py b/oca_custom/models/__init__.py index 1bcc806..91fed54 100644 --- a/oca_custom/models/__init__.py +++ b/oca_custom/models/__init__.py @@ -1,2 +1 @@ -# -#- coding: utf-8 -#- from . import res_partner diff --git a/oca_custom/models/res_partner.py b/oca_custom/models/res_partner.py index 0f18748..c543946 100644 --- a/oca_custom/models/res_partner.py +++ b/oca_custom/models/res_partner.py @@ -1,9 +1,8 @@ -# -*- coding: utf-8 -*- # Copyright (C) 2016-Today: Odoo Community Association (OCA) # @author: Sylvain LE GAL (https://twitter.com/legalsylvain) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import models, fields +from odoo import fields, models class ResPartner(models.Model): diff --git a/oca_custom/readme/CONTRIBUTORS.rst b/oca_custom/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..501e6d8 --- /dev/null +++ b/oca_custom/readme/CONTRIBUTORS.rst @@ -0,0 +1,4 @@ +* Sylvain LE GAL (https://twitter.com/legalsylvain) +* Benoit GUILLOT (benoit.guillot@akretion.com) +* Stéphane Bidoul (stephane.bidoul@acsone.eu) +* Vicent Cubells (vicent.cubells@tecnativa.com) diff --git a/oca_custom/readme/DESCRIPTION.rst b/oca_custom/readme/DESCRIPTION.rst new file mode 100644 index 0000000..91f7864 --- /dev/null +++ b/oca_custom/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +Custom module for OCA Instance. diff --git a/oca_custom/readme/ROADMAP.rst b/oca_custom/readme/ROADMAP.rst new file mode 100644 index 0000000..234393b --- /dev/null +++ b/oca_custom/readme/ROADMAP.rst @@ -0,0 +1,2 @@ +* Make the github_login field from connector_github editable so it can be set + manually (eg when registering new CLA's) diff --git a/oca_custom/static/description/index.html b/oca_custom/static/description/index.html new file mode 100644 index 0000000..97ca56b --- /dev/null +++ b/oca_custom/static/description/index.html @@ -0,0 +1,431 @@ + + + + + + +OCA Custom Settings + + + +
+

OCA Custom Settings

+ + +

Beta License: AGPL-3 OCA/oca-custom Translate me on Weblate Try me on Runbot

+

Custom module for OCA Instance.

+

Table of contents

+ +
+

Known issues / Roadmap

+
    +
  • Make the github_login field from connector_github editable so it can be set +manually (eg when registering new CLA’s)
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • GRAP
  • +
  • Akretion
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/oca-custom project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/oca_custom/views/res_partner.xml b/oca_custom/views/res_partner.xml index dd634b6..857dc86 100644 --- a/oca_custom/views/res_partner.xml +++ b/oca_custom/views/res_partner.xml @@ -1,16 +1,16 @@ - - res.partner.github.visible.form - res.partner - - - - - - - - + + res.partner.github.visible.form + res.partner + + + + + + + + From a1b5b34cd1aa0473e1f5818c800a8a0b58bfe7d4 Mon Sep 17 00:00:00 2001 From: Cristina Martin Date: Wed, 9 Jan 2019 11:59:55 +0100 Subject: [PATCH 06/45] [12.0][MIG] custom_oca: Migration to v12 --- oca_custom/README.rst | 11 ++++++----- oca_custom/__manifest__.py | 2 +- oca_custom/readme/CONTRIBUTORS.rst | 1 + oca_custom/static/description/index.html | 9 +++++---- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/oca_custom/README.rst b/oca_custom/README.rst index 324ee19..faedf7d 100644 --- a/oca_custom/README.rst +++ b/oca_custom/README.rst @@ -14,13 +14,13 @@ OCA Custom Settings :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Foca--custom-lightgray.png?logo=github - :target: https://github.com/OCA/oca-custom/tree/11.0/oca_custom + :target: https://github.com/OCA/oca-custom/tree/12.0/oca_custom :alt: OCA/oca-custom .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/oca-custom-11-0/oca-custom-11-0-oca_custom + :target: https://translation.odoo-community.org/projects/oca-custom-12-0/oca-custom-12-0-oca_custom :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/273/11.0 + :target: https://runbot.odoo-community.org/runbot/273/12.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -44,7 +44,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -64,6 +64,7 @@ Contributors * Benoit GUILLOT (benoit.guillot@akretion.com) * Stéphane Bidoul (stephane.bidoul@acsone.eu) * Vicent Cubells (vicent.cubells@tecnativa.com) +* Cristina Martin R. (cristina.martin@tecnativa.com) Maintainers ~~~~~~~~~~~ @@ -78,6 +79,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/oca-custom `_ project on GitHub. +This module is part of the `OCA/oca-custom `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/oca_custom/__manifest__.py b/oca_custom/__manifest__.py index ad87742..6f6d468 100644 --- a/oca_custom/__manifest__.py +++ b/oca_custom/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'OCA Custom Settings', 'summary': 'Custom Settings for OCA Instance', - 'version': '11.0.1.1.0', + 'version': '12.0.1.0.0', 'category': 'Custom', 'author': 'GRAP, ' 'Akretion, ' diff --git a/oca_custom/readme/CONTRIBUTORS.rst b/oca_custom/readme/CONTRIBUTORS.rst index 501e6d8..41c77f9 100644 --- a/oca_custom/readme/CONTRIBUTORS.rst +++ b/oca_custom/readme/CONTRIBUTORS.rst @@ -2,3 +2,4 @@ * Benoit GUILLOT (benoit.guillot@akretion.com) * Stéphane Bidoul (stephane.bidoul@acsone.eu) * Vicent Cubells (vicent.cubells@tecnativa.com) +* Cristina Martin R. (cristina.martin@tecnativa.com) diff --git a/oca_custom/static/description/index.html b/oca_custom/static/description/index.html index 97ca56b..ff6c7ca 100644 --- a/oca_custom/static/description/index.html +++ b/oca_custom/static/description/index.html @@ -3,7 +3,7 @@ - + OCA Custom Settings + + +
+

OCA All

+ + +

Alpha License: AGPL-3 OCA/oca-custom Translate me on Weblate Try me on Runboat

+

OCA’s Odoo instance’s dependencies.

+

Installing this module will create an instance likes +the one used to manage the OCA association.

+
+

Important

+

This is an alpha version, the data model and design can change at any time without warning. +Only for development or testing purpose, do not use in production. +More details on development status

+
+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

Current maintainer:

+

petrus-v

+

This module is part of the OCA/oca-custom project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + From 75e7079dcca80d4191feb25137fd0e0b1a35a5fd Mon Sep 17 00:00:00 2001 From: Pierre Verkest Date: Mon, 16 Jun 2025 09:42:27 +0200 Subject: [PATCH 13/45] FIX oca_all dependencies * account_statement_import_online_wise were missing on staging only module missing from production 20250617 * l10n_ch_pain_base * l10n_ch_pain_credit_transfer * project_task_add_very_high * web_search_with_and and bumps all module versions --- oca_all/__manifest__.py | 94 +++++++++++++++++++++++------------------ 1 file changed, 52 insertions(+), 42 deletions(-) diff --git a/oca_all/__manifest__.py b/oca_all/__manifest__.py index 37249c5..88aca8b 100644 --- a/oca_all/__manifest__.py +++ b/oca_all/__manifest__.py @@ -15,6 +15,7 @@ # Odoo "account", "account_payment", + "account_statement_import", "analytic", "association", "attachment_indexation", @@ -32,12 +33,16 @@ "bus", "calendar", "contacts", + "coupon", "crm", "digest", "event", "event_sale", "fetchmail", + "fetchmail_gmail", "gamification", + "google_gmail", + "google_account", "google_recaptcha", "hr", "hr_timesheet", @@ -73,6 +78,7 @@ "rating", "resource", "sale", + "sale_coupon", "sale_crm", "sale_management", "sale_project", @@ -112,70 +118,74 @@ "website_payment", "website_profile", "website_sale", + "website_sale_coupon", "website_sale_digital", "website_sale_management", "website_slides", # OCA - "date_range", - "mis_builder", - "mis_builder_budget", - "mis_builder_demo", - "account_payment_order", - "report_xlsx", - "mis_builder_cash_flow", - "account_statement_import_paypal", "account_banking_pain_base", - "account_statement_import_base", "account_banking_sepa_credit_transfer", + "account_credit_control", + "account_financial_report", + "account_lock_to_date", + "account_menu", + "account_payment_mode", + "account_payment_order", "account_payment_partner", "account_payment_sale", - "account_payment_mode", "account_payment_unece", + "account_reconciliation_widget", + "account_statement_import_base", + "account_statement_import_online_wise", + "account_statement_import_paypal", + "account_statement_import_txt_xlsx", "account_tax_unece", + "apps_download", + "apps_product_creator", + "base_technical_features", + "base_ubl", "base_ubl_payment", "base_unece", - "uom_unece", - "base_ubl", - "project_members", - "apps_download", - "account_financial_report", + "bi_sql_editor", "currency_rate_update", + "date_range", + "disable_odoo_online", + "document_page", + "event_badge_design", + "github_connector", + "github_connector_oca", + "github_connector_odoo", + "knowledge", "l10n_ch_base_bank", + "l10n_ch_pain_base", + "l10n_ch_pain_credit_transfer", + "mass_editing", + "mass_operation_abstract", + "membership_delegated_partner_line", + "membership_extension", + "mis_builder", + "mis_builder_budget", + "mis_builder_cash_flow", + "mis_builder_demo", "multi_step_wizard", - "account_credit_control", - "web_widget_dropdown_dynamic", - "account_statement_import_txt_xlsx", - "account_lock_to_date", "partner_statement", - "membership_delegated_partner_line", - # "membership_delegated_partner", - "account_menu", + "project_task_add_very_high", "oca_custom", - "mass_operation_abstract", + "oca_psc_team", + "partner_contact_access_link", + "project_members", + "report_xlsx", + "report_xlsx_helper", + "sentry", "sql_request_abstract", - "bi_sql_editor", - "event_badge_design", + "uom_unece", + "web_advanced_search", "web_responsive", - "sentry", - "report_xlsx_helper", - "apps_product_creator", + "web_search_with_and", + "web_widget_dropdown_dynamic", "website_apps_store", - "github_connector", - "github_connector_oca", - "oca_psc_team", "website_oca_integrator", "website_oca_psc_team", - "github_connector_odoo", - "account_statement_import", - "account_reconciliation_widget", - "base_technical_features", - "document_page", - "knowledge", - "mass_editing", - "partner_contact_access_link", - "membership_extension", - "web_advanced_search", - "disable_odoo_online", ], "installable": True, } From a2752f4bfefaabb912f5170c388ecef148619cd5 Mon Sep 17 00:00:00 2001 From: Pierre Verkest Date: Thu, 3 Jul 2025 22:40:42 +0200 Subject: [PATCH 14/45] Add missing depenencies likes in production --- oca_all/__manifest__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/oca_all/__manifest__.py b/oca_all/__manifest__.py index 88aca8b..5cc600f 100644 --- a/oca_all/__manifest__.py +++ b/oca_all/__manifest__.py @@ -177,10 +177,12 @@ "report_xlsx", "report_xlsx_helper", "sentry", + "survey_xlsx", "sql_request_abstract", "uom_unece", "web_advanced_search", "web_responsive", + "web_refresher", "web_search_with_and", "web_widget_dropdown_dynamic", "website_apps_store", From d046788af29d64e15febbc4c1bae0cb600b875dd Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 22 Jul 2025 07:11:28 +0000 Subject: [PATCH 15/45] [UPD] README.rst --- oca_all/README.rst | 8 ++++++-- oca_all/static/description/index.html | 24 +++++++++++++++--------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/oca_all/README.rst b/oca_all/README.rst index 2881acf..0df5110 100644 --- a/oca_all/README.rst +++ b/oca_all/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + ======= OCA All ======= @@ -7,13 +11,13 @@ OCA All !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:89df52f29d0848cc5d8403803673fed7a371affbea15df49c4ea141b29b35da5 + !! source digest: sha256:5db7643cb0b23b0001c3d0bca16493b1ac9f994770781f068ca96608261011d4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png :target: https://odoo-community.org/page/development-status :alt: Alpha -.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Foca--custom-lightgray.png?logo=github diff --git a/oca_all/static/description/index.html b/oca_all/static/description/index.html index 8932608..94217b6 100644 --- a/oca_all/static/description/index.html +++ b/oca_all/static/description/index.html @@ -3,7 +3,7 @@ -OCA All +README.rst -
-

OCA All

+
+ + +Odoo Community Association + +
+

OCA All

-

Alpha License: AGPL-3 OCA/oca-custom Translate me on Weblate Try me on Runboat

+

Alpha License: AGPL-3 OCA/oca-custom Translate me on Weblate Try me on Runboat

OCA’s Odoo instance’s dependencies.

Installing this module will create an instance likes the one used to manage the OCA association.

@@ -391,7 +396,7 @@

OCA All

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed @@ -399,15 +404,15 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -422,5 +427,6 @@

Maintainers

+
From 5d58e430c008c7d200ae98362c7dbcd028eb2815 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 22 Jul 2025 07:11:28 +0000 Subject: [PATCH 16/45] [ADD] icon.png --- oca_all/static/description/icon.png | Bin 0 -> 10254 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 oca_all/static/description/icon.png diff --git a/oca_all/static/description/icon.png b/oca_all/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1dcc49c24f364e9adf0afbc6fc0bac6dbecdeb11 GIT binary patch literal 10254 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 Date: Tue, 22 Jul 2025 07:18:46 +0000 Subject: [PATCH 17/45] [UPD] Update oca_all.pot --- oca_all/i18n/oca_all.pot | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 oca_all/i18n/oca_all.pot diff --git a/oca_all/i18n/oca_all.pot b/oca_all/i18n/oca_all.pot new file mode 100644 index 0000000..4d8b20f --- /dev/null +++ b/oca_all/i18n/oca_all.pot @@ -0,0 +1,13 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" From 7ae3ddcae7f1db5beb1d0d8a050db779218d47e9 Mon Sep 17 00:00:00 2001 From: Alessandro Uffreduzzi Date: Mon, 15 Sep 2025 10:35:35 +0200 Subject: [PATCH 18/45] [IMP] oca_all: add base_deterministic_session_gc The module makes session garbage collection deterministic To use the module, it needs to be added to the server_wide_modules conf options Another option should also be added to set gc for all sessions older than 3 days ;3 days = 60*60*24*3 seconds session_expiry_delay = 259200 --- oca_all/README.rst | 6 +----- oca_all/__manifest__.py | 1 + oca_all/static/description/index.html | 22 ++++++++-------------- 3 files changed, 10 insertions(+), 19 deletions(-) diff --git a/oca_all/README.rst b/oca_all/README.rst index 0df5110..f29086a 100644 --- a/oca_all/README.rst +++ b/oca_all/README.rst @@ -1,7 +1,3 @@ -.. image:: https://odoo-community.org/readme-banner-image - :target: https://odoo-community.org/get-involved?utm_source=readme - :alt: Odoo Community Association - ======= OCA All ======= @@ -17,7 +13,7 @@ OCA All .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png :target: https://odoo-community.org/page/development-status :alt: Alpha -.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Foca--custom-lightgray.png?logo=github diff --git a/oca_all/__manifest__.py b/oca_all/__manifest__.py index 5cc600f..941d180 100644 --- a/oca_all/__manifest__.py +++ b/oca_all/__manifest__.py @@ -142,6 +142,7 @@ "account_tax_unece", "apps_download", "apps_product_creator", + "base_deterministic_session_gc", "base_technical_features", "base_ubl", "base_ubl_payment", diff --git a/oca_all/static/description/index.html b/oca_all/static/description/index.html index 94217b6..d2756a8 100644 --- a/oca_all/static/description/index.html +++ b/oca_all/static/description/index.html @@ -3,7 +3,7 @@ -README.rst +OCA All -
+
+

OCA All

- - -Odoo Community Association - -
-

OCA All

-

Alpha License: AGPL-3 OCA/oca-custom Translate me on Weblate Try me on Runboat

+

Alpha License: AGPL-3 OCA/oca-custom Translate me on Weblate Try me on Runboat

OCA’s Odoo instance’s dependencies.

Installing this module will create an instance likes the one used to manage the OCA association.

@@ -396,7 +391,7 @@

OCA All

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed @@ -404,15 +399,15 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -427,6 +422,5 @@

Maintainers

-
From 1573a7c39c865dd021d0498a978099605af7580f Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 9 Oct 2025 12:51:54 +0000 Subject: [PATCH 19/45] [UPD] README.rst --- oca_all/README.rst | 8 ++++++-- oca_all/static/description/index.html | 24 +++++++++++++++--------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/oca_all/README.rst b/oca_all/README.rst index f29086a..aa0d187 100644 --- a/oca_all/README.rst +++ b/oca_all/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + ======= OCA All ======= @@ -7,13 +11,13 @@ OCA All !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:5db7643cb0b23b0001c3d0bca16493b1ac9f994770781f068ca96608261011d4 + !! source digest: sha256:c01e92c4aeb056ad41dd24d57aedfa0ae9e8bce10cd2674c930789fa113d0acb !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png :target: https://odoo-community.org/page/development-status :alt: Alpha -.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Foca--custom-lightgray.png?logo=github diff --git a/oca_all/static/description/index.html b/oca_all/static/description/index.html index d2756a8..ee8f401 100644 --- a/oca_all/static/description/index.html +++ b/oca_all/static/description/index.html @@ -3,7 +3,7 @@ -OCA All +README.rst -
-

OCA All

+
+ + +Odoo Community Association + +
+

OCA All

-

Alpha License: AGPL-3 OCA/oca-custom Translate me on Weblate Try me on Runboat

+

Alpha License: AGPL-3 OCA/oca-custom Translate me on Weblate Try me on Runboat

OCA’s Odoo instance’s dependencies.

Installing this module will create an instance likes the one used to manage the OCA association.

@@ -391,7 +396,7 @@

OCA All

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed @@ -399,15 +404,15 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -422,5 +427,6 @@

Maintainers

+
From 22bf88afa3a9a9c5cad388d3ab11b9e615a18b96 Mon Sep 17 00:00:00 2001 From: Pierre Verkest Date: Mon, 17 Mar 2025 16:46:01 +0100 Subject: [PATCH 20/45] [IMP] OCA's Odoo: odoo-community.org development/release MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add contribute tools in order to develop and release docker images for https://odoo-community.org using Acsonne toolsets likes hatch-odoo, odoo-bedrock... This helps to quickly create a locale environement close to what is installed on our production instance. Use following unreleased code: * odoo14-addon-membership-delegated-partner-line from OCA/vertical-association/pull/151 * odoo from OCA/OCB/pull/1299 Co-authored-by: Stéphane Bidoul Co-authored-by: Holger Brunn --- pyproject.toml | 110 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 pyproject.toml diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..fef2051 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,110 @@ +[build-system] +requires = ["hatchling", "hatch-odoo"] +build-backend = "hatchling.build" + + +[project] +name = "oca-custom" +version = "14.0" +description = "Odoo by OCA" +# readme = "README.md" +requires-python = "==3.9.*" +dynamic = ["dependencies"] + +[tool.hatch.build] +packages = ["./"] + +# Enable the hatch-odoo metadata hook to generate dependencies from addons manifests. +[tool.hatch.metadata.hooks.odoo-addons-dependencies] +# Enable the hatch-odoo build hook to locate the Odoo addons and package them in odoo/addons. +# if not provided, "locals" modules (those in './') are not found and cannot be installed... +[tool.hatch.build.hooks.odoo-addons-dirs] + +[tool.hatch-odoo] +# dependencies that are not in the addons manifest +dependencies = [ + "odoo==14.0.*", + # indirect unrealeased dependencies + "odoo-addons-design-themes==14.0.*", + # Add some constraints to Odoo deps that should be in their setup.py + "Babel==2.9.1", + "chardet==3.0.4", + "decorator==4.3.0", + "docutils==0.14", + "ebaysdk==2.1.5", + "freezegun==0.3.15", + "gevent==20.9.0 ", + # gevent==21.8.0 ", + "greenlet==1.1.2", + "idna==2.6", + "Jinja2==2.11.2", + "libsass>=0.18.0", + "lxml==4.6.5", + "Mako==1.0.7", + "MarkupSafe==1.1.0", + "num2words==0.5.6", + "ofxparse==0.19", + # ofxparse==0.21", + "passlib==1.7.1", + "Pillow==8.1.1", + "polib==1.1.0", + "psutil==5.6.6", + "psycopg2==2.9.10", + "pydot==1.4.1", + "PyPDF2==1.26.0", + "pyserial==3.4", + "python-dateutil==2.7.3", + "pytz", + "qrcode==6.1", + "reportlab==3.5.55", + "requests==2.21.0", + # requests==2.25.1; python_version > '3.9' # (Jammy) versions < 2.25 aren't compatible w/ urllib3 1.26. Bullseye = 2.25.1. min version = 2.22.0 (Focal)", + # urllib3==1.26.5; python_version > '3.9' # (Jammy) indirect / min version = 1.25.8 (Focal with security backports)", + "zeep==3.2.0", + "python-stdnum==1.8", + "vobject==0.9.6.1", + "Werkzeug==0.16.1 ", + # Werkzeug==2.0.2 ; python_version > '3.9' # (Jammy)", + "XlsxWriter==1.1.2", + "xlwt==1.3.*", + "xlrd==1.2.0", + # TODO: add constraints in github connector module + "PyGithub<2.0.0", + "click-odoo-contrib", +] +addons_dirs = ["./"] + +[tool.uv] +# On OCA 14.0 series translations commits are realeased +# in pre-release state +prerelease = "allow" +# tell uv when dependencies may change +cache-keys = [{ file = "pyproject.toml" }, { file = "**/__manifest__.py" }] + +dev-dependencies = [ + "parameterized>=0.9.0", + "pytest>8", + "pytest-odoo>=2", + "pytest-cov>=5.0.0", + "pytest-xdist>=3.6.1", + "manifestoo>=1.0", + "odoo-test-helper", + "websocket-client", +] + + +[tool.uv.sources] +# Use fix updating account move line update membership line +odoo = { git = "https://github.com/OCA/OCB", rev = "refs/pull/1299/head" } + +# unreleased dependency, add it to test-requirements.txt to let the +# test pipeline to use it as well +odoo-addons-design-themes = { git = "https://github.com/acsone/design-themes", branch = "14.0-with-pyproject" } +odoo14-addon-membership-delegated-partner-line = { git = "https://github.com/OCA/vertical-association", rev = "refs/pull/151/head", subdirectory = "setup/membership_delegated_partner_line" } + +# Example to develop module from an other repository +# installing in editable mode +# odoo14-addon-membership-delegated-partner-line = { path = "src/vertical-association/setup/membership_delegated_partner_line", editable = true } + +[tool.pytest] +addopts = "-v -s --cov-report term-missing" From 4c3e1fbfc049cf1909dbde44c450ae5d66a10388 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul?= Date: Mon, 9 Jun 2025 17:20:52 +0200 Subject: [PATCH 21/45] Use standard mechanism to declare dev dependencies --- pyproject.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index fef2051..f675d55 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -81,7 +81,8 @@ prerelease = "allow" # tell uv when dependencies may change cache-keys = [{ file = "pyproject.toml" }, { file = "**/__manifest__.py" }] -dev-dependencies = [ +[dependency-groups] +dev = [ "parameterized>=0.9.0", "pytest>8", "pytest-odoo>=2", From 0c84d8d99a74b72988e979459681bd33ca644afa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul?= Date: Mon, 9 Jun 2025 17:52:54 +0200 Subject: [PATCH 22/45] Add openupgradelib It's necessary to run, e.g. github_connector migrations --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index f675d55..8324807 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -71,6 +71,7 @@ dependencies = [ # TODO: add constraints in github connector module "PyGithub<2.0.0", "click-odoo-contrib", + "openupgradelib", ] addons_dirs = ["./"] From bb8c5688a51a0e314ff802b7d7d12304b6c56fc0 Mon Sep 17 00:00:00 2001 From: Pierre Verkest Date: Wed, 18 Jun 2025 16:12:09 +0200 Subject: [PATCH 23/45] freeze pytest version waiting for https://github.com/camptocamp/pytest-odoo/pull/85 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 8324807..28e16d7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -86,7 +86,7 @@ cache-keys = [{ file = "pyproject.toml" }, { file = "**/__manifest__.py" }] dev = [ "parameterized>=0.9.0", "pytest>8", - "pytest-odoo>=2", + "pytest-odoo==2.1.2", "pytest-cov>=5.0.0", "pytest-xdist>=3.6.1", "manifestoo>=1.0", From 83fac76a0c1fd50c324427c1ec9b0df07b9d6739 Mon Sep 17 00:00:00 2001 From: Pierre Verkest Date: Thu, 3 Jul 2025 22:40:42 +0200 Subject: [PATCH 24/45] Add missing depenencies likes in production --- pyproject.toml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 28e16d7..3fb32fd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,7 +34,6 @@ dependencies = [ "ebaysdk==2.1.5", "freezegun==0.3.15", "gevent==20.9.0 ", - # gevent==21.8.0 ", "greenlet==1.1.2", "idna==2.6", "Jinja2==2.11.2", @@ -44,8 +43,8 @@ dependencies = [ "MarkupSafe==1.1.0", "num2words==0.5.6", "ofxparse==0.19", - # ofxparse==0.21", "passlib==1.7.1", + "pdfminer.six==20211012", "Pillow==8.1.1", "polib==1.1.0", "psutil==5.6.6", From 0827a3f74559c48849fb5f7bd14bd47e675e2d8d Mon Sep 17 00:00:00 2001 From: Pierre Verkest Date: Mon, 21 Jul 2025 10:17:01 +0200 Subject: [PATCH 25/45] integrate account_statement_import_online_wise Tom's fix using foreing currency --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 3fb32fd..38264a2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -102,6 +102,7 @@ odoo = { git = "https://github.com/OCA/OCB", rev = "refs/pull/1299/head" } # test pipeline to use it as well odoo-addons-design-themes = { git = "https://github.com/acsone/design-themes", branch = "14.0-with-pyproject" } odoo14-addon-membership-delegated-partner-line = { git = "https://github.com/OCA/vertical-association", rev = "refs/pull/151/head", subdirectory = "setup/membership_delegated_partner_line" } +odoo14-addon-account_statement_import_online_wise = { git = "https://github.com/OCA/bank-statement-import", rev = "refs/pull/816/head", subdirectory = "setup/account_statement_import_online_wise" } # Example to develop module from an other repository # installing in editable mode From 8e599faa5a263cadc1414ed8005ced18c3a5d3eb Mon Sep 17 00:00:00 2001 From: Pierre Verkest Date: Thu, 28 Aug 2025 16:09:08 +0200 Subject: [PATCH 26/45] [REF] add locust benchmark and bump website_apps_store the refactor avoid useless SQL requests --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 38264a2..b6bb271 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -103,6 +103,7 @@ odoo = { git = "https://github.com/OCA/OCB", rev = "refs/pull/1299/head" } odoo-addons-design-themes = { git = "https://github.com/acsone/design-themes", branch = "14.0-with-pyproject" } odoo14-addon-membership-delegated-partner-line = { git = "https://github.com/OCA/vertical-association", rev = "refs/pull/151/head", subdirectory = "setup/membership_delegated_partner_line" } odoo14-addon-account_statement_import_online_wise = { git = "https://github.com/OCA/bank-statement-import", rev = "refs/pull/816/head", subdirectory = "setup/account_statement_import_online_wise" } +odoo14-addon-website-apps-store = { git = "https://github.com/OCA/apps-store", rev = "refs/pull/96/head", subdirectory = "setup/website_apps_store" } # Example to develop module from an other repository # installing in editable mode From a537838b9b07b87f9858c6cce2e1f5e3f22219a7 Mon Sep 17 00:00:00 2001 From: Tom Date: Thu, 9 Oct 2025 14:39:37 +0200 Subject: [PATCH 27/45] [UPD] remove merged OCA branches and update module versions to the merged ones --- pyproject.toml | 2 -- 1 file changed, 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index b6bb271..16724db 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -101,8 +101,6 @@ odoo = { git = "https://github.com/OCA/OCB", rev = "refs/pull/1299/head" } # unreleased dependency, add it to test-requirements.txt to let the # test pipeline to use it as well odoo-addons-design-themes = { git = "https://github.com/acsone/design-themes", branch = "14.0-with-pyproject" } -odoo14-addon-membership-delegated-partner-line = { git = "https://github.com/OCA/vertical-association", rev = "refs/pull/151/head", subdirectory = "setup/membership_delegated_partner_line" } -odoo14-addon-account_statement_import_online_wise = { git = "https://github.com/OCA/bank-statement-import", rev = "refs/pull/816/head", subdirectory = "setup/account_statement_import_online_wise" } odoo14-addon-website-apps-store = { git = "https://github.com/OCA/apps-store", rev = "refs/pull/96/head", subdirectory = "setup/website_apps_store" } # Example to develop module from an other repository From 7bdb1195aa06f563f610f34277bfd393ba55cc68 Mon Sep 17 00:00:00 2001 From: Tom Date: Sat, 10 Jan 2026 17:34:31 +0100 Subject: [PATCH 28/45] [ADD] Contributors docs --- CONTRIBUTING.md | 139 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..c3a1c77 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,139 @@ +# Contribute to the OCA's Odoo instance + +This guide aims to help happy volunteers to contribute to the OCA's Odoo instance. I +suppose mainly the OCA's Internal Tools team. + +It's split into 3 sections: + +- [Concepts](#concepts): Main concepts to understand and general organization +- [Processes](#processes): Helping doing the work without missing crucial steps +- [HowTos](#howto): How to do specific tasks + +## Concepts + +This repository is setup as other OCA's repositories to launch CI as usual and as an +extra configuration in order to build the OCA' Docker image used by our Odoo instance, +as well as facilitate the bootstrapping of a development environment. + +Managing and freezing modules versions rely on python tools: + +- [uv](https://docs.astral.sh/uv/) +- [hatch-odoo](https://pypi.org/project/hatch-odoo/) + +## Processes + +Here we focus on what to do without explaining how to do it. + +### Release + +While we are building and publishing a docker image the current state is that the image +is build at deploy time on OCA server. + +While technically speaking there is nothing more than accessing to a public commit to +deploy a new version it's a common practice to merge your work on branch 14.0 before +deploying a new version in production. + +> **Note**: in this repository we allow unreleased dependencies. + +### deployment + +Ask administrator to deploy the given commit. + +## HowTos + +Here we focus on how to do it, it's a suggest way to works but feel free to use your own +way. + +### Setup developer environment + +Requirements: + +- Postgresql +- [uv](https://docs.astral.sh/uv/) +- Some dependencies to be able to build some python packages: `libpq-dev`, + `build-essential`, TODO +- wkhtmltopdf + +Prepare a python virtual environment with the correct python version (which uv will +download for you if necessary) and install the required dependencies: + +```bash +uv sync +``` + +### Neutralize database + +If you are allow to access to a production database, neutralization happens while +stating the Docker container if the running environnement is not the production server. + +On development, if your are not using docker you can running neutralize scripts such as: + +```bash + find entrypoints/neutralize/*.sql -type f -exec psql -f {} \; +``` + +### Development + +For addons living in this repository, you can just change code and restart Odoo with the +`uv run` command. + +For addons in other repositories, the procedure is as follows: + +- check out the repository somewhere, ie /src/\$repo +- add the following line to `pyproject.toml` in the `[tool.uv.sources]` section: + + ```pyproject + odoo14-addon-$youraddon = { path = "/srv/$repo/setup/$youraddon", editable = true } + ``` + +- run `uv sync` +- restart Odoo + +### use unreleased dependency + +There is two different goals: + +- making the test CI pass: using regular test-requirements.txt files add a line such as + + ``` + odoo14-addon-membership-delegated-partner-line @ git+https://github.com/OCA/vertical-association@refs/pull/151/head#subdirectory=setup/membership_delegated_partner_line + ``` + +- bring the unreleased dependency in the uv project (and the built docker image), add + the following line to `pyproject.toml` in the `[tool.uv.sources]` section: + + ```pyproject + odoo14-addon-membership-delegated-partner-line = { git = "https://github.com/OCA/vertical-association", rev = "refs/pull/151/head", subdirectory = "setup/membership_delegated_partner_line" } + ``` + +### Setup database and launch tests + +- setup database with demo data and all oca modules installed + +```bash +uv run odoo -d oca-custom -i oca_all --stop-after-init --without-demo= +``` + +- run tests using pytest launcher + +```bash +uv run pytest --odoo-database oca-custom --cov ./oca_psc_team/ oca_psc_team/ +``` + +### Update OCB Branch + +```bash +uv sync -P odoo +``` + +### Update a specific OCA module dependency using the latest pypi release + +```bash +uv sync -P odoo14-addon- +``` + +### Bump all dependencies to the latest version + +```bash +uv sync -U +``` From e2e16071b3c9d3de6b2434e4ead043450cc370e2 Mon Sep 17 00:00:00 2001 From: Arnaud LAYEC Date: Fri, 14 Nov 2025 16:34:26 +0100 Subject: [PATCH 29/45] [14.0][IMP] Kickstarter-page: update CONTRIBUTING.md #67 --- CONTRIBUTING.md | 160 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 130 insertions(+), 30 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c3a1c77..7de47bc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,15 +1,46 @@ -# Contribute to the OCA's Odoo instance +# Contribute to the OCA's Odoo instance (kick-starter guide) -This guide aims to help happy volunteers to contribute to the OCA's Odoo instance. I -suppose mainly the OCA's Internal Tools team. +This one-pager guide aims to help happy volunteers to contribute to the OCA's Odoo +instance, supposedly the OCA's Internal Tools team. -It's split into 3 sections: +## Table of content -- [Concepts](#concepts): Main concepts to understand and general organization -- [Processes](#processes): Helping doing the work without missing crucial steps -- [HowTos](#howto): How to do specific tasks +1. [Introduction](#introduction): who we are, how we work +2. [Getting Started](#getting-started) + - [Concepts](#concepts): main concepts to understand and general organization + - [Processes](#processes): helping doing the work without missing crucial steps + - [How-Tos](#how-tos): how to do specific tasks +3. [FAQ](#FAQ) -## Concepts +## Introduction + +This repository is managed by OCA's Internal Tools team: + +- email: [internaltools@odoo-community.org](mailto:internaltools@odoo-community.org) +- [Github team page](https://github.com/orgs/OCA/teams/internal-tools) +- [Github project Kanban](https://github.com/orgs/OCA/projects/13) + +Please refer to the document +[Scope & Objective](https://docs.google.com/document/d/1RcOUstPJDev1bgPZcNXWiHBt5PeqraisU5bKIZatcnY/edit?pli=1&tab=t.0#heading=h.jrsgv4k2u2ao) +to understand the governance and missions of the Internal Tools team within the OCA. +Under the watch of OCA board, this document mainly explains: + +- The "Raison d'être" of the Internal Tools group +- Tasks and responsabilities +- Autonomy scope +- How to become part of the group +- Internal governances (leaders & members) +- Useful processes to start working in the group + +## Getting Started + +This section will guide you to: + +1. Build a test environment on a developer's machine, replicating OCA's Odoo production + instance +2. Push a change in production to OCA's Odoo production instance + +### Concepts This repository is setup as other OCA's repositories to launch CI as usual and as an extra configuration in order to build the OCA' Docker image used by our Odoo instance, @@ -20,7 +51,7 @@ Managing and freezing modules versions rely on python tools: - [uv](https://docs.astral.sh/uv/) - [hatch-odoo](https://pypi.org/project/hatch-odoo/) -## Processes +### Processes Here we focus on what to do without explaining how to do it. @@ -35,33 +66,49 @@ deploying a new version in production. > **Note**: in this repository we allow unreleased dependencies. -### deployment +#### Deployment Ask administrator to deploy the given commit. -## HowTos +### How-Tos Here we focus on how to do it, it's a suggest way to works but feel free to use your own way. -### Setup developer environment +#### Setup developer environment Requirements: +- **uv**: several methods exist to install it, one can be + `curl -LsSf https://astral.sh/uv/install.sh | sh`. It will install other + prerequisites. - Postgresql -- [uv](https://docs.astral.sh/uv/) - Some dependencies to be able to build some python packages: `libpq-dev`, - `build-essential`, TODO + `build-essential`, ... - wkhtmltopdf -Prepare a python virtual environment with the correct python version (which uv will -download for you if necessary) and install the required dependencies: +Run the following commands to prepare a python virtual environment with the correct +python version (which uv will download for you if necessary) and install the required +dependencies: ```bash +git clone git@github.com:OCA/oca-custom -branch 14.0 +cd oca-custom uv sync ``` -### Neutralize database +#### Setup database + +Setup database with demo data and all OCA modules installed: + +```bash +uv run odoo -d oca-custom -i oca_all --stop-after-init --without-demo= +``` + +The `oca_all` module contains the `__manifest__.py` with all Odoo modules dependencies +for the OCA Odoo instance. + +#### Neutralize database If you are allow to access to a production database, neutralization happens while stating the Docker container if the running environnement is not the production server. @@ -72,7 +119,7 @@ On development, if your are not using docker you can running neutralize scripts find entrypoints/neutralize/*.sql -type f -exec psql -f {} \; ``` -### Development +#### Development For addons living in this repository, you can just change code and restart Odoo with the `uv run` command. @@ -89,7 +136,7 @@ For addons in other repositories, the procedure is as follows: - run `uv sync` - restart Odoo -### use unreleased dependency +#### Use unreleased dependency There is two different goals: @@ -106,34 +153,87 @@ There is two different goals: odoo14-addon-membership-delegated-partner-line = { git = "https://github.com/OCA/vertical-association", rev = "refs/pull/151/head", subdirectory = "setup/membership_delegated_partner_line" } ``` -### Setup database and launch tests - -- setup database with demo data and all oca modules installed - -```bash -uv run odoo -d oca-custom -i oca_all --stop-after-init --without-demo= -``` +#### Launch tests -- run tests using pytest launcher +Run tests using pytest launcher. ```bash uv run pytest --odoo-database oca-custom --cov ./oca_psc_team/ oca_psc_team/ ``` -### Update OCB Branch +#### Update OCB Branch ```bash uv sync -P odoo ``` -### Update a specific OCA module dependency using the latest pypi release +#### Update a specific OCA module dependency using the latest pypi release ```bash uv sync -P odoo14-addon- ``` -### Bump all dependencies to the latest version +Note bug https://github.com/astral-sh/uv/issues/14684, that says if multiple packages +are sourced from the same branch/PR, we need to specify both of them as to upgrade, +otherwise they don't get rescanned. + +#### Bump all dependencies to the latest version ```bash uv sync -U ``` + +## FAQ + +#### How can I start contributing in OCA toolings? + +- Get to know the manifest document of OCA's Internal Tools team: + [Scope & Objective](https://docs.google.com/document/d/1RcOUstPJDev1bgPZcNXWiHBt5PeqraisU5bKIZatcnY/edit?pli=1&tab=t.0#heading=h.jrsgv4k2u2ao). +- Write to us at + [internaltools@odoo-community.org](mailto:internaltools@odoo-community.org). +- Install a test environment on your machine of the OCA's Odoo instance by following the + [§ Getting Started](#getting-started). + +#### How to communicate with the OCA Internal Tools? + +Our main communication channel is the mailing list +[internaltools@odoo-community.org](mailto:internaltools@odoo-community.org). For +task-related discussion, also directly use the Chatter of the Odoo tasks. + +#### Where is the tasks backlog of the OCA Internal Tools? + +We use the Odoo project **OCA internal tools workgroup** on the OCA's Odoo instance to +organize our tasks and priorities. A public access to the project can be provided to OCA +members who contributes to the tooling tasks (not requesting privacy form signing). + +#### How to access the backend of OCA's Odoo instance? + +It can be useful to access Odoo back-end for both task management and browse instance's +modules and data. For such, prerquisites are: + +- being a member of the OCA and the **OCA Internal Tools group** +- be registered on OCA's Odoo instance +- fullfil and send back the **Data protection & privacy** form, available on OCA website + [Resources / How to guides / Protect data & privacy when you support OCA projects](https://odoo-community.org/privacy) + +#### What are useful Github repositories? + +- The current **oca-custom** is the main repository. It contains both all Odoo modules + dependencies of OCA instance in `oca_all/__manifest__.py` and all configuration to + build an Odoo test instance the `uv`, as described in + [Getting Started](#getting-started). +- [**apps-store**](https://github.com/OCA/apps-store/tree/14.0) holds mechanisms of OCA + modules replication to official Odoo's App Store + +#### How to get representive data, for troubleshooting and test? + +Contact the mailing list to get a neutralized and anonymized database. + +#### How to gain command line access and read logs? + +Only a few people have admin server access, please reach the mailing list for further +details. + +#### How to refresh test instance from production instances (on the server)? + +`home/odoo/instance/README` gives some guidance. From 0cd54107fbbf0afd2da51f7a02a463d0c2ffa42c Mon Sep 17 00:00:00 2001 From: Dan Kiplangat Date: Fri, 7 Nov 2025 11:08:37 +0300 Subject: [PATCH 30/45] [MIG] [18.0] oca_custom --- oca_custom/README.rst | 34 ++++++++++--------- oca_custom/__manifest__.py | 2 +- oca_custom/pyproject.toml | 3 ++ oca_custom/readme/CONTRIBUTORS.md | 12 +++++++ oca_custom/readme/CONTRIBUTORS.rst | 10 ------ .../{DESCRIPTION.rst => DESCRIPTION.md} | 0 oca_custom/static/description/index.html | 18 +++++----- oca_custom/views/res_partner.xml | 4 +-- 8 files changed, 46 insertions(+), 37 deletions(-) create mode 100644 oca_custom/pyproject.toml create mode 100644 oca_custom/readme/CONTRIBUTORS.md delete mode 100644 oca_custom/readme/CONTRIBUTORS.rst rename oca_custom/readme/{DESCRIPTION.rst => DESCRIPTION.md} (100%) diff --git a/oca_custom/README.rst b/oca_custom/README.rst index a08c17f..fe39545 100644 --- a/oca_custom/README.rst +++ b/oca_custom/README.rst @@ -17,13 +17,13 @@ OCA Custom Settings :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Foca--custom-lightgray.png?logo=github - :target: https://github.com/OCA/oca-custom/tree/14.0/oca_custom + :target: https://github.com/OCA/oca-custom/tree/18.0/oca_custom :alt: OCA/oca-custom .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/oca-custom-14-0/oca-custom-14-0-oca_custom + :target: https://translation.odoo-community.org/projects/oca-custom-18-0/oca-custom-18-0-oca_custom :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/oca-custom&target_branch=14.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/oca-custom&target_branch=18.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -41,7 +41,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -49,27 +49,29 @@ Credits ======= Authors -~~~~~~~ +------- * GRAP * Akretion Contributors -~~~~~~~~~~~~ +------------ -* Sylvain LE GAL (https://twitter.com/legalsylvain) -* Benoit GUILLOT (benoit.guillot@akretion.com) -* Stéphane Bidoul (stephane.bidoul@acsone.eu) +- Sylvain LE GAL (https://twitter.com/legalsylvain) -* `Tecnativa `_: +- Benoit GUILLOT (benoit.guillot@akretion.com) - * Vicent Cubells - * Cristina Martin R. - * Carlos Roca - * Ernesto Tejeda +- Stéphane Bidoul (stephane.bidoul@acsone.eu) + +- `Tecnativa `__: + + - Vicent Cubells + - Cristina Martin R. + - Carlos Roca + - Ernesto Tejeda Maintainers -~~~~~~~~~~~ +----------- This module is maintained by the OCA. @@ -81,6 +83,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/oca-custom `_ project on GitHub. +This module is part of the `OCA/oca-custom `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/oca_custom/__manifest__.py b/oca_custom/__manifest__.py index a95a01b..01ef24f 100644 --- a/oca_custom/__manifest__.py +++ b/oca_custom/__manifest__.py @@ -4,7 +4,7 @@ { "name": "OCA Custom Settings", "summary": "Custom Settings for OCA Instance", - "version": "14.0.1.0.0", + "version": "18.0.1.0.0", "category": "Custom", "website": "https://github.com/OCA/oca-custom", "author": "GRAP, Akretion, Odoo Community Association (OCA)", diff --git a/oca_custom/pyproject.toml b/oca_custom/pyproject.toml new file mode 100644 index 0000000..4231d0c --- /dev/null +++ b/oca_custom/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/oca_custom/readme/CONTRIBUTORS.md b/oca_custom/readme/CONTRIBUTORS.md new file mode 100644 index 0000000..adbe09e --- /dev/null +++ b/oca_custom/readme/CONTRIBUTORS.md @@ -0,0 +1,12 @@ +- Sylvain LE GAL () + +- Benoit GUILLOT () + +- Stéphane Bidoul () + +- [Tecnativa](https://www.tecnativa.com): + + > - Vicent Cubells + > - Cristina Martin R. + > - Carlos Roca + > - Ernesto Tejeda diff --git a/oca_custom/readme/CONTRIBUTORS.rst b/oca_custom/readme/CONTRIBUTORS.rst deleted file mode 100644 index e4e36db..0000000 --- a/oca_custom/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1,10 +0,0 @@ -* Sylvain LE GAL (https://twitter.com/legalsylvain) -* Benoit GUILLOT (benoit.guillot@akretion.com) -* Stéphane Bidoul (stephane.bidoul@acsone.eu) - -* `Tecnativa `_: - - * Vicent Cubells - * Cristina Martin R. - * Carlos Roca - * Ernesto Tejeda diff --git a/oca_custom/readme/DESCRIPTION.rst b/oca_custom/readme/DESCRIPTION.md similarity index 100% rename from oca_custom/readme/DESCRIPTION.rst rename to oca_custom/readme/DESCRIPTION.md diff --git a/oca_custom/static/description/index.html b/oca_custom/static/description/index.html index 1ab8050..0189821 100644 --- a/oca_custom/static/description/index.html +++ b/oca_custom/static/description/index.html @@ -1,4 +1,3 @@ - @@ -9,10 +8,11 @@ /* :Author: David Goodger (goodger@python.org) -:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $ +:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. +Despite the name, some widely supported CSS2 features are used. See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to customize this style sheet. @@ -275,7 +275,7 @@ margin-left: 2em ; margin-right: 2em } -pre.code .ln { color: grey; } /* line numbers */ +pre.code .ln { color: gray; } /* line numbers */ pre.code, code { background-color: #eeeeee } pre.code .comment, code .comment { color: #5C6576 } pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } @@ -301,7 +301,7 @@ span.pre { white-space: pre } -span.problematic { +span.problematic, pre.problematic { color: red } span.section-subtitle { @@ -369,7 +369,7 @@

OCA Custom Settings

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:df0c7349e335de7ace652da62cd7743b27d7dc72eaec3da78766ff7f5fa0db54 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/oca-custom Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/oca-custom Translate me on Weblate Try me on Runboat

Custom module for OCA Instance.

Table of contents

@@ -388,7 +388,7 @@

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -424,11 +424,13 @@

Contributors

Maintainers

This module is maintained by the OCA.

-Odoo Community Association + +Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

-

This module is part of the OCA/oca-custom project on GitHub.

+

This module is part of the OCA/oca-custom project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

diff --git a/oca_custom/views/res_partner.xml b/oca_custom/views/res_partner.xml index 26278f8..ec7ffcc 100644 --- a/oca_custom/views/res_partner.xml +++ b/oca_custom/views/res_partner.xml @@ -1,4 +1,4 @@ - + res.partner.github.visible.form @@ -7,7 +7,7 @@ - + 0 From 25d78a50a903c3871f8049c9e7bcd4be4b0718ec Mon Sep 17 00:00:00 2001 From: Dan Kiplangat Date: Wed, 19 Nov 2025 12:13:50 +0300 Subject: [PATCH 31/45] [18.0][MIG] oca_all --- oca_all/README.rst | 24 ++++------ oca_all/__manifest__.py | 69 ++++++++------------------- oca_all/pyproject.toml | 3 ++ oca_all/readme/DESCRIPTION.md | 4 ++ oca_all/readme/DESCRIPTION.rst | 4 -- oca_all/static/description/index.html | 30 +++++------- 6 files changed, 49 insertions(+), 85 deletions(-) create mode 100644 oca_all/pyproject.toml create mode 100644 oca_all/readme/DESCRIPTION.md delete mode 100644 oca_all/readme/DESCRIPTION.rst diff --git a/oca_all/README.rst b/oca_all/README.rst index aa0d187..0a817c5 100644 --- a/oca_all/README.rst +++ b/oca_all/README.rst @@ -1,7 +1,3 @@ -.. image:: https://odoo-community.org/readme-banner-image - :target: https://odoo-community.org/get-involved?utm_source=readme - :alt: Odoo Community Association - ======= OCA All ======= @@ -17,25 +13,25 @@ OCA All .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png :target: https://odoo-community.org/page/development-status :alt: Alpha -.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Foca--custom-lightgray.png?logo=github - :target: https://github.com/OCA/oca-custom/tree/14.0/oca_all + :target: https://github.com/OCA/oca-custom/tree/18.0/oca_all :alt: OCA/oca-custom .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/oca-custom-14-0/oca-custom-14-0-oca_all + :target: https://translation.odoo-community.org/projects/oca-custom-18-0/oca-custom-18-0-oca_all :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/oca-custom&target_branch=14.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/oca-custom&target_branch=18.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| OCA's Odoo instance's dependencies. -Installing this module will create an instance likes -the one used to manage the OCA association. +Installing this module will create an instance likes the one used to +manage the OCA association. .. IMPORTANT:: This is an alpha version, the data model and design can change at any time without warning. @@ -53,7 +49,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -61,12 +57,12 @@ Credits ======= Authors -~~~~~~~ +------- * Pierre Verkest Maintainers -~~~~~~~~~~~ +----------- This module is maintained by the OCA. @@ -86,6 +82,6 @@ Current `maintainer `__: |maintainer-petrus-v| -This module is part of the `OCA/oca-custom `_ project on GitHub. +This module is part of the `OCA/oca-custom `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/oca_all/__manifest__.py b/oca_all/__manifest__.py index 941d180..672fec5 100644 --- a/oca_all/__manifest__.py +++ b/oca_all/__manifest__.py @@ -3,7 +3,7 @@ { "name": "OCA All", "summary": "All oca modules dependencies", - "version": "14.0.0.0.1", + "version": "18.0.0.0.1", "development_status": "Alpha", "website": "https://github.com/OCA/oca-custom", "author": "Pierre Verkest , Odoo Community Association (OCA)", @@ -15,13 +15,10 @@ # Odoo "account", "account_payment", - "account_statement_import", "analytic", - "association", "attachment_indexation", "auth_oauth", "auth_signup", - "barcodes", "base", "base_automation", "base_geolocalize", @@ -33,24 +30,20 @@ "bus", "calendar", "contacts", - "coupon", "crm", "digest", "event", "event_sale", - "fetchmail", - "fetchmail_gmail", "gamification", - "google_gmail", "google_account", + "google_gmail", "google_recaptcha", "hr", "hr_timesheet", "http_routing", "l10n_ch", - "l10n_multilang", - "l10n_generic_coa", "link_tracker", + "loyalty", "mail", "mail_bot", "mass_mailing", @@ -59,18 +52,14 @@ "mass_mailing_event_track", "mass_mailing_sale", "membership", - "pad", - "pad_project", "payment", "payment_paypal", "payment_stripe", - "payment_transfer", "phone_validation", "point_of_sale", "portal", "portal_rating", "pos_sale", - "procurement_jit", "product", "project", "purchase", @@ -78,7 +67,7 @@ "rating", "resource", "sale", - "sale_coupon", + "sale_loyalty", "sale_crm", "sale_management", "sale_project", @@ -94,7 +83,6 @@ "utm", "web", "web_editor", - "web_kanban_gauge", "web_tour", "web_unsplash", "website", @@ -103,24 +91,19 @@ "website_crm_partner_assign", "website_customer", "website_event", - "website_event_questions", "website_event_sale", "website_event_track", - "website_form", - "website_form_project", "website_google_map", "website_links", "website_mail", - "website_mail_channel", + "website_mail_group", "website_mass_mailing", "website_membership", "website_partner", "website_payment", "website_profile", "website_sale", - "website_sale_coupon", - "website_sale_digital", - "website_sale_management", + "website_sale_loyalty", "website_slides", # OCA "account_banking_pain_base", @@ -128,41 +111,33 @@ "account_credit_control", "account_financial_report", "account_lock_to_date", - "account_menu", "account_payment_mode", "account_payment_order", "account_payment_partner", "account_payment_sale", "account_payment_unece", - "account_reconciliation_widget", + "account_reconcile_oca", "account_statement_import_base", - "account_statement_import_online_wise", - "account_statement_import_paypal", - "account_statement_import_txt_xlsx", + "account_statement_import_file", + # "account_statement_import_online_wise", + "account_statement_import_online_paypal", "account_tax_unece", - "apps_download", - "apps_product_creator", - "base_deterministic_session_gc", + "account_usability", + # "apps_download", + # "apps_product_creator", "base_technical_features", "base_ubl", - "base_ubl_payment", "base_unece", "bi_sql_editor", "currency_rate_update", "date_range", "disable_odoo_online", + "document_knowledge", "document_page", - "event_badge_design", "github_connector", - "github_connector_oca", + # "github_connector_oca", "github_connector_odoo", - "knowledge", - "l10n_ch_base_bank", - "l10n_ch_pain_base", - "l10n_ch_pain_credit_transfer", - "mass_editing", - "mass_operation_abstract", - "membership_delegated_partner_line", + # "membership_delegated_partner_line", "membership_extension", "mis_builder", "mis_builder_budget", @@ -171,24 +146,20 @@ "multi_step_wizard", "partner_statement", "project_task_add_very_high", - "oca_custom", - "oca_psc_team", + # "oca_custom", "partner_contact_access_link", - "project_members", + "project_role", "report_xlsx", "report_xlsx_helper", "sentry", - "survey_xlsx", + "server_action_mass_edit", + # "survey_xlsx", "sql_request_abstract", "uom_unece", - "web_advanced_search", "web_responsive", "web_refresher", "web_search_with_and", "web_widget_dropdown_dynamic", - "website_apps_store", - "website_oca_integrator", - "website_oca_psc_team", ], "installable": True, } diff --git a/oca_all/pyproject.toml b/oca_all/pyproject.toml new file mode 100644 index 0000000..4231d0c --- /dev/null +++ b/oca_all/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/oca_all/readme/DESCRIPTION.md b/oca_all/readme/DESCRIPTION.md new file mode 100644 index 0000000..e69f246 --- /dev/null +++ b/oca_all/readme/DESCRIPTION.md @@ -0,0 +1,4 @@ +OCA's Odoo instance's dependencies. + +Installing this module will create an instance likes the one used to +manage the OCA association. diff --git a/oca_all/readme/DESCRIPTION.rst b/oca_all/readme/DESCRIPTION.rst deleted file mode 100644 index a537aba..0000000 --- a/oca_all/readme/DESCRIPTION.rst +++ /dev/null @@ -1,4 +0,0 @@ -OCA's Odoo instance's dependencies. - -Installing this module will create an instance likes -the one used to manage the OCA association. diff --git a/oca_all/static/description/index.html b/oca_all/static/description/index.html index ee8f401..a6b7e4b 100644 --- a/oca_all/static/description/index.html +++ b/oca_all/static/description/index.html @@ -3,7 +3,7 @@ -README.rst +OCA All -
+
+

OCA All

- - -Odoo Community Association - -
-

OCA All

-

Alpha License: AGPL-3 OCA/oca-custom Translate me on Weblate Try me on Runboat

+

Alpha License: AGPL-3 OCA/oca-custom Translate me on Weblate Try me on Runboat

OCA’s Odoo instance’s dependencies.

-

Installing this module will create an instance likes -the one used to manage the OCA association.

+

Installing this module will create an instance likes the one used to +manage the OCA association.

Important

This is an alpha version, the data model and design can change at any time without warning. @@ -396,23 +391,23 @@

OCA All

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -422,11 +417,10 @@

Maintainers

promote its widespread use.

Current maintainer:

petrus-v

-

This module is part of the OCA/oca-custom project on GitHub.

+

This module is part of the OCA/oca-custom project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

-
From 1e95b23dbce140d68f1e93831579c21546b01111 Mon Sep 17 00:00:00 2001 From: Hussam Suleiman Date: Thu, 8 Jan 2026 17:23:32 +0100 Subject: [PATCH 32/45] [MIG] pyproject.toml 14 to 18 --- oca_all/__manifest__.py | 12 +- pyproject.toml | 102 +- uv.lock | 2175 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 2231 insertions(+), 58 deletions(-) create mode 100644 uv.lock diff --git a/oca_all/__manifest__.py b/oca_all/__manifest__.py index 672fec5..74be070 100644 --- a/oca_all/__manifest__.py +++ b/oca_all/__manifest__.py @@ -119,12 +119,10 @@ "account_reconcile_oca", "account_statement_import_base", "account_statement_import_file", - # "account_statement_import_online_wise", + "account_statement_import_online_wise", "account_statement_import_online_paypal", "account_tax_unece", "account_usability", - # "apps_download", - # "apps_product_creator", "base_technical_features", "base_ubl", "base_unece", @@ -135,9 +133,9 @@ "document_knowledge", "document_page", "github_connector", - # "github_connector_oca", + "github_connector_oca", "github_connector_odoo", - # "membership_delegated_partner_line", + "membership_delegated_partner_line", "membership_extension", "mis_builder", "mis_builder_budget", @@ -146,14 +144,14 @@ "multi_step_wizard", "partner_statement", "project_task_add_very_high", - # "oca_custom", + "oca_custom", "partner_contact_access_link", "project_role", "report_xlsx", "report_xlsx_helper", "sentry", "server_action_mass_edit", - # "survey_xlsx", + "survey_xlsx", "sql_request_abstract", "uom_unece", "web_responsive", diff --git a/pyproject.toml b/pyproject.toml index 16724db..749fb2f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,10 +5,10 @@ build-backend = "hatchling.build" [project] name = "oca-custom" -version = "14.0" +version = "18.0" description = "Odoo by OCA" # readme = "README.md" -requires-python = "==3.9.*" +requires-python = "==3.12.*" dynamic = ["dependencies"] [tool.hatch.build] @@ -23,61 +23,59 @@ packages = ["./"] [tool.hatch-odoo] # dependencies that are not in the addons manifest dependencies = [ - "odoo==14.0.*", + "odoo==18.0.*", # indirect unrealeased dependencies - "odoo-addons-design-themes==14.0.*", + #"odoo-addons-design-themes==18.0.*", # Add some constraints to Odoo deps that should be in their setup.py - "Babel==2.9.1", - "chardet==3.0.4", - "decorator==4.3.0", - "docutils==0.14", - "ebaysdk==2.1.5", - "freezegun==0.3.15", - "gevent==20.9.0 ", - "greenlet==1.1.2", - "idna==2.6", - "Jinja2==2.11.2", - "libsass>=0.18.0", - "lxml==4.6.5", - "Mako==1.0.7", - "MarkupSafe==1.1.0", - "num2words==0.5.6", - "ofxparse==0.19", - "passlib==1.7.1", + "asn1crypto==1.5.1", + "Babel==2.10.3", + "cbor2==5.6.2", + "chardet==5.2.0", + "cryptography==42.0.8", + "decorator==5.1.1", + "docutils==0.20.1", + "freezegun==1.2.1", + "geoip2==2.9.0", + "gevent==24.2.1", + "greenlet==3.0.3", + "idna==3.6", + "Jinja2==3.1.2", + "libsass==0.22.0", + "lxml==5.2.1", + "lxml-html-clean", + "MarkupSafe==2.1.5", + "num2words==0.5.13", + "ofxparse==0.21", + "openpyxl==3.1.2", + "passlib==1.7.4", "pdfminer.six==20211012", - "Pillow==8.1.1", - "polib==1.1.0", - "psutil==5.6.6", - "psycopg2==2.9.10", - "pydot==1.4.1", - "PyPDF2==1.26.0", - "pyserial==3.4", - "python-dateutil==2.7.3", + "Pillow==10.2.0", + "polib==1.1.1", + "psutil==5.9.8", + "psycopg2==2.9.9", + "pyopenssl==24.1.0", + "PyPDF2==2.12.1", + "pyserial==3.5", + "python-dateutil==2.8.2", + "python-ldap==3.4.4", + "python-stdnum==1.19", "pytz", - "qrcode==6.1", - "reportlab==3.5.55", - "requests==2.21.0", - # requests==2.25.1; python_version > '3.9' # (Jammy) versions < 2.25 aren't compatible w/ urllib3 1.26. Bullseye = 2.25.1. min version = 2.22.0 (Focal)", - # urllib3==1.26.5; python_version > '3.9' # (Jammy) indirect / min version = 1.25.8 (Focal with security backports)", - "zeep==3.2.0", - "python-stdnum==1.8", + "pyusb==1.2.1", + "qrcode==7.4.2", + "reportlab==4.1.0", + "requests==2.31.0", + "rjsmin==1.2.0", + "urllib3==2.0.7", "vobject==0.9.6.1", - "Werkzeug==0.16.1 ", - # Werkzeug==2.0.2 ; python_version > '3.9' # (Jammy)", - "XlsxWriter==1.1.2", - "xlwt==1.3.*", - "xlrd==1.2.0", - # TODO: add constraints in github connector module - "PyGithub<2.0.0", - "click-odoo-contrib", - "openupgradelib", + "Werkzeug==3.0.1", + "xlrd==2.0.1", + "XlsxWriter==3.1.9", + "xlwt==1.3.0", + "zeep==4.2.1", ] addons_dirs = ["./"] [tool.uv] -# On OCA 14.0 series translations commits are realeased -# in pre-release state -prerelease = "allow" # tell uv when dependencies may change cache-keys = [{ file = "pyproject.toml" }, { file = "**/__manifest__.py" }] @@ -96,12 +94,14 @@ dev = [ [tool.uv.sources] # Use fix updating account move line update membership line -odoo = { git = "https://github.com/OCA/OCB", rev = "refs/pull/1299/head" } +odoo = { git = "https://github.com/OCA/OCB", rev = "refs/pull/1319/head" } # unreleased dependency, add it to test-requirements.txt to let the # test pipeline to use it as well -odoo-addons-design-themes = { git = "https://github.com/acsone/design-themes", branch = "14.0-with-pyproject" } -odoo14-addon-website-apps-store = { git = "https://github.com/OCA/apps-store", rev = "refs/pull/96/head", subdirectory = "setup/website_apps_store" } +odoo-addon-membership_delegated_partner_line = { git = "https://github.com/gfcapalbo/vertical-association", branch = "18.0-MIG-membership_delegated_partner_line", subdirectory = "membership_delegated_partner_line" } +odoo-addon-github_connector_oca = { git = "https://github.com/Therp/interface-github", branch = "18.0-mig-github_connector_oca", subdirectory = "github_connector_oca" } +odoo-addon-survey_xlsx = { git = "https://github.com/ByteMeAsap/survey", branch = "18.0-mig-survey_xlsx", subdirectory = "survey_xlsx" } +odoo-addon-account_statement_import_online_wise = { git = "https://github.com/Therp/bank-statement-import", branch = "18.0-mig-account-statement-import-online-wise", subdirectory = "account_statement_import_online_wise" } # Example to develop module from an other repository # installing in editable mode diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..9370711 --- /dev/null +++ b/uv.lock @@ -0,0 +1,2175 @@ +version = 1 +revision = 3 +requires-python = "==3.12.*" + +[options] +prerelease-mode = "allow" + +[[package]] +name = "asn1crypto" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/de/cf/d547feed25b5244fcb9392e288ff9fdc3280b10260362fc45d37a798a6ee/asn1crypto-1.5.1.tar.gz", hash = "sha256:13ae38502be632115abf8a24cbe5f4da52e3b5231990aff31123c805306ccb9c", size = 121080, upload-time = "2022-03-15T14:46:52.889Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c9/7f/09065fd9e27da0eda08b4d6897f1c13535066174cc023af248fc2a8d5e5a/asn1crypto-1.5.1-py2.py3-none-any.whl", hash = "sha256:db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67", size = 105045, upload-time = "2022-03-15T14:46:51.055Z" }, +] + +[[package]] +name = "attrs" +version = "25.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6b/5c/685e6633917e101e5dcb62b9dd76946cbb57c26e133bae9e0cd36033c0a9/attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11", size = 934251, upload-time = "2025-10-06T13:54:44.725Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373", size = 67615, upload-time = "2025-10-06T13:54:43.17Z" }, +] + +[[package]] +name = "babel" +version = "2.10.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytz" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/51/27/81e9cf804a34a550a47cc2f0f57fe4935281d479ae3a0ac093d69476f221/Babel-2.10.3.tar.gz", hash = "sha256:7614553711ee97490f732126dc077f8d0ae084ebc6a96e23db1482afabdb2c51", size = 9344140, upload-time = "2022-06-16T06:31:37.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2e/57/a4177e24f8ed700c037e1eca7620097fdfbb1c9b358601e40169adf6d364/Babel-2.10.3-py3-none-any.whl", hash = "sha256:ff56f4892c1c4bf0d814575ea23471c230d544203c7748e8c68f0089478d48eb", size = 9500277, upload-time = "2022-06-16T06:31:20.746Z" }, +] + +[[package]] +name = "beautifulsoup4" +version = "4.14.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "soupsieve" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c3/b0/1c6a16426d389813b48d95e26898aff79abbde42ad353958ad95cc8c9b21/beautifulsoup4-4.14.3.tar.gz", hash = "sha256:6292b1c5186d356bba669ef9f7f051757099565ad9ada5dd630bd9de5fa7fb86", size = 627737, upload-time = "2025-11-30T15:08:26.084Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl", hash = "sha256:0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb", size = 107721, upload-time = "2025-11-30T15:08:24.087Z" }, +] + +[[package]] +name = "cbor2" +version = "5.6.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/39/0d0a29671be102bd0c717c60f9c805b46042ff98d4a63282cfaff3704b45/cbor2-5.6.2.tar.gz", hash = "sha256:b7513c2dea8868991fad7ef8899890ebcf8b199b9b4461c3c11d7ad3aef4820d", size = 100016, upload-time = "2024-02-19T18:40:49.788Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/ca/ec69e8064578caaa0fb4caa9b5933ea79e058571cded610775af219a779b/cbor2-5.6.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:377cfe9d5560c682486faef6d856226abf8b2801d95fa29d4e5d75b1615eb091", size = 68992, upload-time = "2024-02-19T18:40:16.884Z" }, + { url = "https://files.pythonhosted.org/packages/73/2e/9bd994a8c8450a3b1d6205ecdc8fb056dd2bcc07aeb052f689802beb3b43/cbor2-5.6.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fdc564ef2e9228bcd96ec8c6cdaa431a48ab03b3fb8326ead4b3f986330e5b9e", size = 69108, upload-time = "2024-02-19T18:40:18.691Z" }, + { url = "https://files.pythonhosted.org/packages/b8/53/b830d443ee47b41e3b4a50fc9513ff0bb674a52715db52ae353efd0039e7/cbor2-5.6.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d1c0021d9a1f673066de7c8941f71a59abb11909cc355892dda01e79a2b3045", size = 276920, upload-time = "2024-02-19T18:40:20.33Z" }, + { url = "https://files.pythonhosted.org/packages/88/3d/8220bcc08d48a21ebffb98fa7915df4e1ce7772aa24fff9861ad72d164cb/cbor2-5.6.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fde9e704e96751e0729cc58b912d0e77c34387fb6bcceea0817069e8683df45", size = 270841, upload-time = "2024-02-19T18:40:22.611Z" }, + { url = "https://files.pythonhosted.org/packages/06/11/d09064b64e9f7e58499fdff1ca0ccc8fc3cf016d57b9a58e1bb04ac04386/cbor2-5.6.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:30e9ba8f4896726ca61869efacda50b6859aff92162ae5a0e192859664f36c81", size = 288575, upload-time = "2024-02-19T18:40:23.981Z" }, + { url = "https://files.pythonhosted.org/packages/8e/82/8f9993aad33c1fbc78c17d6f90ddee1bab2951a85fef98d071ea0c294eb0/cbor2-5.6.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:211a1e18e65ac71e04434ff5b58bde5c53f85b9c5bc92a3c0e2265089d3034f3", size = 287805, upload-time = "2024-02-19T18:40:25.502Z" }, + { url = "https://files.pythonhosted.org/packages/d7/19/c482dab800bf2427e2855e2c4681763e6f1fafcbe7e1801a408ef03d8039/cbor2-5.6.2-cp312-cp312-win_amd64.whl", hash = "sha256:94981277b4bf448a2754c1f34a9d0055a9d1c5a8d102c933ffe95c80f1085bae", size = 66477, upload-time = "2024-02-19T18:40:27.209Z" }, + { url = "https://files.pythonhosted.org/packages/dc/0b/de1e946825ae5cd23951a9cd730f25408c0a531194e1fa729b7ebdcec73e/cbor2-5.6.2-py3-none-any.whl", hash = "sha256:c0b53a65673550fde483724ff683753f49462d392d45d7b6576364b39e76e54c", size = 23757, upload-time = "2024-02-19T18:40:48.637Z" }, +] + +[[package]] +name = "certifi" +version = "2026.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/2d/a891ca51311197f6ad14a7ef42e2399f36cf2f9bd44752b3dc4eab60fdc5/certifi-2026.1.4.tar.gz", hash = "sha256:ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120", size = 154268, upload-time = "2026-01-04T02:42:41.825Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl", hash = "sha256:9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c", size = 152900, upload-time = "2026-01-04T02:42:40.15Z" }, +] + +[[package]] +name = "cffi" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271, upload-time = "2025-09-08T23:22:44.795Z" }, + { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048, upload-time = "2025-09-08T23:22:45.938Z" }, + { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529, upload-time = "2025-09-08T23:22:47.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097, upload-time = "2025-09-08T23:22:48.677Z" }, + { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983, upload-time = "2025-09-08T23:22:50.06Z" }, + { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519, upload-time = "2025-09-08T23:22:51.364Z" }, + { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572, upload-time = "2025-09-08T23:22:52.902Z" }, + { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963, upload-time = "2025-09-08T23:22:54.518Z" }, + { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361, upload-time = "2025-09-08T23:22:55.867Z" }, + { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932, upload-time = "2025-09-08T23:22:57.188Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557, upload-time = "2025-09-08T23:22:58.351Z" }, + { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762, upload-time = "2025-09-08T23:22:59.668Z" }, +] + +[[package]] +name = "chardet" +version = "5.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/f7b6ab21ec75897ed80c17d79b15951a719226b9fababf1e40ea74d69079/chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7", size = 2069618, upload-time = "2023-08-01T19:23:02.662Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970", size = 199385, upload-time = "2023-08-01T19:23:00.661Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/85/1637cd4af66fa687396e757dec650f28025f2a2f5a5531a3208dc0ec43f2/charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394", size = 208425, upload-time = "2025-10-14T04:40:53.353Z" }, + { url = "https://files.pythonhosted.org/packages/9d/6a/04130023fef2a0d9c62d0bae2649b69f7b7d8d24ea5536feef50551029df/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25", size = 148162, upload-time = "2025-10-14T04:40:54.558Z" }, + { url = "https://files.pythonhosted.org/packages/78/29/62328d79aa60da22c9e0b9a66539feae06ca0f5a4171ac4f7dc285b83688/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef", size = 144558, upload-time = "2025-10-14T04:40:55.677Z" }, + { url = "https://files.pythonhosted.org/packages/86/bb/b32194a4bf15b88403537c2e120b817c61cd4ecffa9b6876e941c3ee38fe/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d", size = 161497, upload-time = "2025-10-14T04:40:57.217Z" }, + { url = "https://files.pythonhosted.org/packages/19/89/a54c82b253d5b9b111dc74aca196ba5ccfcca8242d0fb64146d4d3183ff1/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8", size = 159240, upload-time = "2025-10-14T04:40:58.358Z" }, + { url = "https://files.pythonhosted.org/packages/c0/10/d20b513afe03acc89ec33948320a5544d31f21b05368436d580dec4e234d/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86", size = 153471, upload-time = "2025-10-14T04:40:59.468Z" }, + { url = "https://files.pythonhosted.org/packages/61/fa/fbf177b55bdd727010f9c0a3c49eefa1d10f960e5f09d1d887bf93c2e698/charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a", size = 150864, upload-time = "2025-10-14T04:41:00.623Z" }, + { url = "https://files.pythonhosted.org/packages/05/12/9fbc6a4d39c0198adeebbde20b619790e9236557ca59fc40e0e3cebe6f40/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f", size = 150647, upload-time = "2025-10-14T04:41:01.754Z" }, + { url = "https://files.pythonhosted.org/packages/ad/1f/6a9a593d52e3e8c5d2b167daf8c6b968808efb57ef4c210acb907c365bc4/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc", size = 145110, upload-time = "2025-10-14T04:41:03.231Z" }, + { url = "https://files.pythonhosted.org/packages/30/42/9a52c609e72471b0fc54386dc63c3781a387bb4fe61c20231a4ebcd58bdd/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf", size = 162839, upload-time = "2025-10-14T04:41:04.715Z" }, + { url = "https://files.pythonhosted.org/packages/c4/5b/c0682bbf9f11597073052628ddd38344a3d673fda35a36773f7d19344b23/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15", size = 150667, upload-time = "2025-10-14T04:41:05.827Z" }, + { url = "https://files.pythonhosted.org/packages/e4/24/a41afeab6f990cf2daf6cb8c67419b63b48cf518e4f56022230840c9bfb2/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9", size = 160535, upload-time = "2025-10-14T04:41:06.938Z" }, + { url = "https://files.pythonhosted.org/packages/2a/e5/6a4ce77ed243c4a50a1fecca6aaaab419628c818a49434be428fe24c9957/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0", size = 154816, upload-time = "2025-10-14T04:41:08.101Z" }, + { url = "https://files.pythonhosted.org/packages/a8/ef/89297262b8092b312d29cdb2517cb1237e51db8ecef2e9af5edbe7b683b1/charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26", size = 99694, upload-time = "2025-10-14T04:41:09.23Z" }, + { url = "https://files.pythonhosted.org/packages/3d/2d/1e5ed9dd3b3803994c155cd9aacb60c82c331bad84daf75bcb9c91b3295e/charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525", size = 107131, upload-time = "2025-10-14T04:41:10.467Z" }, + { url = "https://files.pythonhosted.org/packages/d0/d9/0ed4c7098a861482a7b6a95603edce4c0d9db2311af23da1fb2b75ec26fc/charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3", size = 100390, upload-time = "2025-10-14T04:41:11.915Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" }, +] + +[[package]] +name = "click" +version = "8.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/fa/656b739db8587d7b5dfa22e22ed02566950fbfbcdc20311993483657a5c0/click-8.3.1.tar.gz", hash = "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a", size = 295065, upload-time = "2025-11-15T20:45:42.706Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl", hash = "sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6", size = 108274, upload-time = "2025-11-15T20:45:41.139Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "coverage" +version = "7.13.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/23/f9/e92df5e07f3fc8d4c7f9a0f146ef75446bf870351cd37b788cf5897f8079/coverage-7.13.1.tar.gz", hash = "sha256:b7593fe7eb5feaa3fbb461ac79aac9f9fc0387a5ca8080b0c6fe2ca27b091afd", size = 825862, upload-time = "2025-12-28T15:42:56.969Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/8a/87af46cccdfa78f53db747b09f5f9a21d5fc38d796834adac09b30a8ce74/coverage-7.13.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6f34591000f06e62085b1865c9bc5f7858df748834662a51edadfd2c3bfe0dd3", size = 218927, upload-time = "2025-12-28T15:40:52.814Z" }, + { url = "https://files.pythonhosted.org/packages/82/a8/6e22fdc67242a4a5a153f9438d05944553121c8f4ba70cb072af4c41362e/coverage-7.13.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b67e47c5595b9224599016e333f5ec25392597a89d5744658f837d204e16c63e", size = 219288, upload-time = "2025-12-28T15:40:54.262Z" }, + { url = "https://files.pythonhosted.org/packages/d0/0a/853a76e03b0f7c4375e2ca025df45c918beb367f3e20a0a8e91967f6e96c/coverage-7.13.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3e7b8bd70c48ffb28461ebe092c2345536fb18bbbf19d287c8913699735f505c", size = 250786, upload-time = "2025-12-28T15:40:56.059Z" }, + { url = "https://files.pythonhosted.org/packages/ea/b4/694159c15c52b9f7ec7adf49d50e5f8ee71d3e9ef38adb4445d13dd56c20/coverage-7.13.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c223d078112e90dc0e5c4e35b98b9584164bea9fbbd221c0b21c5241f6d51b62", size = 253543, upload-time = "2025-12-28T15:40:57.585Z" }, + { url = "https://files.pythonhosted.org/packages/96/b2/7f1f0437a5c855f87e17cf5d0dc35920b6440ff2b58b1ba9788c059c26c8/coverage-7.13.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:794f7c05af0763b1bbd1b9e6eff0e52ad068be3b12cd96c87de037b01390c968", size = 254635, upload-time = "2025-12-28T15:40:59.443Z" }, + { url = "https://files.pythonhosted.org/packages/e9/d1/73c3fdb8d7d3bddd9473c9c6a2e0682f09fc3dfbcb9c3f36412a7368bcab/coverage-7.13.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0642eae483cc8c2902e4af7298bf886d605e80f26382124cddc3967c2a3df09e", size = 251202, upload-time = "2025-12-28T15:41:01.328Z" }, + { url = "https://files.pythonhosted.org/packages/66/3c/f0edf75dcc152f145d5598329e864bbbe04ab78660fe3e8e395f9fff010f/coverage-7.13.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9f5e772ed5fef25b3de9f2008fe67b92d46831bd2bc5bdc5dd6bfd06b83b316f", size = 252566, upload-time = "2025-12-28T15:41:03.319Z" }, + { url = "https://files.pythonhosted.org/packages/17/b3/e64206d3c5f7dcbceafd14941345a754d3dbc78a823a6ed526e23b9cdaab/coverage-7.13.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:45980ea19277dc0a579e432aef6a504fe098ef3a9032ead15e446eb0f1191aee", size = 250711, upload-time = "2025-12-28T15:41:06.411Z" }, + { url = "https://files.pythonhosted.org/packages/dc/ad/28a3eb970a8ef5b479ee7f0c484a19c34e277479a5b70269dc652b730733/coverage-7.13.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:e4f18eca6028ffa62adbd185a8f1e1dd242f2e68164dba5c2b74a5204850b4cf", size = 250278, upload-time = "2025-12-28T15:41:08.285Z" }, + { url = "https://files.pythonhosted.org/packages/54/e3/c8f0f1a93133e3e1291ca76cbb63565bd4b5c5df63b141f539d747fff348/coverage-7.13.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f8dca5590fec7a89ed6826fce625595279e586ead52e9e958d3237821fbc750c", size = 252154, upload-time = "2025-12-28T15:41:09.969Z" }, + { url = "https://files.pythonhosted.org/packages/d0/bf/9939c5d6859c380e405b19e736321f1c7d402728792f4c752ad1adcce005/coverage-7.13.1-cp312-cp312-win32.whl", hash = "sha256:ff86d4e85188bba72cfb876df3e11fa243439882c55957184af44a35bd5880b7", size = 221487, upload-time = "2025-12-28T15:41:11.468Z" }, + { url = "https://files.pythonhosted.org/packages/fa/dc/7282856a407c621c2aad74021680a01b23010bb8ebf427cf5eacda2e876f/coverage-7.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:16cc1da46c04fb0fb128b4dc430b78fa2aba8a6c0c9f8eb391fd5103409a6ac6", size = 222299, upload-time = "2025-12-28T15:41:13.386Z" }, + { url = "https://files.pythonhosted.org/packages/10/79/176a11203412c350b3e9578620013af35bcdb79b651eb976f4a4b32044fa/coverage-7.13.1-cp312-cp312-win_arm64.whl", hash = "sha256:8d9bc218650022a768f3775dd7fdac1886437325d8d295d923ebcfef4892ad5c", size = 220941, upload-time = "2025-12-28T15:41:14.975Z" }, + { url = "https://files.pythonhosted.org/packages/cc/48/d9f421cb8da5afaa1a64570d9989e00fb7955e6acddc5a12979f7666ef60/coverage-7.13.1-py3-none-any.whl", hash = "sha256:2016745cb3ba554469d02819d78958b571792bb68e31302610e898f80dd3a573", size = 210722, upload-time = "2025-12-28T15:42:54.901Z" }, +] + +[[package]] +name = "cryptography" +version = "42.0.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/93/a7/1498799a2ea06148463a9a2c10ab2f6a921a74fb19e231b27dc412a748e2/cryptography-42.0.8.tar.gz", hash = "sha256:8d09d05439ce7baa8e9e95b07ec5b6c886f548deb7e0f69ef25f64b3bce842f2", size = 671250, upload-time = "2024-06-04T19:55:08.609Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/8b/1b929ba8139430e09e140e6939c2b29c18df1f2fc2149e41bdbdcdaf5d1f/cryptography-42.0.8-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:81d8a521705787afe7a18d5bfb47ea9d9cc068206270aad0b96a725022e18d2e", size = 5899961, upload-time = "2024-06-04T19:53:57.933Z" }, + { url = "https://files.pythonhosted.org/packages/fa/5d/31d833daa800e4fab33209843095df7adb4a78ea536929145534cbc15026/cryptography-42.0.8-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:961e61cefdcb06e0c6d7e3a1b22ebe8b996eb2bf50614e89384be54c48c6b63d", size = 3114353, upload-time = "2024-06-04T19:54:12.171Z" }, + { url = "https://files.pythonhosted.org/packages/5d/32/f6326c70a9f0f258a201d3b2632bca586ea24d214cec3cf36e374040e273/cryptography-42.0.8-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3ec3672626e1b9e55afd0df6d774ff0e953452886e06e0f1eb7eb0c832e8902", size = 3647773, upload-time = "2024-06-04T19:54:07.051Z" }, + { url = "https://files.pythonhosted.org/packages/35/66/2d87e9ca95c82c7ee5f2c09716fc4c4242c1ae6647b9bd27e55e920e9f10/cryptography-42.0.8-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e599b53fd95357d92304510fb7bda8523ed1f79ca98dce2f43c115950aa78801", size = 3839763, upload-time = "2024-06-04T19:54:30.383Z" }, + { url = "https://files.pythonhosted.org/packages/c2/de/8083fa2e68d403553a01a9323f4f8b9d7ffed09928ba25635c29fb28c1e7/cryptography-42.0.8-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5226d5d21ab681f432a9c1cf8b658c0cb02533eece706b155e5fbd8a0cdd3949", size = 3632661, upload-time = "2024-06-04T19:54:32.955Z" }, + { url = "https://files.pythonhosted.org/packages/07/40/d6f6819c62e808ea74639c3c640f7edd636b86cce62cb14943996a15df92/cryptography-42.0.8-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6b7c4f03ce01afd3b76cf69a5455caa9cfa3de8c8f493e0d3ab7d20611c8dae9", size = 3851536, upload-time = "2024-06-04T19:53:53.131Z" }, + { url = "https://files.pythonhosted.org/packages/5c/46/de71d48abf2b6d3c808f4fbb0f4dc44a4e72786be23df0541aa2a3f6fd7e/cryptography-42.0.8-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:2346b911eb349ab547076f47f2e035fc8ff2c02380a7cbbf8d87114fa0f1c583", size = 3754209, upload-time = "2024-06-04T19:54:55.259Z" }, + { url = "https://files.pythonhosted.org/packages/25/c9/86f04e150c5d5d5e4a731a2c1e0e43da84d901f388e3fea3d5de98d689a7/cryptography-42.0.8-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ad803773e9df0b92e0a817d22fd8a3675493f690b96130a5e24f1b8fabbea9c7", size = 3923551, upload-time = "2024-06-04T19:54:16.46Z" }, + { url = "https://files.pythonhosted.org/packages/53/c2/903014dafb7271fb148887d4355b2e90319cad6e810663be622b0c933fc9/cryptography-42.0.8-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2f66d9cd9147ee495a8374a45ca445819f8929a3efcd2e3df6428e46c3cbb10b", size = 3739265, upload-time = "2024-06-04T19:54:23.194Z" }, + { url = "https://files.pythonhosted.org/packages/95/26/82d704d988a193cbdc69ac3b41c687c36eaed1642cce52530ad810c35645/cryptography-42.0.8-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d45b940883a03e19e944456a558b67a41160e367a719833c53de6911cabba2b7", size = 3937371, upload-time = "2024-06-04T19:55:04.303Z" }, + { url = "https://files.pythonhosted.org/packages/cf/71/4e0d05c9acd638a225f57fb6162aa3d03613c11b76893c23ea4675bb28c5/cryptography-42.0.8-cp37-abi3-win32.whl", hash = "sha256:a0c5b2b0585b6af82d7e385f55a8bc568abff8923af147ee3c07bd8b42cda8b2", size = 2438849, upload-time = "2024-06-04T19:54:27.39Z" }, + { url = "https://files.pythonhosted.org/packages/06/0f/78da3cad74f2ba6c45321dc90394d70420ea846730dc042ef527f5a224b5/cryptography-42.0.8-cp37-abi3-win_amd64.whl", hash = "sha256:57080dee41209e556a9a4ce60d229244f7a66ef52750f813bfbe18959770cfba", size = 2889090, upload-time = "2024-06-04T19:54:14.245Z" }, + { url = "https://files.pythonhosted.org/packages/60/12/f064af29190cdb1d38fe07f3db6126091639e1dece7ec77c4ff037d49193/cryptography-42.0.8-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28", size = 5901232, upload-time = "2024-06-04T19:54:52.722Z" }, + { url = "https://files.pythonhosted.org/packages/43/c2/4a3eef67e009a522711ebd8ac89424c3a7fe591ece7035d964419ad52a1d/cryptography-42.0.8-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4783183f7cb757b73b2ae9aed6599b96338eb957233c58ca8f49a49cc32fd5e", size = 3648711, upload-time = "2024-06-04T19:54:44.323Z" }, + { url = "https://files.pythonhosted.org/packages/49/1c/9f6d13cc8041c05eebff1154e4e71bedd1db8e174fff999054435994187a/cryptography-42.0.8-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0608251135d0e03111152e41f0cc2392d1e74e35703960d4190b2e0f4ca9c70", size = 3841968, upload-time = "2024-06-04T19:54:57.911Z" }, + { url = "https://files.pythonhosted.org/packages/5f/f9/c3d4f19b82bdb25a3d857fe96e7e571c981810e47e3f299cc13ac429066a/cryptography-42.0.8-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:dc0fdf6787f37b1c6b08e6dfc892d9d068b5bdb671198c72072828b80bd5fe4c", size = 3633032, upload-time = "2024-06-04T19:54:48.518Z" }, + { url = "https://files.pythonhosted.org/packages/fa/e2/b7e6e8c261536c489d9cf908769880d94bd5d9a187e166b0dc838d2e6a56/cryptography-42.0.8-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9c0c1716c8447ee7dbf08d6db2e5c41c688544c61074b54fc4564196f55c25a7", size = 3852478, upload-time = "2024-06-04T19:54:50.599Z" }, + { url = "https://files.pythonhosted.org/packages/a2/68/e16751f6b859bc120f53fddbf3ebada5c34f0e9689d8af32884d8b2e4b4c/cryptography-42.0.8-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fff12c88a672ab9c9c1cf7b0c80e3ad9e2ebd9d828d955c126be4fd3e5578c9e", size = 3754102, upload-time = "2024-06-04T19:54:46.231Z" }, + { url = "https://files.pythonhosted.org/packages/0f/38/85c74d0ac4c540780e072b1e6f148ecb718418c1062edcb20d22f3ec5bbb/cryptography-42.0.8-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:cafb92b2bc622cd1aa6a1dce4b93307792633f4c5fe1f46c6b97cf67073ec961", size = 3925042, upload-time = "2024-06-04T19:54:34.767Z" }, + { url = "https://files.pythonhosted.org/packages/89/f4/a8b982e88eb5350407ebdbf4717b55043271d878705329e107f4783555f2/cryptography-42.0.8-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:31f721658a29331f895a5a54e7e82075554ccfb8b163a18719d342f5ffe5ecb1", size = 3738833, upload-time = "2024-06-04T19:54:05.231Z" }, + { url = "https://files.pythonhosted.org/packages/fd/2b/be327b580645927bb1a1f32d5a175b897a9b956bc085b095e15c40bac9ed/cryptography-42.0.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b297f90c5723d04bcc8265fc2a0f86d4ea2e0f7ab4b6994459548d3a6b992a14", size = 3938751, upload-time = "2024-06-04T19:54:37.837Z" }, + { url = "https://files.pythonhosted.org/packages/3c/d5/c6a78ffccdbe4516711ebaa9ed2c7eb6ac5dfa3dc920f2c7e920af2418b0/cryptography-42.0.8-cp39-abi3-win32.whl", hash = "sha256:2f88d197e66c65be5e42cd72e5c18afbfae3f741742070e3019ac8f4ac57262c", size = 2439281, upload-time = "2024-06-04T19:53:55.903Z" }, + { url = "https://files.pythonhosted.org/packages/a2/7b/b0d330852dd5953daee6b15f742f15d9f18e9c0154eb4cfcc8718f0436da/cryptography-42.0.8-cp39-abi3-win_amd64.whl", hash = "sha256:fa76fbb7596cc5839320000cdd5d0955313696d9511debab7ee7278fc8b5c84a", size = 2886038, upload-time = "2024-06-04T19:54:18.707Z" }, +] + +[[package]] +name = "cssselect" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/0a/c3ea9573b1dc2e151abfe88c7fe0c26d1892fe6ed02d0cdb30f0d57029d5/cssselect-1.3.0.tar.gz", hash = "sha256:57f8a99424cfab289a1b6a816a43075a4b00948c86b4dcf3ef4ee7e15f7ab0c7", size = 42870, upload-time = "2025-03-10T09:30:29.638Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ee/58/257350f7db99b4ae12b614a36256d9cc870d71d9e451e79c2dc3b23d7c3c/cssselect-1.3.0-py3-none-any.whl", hash = "sha256:56d1bf3e198080cc1667e137bc51de9cadfca259f03c2d4e09037b3e01e30f0d", size = 18786, upload-time = "2025-03-10T09:30:28.048Z" }, +] + +[[package]] +name = "decorator" +version = "5.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/0c/8d907af351aa16b42caae42f9d6aa37b900c67308052d10fdce809f8d952/decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", size = 35016, upload-time = "2022-01-07T08:20:05.666Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/50/83c593b07763e1161326b3b8c6686f0f4b0f24d5526546bee538c89837d6/decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186", size = 9073, upload-time = "2022-01-07T08:20:03.734Z" }, +] + +[[package]] +name = "docopt" +version = "0.6.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz", hash = "sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491", size = 25901, upload-time = "2014-06-16T11:18:57.406Z" } + +[[package]] +name = "docutils" +version = "0.20.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1f/53/a5da4f2c5739cf66290fac1431ee52aff6851c7c8ffd8264f13affd7bcdd/docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b", size = 2058365, upload-time = "2023-05-16T23:39:19.748Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/87/f238c0670b94533ac0353a4e2a1a771a0cc73277b88bff23d3ae35a256c1/docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6", size = 572666, upload-time = "2023-05-16T23:39:15.976Z" }, +] + +[[package]] +name = "et-xmlfile" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234, upload-time = "2024-10-25T17:25:40.039Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059, upload-time = "2024-10-25T17:25:39.051Z" }, +] + +[[package]] +name = "execnet" +version = "2.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/89/780e11f9588d9e7128a3f87788354c7946a9cbb1401ad38a48c4db9a4f07/execnet-2.1.2.tar.gz", hash = "sha256:63d83bfdd9a23e35b9c6a3261412324f964c2ec8dcd8d3c6916ee9373e0befcd", size = 166622, upload-time = "2025-11-12T09:56:37.75Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl", hash = "sha256:67fba928dd5a544b783f6056f449e5e3931a5c378b128bc18501f7ea79e296ec", size = 40708, upload-time = "2025-11-12T09:56:36.333Z" }, +] + +[[package]] +name = "freezegun" +version = "1.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/89/a9/ebf3d233893752ca282d91c88103facf6d7d05ce22978829e4e0cbc4113d/freezegun-1.2.1.tar.gz", hash = "sha256:b4c64efb275e6bc68dc6e771b17ffe0ff0f90b81a2a5189043550b6519926ba4", size = 29740, upload-time = "2022-03-18T09:06:39.435Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/cf/cb14c48cad1366bd08d5f5482b3d7ea0696b6d38a2764752d331fa8bbd22/freezegun-1.2.1-py3-none-any.whl", hash = "sha256:15103a67dfa868ad809a8f508146e396be2995172d25f927e48ce51c0bf5cb09", size = 16843, upload-time = "2022-03-18T09:06:37.473Z" }, +] + +[[package]] +name = "geoip2" +version = "2.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "maxminddb" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2e/68/44a14494b019a0b05a581608ae1962363a757722d4db6b8c1e2445817e19/geoip2-2.9.0.tar.gz", hash = "sha256:f7ffe9d258e71a42cf622ce6350d976de1d0312b9f2fbce3975c7d838b57ecf0", size = 459342, upload-time = "2018-05-25T20:10:03.688Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/17/bcbb7c0849492e218767e658c66fbf9e3420b6301072371547c4f7192d48/geoip2-2.9.0-py2.py3-none-any.whl", hash = "sha256:a37ddac2d200ffb97c736da8b8ba9d5d8dc47da6ec0f162a461b681ecac53a14", size = 18038, upload-time = "2018-05-25T20:10:05.867Z" }, +] + +[[package]] +name = "gevent" +version = "24.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation == 'CPython' and sys_platform == 'win32'" }, + { name = "greenlet", marker = "platform_python_implementation == 'CPython'" }, + { name = "zope-event" }, + { name = "zope-interface" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/27/24/a3a7b713acfcf1177207f49ec25c665123f8972f42bee641bcc9f32961f4/gevent-24.2.1.tar.gz", hash = "sha256:432fc76f680acf7cf188c2ee0f5d3ab73b63c1f03114c7cd8a34cebbe5aa2056", size = 6147507, upload-time = "2024-02-14T11:31:10.128Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/72/eb98be1cec2a3d0f46d3af49b034deb48a6d6d9a1958ee110bc2e1e600ac/gevent-24.2.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:6c47ae7d1174617b3509f5d884935e788f325eb8f1a7efc95d295c68d83cce40", size = 3007004, upload-time = "2024-02-14T11:28:20.476Z" }, + { url = "https://files.pythonhosted.org/packages/f7/14/4cc83275fcdfa1977224cc266b710dc71b810d6760f575d259ca3be7b4dd/gevent-24.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7cac622e11b4253ac4536a654fe221249065d9a69feb6cdcd4d9af3503602e0", size = 5142074, upload-time = "2024-02-14T12:09:45.269Z" }, + { url = "https://files.pythonhosted.org/packages/56/ce/583d29e524c5666f7d66116e818449bee649bba8088d0ac48bec6c006215/gevent-24.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bf5b9c72b884c6f0c4ed26ef204ee1f768b9437330422492c319470954bc4cc7", size = 5307651, upload-time = "2024-02-14T12:07:36.645Z" }, + { url = "https://files.pythonhosted.org/packages/69/e7/072dfbf5c534516dcc91367d5dd5806ec8860b66c1df26b9d603493c1adb/gevent-24.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f5de3c676e57177b38857f6e3cdfbe8f38d1cd754b63200c0615eaa31f514b4f", size = 5406093, upload-time = "2024-02-14T12:10:58.794Z" }, + { url = "https://files.pythonhosted.org/packages/d9/d3/f9d0f62cb6cb0421d0da2cffd10bad13b0f5d641c57ce35927bf8554661e/gevent-24.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4faf846ed132fd7ebfbbf4fde588a62d21faa0faa06e6f468b7faa6f436b661", size = 6730420, upload-time = "2024-02-14T11:54:02.399Z" }, + { url = "https://files.pythonhosted.org/packages/5b/eb/6b0e902e29283253324fe32317b805df289f05f0ef3e9859a721d403b71e/gevent-24.2.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:368a277bd9278ddb0fde308e6a43f544222d76ed0c4166e0d9f6b036586819d9", size = 6711332, upload-time = "2024-02-14T11:59:16.68Z" }, + { url = "https://files.pythonhosted.org/packages/0d/8b/02a07125324e23d64ec342ae7a4cff8dc7271114e787317a5f219027bf1b/gevent-24.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f8a04cf0c5b7139bc6368b461257d4a757ea2fe89b3773e494d235b7dd51119f", size = 5482031, upload-time = "2024-02-14T12:25:52.872Z" }, + { url = "https://files.pythonhosted.org/packages/5f/fe/288ccd562ac20d5e4ae2624313b699ee35c76be1faa9104b414bfe714a67/gevent-24.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9d8d0642c63d453179058abc4143e30718b19a85cbf58c2744c9a63f06a1d388", size = 6812353, upload-time = "2024-02-14T12:01:19.819Z" }, + { url = "https://files.pythonhosted.org/packages/2e/90/d9fcdc22864d0cf471630071c264289b9a803892d6f55e895a69c2e3574b/gevent-24.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:94138682e68ec197db42ad7442d3cf9b328069c3ad8e4e5022e6b5cd3e7ffae5", size = 1523715, upload-time = "2024-02-14T11:31:09.195Z" }, +] + +[[package]] +name = "gitdb" +version = "4.0.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "smmap" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684, upload-time = "2025-01-02T07:20:46.413Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf", size = 62794, upload-time = "2025-01-02T07:20:43.624Z" }, +] + +[[package]] +name = "gitpython" +version = "3.1.46" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gitdb" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/b5/59d16470a1f0dfe8c793f9ef56fd3826093fc52b3bd96d6b9d6c26c7e27b/gitpython-3.1.46.tar.gz", hash = "sha256:400124c7d0ef4ea03f7310ac2fbf7151e09ff97f2a3288d64a440c584a29c37f", size = 215371, upload-time = "2026-01-01T15:37:32.073Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl", hash = "sha256:79812ed143d9d25b6d176a10bb511de0f9c67b1fa641d82097b0ab90398a2058", size = 208620, upload-time = "2026-01-01T15:37:30.574Z" }, +] + +[[package]] +name = "greenlet" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/17/14/3bddb1298b9a6786539ac609ba4b7c9c0842e12aa73aaa4d8d73ec8f8185/greenlet-3.0.3.tar.gz", hash = "sha256:43374442353259554ce33599da8b692d5aa96f8976d567d4badf263371fbe491", size = 182013, upload-time = "2023-12-21T22:02:54.659Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/2f/461615adc53ba81e99471303b15ac6b2a6daa8d2a0f7f77fd15605e16d5b/greenlet-3.0.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:70fb482fdf2c707765ab5f0b6655e9cfcf3780d8d87355a063547b41177599be", size = 273085, upload-time = "2023-12-21T22:03:01.176Z" }, + { url = "https://files.pythonhosted.org/packages/e9/55/2c3cfa3cdbb940cf7321fbcf544f0e9c74898eed43bf678abf416812d132/greenlet-3.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4d1ac74f5c0c0524e4a24335350edad7e5f03b9532da7ea4d3c54d527784f2e", size = 660514, upload-time = "2023-12-21T22:29:28.62Z" }, + { url = "https://files.pythonhosted.org/packages/38/77/efb21ab402651896c74f24a172eb4d7479f9f53898bd5e56b9e20bb24ffd/greenlet-3.0.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149e94a2dd82d19838fe4b2259f1b6b9957d5ba1b25640d2380bea9c5df37676", size = 674295, upload-time = "2023-12-21T22:26:24.101Z" }, + { url = "https://files.pythonhosted.org/packages/74/3a/92f188ace0190f0066dca3636cf1b09481d0854c46e92ec5e29c7cefe5b1/greenlet-3.0.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15d79dd26056573940fcb8c7413d84118086f2ec1a8acdfa854631084393efcc", size = 669395, upload-time = "2023-12-21T22:31:35.992Z" }, + { url = "https://files.pythonhosted.org/packages/63/0f/847ed02cdfce10f0e6e3425cd054296bddb11a17ef1b34681fa01a055187/greenlet-3.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b7db1ebff4ba09aaaeae6aa491daeb226c8150fc20e836ad00041bcb11230", size = 670455, upload-time = "2023-12-21T22:03:16.291Z" }, + { url = "https://files.pythonhosted.org/packages/bd/37/56b0da468a85e7704f3b2bc045015301bdf4be2184a44868c71f6dca6fe2/greenlet-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fcd2469d6a2cf298f198f0487e0a5b1a47a42ca0fa4dfd1b6862c999f018ebbf", size = 625692, upload-time = "2023-12-21T22:03:06.294Z" }, + { url = "https://files.pythonhosted.org/packages/7c/68/b5f4084c0a252d7e9c0d95fc1cfc845d08622037adb74e05be3a49831186/greenlet-3.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1f672519db1796ca0d8753f9e78ec02355e862d0998193038c7073045899f305", size = 1152597, upload-time = "2023-12-21T22:31:00.412Z" }, + { url = "https://files.pythonhosted.org/packages/a4/fa/31e22345518adcd69d1d6ab5087a12c178aa7f3c51103f6d5d702199d243/greenlet-3.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2516a9957eed41dd8f1ec0c604f1cdc86758b587d964668b5b196a9db5bfcde6", size = 1181043, upload-time = "2023-12-21T22:04:20.032Z" }, + { url = "https://files.pythonhosted.org/packages/53/80/3d94d5999b4179d91bcc93745d1b0815b073d61be79dd546b840d17adb18/greenlet-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:bba5387a6975598857d86de9eac14210a49d554a77eb8261cc68b7d082f78ce2", size = 293635, upload-time = "2023-12-21T22:26:01.555Z" }, +] + +[[package]] +name = "idna" +version = "3.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/3f/ea4b9117521a1e9c50344b909be7886dd00a519552724809bb1f486986c2/idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca", size = 175426, upload-time = "2023-11-25T15:40:54.902Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/e7/a82b05cf63a603df6e68d59ae6a68bf5064484a0718ea5033660af4b54a9/idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f", size = 61567, upload-time = "2023-11-25T15:40:52.604Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, +] + +[[package]] +name = "isodate" +version = "0.7.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/4d/e940025e2ce31a8ce1202635910747e5a87cc3a6a6bb2d00973375014749/isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6", size = 29705, upload-time = "2024-10-08T23:04:11.5Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15", size = 22320, upload-time = "2024-10-08T23:04:09.501Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/ff/75c28576a1d900e87eb6335b063fab47a8ef3c8b4d88524c4bf78f670cce/Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852", size = 268239, upload-time = "2022-04-28T17:21:27.579Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/c3/f068337a370801f372f2f8f6bad74a5c140f6fda3d9de154052708dd3c65/Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61", size = 133101, upload-time = "2022-04-28T17:21:25.336Z" }, +] + +[[package]] +name = "libsass" +version = "0.22.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/55/14/f1d9578dce39f890ae3c0f93db8a23e89d2a1403da81d307ffb429df7c3b/libsass-0.22.0.tar.gz", hash = "sha256:3ab5ad18e47db560f4f0c09e3d28cf3bb1a44711257488ac2adad69f4f7f8425", size = 316258, upload-time = "2022-11-12T17:58:16.198Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/be/178b03e598e86bf1faa70f9ebe4cfad236dcf159af11a39f30ac8d7ce693/libsass-0.22.0-cp36-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:f1efc1b612299c88aec9e39d6ca0c266d360daa5b19d9430bdeaffffa86993f9", size = 9443966, upload-time = "2022-11-12T18:10:10.352Z" }, + { url = "https://files.pythonhosted.org/packages/92/fd/73b8081c5bc2b11b61596f74b54d45226633313c2a4de53205da948fc01c/libsass-0.22.0-cp37-abi3-macosx_10_15_x86_64.whl", hash = "sha256:081e256ab3c5f3f09c7b8dea3bf3bf5e64a97c6995fd9eea880639b3f93a9f9a", size = 1064075, upload-time = "2022-11-12T18:10:12.761Z" }, + { url = "https://files.pythonhosted.org/packages/f5/ee/844666d66a4dbb7b81e3c0257253963091f2abec8454ce7abf6f89b409f9/libsass-0.22.0-cp37-abi3-win32.whl", hash = "sha256:89c5ce497fcf3aba1dd1b19aae93b99f68257e5f2026b731b00a872f13324c7f", size = 775665, upload-time = "2022-11-12T18:10:14.473Z" }, + { url = "https://files.pythonhosted.org/packages/43/33/ccd65ef94bf37ad01ad4f82c3426d9274eee7d448ca9c23e516d03322520/libsass-0.22.0-cp37-abi3-win_amd64.whl", hash = "sha256:65455a2728b696b62100eb5932604aa13a29f4ac9a305d95773c14aaa7200aaf", size = 880885, upload-time = "2022-11-12T18:10:16.32Z" }, + { url = "https://files.pythonhosted.org/packages/15/99/f0bbc4ccd254ad7b8e76fe878f11eb98a1931fa9bc46d599a52443641bff/libsass-0.22.0-cp38-abi3-macosx_14_0_arm64.whl", hash = "sha256:5fb2297a4754a6c8e25cfe5c015a3b51a2b6b9021b333f989bb8ce9d60eb5828", size = 982832, upload-time = "2023-12-07T04:33:42.037Z" }, +] + +[[package]] +name = "linkify-it-py" +version = "2.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "uc-micro-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2a/ae/bb56c6828e4797ba5a4821eec7c43b8bf40f69cda4d4f5f8c8a2810ec96a/linkify-it-py-2.0.3.tar.gz", hash = "sha256:68cda27e162e9215c17d786649d1da0021a451bdc436ef9e0fa0ba5234b9b048", size = 27946, upload-time = "2024-02-04T14:48:04.179Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/1e/b832de447dee8b582cac175871d2f6c3d5077cc56d5575cadba1fd1cccfa/linkify_it_py-2.0.3-py3-none-any.whl", hash = "sha256:6bcbc417b0ac14323382aef5c5192c0075bf8a9d6b41820a2b66371eac6b6d79", size = 19820, upload-time = "2024-02-04T14:48:02.496Z" }, +] + +[[package]] +name = "lxml" +version = "5.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ea/e2/3834472e7f18801e67a3cd6f3c203a5456d6f7f903cfb9a990e62098a2f3/lxml-5.2.1.tar.gz", hash = "sha256:3f7765e69bbce0906a7c74d5fe46d2c7a7596147318dbc08e4a2431f3060e306", size = 3675336, upload-time = "2024-04-02T18:24:57.714Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/05/0b308e7a470f96d3d98e71043f2d6e62458eb3bcc1cb402a193bae2eb786/lxml-5.2.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:abc25c3cab9ec7fcd299b9bcb3b8d4a1231877e425c650fa1c7576c5107ab851", size = 8563956, upload-time = "2024-04-02T18:17:00.926Z" }, + { url = "https://files.pythonhosted.org/packages/1f/a6/880a56f4a33700c24658a54609e6bf659d84b43dc007053cf6e417e0e667/lxml-5.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6935bbf153f9a965f1e07c2649c0849d29832487c52bb4a5c5066031d8b44fd5", size = 4646376, upload-time = "2024-04-02T18:17:04.911Z" }, + { url = "https://files.pythonhosted.org/packages/71/a6/733dc617906a3921cbaf59ccb889a48cc8038ef228d774033c5c84ae5baf/lxml-5.2.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d793bebb202a6000390a5390078e945bbb49855c29c7e4d56a85901326c3b5d9", size = 5053123, upload-time = "2024-04-02T18:17:09.106Z" }, + { url = "https://files.pythonhosted.org/packages/4a/6c/a0d195a7630339eb0127e20aacb1184330064cb809fdf771c1bab5caf170/lxml-5.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afd5562927cdef7c4f5550374acbc117fd4ecc05b5007bdfa57cc5355864e0a4", size = 4747766, upload-time = "2024-04-02T18:17:13.513Z" }, + { url = "https://files.pythonhosted.org/packages/a5/e6/fbe182c09f81673e8242e0a0ed8c345cc14fbba1bfdf6ea0a09fcb89f431/lxml-5.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0e7259016bc4345a31af861fdce942b77c99049d6c2107ca07dc2bba2435c1d9", size = 5320879, upload-time = "2024-04-02T18:17:17.576Z" }, + { url = "https://files.pythonhosted.org/packages/3b/fe/36b0f97404b720b5bb5167ef77710ef129c7f94b7e7551f5cc9f3e3b01fb/lxml-5.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:530e7c04f72002d2f334d5257c8a51bf409db0316feee7c87e4385043be136af", size = 4812940, upload-time = "2024-04-02T18:17:21.014Z" }, + { url = "https://files.pythonhosted.org/packages/ab/42/6b1c3cc3310c291c2f4a576c6ce67ba712b0c777809355c8fcc5c28f5239/lxml-5.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59689a75ba8d7ffca577aefd017d08d659d86ad4585ccc73e43edbfc7476781a", size = 4915888, upload-time = "2024-04-02T18:17:25.314Z" }, + { url = "https://files.pythonhosted.org/packages/d0/f1/3a0bd5064c764966e5d1dd0e75048960a7f38c833422ff5e10c8f4ad8363/lxml-5.2.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f9737bf36262046213a28e789cc82d82c6ef19c85a0cf05e75c670a33342ac2c", size = 4740296, upload-time = "2024-04-02T18:17:29.557Z" }, + { url = "https://files.pythonhosted.org/packages/5c/41/e0391ffffd68e4bcd6ca60fa4694941bf9583bd18bc0827ede5d60021e50/lxml-5.2.1-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:3a74c4f27167cb95c1d4af1c0b59e88b7f3e0182138db2501c353555f7ec57f4", size = 5347080, upload-time = "2024-04-02T18:17:32.97Z" }, + { url = "https://files.pythonhosted.org/packages/84/4c/195f220dd20814df9adfa6128fa824573efad59fbca0c33fc3890eb0e5a5/lxml-5.2.1-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:68a2610dbe138fa8c5826b3f6d98a7cfc29707b850ddcc3e21910a6fe51f6ca0", size = 4900172, upload-time = "2024-04-02T18:17:37.107Z" }, + { url = "https://files.pythonhosted.org/packages/ac/9b/f97fac2e2bacbc91d1a15f24e3bdbb52e418591109393144a943bd502d2c/lxml-5.2.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f0a1bc63a465b6d72569a9bba9f2ef0334c4e03958e043da1920299100bc7c08", size = 4939879, upload-time = "2024-04-02T18:17:40.637Z" }, + { url = "https://files.pythonhosted.org/packages/e4/b5/379aaae618fe2f74584d0227a6a41fbe365ae8b096de5f6fad0de5be94d3/lxml-5.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c2d35a1d047efd68027817b32ab1586c1169e60ca02c65d428ae815b593e65d4", size = 4789014, upload-time = "2024-04-02T18:17:44.716Z" }, + { url = "https://files.pythonhosted.org/packages/b6/f1/07d724e3a9e03d345255a442daa8449ee6c2db250b3d19cb56a1cafecbd8/lxml-5.2.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:79bd05260359170f78b181b59ce871673ed01ba048deef4bf49a36ab3e72e80b", size = 5338633, upload-time = "2024-04-02T18:17:48.426Z" }, + { url = "https://files.pythonhosted.org/packages/2d/3b/16a14eef29671f44b432eb97867e1c37e3953256fbc40c6d8a8e7e76b675/lxml-5.2.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:865bad62df277c04beed9478fe665b9ef63eb28fe026d5dedcb89b537d2e2ea6", size = 4784765, upload-time = "2024-04-02T18:17:52.062Z" }, + { url = "https://files.pythonhosted.org/packages/77/b0/13cdbcdbd59c83b9050c11dde4609e85c3cbe2fd331f473f530949a1373b/lxml-5.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:44f6c7caff88d988db017b9b0e4ab04934f11e3e72d478031efc7edcac6c622f", size = 4928467, upload-time = "2024-04-02T18:17:55.457Z" }, + { url = "https://files.pythonhosted.org/packages/e8/af/fb093dc0f2b10e66d829764117d4188de15fea7ac33a6956be5d03048df9/lxml-5.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:71e97313406ccf55d32cc98a533ee05c61e15d11b99215b237346171c179c0b0", size = 4783603, upload-time = "2024-04-02T18:17:58.694Z" }, + { url = "https://files.pythonhosted.org/packages/07/99/681ee4f6aa7b79ce9c3401611ca8390596065723b7ba90c7db189959fb5e/lxml-5.2.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:057cdc6b86ab732cf361f8b4d8af87cf195a1f6dc5b0ff3de2dced242c2015e0", size = 5372882, upload-time = "2024-04-02T18:18:02.48Z" }, + { url = "https://files.pythonhosted.org/packages/60/cc/5da8e739ee63b7e6232d69f769259fd74cde01cbb7e3d9311f0ef7414eb9/lxml-5.2.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:f3bbbc998d42f8e561f347e798b85513ba4da324c2b3f9b7969e9c45b10f6169", size = 4871170, upload-time = "2024-04-02T18:18:06.381Z" }, + { url = "https://files.pythonhosted.org/packages/a6/76/0569b713b6eade2c73792d2325705fe34585af7a98d26ac2b59a80045c99/lxml-5.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:491755202eb21a5e350dae00c6d9a17247769c64dcf62d8c788b5c135e179dc4", size = 4959114, upload-time = "2024-04-02T18:18:10.727Z" }, + { url = "https://files.pythonhosted.org/packages/49/36/376574a1ac472c39a6ccc376f2d77f93dc58acc348e8f1d3eb8fa7dc1ae1/lxml-5.2.1-cp312-cp312-win32.whl", hash = "sha256:8de8f9d6caa7f25b204fc861718815d41cbcf27ee8f028c89c882a0cf4ae4134", size = 3487276, upload-time = "2024-04-02T18:18:15.115Z" }, + { url = "https://files.pythonhosted.org/packages/37/a5/7b2e6152aefa0632871f77a202bb68eac52037e4498a6901be0f0458ffdc/lxml-5.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:f2a9efc53d5b714b8df2b4b3e992accf8ce5bbdfe544d74d5c6766c9e1146a3a", size = 3817449, upload-time = "2024-04-02T18:18:19.234Z" }, +] + +[[package]] +name = "lxml-html-clean" +version = "0.4.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "lxml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d9/cb/c9c5bb2a9c47292e236a808dd233a03531f53b626f36259dcd32b49c76da/lxml_html_clean-0.4.3.tar.gz", hash = "sha256:c9df91925b00f836c807beab127aac82575110eacff54d0a75187914f1bd9d8c", size = 21498, upload-time = "2025-10-02T20:49:24.895Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/4a/63a9540e3ca73709f4200564a737d63a4c8c9c4dd032bab8535f507c190a/lxml_html_clean-0.4.3-py3-none-any.whl", hash = "sha256:63fd7b0b9c3a2e4176611c2ca5d61c4c07ffca2de76c14059a81a2825833731e", size = 14177, upload-time = "2025-10-02T20:49:23.749Z" }, +] + +[[package]] +name = "manifestoo" +version = "1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "manifestoo-core" }, + { name = "textual" }, + { name = "typer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b2/1d/0937b4eaec56f393c2bfbfed013b7fd78d7e735bb5ef291a0d864f989545/manifestoo-1.1.tar.gz", hash = "sha256:5837e4b56f23c61ddb96bd011f6a7acff3e5e95910b8baa20b9f9a9189e1695e", size = 24307, upload-time = "2025-09-23T08:24:43.131Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/1a/096647b826caad99e2c1ab7d3e7c8ffc78afa893d8fa79324a22f7f2686a/manifestoo-1.1-py3-none-any.whl", hash = "sha256:27d35641247f4220246273a7554b43306dee668f8b14fefbce37a980ca8b3604", size = 19321, upload-time = "2025-09-23T08:24:41.609Z" }, +] + +[[package]] +name = "manifestoo-core" +version = "1.14" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fa/4c/29e74810ba49803bcf33a30371b1cfe633659a83fa44a0548c885da74a06/manifestoo_core-1.14.tar.gz", hash = "sha256:8232a43fe9988ada630cda93dc6653409cd5b5799c97fd1dd3f2c293bdc1da1f", size = 40852, upload-time = "2026-01-09T09:28:07.068Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1c/40/c238f1d4679acaeee58e110d4ef3010aeb290d97ecc4aff1761fc1f4df9a/manifestoo_core-1.14-py3-none-any.whl", hash = "sha256:3a560c760af9130a401414de88e777ad1ccffb46808a6ce201044c2be8cb876a", size = 65535, upload-time = "2026-01-09T09:28:05.67Z" }, +] + +[[package]] +name = "markdown-it-py" +version = "4.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload-time = "2025-08-11T12:57:52.854Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321, upload-time = "2025-08-11T12:57:51.923Z" }, +] + +[package.optional-dependencies] +linkify = [ + { name = "linkify-it-py" }, +] + +[[package]] +name = "markupsafe" +version = "2.1.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/87/5b/aae44c6655f3801e81aa3eef09dbbf012431987ba564d7231722f68df02d/MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b", size = 19384, upload-time = "2024-02-02T16:31:22.863Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/53/bd/583bf3e4c8d6a321938c13f49d44024dbe5ed63e0a7ba127e454a66da974/MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1", size = 18215, upload-time = "2024-02-02T16:30:33.081Z" }, + { url = "https://files.pythonhosted.org/packages/48/d6/e7cd795fc710292c3af3a06d80868ce4b02bfbbf370b7cee11d282815a2a/MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4", size = 14069, upload-time = "2024-02-02T16:30:34.148Z" }, + { url = "https://files.pythonhosted.org/packages/51/b5/5d8ec796e2a08fc814a2c7d2584b55f889a55cf17dd1a90f2beb70744e5c/MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee", size = 29452, upload-time = "2024-02-02T16:30:35.149Z" }, + { url = "https://files.pythonhosted.org/packages/0a/0d/2454f072fae3b5a137c119abf15465d1771319dfe9e4acbb31722a0fff91/MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5", size = 28462, upload-time = "2024-02-02T16:30:36.166Z" }, + { url = "https://files.pythonhosted.org/packages/2d/75/fd6cb2e68780f72d47e6671840ca517bda5ef663d30ada7616b0462ad1e3/MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b", size = 27869, upload-time = "2024-02-02T16:30:37.834Z" }, + { url = "https://files.pythonhosted.org/packages/b0/81/147c477391c2750e8fc7705829f7351cf1cd3be64406edcf900dc633feb2/MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a", size = 33906, upload-time = "2024-02-02T16:30:39.366Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ff/9a52b71839d7a256b563e85d11050e307121000dcebc97df120176b3ad93/MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f", size = 32296, upload-time = "2024-02-02T16:30:40.413Z" }, + { url = "https://files.pythonhosted.org/packages/88/07/2dc76aa51b481eb96a4c3198894f38b480490e834479611a4053fbf08623/MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169", size = 33038, upload-time = "2024-02-02T16:30:42.243Z" }, + { url = "https://files.pythonhosted.org/packages/96/0c/620c1fb3661858c0e37eb3cbffd8c6f732a67cd97296f725789679801b31/MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad", size = 16572, upload-time = "2024-02-02T16:30:43.326Z" }, + { url = "https://files.pythonhosted.org/packages/3f/14/c3554d512d5f9100a95e737502f4a2323a1959f6d0d01e0d0997b35f7b10/MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb", size = 17127, upload-time = "2024-02-02T16:30:44.418Z" }, +] + +[[package]] +name = "maxminddb" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/6e/6adbb0b2280a853e8b3344737fea5167e8a2a2ff67168555589b7278e2e8/maxminddb-3.0.0.tar.gz", hash = "sha256:9792b19625945dff146e2e3187f9e470b82330a912f7cea5581b8bd5af30da8b", size = 199784, upload-time = "2025-10-15T20:50:07.283Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/df/dec231686a814f9e279afb39f3e27091770d970964bb94e7bfc1fdf01428/maxminddb-3.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bcf83c60a44ec5dfab9e5d3a0c2347ee429d31fa89f88aa283d8551fd5e2c37a", size = 54352, upload-time = "2025-10-15T20:48:51.488Z" }, + { url = "https://files.pythonhosted.org/packages/14/e3/efb6d621a8940371ecbf393f84fde01f0521116bc281c40124292a593198/maxminddb-3.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:56856d0fadab323fb5dc3fa69bc4cb975242133cab1df2c710779738dadda75d", size = 36328, upload-time = "2025-10-15T20:48:52.85Z" }, + { url = "https://files.pythonhosted.org/packages/51/e8/17cbe454829befb32fec83745141bb6f9ef0b593d53c4e333e938d83ed26/maxminddb-3.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1bd05d919787719fc1026d53b0e7462cf0c389534620e407676ecf61c2d289bb", size = 36174, upload-time = "2025-10-15T20:48:53.874Z" }, + { url = "https://files.pythonhosted.org/packages/ae/1d/5492205210570d851d5a74f5c9c01022993edc74296eb792c890318eff25/maxminddb-3.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:29515dc3606d1d8fffdb4025dccf01c93d16651683e9c6d8611892a4c9f2566d", size = 101153, upload-time = "2025-10-15T20:48:55.013Z" }, + { url = "https://files.pythonhosted.org/packages/a6/07/f96b5e4fdfdd2cc7a9724f3fa40b6bc282c9d9bdcf85b1920a0dee50c00b/maxminddb-3.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:52b5edc32894643c93279de2d889c0b98906277e7e91cbba709bc55f5500ecca", size = 99465, upload-time = "2025-10-15T20:48:56.198Z" }, + { url = "https://files.pythonhosted.org/packages/d7/30/ef2c167277292ce360bcd2a11e0fa9fe2e4e67e7c7b49fff2eab7caae787/maxminddb-3.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0a095ce04e404315f9d47a186a7d96b11a283430d811ba6b0530167233100b95", size = 98395, upload-time = "2025-10-15T20:48:57.489Z" }, + { url = "https://files.pythonhosted.org/packages/04/c9/71ce286a4ba12ec74b094d1a627d57a306349f4f23ce66d3ec2eca045e9f/maxminddb-3.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1d3645a44c392d9ffdea4d2252d70b2910eee47d56b8305da0c0923a63e895d6", size = 97320, upload-time = "2025-10-15T20:48:58.7Z" }, + { url = "https://files.pythonhosted.org/packages/da/4a/3e3f24f876242dd53a8a95250669e2f08b8cd8bc4640e947c982efcdaca6/maxminddb-3.0.0-cp312-cp312-win32.whl", hash = "sha256:c0e6d54da5d85d38e674fee9b04b1ad9212c38cb57adcc7c86bb4ed71b2b6555", size = 35481, upload-time = "2025-10-15T20:49:00.755Z" }, + { url = "https://files.pythonhosted.org/packages/71/de/56feda63d5d8d896c2dcfa6ef9754a429fa2c5353fa5f0c32ed1f46fa004/maxminddb-3.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:4931ee0cbba030e1b729599e485aca438b668432ccd1eb73770c93bbc38f2b60", size = 37295, upload-time = "2025-10-15T20:49:01.993Z" }, + { url = "https://files.pythonhosted.org/packages/87/4a/87c86516dee431a9e6cdded7eb865b5b7fc7c73b17262a50c75e2da5c9b6/maxminddb-3.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:f55fb5c607dc4ddab7eba67da92d75921ef7d8e682ab47d21935566dc6990021", size = 34263, upload-time = "2025-10-15T20:49:03.237Z" }, +] + +[[package]] +name = "mdit-py-plugins" +version = "0.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b2/fd/a756d36c0bfba5f6e39a1cdbdbfdd448dc02692467d83816dff4592a1ebc/mdit_py_plugins-0.5.0.tar.gz", hash = "sha256:f4918cb50119f50446560513a8e311d574ff6aaed72606ddae6d35716fe809c6", size = 44655, upload-time = "2025-08-11T07:25:49.083Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl", hash = "sha256:07a08422fc1936a5d26d146759e9155ea466e842f5ab2f7d2266dd084c8dab1f", size = 57205, upload-time = "2025-08-11T07:25:47.597Z" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "num2words" +version = "0.5.13" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "docopt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0d/de/2030c83f7b6e241e1de375002101232cf9644080f5dcb229765486e1c9d2/num2words-0.5.13.tar.gz", hash = "sha256:a3064716fbbf90d75c449450cebfbc73a6a13e63b2531d09bdecc3ab1a2209cf", size = 188372, upload-time = "2023-10-18T15:06:00.44Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/f0/ca1228af2bcbce2fdf2b23d58643c84253b88a3c1cd9dba391ca683c4b21/num2words-0.5.13-py3-none-any.whl", hash = "sha256:39e662c663f0a7e15415431ea68eb3dc711b49e3b776d93403e1da0a219ca4ee", size = 143302, upload-time = "2023-10-18T15:05:58.348Z" }, +] + +[[package]] +name = "oca-custom" +version = "18.0" +source = { editable = "." } +dependencies = [ + { name = "asn1crypto" }, + { name = "babel" }, + { name = "cbor2" }, + { name = "chardet" }, + { name = "cryptography" }, + { name = "decorator" }, + { name = "docutils" }, + { name = "freezegun" }, + { name = "geoip2" }, + { name = "gevent" }, + { name = "greenlet" }, + { name = "idna" }, + { name = "jinja2" }, + { name = "libsass" }, + { name = "lxml" }, + { name = "lxml-html-clean" }, + { name = "markupsafe" }, + { name = "num2words" }, + { name = "odoo" }, + { name = "odoo-addon-account-banking-pain-base" }, + { name = "odoo-addon-account-banking-sepa-credit-transfer" }, + { name = "odoo-addon-account-credit-control" }, + { name = "odoo-addon-account-financial-report" }, + { name = "odoo-addon-account-lock-to-date" }, + { name = "odoo-addon-account-payment-mode" }, + { name = "odoo-addon-account-payment-order" }, + { name = "odoo-addon-account-payment-partner" }, + { name = "odoo-addon-account-payment-sale" }, + { name = "odoo-addon-account-payment-unece" }, + { name = "odoo-addon-account-reconcile-oca" }, + { name = "odoo-addon-account-statement-import-base" }, + { name = "odoo-addon-account-statement-import-file" }, + { name = "odoo-addon-account-statement-import-online-paypal" }, + { name = "odoo-addon-account-statement-import-online-wise" }, + { name = "odoo-addon-account-tax-unece" }, + { name = "odoo-addon-account-usability" }, + { name = "odoo-addon-base-technical-features" }, + { name = "odoo-addon-base-ubl" }, + { name = "odoo-addon-base-unece" }, + { name = "odoo-addon-bi-sql-editor" }, + { name = "odoo-addon-currency-rate-update" }, + { name = "odoo-addon-date-range" }, + { name = "odoo-addon-disable-odoo-online" }, + { name = "odoo-addon-document-knowledge" }, + { name = "odoo-addon-document-page" }, + { name = "odoo-addon-github-connector" }, + { name = "odoo-addon-github-connector-oca" }, + { name = "odoo-addon-github-connector-odoo" }, + { name = "odoo-addon-membership-delegated-partner-line" }, + { name = "odoo-addon-membership-extension" }, + { name = "odoo-addon-mis-builder" }, + { name = "odoo-addon-mis-builder-budget" }, + { name = "odoo-addon-mis-builder-cash-flow" }, + { name = "odoo-addon-mis-builder-demo" }, + { name = "odoo-addon-multi-step-wizard" }, + { name = "odoo-addon-partner-contact-access-link" }, + { name = "odoo-addon-partner-statement" }, + { name = "odoo-addon-project-role" }, + { name = "odoo-addon-project-task-add-very-high" }, + { name = "odoo-addon-report-xlsx" }, + { name = "odoo-addon-report-xlsx-helper" }, + { name = "odoo-addon-sentry" }, + { name = "odoo-addon-server-action-mass-edit" }, + { name = "odoo-addon-sql-request-abstract" }, + { name = "odoo-addon-survey-xlsx" }, + { name = "odoo-addon-uom-unece" }, + { name = "odoo-addon-web-refresher" }, + { name = "odoo-addon-web-responsive" }, + { name = "odoo-addon-web-search-with-and" }, + { name = "odoo-addon-web-widget-dropdown-dynamic" }, + { name = "ofxparse" }, + { name = "openpyxl" }, + { name = "passlib" }, + { name = "pdfminer-six" }, + { name = "pillow" }, + { name = "polib" }, + { name = "psutil" }, + { name = "psycopg2" }, + { name = "pyopenssl" }, + { name = "pypdf2" }, + { name = "pyserial" }, + { name = "python-dateutil" }, + { name = "python-ldap" }, + { name = "python-stdnum" }, + { name = "pytz" }, + { name = "pyusb" }, + { name = "qrcode" }, + { name = "reportlab" }, + { name = "requests" }, + { name = "rjsmin" }, + { name = "urllib3" }, + { name = "vobject" }, + { name = "werkzeug" }, + { name = "xlrd" }, + { name = "xlsxwriter" }, + { name = "xlwt" }, + { name = "zeep" }, +] + +[package.dev-dependencies] +dev = [ + { name = "manifestoo" }, + { name = "odoo-test-helper" }, + { name = "parameterized" }, + { name = "pytest" }, + { name = "pytest-cov" }, + { name = "pytest-odoo" }, + { name = "pytest-xdist" }, + { name = "websocket-client" }, +] + +[package.metadata] +requires-dist = [ + { name = "asn1crypto", specifier = "==1.5.1" }, + { name = "babel", specifier = "==2.10.3" }, + { name = "cbor2", specifier = "==5.6.2" }, + { name = "chardet", specifier = "==5.2.0" }, + { name = "cryptography", specifier = "==42.0.8" }, + { name = "decorator", specifier = "==5.1.1" }, + { name = "docutils", specifier = "==0.20.1" }, + { name = "freezegun", specifier = "==1.2.1" }, + { name = "geoip2", specifier = "==2.9.0" }, + { name = "gevent", specifier = "==24.2.1" }, + { name = "greenlet", specifier = "==3.0.3" }, + { name = "idna", specifier = "==3.6" }, + { name = "jinja2", specifier = "==3.1.2" }, + { name = "libsass", specifier = "==0.22.0" }, + { name = "lxml", specifier = "==5.2.1" }, + { name = "lxml-html-clean" }, + { name = "markupsafe", specifier = "==2.1.5" }, + { name = "num2words", specifier = "==0.5.13" }, + { name = "odoo", git = "https://github.com/OCA/OCB" }, + { name = "odoo-addon-account-banking-pain-base", specifier = "==18.0.*" }, + { name = "odoo-addon-account-banking-sepa-credit-transfer", specifier = "==18.0.*" }, + { name = "odoo-addon-account-credit-control", specifier = "==18.0.*" }, + { name = "odoo-addon-account-financial-report", specifier = "==18.0.*" }, + { name = "odoo-addon-account-lock-to-date", specifier = "==18.0.*" }, + { name = "odoo-addon-account-payment-mode", specifier = "==18.0.*" }, + { name = "odoo-addon-account-payment-order", specifier = "==18.0.*" }, + { name = "odoo-addon-account-payment-partner", specifier = "==18.0.*" }, + { name = "odoo-addon-account-payment-sale", specifier = "==18.0.*" }, + { name = "odoo-addon-account-payment-unece", specifier = "==18.0.*" }, + { name = "odoo-addon-account-reconcile-oca", specifier = "==18.0.*" }, + { name = "odoo-addon-account-statement-import-base", specifier = "==18.0.*" }, + { name = "odoo-addon-account-statement-import-file", specifier = "==18.0.*" }, + { name = "odoo-addon-account-statement-import-online-paypal", specifier = "==18.0.*" }, + { name = "odoo-addon-account-statement-import-online-wise", git = "https://github.com/Therp/bank-statement-import?subdirectory=account_statement_import_online_wise&branch=18.0-mig-account-statement-import-online-wise" }, + { name = "odoo-addon-account-tax-unece", specifier = "==18.0.*" }, + { name = "odoo-addon-account-usability", specifier = "==18.0.*" }, + { name = "odoo-addon-base-technical-features", specifier = "==18.0.*" }, + { name = "odoo-addon-base-ubl", specifier = "==18.0.*" }, + { name = "odoo-addon-base-unece", specifier = "==18.0.*" }, + { name = "odoo-addon-bi-sql-editor", specifier = "==18.0.*" }, + { name = "odoo-addon-currency-rate-update", specifier = "==18.0.*" }, + { name = "odoo-addon-date-range", specifier = "==18.0.*" }, + { name = "odoo-addon-disable-odoo-online", specifier = "==18.0.*" }, + { name = "odoo-addon-document-knowledge", specifier = "==18.0.*" }, + { name = "odoo-addon-document-page", specifier = "==18.0.*" }, + { name = "odoo-addon-github-connector", specifier = "==18.0.*" }, + { name = "odoo-addon-github-connector-oca", git = "https://github.com/Therp/interface-github?subdirectory=github_connector_oca&branch=18.0-mig-github_connector_oca" }, + { name = "odoo-addon-github-connector-odoo", specifier = "==18.0.*" }, + { name = "odoo-addon-membership-delegated-partner-line", git = "https://github.com/gfcapalbo/vertical-association?subdirectory=membership_delegated_partner_line&branch=18.0-MIG-membership_delegated_partner_line" }, + { name = "odoo-addon-membership-extension", specifier = "==18.0.*" }, + { name = "odoo-addon-mis-builder", specifier = "==18.0.*" }, + { name = "odoo-addon-mis-builder-budget", specifier = "==18.0.*" }, + { name = "odoo-addon-mis-builder-cash-flow", specifier = "==18.0.*" }, + { name = "odoo-addon-mis-builder-demo", specifier = "==18.0.*" }, + { name = "odoo-addon-multi-step-wizard", specifier = "==18.0.*" }, + { name = "odoo-addon-partner-contact-access-link", specifier = "==18.0.*" }, + { name = "odoo-addon-partner-statement", specifier = "==18.0.*" }, + { name = "odoo-addon-project-role", specifier = "==18.0.*" }, + { name = "odoo-addon-project-task-add-very-high", specifier = "==18.0.*" }, + { name = "odoo-addon-report-xlsx", specifier = "==18.0.*" }, + { name = "odoo-addon-report-xlsx-helper", specifier = "==18.0.*" }, + { name = "odoo-addon-sentry", specifier = "==18.0.*" }, + { name = "odoo-addon-server-action-mass-edit", specifier = "==18.0.*" }, + { name = "odoo-addon-sql-request-abstract", specifier = "==18.0.*" }, + { name = "odoo-addon-survey-xlsx", git = "https://github.com/ByteMeAsap/survey?subdirectory=survey_xlsx&branch=18.0-mig-survey_xlsx" }, + { name = "odoo-addon-uom-unece", specifier = "==18.0.*" }, + { name = "odoo-addon-web-refresher", specifier = "==18.0.*" }, + { name = "odoo-addon-web-responsive", specifier = "==18.0.*" }, + { name = "odoo-addon-web-search-with-and", specifier = "==18.0.*" }, + { name = "odoo-addon-web-widget-dropdown-dynamic", specifier = "==18.0.*" }, + { name = "ofxparse", specifier = "==0.21" }, + { name = "openpyxl", specifier = "==3.1.2" }, + { name = "passlib", specifier = "==1.7.4" }, + { name = "pdfminer-six", specifier = "==20211012" }, + { name = "pillow", specifier = "==10.2.0" }, + { name = "polib", specifier = "==1.1.1" }, + { name = "psutil", specifier = "==5.9.8" }, + { name = "psycopg2", specifier = "==2.9.9" }, + { name = "pyopenssl", specifier = "==24.1.0" }, + { name = "pypdf2", specifier = "==2.12.1" }, + { name = "pyserial", specifier = "==3.5" }, + { name = "python-dateutil", specifier = "==2.8.2" }, + { name = "python-ldap", specifier = "==3.4.4" }, + { name = "python-stdnum", specifier = "==1.19" }, + { name = "pytz" }, + { name = "pyusb", specifier = "==1.2.1" }, + { name = "qrcode", specifier = "==7.4.2" }, + { name = "reportlab", specifier = "==4.1.0" }, + { name = "requests", specifier = "==2.31.0" }, + { name = "rjsmin", specifier = "==1.2.0" }, + { name = "urllib3", specifier = "==2.0.7" }, + { name = "vobject", specifier = "==0.9.6.1" }, + { name = "werkzeug", specifier = "==3.0.1" }, + { name = "xlrd", specifier = "==2.0.1" }, + { name = "xlsxwriter", specifier = "==3.1.9" }, + { name = "xlwt", specifier = "==1.3.0" }, + { name = "zeep", specifier = "==4.2.1" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "manifestoo", specifier = ">=1.0" }, + { name = "odoo-test-helper" }, + { name = "parameterized", specifier = ">=0.9.0" }, + { name = "pytest", specifier = ">8" }, + { name = "pytest-cov", specifier = ">=5.0.0" }, + { name = "pytest-odoo", specifier = "==2.1.2" }, + { name = "pytest-xdist", specifier = ">=3.6.1" }, + { name = "websocket-client" }, +] + +[[package]] +name = "odoo" +version = "18.0" +source = { git = "https://github.com/OCA/OCB#16055b5031886551238c14d54523701bcf35c0d7" } +dependencies = [ + { name = "asn1crypto" }, + { name = "babel" }, + { name = "cbor2" }, + { name = "chardet" }, + { name = "cryptography" }, + { name = "decorator" }, + { name = "docutils" }, + { name = "geoip2" }, + { name = "gevent" }, + { name = "greenlet" }, + { name = "idna" }, + { name = "jinja2" }, + { name = "libsass" }, + { name = "lxml" }, + { name = "markupsafe" }, + { name = "num2words" }, + { name = "ofxparse" }, + { name = "openpyxl" }, + { name = "passlib" }, + { name = "pillow" }, + { name = "polib" }, + { name = "psutil" }, + { name = "psycopg2" }, + { name = "pyopenssl" }, + { name = "pypdf2" }, + { name = "pyserial" }, + { name = "python-dateutil" }, + { name = "python-stdnum" }, + { name = "pytz" }, + { name = "pyusb" }, + { name = "qrcode" }, + { name = "reportlab" }, + { name = "requests" }, + { name = "rjsmin" }, + { name = "urllib3" }, + { name = "vobject" }, + { name = "werkzeug" }, + { name = "xlrd" }, + { name = "xlsxwriter" }, + { name = "xlwt" }, + { name = "zeep" }, +] + +[[package]] +name = "odoo-addon-account-banking-pain-base" +version = "18.0.1.1.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "lxml" }, + { name = "odoo" }, + { name = "odoo-addon-account-payment-order" }, + { name = "unidecode" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/4e/88f6c63cc1bdd49f2fb5fac07f953934bb30a74a54bf3eaca7e7593227da/odoo_addon_account_banking_pain_base-18.0.1.1.0.3-py3-none-any.whl", hash = "sha256:46f6c0537f8517ba733ea0a20de58f82a5c113a1bfea65a974e99c622a3f4ea0", size = 124932, upload-time = "2025-12-12T02:42:16.987Z" }, +] + +[[package]] +name = "odoo-addon-account-banking-sepa-credit-transfer" +version = "18.0.1.0.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-account-banking-pain-base" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/d6/cb/68797404697c6059b1805959c9ecd926de553c1db6da90f8cfd99ec79601/odoo_addon_account_banking_sepa_credit_transfer-18.0.1.0.0.2-py3-none-any.whl", hash = "sha256:55806488e3899e271d338baa3690bf607f2709fdd4681429080eaa98d007a721", size = 80663, upload-time = "2025-07-17T18:13:10.813Z" }, +] + +[[package]] +name = "odoo-addon-account-credit-control" +version = "18.0.2.0.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/8c/de/8b0eecf530ff34a15203f66d2336a20b8150fb4786bd9b3a54d2af5c5539/odoo_addon_account_credit_control-18.0.2.0.1.1-py3-none-any.whl", hash = "sha256:a2c1ebecae47d19051cfd768d51ab80751e8056613cd832153df69294807c24b", size = 736645, upload-time = "2025-12-10T02:50:26.968Z" }, +] + +[[package]] +name = "odoo-addon-account-financial-report" +version = "18.0.1.4.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-date-range" }, + { name = "odoo-addon-report-xlsx" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/c4/b93659c2ea20102575483ec464f61608d925c02ca608fe27fa54331aaa4b/odoo_addon_account_financial_report-18.0.1.4.3-py3-none-any.whl", hash = "sha256:977b185350df96d3f08c7716a9d2a7ef816978e8ed0e819f61e42641dfb83469", size = 336394, upload-time = "2025-12-31T10:54:58.032Z" }, +] + +[[package]] +name = "odoo-addon-account-lock-to-date" +version = "18.0.1.0.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/2f/74c4a42ef9f237acc303847d36f0c950ff23e73a17e3cfec2286e8cd09ab/odoo_addon_account_lock_to_date-18.0.1.0.0.2-py3-none-any.whl", hash = "sha256:2319d2ce913d151073e9239105e33c79ccea11402d89cb9d60d39a7c5357ccf2", size = 38568, upload-time = "2025-08-13T11:21:43.215Z" }, +] + +[[package]] +name = "odoo-addon-account-payment-method-base" +version = "18.0.1.0.0.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/8b/90/6bd94d2cf8a42b09c4c38bf51fc3546b52c0e0c33c1b47f9e63e5abcd859/odoo_addon_account_payment_method_base-18.0.1.0.0.7-py3-none-any.whl", hash = "sha256:6cf8a189f564978bbc50d154659ae779c380438a5ada46e2fc9189181bb2e895", size = 25486, upload-time = "2025-06-25T02:38:00.988Z" }, +] + +[[package]] +name = "odoo-addon-account-payment-mode" +version = "18.0.1.0.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/bb/bc/4d8e57ea36c77490f8802d772c12e14a737936f53ee6e74b99d1a563bcaa/odoo_addon_account_payment_mode-18.0.1.0.2.1-py3-none-any.whl", hash = "sha256:dc6a5f7a62481b233c0baa4ccc5647f47de4e2a2f42d591bfa86216e35158372", size = 105293, upload-time = "2025-12-18T02:43:23.617Z" }, +] + +[[package]] +name = "odoo-addon-account-payment-order" +version = "18.0.1.2.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-account-payment-partner" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/95/1490ae46bb31b9772fdbb7395a97d030696e21109a1c1248f8147de3ff8c/odoo_addon_account_payment_order-18.0.1.2.1.2-py3-none-any.whl", hash = "sha256:00dc4206123175beccbe25edffd4bc74d5ea3b7fafc72c8ea355eb3305ebc9e8", size = 336887, upload-time = "2025-12-04T02:42:19.254Z" }, +] + +[[package]] +name = "odoo-addon-account-payment-partner" +version = "18.0.1.0.2.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-account-payment-mode" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/09/d0/3eb1999d7e26d0bac480afbe4b01d583a54df19be66b87121a708e0c123b/odoo_addon_account_payment_partner-18.0.1.0.2.3-py3-none-any.whl", hash = "sha256:91dc339f4ef08a7a101641c403f89457e45e4faef982e655d3d7313fca850791", size = 81657, upload-time = "2025-12-18T02:43:30.854Z" }, +] + +[[package]] +name = "odoo-addon-account-payment-sale" +version = "18.0.1.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-account-payment-partner" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/d6/c9/8151dc64f4b575bb9ca820c3b039acf3eb2948793ddaf76c8522a22b8ffb/odoo_addon_account_payment_sale-18.0.1.0.2-py3-none-any.whl", hash = "sha256:16d0d5c95c1f9c4af4fa8f76ace2c02fbc32991e7b089df7c9cdd44c70a006be", size = 40136, upload-time = "2025-12-17T19:36:36.812Z" }, +] + +[[package]] +name = "odoo-addon-account-payment-unece" +version = "18.0.1.0.0.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-account-payment-method-base" }, + { name = "odoo-addon-base-unece" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/5c/02ff5f7ad1c251fd6895a4a7f2c1886a923c065fafda4be5d3f4ca6e4ac5/odoo_addon_account_payment_unece-18.0.1.0.0.5-py3-none-any.whl", hash = "sha256:247cdac13c6caa518c81431dd8e12e6023c0161615ac220a9c897488d7163c48", size = 34263, upload-time = "2025-06-04T08:55:52.986Z" }, +] + +[[package]] +name = "odoo-addon-account-reconcile-model-oca" +version = "18.0.1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/6d/a4bc98c2ea2d214e8139e8ff7e469584e96eb17cff5b0ed881f7caf3f6cc/odoo_addon_account_reconcile_model_oca-18.0.1.1.1-py3-none-any.whl", hash = "sha256:5ccfee3435a588578b1d1db0b8e8b83c8f5923ed69aa5490dfd0007ebfa5f874", size = 46906, upload-time = "2025-12-10T12:36:30.963Z" }, +] + +[[package]] +name = "odoo-addon-account-reconcile-oca" +version = "18.0.1.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-account-reconcile-model-oca" }, + { name = "odoo-addon-account-statement-base" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/1a/a242c1729a11db6a0e403a5975de0e129d3b812262bf11fd8c77cffb832a/odoo_addon_account_reconcile_oca-18.0.1.1.5-py3-none-any.whl", hash = "sha256:01cd1a239a6e33003fcaa9c4204ef76ef7d0cecdbe01c7752ad0bd613323e763", size = 126336, upload-time = "2026-01-09T10:20:50.002Z" }, +] + +[[package]] +name = "odoo-addon-account-statement-base" +version = "18.0.1.2.0.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/9b/30179382856398fd32d39a0b24d4b808a56f816facd1e366620d36afb9de/odoo_addon_account_statement_base-18.0.1.2.0.5-py3-none-any.whl", hash = "sha256:50d7466f4e18fe1578d6578fdf79f75fe0fdc0f2b4429673f5230bae9a5110cb", size = 37831, upload-time = "2025-12-12T02:40:49.764Z" }, +] + +[[package]] +name = "odoo-addon-account-statement-import-base" +version = "18.0.1.0.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-account-statement-base" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/34/dba25e5f7a625ad4950ee52d9f00fe8bd1dfda984d205c6b42e8b43c16b2/odoo_addon_account_statement_import_base-18.0.1.0.0.3-py3-none-any.whl", hash = "sha256:b91ff95fec71c6819e4a16c42f82ba5c0a929e7725166c65fc5df730080d4ecb", size = 29667, upload-time = "2024-12-18T02:41:12.302Z" }, +] + +[[package]] +name = "odoo-addon-account-statement-import-file" +version = "18.0.1.0.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-account-statement-import-base" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/0b/0bd1bb4faa02a80d31ed6baa1ffd779e7675e7b28a815aec85e5eb091620/odoo_addon_account_statement_import_file-18.0.1.0.2.2-py3-none-any.whl", hash = "sha256:6652bdb94a676dbd43af067866d188b19a9452b91e152566924bb99cca61a9c2", size = 343336, upload-time = "2025-09-03T02:40:22.566Z" }, +] + +[[package]] +name = "odoo-addon-account-statement-import-online" +version = "18.0.1.1.2.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-account-statement-import-base" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/21/9c/51734ea7e7abc488241021121706a8eb91f1b4f32fc0a9840a593bc15963/odoo_addon_account_statement_import_online-18.0.1.1.2.3-py3-none-any.whl", hash = "sha256:d198286906d32d0a7a480f86c9722b7150507515d86fe50a58f23462553384a7", size = 69422, upload-time = "2025-12-12T02:43:08.174Z" }, +] + +[[package]] +name = "odoo-addon-account-statement-import-online-paypal" +version = "18.0.1.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-account-statement-import-online" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/f6/fcce33781f7fb924584cc0b2107322a45a17db216afa5c363b673296b752/odoo_addon_account_statement_import_online_paypal-18.0.1.0.2-py3-none-any.whl", hash = "sha256:b53f8baae23caf8d52a01226bfe7c686eee2544c26988bc73b0f0b41144ec967", size = 50836, upload-time = "2025-10-07T13:56:22.993Z" }, +] + +[[package]] +name = "odoo-addon-account-statement-import-online-wise" +version = "18.0.1.0.0.1" +source = { git = "https://github.com/Therp/bank-statement-import?subdirectory=account_statement_import_online_wise&branch=18.0-mig-account-statement-import-online-wise#f0aefbdeb99e181fa21122f5639c564864d734d7" } +dependencies = [ + { name = "cryptography" }, + { name = "odoo" }, + { name = "odoo-addon-account-statement-import-online" }, + { name = "odoo-addon-web-widget-dropdown-dynamic" }, +] + +[[package]] +name = "odoo-addon-account-tax-unece" +version = "18.0.1.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-base-unece" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/93/14419e73a0ef44e89f9af131bedd79487428ba15ca1a0f1660cb408f78bc/odoo_addon_account_tax_unece-18.0.1.1.0-py3-none-any.whl", hash = "sha256:87304879668b6341edebfc610112ba5169262f6cc8877240e2c7c19677e3e5a5", size = 37115, upload-time = "2025-12-09T18:17:12.415Z" }, +] + +[[package]] +name = "odoo-addon-account-usability" +version = "18.0.1.1.0.11" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/08/1a86c102766c5ba692aea26ede593f076f1a81951f07280eaecc6ef4981b/odoo_addon_account_usability-18.0.1.1.0.11-py3-none-any.whl", hash = "sha256:c2b1bec982de59112616c57baad7d492c0613c482a741dfc40f6c7f696494616", size = 53409, upload-time = "2026-01-06T02:34:52.431Z" }, +] + +[[package]] +name = "odoo-addon-base-technical-features" +version = "18.0.1.0.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/ff/d602e8fd8d44c8584ae096d9e2dc925a0d6f657974b84366f7414a0cc988/odoo_addon_base_technical_features-18.0.1.0.2.1-py3-none-any.whl", hash = "sha256:dc987e80308d5e06b4db02764b057048fe28f9ce09a0334327f8bda18331c6e0", size = 86058, upload-time = "2025-02-05T03:34:34.544Z" }, +] + +[[package]] +name = "odoo-addon-base-ubl" +version = "18.0.1.0.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/b8/24/806be7d1fdd5b3b5c242398af6ccffcf2493e9164462e61596e8d718b7d8/odoo_addon_base_ubl-18.0.1.0.0.3-py3-none-any.whl", hash = "sha256:3687192cd98b7efa4bf0fb1f7eb1f8cf2230810f5a00a8b7b46edd6dd6958c62", size = 1258219, upload-time = "2025-06-13T07:58:34.868Z" }, +] + +[[package]] +name = "odoo-addon-base-unece" +version = "18.0.1.0.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/ad/72e2ea3cbf25db6a2819d67667ec983a38fe184bb8cb829cb47b98809497/odoo_addon_base_unece-18.0.1.0.0.3-py3-none-any.whl", hash = "sha256:ccce68b738462a0148234be8a6c6ddf6886ae10307544735c8b46e44b3751ded", size = 30647, upload-time = "2024-12-28T02:40:08.717Z" }, +] + +[[package]] +name = "odoo-addon-bi-sql-editor" +version = "18.0.1.0.4.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-sql-request-abstract" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/58/b2af78fb5b5a4cdca2bd4e6cc07374db22356a0769beec4b64e5699b0c0a/odoo_addon_bi_sql_editor-18.0.1.0.4.3-py3-none-any.whl", hash = "sha256:e7a51c505e920d6d02297055fb28ac3759cb54bc63751fefe054cf42ada20003", size = 468551, upload-time = "2025-10-30T03:58:45.658Z" }, +] + +[[package]] +name = "odoo-addon-currency-rate-update" +version = "18.0.1.0.1.15" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/7e/d17283c919afe653dc786807a8c20e4b5fa438cf6be3c31e9c623cd027a7/odoo_addon_currency_rate_update-18.0.1.0.1.15-py3-none-any.whl", hash = "sha256:ffe96c78c728c03d2780f5033663648794731e9151a8202ad86bc09ac7d0fc22", size = 245564, upload-time = "2025-11-27T02:51:35.641Z" }, +] + +[[package]] +name = "odoo-addon-date-range" +version = "18.0.1.0.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/fa/46e5f94d4eac74a6a171ba3b3f30f3a8a7f9c7e0efbb4c414ee854846c14/odoo_addon_date_range-18.0.1.0.0.9-py3-none-any.whl", hash = "sha256:d0ea2f2e463f65045027908c26ee666fd737d8dc0be5f658cf05d1513a08d1c7", size = 2302276, upload-time = "2025-11-25T04:11:08.174Z" }, +] + +[[package]] +name = "odoo-addon-disable-odoo-online" +version = "18.0.1.0.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/b4/42/d66ff71ec260163e94e449a8db9b5c9fc73f9f6166c15466ea345d387d36/odoo_addon_disable_odoo_online-18.0.1.0.0.2-py3-none-any.whl", hash = "sha256:6a3722c83cd1e01eb7b2698d1318ce66e81068b705c167d2c7ab44cc1981de75", size = 25394, upload-time = "2024-12-06T16:33:06.916Z" }, +] + +[[package]] +name = "odoo-addon-document-knowledge" +version = "18.0.1.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/c9/a1/b6b0ca1a29ba8c9ed40b44c0d4f4810d63073dccc29f9c86ef43ad337dc8/odoo_addon_document_knowledge-18.0.1.0.2-py3-none-any.whl", hash = "sha256:9d1cf8f6929c3782215270609fad2f3d860daa3a598a507a7672f0e7e5ecbfb2", size = 123061, upload-time = "2025-10-01T05:29:27.319Z" }, +] + +[[package]] +name = "odoo-addon-document-page" +version = "18.0.2.1.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-document-knowledge" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/92/5a/5f2957ed64a1a0ff78af8cd65859987990fdf6e8f35e1e7ca4f16068ffc1/odoo_addon_document_page-18.0.2.1.0.1-py3-none-any.whl", hash = "sha256:7382cfe55a696fc39ace4d571d24674a08f0e7ec4f7b961050b92a8b1e7ec4b3", size = 920357, upload-time = "2025-12-18T03:10:32.833Z" }, +] + +[[package]] +name = "odoo-addon-github-connector" +version = "18.0.1.0.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gitpython" }, + { name = "odoo" }, + { name = "pathspec" }, + { name = "pygithub" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/15/f3bbdd74884e80a828c185060226f3a0681c275aa8a782b1fabbdea33501/odoo_addon_github_connector-18.0.1.0.0.2-py3-none-any.whl", hash = "sha256:a49d9a18f63bd69933f6d5759ea2529b67f04f9ab19a22839cdafb2aafebadc8", size = 583615, upload-time = "2025-05-21T11:47:23.966Z" }, +] + +[[package]] +name = "odoo-addon-github-connector-oca" +version = "18.0.1.0.0" +source = { git = "https://github.com/Therp/interface-github?subdirectory=github_connector_oca&branch=18.0-mig-github_connector_oca#bc3f6da8e1f5ef81b3c0b8a0a0f524dfae32d4e9" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-github-connector-odoo" }, +] + +[[package]] +name = "odoo-addon-github-connector-odoo" +version = "18.0.1.0.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-github-connector" }, + { name = "pathspec" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/6a/1c9df36717b3fb5c3d75fe390b7dfd8532898a7213039e69e980a46550fc/odoo_addon_github_connector_odoo-18.0.1.0.1.1-py3-none-any.whl", hash = "sha256:f83fdc39ab0981a891011986393b59859257189559e0c0ef9c75ddb4f1c6a6b9", size = 388134, upload-time = "2025-10-14T03:01:42.554Z" }, +] + +[[package]] +name = "odoo-addon-membership-delegated-partner-line" +version = "18.0.1.0.0.1" +source = { git = "https://github.com/gfcapalbo/vertical-association?subdirectory=membership_delegated_partner_line&branch=18.0-MIG-membership_delegated_partner_line#602a37338fe362cfb86d84faa28d66dce1bc60e7" } +dependencies = [ + { name = "odoo" }, +] + +[[package]] +name = "odoo-addon-membership-extension" +version = "18.0.1.0.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/29/af4852e240934119b3c7e3cb60b26c64425b3df6ebd015ad118693a9dc9e/odoo_addon_membership_extension-18.0.1.0.0.2-py3-none-any.whl", hash = "sha256:d72b383aa0c49350c597f26c8b7f2437a0afe1a87ca3b8104f03e4ebefa17cf0", size = 246632, upload-time = "2025-08-05T07:21:35.712Z" }, +] + +[[package]] +name = "odoo-addon-mis-builder" +version = "18.0.1.8.0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-date-range" }, + { name = "odoo-addon-report-xlsx" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/4d/bf243f68c6ae3c11410128ff73076a45d65335750fc2339b563004cbfaa9/odoo_addon_mis_builder-18.0.1.8.0.4-py3-none-any.whl", hash = "sha256:0ebd3babb91f9f80668b9317a9232d3918ad49a157ec6d56dac9ee43785b23ce", size = 624600, upload-time = "2025-11-27T03:33:02.815Z" }, +] + +[[package]] +name = "odoo-addon-mis-builder-budget" +version = "18.0.2.0.0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-mis-builder" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/95/ea0838b4db9c6cc3eb4ffd99e6623da7b59e0aa735c0b096f6c82e0f22a9/odoo_addon_mis_builder_budget-18.0.2.0.0.4-py3-none-any.whl", hash = "sha256:8425d04f25c70cc6724d762a496cfde9fd630a7a49f472d1604324d5f14ab76b", size = 89183, upload-time = "2025-11-04T03:31:28.889Z" }, +] + +[[package]] +name = "odoo-addon-mis-builder-cash-flow" +version = "18.0.1.0.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-mis-builder" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/c9/1f104edd2cd2551a676f3f722e6f829c65eeef9ac6a1b22ed86cdc9934e7/odoo_addon_mis_builder_cash_flow-18.0.1.0.1.2-py3-none-any.whl", hash = "sha256:21abaa3e2ce61983c15deedf75ad404a0d6609847f82d95caaeb9dc3104d6e04", size = 51448, upload-time = "2025-10-28T02:33:03.063Z" }, +] + +[[package]] +name = "odoo-addon-mis-builder-demo" +version = "18.0.1.0.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-mis-builder-budget" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/2c/a432993fd0bfc5c9f163612c8096669c842ed1f6af011c3a6882883ed073/odoo_addon_mis_builder_demo-18.0.1.0.0.3-py3-none-any.whl", hash = "sha256:e948c9a228e2f52819fee4a418c548525956ae7c250eed9d3ddfa50333e93488", size = 38591, upload-time = "2025-11-29T03:32:23.65Z" }, +] + +[[package]] +name = "odoo-addon-multi-step-wizard" +version = "18.0.1.0.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/85/fe/9e30a8f1fd925b60c3dff782f62eedb6552ea5df541281a8970ebc3a06db/odoo_addon_multi_step_wizard-18.0.1.0.0.3-py3-none-any.whl", hash = "sha256:0a60f98419a90cc40302790a3779a6008d7863347ca69b394883006a0a26c4bc", size = 34465, upload-time = "2025-09-23T03:48:24.058Z" }, +] + +[[package]] +name = "odoo-addon-partner-contact-access-link" +version = "18.0.1.0.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/ef/53abd771035bf9752648d49dd9214d550314e3176a5abc0cb6e2d8ade872/odoo_addon_partner_contact_access_link-18.0.1.0.0.3-py3-none-any.whl", hash = "sha256:c28ae259a61e6b306e642db66d07c7854a80f4911879e9762bb3069416257800", size = 314424, upload-time = "2024-12-18T03:27:23.65Z" }, +] + +[[package]] +name = "odoo-addon-partner-statement" +version = "18.0.1.1.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-report-xlsx" }, + { name = "odoo-addon-report-xlsx-helper" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/a9/bf10fc5c45d882f49185c4ca0e6b22e9f33200fd09c969b3d0cd6e2d794e/odoo_addon_partner_statement-18.0.1.1.1.2-py3-none-any.whl", hash = "sha256:c3dfbe8b1900f66a7ff9dfe1d6ca2ec2f62a0e5261ed06cc7fe1fca5636b7c8b", size = 133609, upload-time = "2025-12-25T02:32:54.341Z" }, +] + +[[package]] +name = "odoo-addon-project-role" +version = "18.0.1.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/6e/07/9211ef1b54cdac0054680e857f29fe0348da0c99c24392c224d4c85903ef/odoo_addon_project_role-18.0.1.0.1-py3-none-any.whl", hash = "sha256:0852628ed606bcdee3e935fd4ba54a0d060dfcd35235a33dac8e59a244a373b3", size = 64994, upload-time = "2026-01-08T08:56:19.599Z" }, +] + +[[package]] +name = "odoo-addon-project-task-add-very-high" +version = "18.0.1.1.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/c9/fa473f0b83d56c86ebff691f8df26137d24cde37fbddcb73d7e9f4e767e2/odoo_addon_project_task_add_very_high-18.0.1.1.0.2-py3-none-any.whl", hash = "sha256:1e2df58b9d8cae8657c7cab3ceff2f1865f29a87d6020ac50c03a321c93b2fc5", size = 84181, upload-time = "2025-06-05T03:25:37.08Z" }, +] + +[[package]] +name = "odoo-addon-report-xlsx" +version = "18.0.1.1.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/12/6cb4f545a511efc0a6cbff426eecb0730ba24de4338e4bff1100fc33e463/odoo_addon_report_xlsx-18.0.1.1.2.2-py3-none-any.whl", hash = "sha256:7b4f17488ecaf96bb591df7cdcecc4a676b8dff7615041a68ae82095ff57c3ee", size = 46837, upload-time = "2025-12-17T03:56:13.802Z" }, +] + +[[package]] +name = "odoo-addon-report-xlsx-helper" +version = "18.0.1.0.0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-report-xlsx" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/61/1e7db868f1f129eaa7a9a16788a996c773da4b431839d0cf2150f9719cec/odoo_addon_report_xlsx_helper-18.0.1.0.0.4-py3-none-any.whl", hash = "sha256:4aee9069f5af10b88b379e01fb1470a3142925dc85c473cf2842f3707ec41e3c", size = 38847, upload-time = "2025-09-09T03:47:02.251Z" }, +] + +[[package]] +name = "odoo-addon-sentry" +version = "18.0.1.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "sentry-sdk" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/15/7f98c5e326e5b4d93efebb72249c62a4f68a818e1f6214fd2500bd1c8396/odoo_addon_sentry-18.0.1.0.3-py3-none-any.whl", hash = "sha256:7edd3aebd9acbf5013dea90a6fd42258e40ca632899f91618a2a4133be929060", size = 32618, upload-time = "2025-08-20T23:03:28.388Z" }, +] + +[[package]] +name = "odoo-addon-server-action-mass-edit" +version = "18.0.1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, + { name = "openupgradelib" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/30/a6/b2b782c602cda5f5b266bdd67aaa6feaf86a228f7c3cfb46019b3d40ed8b/odoo_addon_server_action_mass_edit-18.0.1.1.1-py3-none-any.whl", hash = "sha256:021bcbb2ffdb9da05f3fb6b5eec53fc08b70a9c64c34de9a58ee5e0c740d6c79", size = 381941, upload-time = "2025-10-17T14:48:11.298Z" }, +] + +[[package]] +name = "odoo-addon-sql-request-abstract" +version = "18.0.1.0.0.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/6c/4c79b297e78e4edcbd004278d5ca0e411369a57a1105c41d65f87c7cde81/odoo_addon_sql_request_abstract-18.0.1.0.0.12-py3-none-any.whl", hash = "sha256:bdb61070c355fd9fba472d8f7d4b342badab6eef37633c24053524e648f852c3", size = 192765, upload-time = "2025-09-16T03:38:49.624Z" }, +] + +[[package]] +name = "odoo-addon-survey-xlsx" +version = "18.0.1.0.0" +source = { git = "https://github.com/ByteMeAsap/survey?subdirectory=survey_xlsx&branch=18.0-mig-survey_xlsx#07d26e715bd961c5599e3ff8491a4c143fab5a20" } +dependencies = [ + { name = "odoo" }, + { name = "odoo-addon-report-xlsx" }, +] + +[[package]] +name = "odoo-addon-uom-unece" +version = "18.0.1.0.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/f1/a20a6736eb46a521a1dbc60d45e735ee16eb2a4f2b0a9abc2d56a8ba6b01/odoo_addon_uom_unece-18.0.1.0.0.3-py3-none-any.whl", hash = "sha256:ac60fc74ee238733748a0a4dace6ec8ca876c19d166e0165502ebb5468c1a9b0", size = 29405, upload-time = "2024-12-14T02:39:48.371Z" }, +] + +[[package]] +name = "odoo-addon-web-refresher" +version = "18.0.1.0.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/7a/ed9d287afd5cf103a683cdefbce4f2e9271843f376c353c8a7a57879a90a/odoo_addon_web_refresher-18.0.1.0.0.2-py3-none-any.whl", hash = "sha256:3f36ae760e454618ef374e3c6af3c3a884e7fe3efbced917ebbf9e40372d0bd5", size = 46133, upload-time = "2025-04-03T10:37:15.526Z" }, +] + +[[package]] +name = "odoo-addon-web-responsive" +version = "18.0.1.0.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/f4/7802286d649185ec3e75704ef0ab75990a779af2acf1193de0e654a04be9/odoo_addon_web_responsive-18.0.1.0.3.1-py3-none-any.whl", hash = "sha256:ac335cb2456f2cc1f2f6f61ca220fa379735e881c6bceb6ee99323411d878258", size = 8247957, upload-time = "2025-11-06T04:28:10.308Z" }, +] + +[[package]] +name = "odoo-addon-web-search-with-and" +version = "18.0.1.0.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/86/7b583a52833045a2ea54ae3abfdb2c0ad42c161043251df35c9fb56a9bd7/odoo_addon_web_search_with_and-18.0.1.0.1.1-py3-none-any.whl", hash = "sha256:0b9253800ee026a1c1d1c25b9f974c2f88f51f365b256c33bfcfa45f469fba3c", size = 24804, upload-time = "2025-09-16T04:06:44.013Z" }, +] + +[[package]] +name = "odoo-addon-web-widget-dropdown-dynamic" +version = "18.0.2.0.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/66/e8/52c6bd8a72eb0ba4278e4b4ccaa86c367f8690f8e2accf49c66ce21a9c18/odoo_addon_web_widget_dropdown_dynamic-18.0.2.0.0.2-py3-none-any.whl", hash = "sha256:2962a6a5e93ee1325fd7c3f4764fde86a92a581aa81c0bf99b90319762996ebe", size = 31235, upload-time = "2025-09-17T04:06:20.154Z" }, +] + +[[package]] +name = "odoo-test-helper" +version = "2.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/46/bc/fb54851788e4eecce0ad458221f3dfe3711dbeee7fd2b64d7263646238fc/odoo-test-helper-2.1.1.tar.gz", hash = "sha256:d5a511ebdbab2004a7721f4b9bf02ef5c419c178cd85d60feb25440b5adba69a", size = 11182, upload-time = "2023-10-17T08:41:41.175Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/7a/56f7a00207d65ed5e877ecbb254b4656e241abd0688f720827f300092a7f/odoo_test_helper-2.1.1-py2.py3-none-any.whl", hash = "sha256:08c3a2f7a4ba1971eb8dab46c36c0f24f2dca735021c92929f5629adaf23b219", size = 6279, upload-time = "2023-10-17T08:41:39.877Z" }, +] + +[[package]] +name = "ofxparse" +version = "0.21" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beautifulsoup4" }, + { name = "lxml" }, + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/45/ae/98a2acfd06d15869c4b1be7fb74849c8a67cf15b65181f1fe879547e7494/ofxparse-0.21.tar.gz", hash = "sha256:057ab68d31270dece4d1a47662096aa76341968aaee145ffc711cb44cbd5c4a7", size = 53837, upload-time = "2021-05-31T03:38:59.526Z" } + +[[package]] +name = "openpyxl" +version = "3.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "et-xmlfile" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/e8/af028681d493814ca9c2ff8106fc62a4a32e4e0ae14602c2a98fc7b741c8/openpyxl-3.1.2.tar.gz", hash = "sha256:a6f5977418eff3b2d5500d54d9db50c8277a368436f4e4f8ddb1be3422870184", size = 185977, upload-time = "2023-03-11T16:58:38.78Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/94/a59521de836ef0da54aaf50da6c4da8fb4072fb3053fa71f052fd9399e7a/openpyxl-3.1.2-py2.py3-none-any.whl", hash = "sha256:f91456ead12ab3c6c2e9491cf33ba6d08357d802192379bb482f1033ade496f5", size = 249985, upload-time = "2023-03-11T16:58:36.257Z" }, +] + +[[package]] +name = "openupgradelib" +version = "3.12.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cssselect" }, + { name = "lxml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/16/9e/166497bde964e9d474b9637701e03e30d3477da03b9433d6001fabea5716/openupgradelib-3.12.0.tar.gz", hash = "sha256:3f3cd2475f7eb387fb0c364b7d2828b268dcf6e9c83aecccfbfe5c76cc69e4d7", size = 7852100, upload-time = "2025-11-05T09:17:53.491Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/6c/410c60258586301503ce4930773aa652578d0739ad78fdb2261873e3cd84/openupgradelib-3.12.0-py2.py3-none-any.whl", hash = "sha256:f8f624f4863b2257f760a9959ddd3cfee650b8f4a8740610506c4473ed36b679", size = 85183, upload-time = "2025-11-05T09:17:52.163Z" }, +] + +[[package]] +name = "packaging" +version = "26.0rc1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/55/d0/88784ecdb0e481b39af721f637a60046e6f09ca03553aa71d788062e2012/packaging-26.0rc1.tar.gz", hash = "sha256:2104df24f61f17179ac8459cda8138cd344967d3b4f0934afa582a6826963fc5", size = 142273, upload-time = "2026-01-09T17:41:18.505Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/35/ddf3a6e8fc754fb939e2ea36fde96c28189184d6115afcf60011bb438ae5/packaging-26.0rc1-py3-none-any.whl", hash = "sha256:ecf921b33c620e357b1eed2ac3bc6313b1582874b0282d0773b6797b79cb0786", size = 74021, upload-time = "2026-01-09T17:41:17.134Z" }, +] + +[[package]] +name = "parameterized" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ea/49/00c0c0cc24ff4266025a53e41336b79adaa5a4ebfad214f433d623f9865e/parameterized-0.9.0.tar.gz", hash = "sha256:7fc905272cefa4f364c1a3429cbbe9c0f98b793988efb5bf90aac80f08db09b1", size = 24351, upload-time = "2023-03-27T02:01:11.592Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/2f/804f58f0b856ab3bf21617cccf5b39206e6c4c94c2cd227bde125ea6105f/parameterized-0.9.0-py2.py3-none-any.whl", hash = "sha256:4e0758e3d41bea3bbd05ec14fc2c24736723f243b28d702081aef438c9372b1b", size = 20475, upload-time = "2023-03-27T02:01:09.31Z" }, +] + +[[package]] +name = "passlib" +version = "1.7.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b6/06/9da9ee59a67fae7761aab3ccc84fa4f3f33f125b370f1ccdb915bf967c11/passlib-1.7.4.tar.gz", hash = "sha256:defd50f72b65c5402ab2c573830a6978e5f202ad0d984793c8dde2c4152ebe04", size = 689844, upload-time = "2020-10-08T19:00:52.121Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/a4/ab6b7589382ca3df236e03faa71deac88cae040af60c071a78d254a62172/passlib-1.7.4-py2.py3-none-any.whl", hash = "sha256:aa6bca462b8d8bda89c70b382f0c298a20b5560af6cbfa2dce410c0a2fb669f1", size = 525554, upload-time = "2020-10-08T19:00:49.856Z" }, +] + +[[package]] +name = "pathspec" +version = "1.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/b2/bb8e495d5262bfec41ab5cb18f522f1012933347fb5d9e62452d446baca2/pathspec-1.0.3.tar.gz", hash = "sha256:bac5cf97ae2c2876e2d25ebb15078eb04d76e4b98921ee31c6f85ade8b59444d", size = 130841, upload-time = "2026-01-09T15:46:46.009Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/2b/121e912bd60eebd623f873fd090de0e84f322972ab25a7f9044c056804ed/pathspec-1.0.3-py3-none-any.whl", hash = "sha256:e80767021c1cc524aa3fb14bedda9c34406591343cc42797b386ce7b9354fb6c", size = 55021, upload-time = "2026-01-09T15:46:44.652Z" }, +] + +[[package]] +name = "pdfminer-six" +version = "20211012" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "chardet" }, + { name = "cryptography" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/0a/b01677bb31bd79756f05ff3e052ad369ac0ebb2e64b47fc6d6bad290d981/pdfminer.six-20211012.tar.gz", hash = "sha256:0351f17d362ee2d48b158be52bcde6576d96460efd038a3e89a043fba6d634d7", size = 7350867, upload-time = "2021-10-12T18:49:32.183Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/2b/0a3329605203de8df990ff5427a145dc81ea3e0eff0046424d1d306d1b29/pdfminer.six-20211012-py3-none-any.whl", hash = "sha256:d3efb75c0249b51c1bf795e3a8bddf1726b276c77bf75fb136adea471ee2825b", size = 5604808, upload-time = "2021-10-12T18:49:23.832Z" }, +] + +[[package]] +name = "pillow" +version = "10.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/3e/32cbd0129a28686621434cbf17bb64bf1458bfb838f1f668262fefce145c/pillow-10.2.0.tar.gz", hash = "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e", size = 46212712, upload-time = "2024-01-02T09:16:59.702Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/d5/2c00228ace73a7855a52053a92fdd6cea9b22393fbf3961125c11829dcd2/pillow-10.2.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef", size = 3517780, upload-time = "2024-01-02T09:15:41.495Z" }, + { url = "https://files.pythonhosted.org/packages/9d/a0/28756da34d6b58c3c5f6c1d5589e4e8f4e73472b55875524ae9d6e7e98fe/pillow-10.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac", size = 3317920, upload-time = "2024-01-02T09:15:44.116Z" }, + { url = "https://files.pythonhosted.org/packages/ab/72/e6a8887c0ce6c94cd0b74fef495a81f4ea4c742242de4bc1943abbd21f92/pillow-10.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c", size = 4308358, upload-time = "2024-01-02T09:33:09.603Z" }, + { url = "https://files.pythonhosted.org/packages/a8/2f/86cf1dc4b0530e4c3e96edd0338dcc4809c2622d9d45460029a71a831473/pillow-10.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa", size = 4422007, upload-time = "2024-01-02T09:15:46.355Z" }, + { url = "https://files.pythonhosted.org/packages/00/43/1ca3313b56ef623de0afebfe3d7a6e9c07e1a76c50ce191302018907b2b5/pillow-10.2.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2", size = 4333841, upload-time = "2024-01-02T09:33:14.842Z" }, + { url = "https://files.pythonhosted.org/packages/5c/c6/5b6b1f7362267494a423b45af684d604491565e81436e3ebeefee68f78fd/pillow-10.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04", size = 4502101, upload-time = "2024-01-02T09:15:48.416Z" }, + { url = "https://files.pythonhosted.org/packages/e6/c5/37e72d74c248adf133a2dd56890cf8632e2e46562e5fa70414445bbd3ae6/pillow-10.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f", size = 4542122, upload-time = "2024-01-02T09:33:19.012Z" }, + { url = "https://files.pythonhosted.org/packages/fa/93/79979b8ab99da2958bf6fef1be745c344c4e727f07d1429c49c015e21db2/pillow-10.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb", size = 4611042, upload-time = "2024-01-02T09:15:50.616Z" }, + { url = "https://files.pythonhosted.org/packages/ce/a7/11a539c1e12dfb9d67c35e5d3d99c7a6853face9083e6483360f4d9cd1d8/pillow-10.2.0-cp312-cp312-win32.whl", hash = "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f", size = 2290438, upload-time = "2024-01-02T09:15:53.219Z" }, + { url = "https://files.pythonhosted.org/packages/51/07/7e9266a59bb267b56c1f432f6416653b9a78dda771c57740d064a8aa2a44/pillow-10.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9", size = 2621845, upload-time = "2024-01-02T09:15:55.293Z" }, + { url = "https://files.pythonhosted.org/packages/a0/61/6cff8a8dbbac3d7fb7adb435b60737a7d0b0849f53e3af38f2c94d988da6/pillow-10.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48", size = 2229322, upload-time = "2024-01-02T09:15:57.475Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cf/86/0248f086a84f01b37aaec0fa567b397df1a119f73c16f6c7a9aac73ea309/platformdirs-4.5.1.tar.gz", hash = "sha256:61d5cdcc6065745cdd94f0f878977f8de9437be93de97c1c12f853c9c0cdcbda", size = 21715, upload-time = "2025-12-05T13:52:58.638Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/28/3bfe2fa5a7b9c46fe7e13c97bda14c895fb10fa2ebf1d0abb90e0cea7ee1/platformdirs-4.5.1-py3-none-any.whl", hash = "sha256:d03afa3963c806a9bed9d5125c8f4cb2fdaf74a55ab60e5d59b3fde758104d31", size = 18731, upload-time = "2025-12-05T13:52:56.823Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "polib" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/de/37/88ad2639cb4396755e87e97229d268bfa8bae0aeb6c7f9b01e9f49e10dff/polib-1.1.1.tar.gz", hash = "sha256:e02c355ae5e054912e3b0d16febc56510eff7e49d60bf22aecb463bd2f2a2dfa", size = 154644, upload-time = "2021-03-26T22:22:55.04Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/ee/54d6c558d4319a26145658584acb373d50ba0968eb9c19fedfb42458314a/polib-1.1.1-py2.py3-none-any.whl", hash = "sha256:d3ee85e0c6788f789353416b1612c6c92d75fe6ccfac0029711974d6abd0f86d", size = 20183, upload-time = "2021-03-26T22:22:57.134Z" }, +] + +[[package]] +name = "psutil" +version = "5.9.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/c7/6dc0a455d111f68ee43f27793971cf03fe29b6ef972042549db29eec39a2/psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c", size = 503247, upload-time = "2024-01-19T20:47:09.517Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/e3/07ae864a636d70a8a6f58da27cb1179192f1140d5d1da10886ade9405797/psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81", size = 248702, upload-time = "2024-01-19T20:47:36.303Z" }, + { url = "https://files.pythonhosted.org/packages/b3/bd/28c5f553667116b2598b9cc55908ec435cb7f77a34f2bff3e3ca765b0f78/psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421", size = 285242, upload-time = "2024-01-19T20:47:39.65Z" }, + { url = "https://files.pythonhosted.org/packages/c5/4f/0e22aaa246f96d6ac87fe5ebb9c5a693fbe8877f537a1022527c47ca43c5/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", size = 288191, upload-time = "2024-01-19T20:47:43.078Z" }, + { url = "https://files.pythonhosted.org/packages/6e/f5/2aa3a4acdc1e5940b59d421742356f133185667dd190b166dbcfcf5d7b43/psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0", size = 251252, upload-time = "2024-01-19T20:47:52.88Z" }, + { url = "https://files.pythonhosted.org/packages/93/52/3e39d26feae7df0aa0fd510b14012c3678b36ed068f7d78b8d8784d61f0e/psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf", size = 255090, upload-time = "2024-01-19T20:47:56.019Z" }, + { url = "https://files.pythonhosted.org/packages/05/33/2d74d588408caedd065c2497bdb5ef83ce6082db01289a1e1147f6639802/psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8", size = 249898, upload-time = "2024-01-19T20:47:59.238Z" }, +] + +[[package]] +name = "psycopg2" +version = "2.9.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/5e/dc6acaf46d78979d6b03458b7a1618a68e152a6776fce95daac5e0f0301b/psycopg2-2.9.9.tar.gz", hash = "sha256:d1454bde93fb1e224166811694d600e746430c006fbb031ea06ecc2ea41bf156", size = 384926, upload-time = "2023-10-03T12:48:53.323Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/13/f74ffe6b6f58822e807c70391dc5679a53feb92ce119ccb8a6546c3fb893/psycopg2-2.9.9-cp312-cp312-win32.whl", hash = "sha256:d735786acc7dd25815e89cc4ad529a43af779db2e25aa7c626de864127e5a024", size = 1024634, upload-time = "2023-10-28T09:37:19.078Z" }, + { url = "https://files.pythonhosted.org/packages/58/4b/c4a26e191882b60150bfcb639e416524ae7f8249ab7ee854fb5247f16c40/psycopg2-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:a7653d00b732afb6fc597e29c50ad28087dcb4fbfb28e86092277a559ae4e693", size = 1163789, upload-time = "2023-10-28T09:37:22.214Z" }, +] + +[[package]] +name = "pyasn1" +version = "0.6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/e9/01f1a64245b89f039897cb0130016d79f77d52669aae6ee7b159a6c4c018/pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034", size = 145322, upload-time = "2024-09-10T22:41:42.55Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629", size = 83135, upload-time = "2024-09-11T16:00:36.122Z" }, +] + +[[package]] +name = "pyasn1-modules" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyasn1" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/e6/78ebbb10a8c8e4b61a59249394a4a594c1a7af95593dc933a349c8d00964/pyasn1_modules-0.4.2.tar.gz", hash = "sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6", size = 307892, upload-time = "2025-03-28T02:41:22.17Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl", hash = "sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a", size = 181259, upload-time = "2025-03-28T02:41:19.028Z" }, +] + +[[package]] +name = "pycparser" +version = "2.23" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734, upload-time = "2025-09-09T13:23:47.91Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140, upload-time = "2025-09-09T13:23:46.651Z" }, +] + +[[package]] +name = "pygithub" +version = "2.8.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyjwt", extra = ["crypto"] }, + { name = "pynacl" }, + { name = "requests" }, + { name = "typing-extensions" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c1/74/e560bdeffea72ecb26cff27f0fad548bbff5ecc51d6a155311ea7f9e4c4c/pygithub-2.8.1.tar.gz", hash = "sha256:341b7c78521cb07324ff670afd1baa2bf5c286f8d9fd302c1798ba594a5400c9", size = 2246994, upload-time = "2025-09-02T17:41:54.674Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/ba/7049ce39f653f6140aac4beb53a5aaf08b4407b6a3019aae394c1c5244ff/pygithub-2.8.1-py3-none-any.whl", hash = "sha256:23a0a5bca93baef082e03411bf0ce27204c32be8bfa7abc92fe4a3e132936df0", size = 432709, upload-time = "2025-09-02T17:41:52.947Z" }, +] + +[[package]] +name = "pygments" +version = "2.19.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, +] + +[[package]] +name = "pyjwt" +version = "2.10.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785, upload-time = "2024-11-28T03:43:29.933Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997, upload-time = "2024-11-28T03:43:27.893Z" }, +] + +[package.optional-dependencies] +crypto = [ + { name = "cryptography" }, +] + +[[package]] +name = "pynacl" +version = "1.6.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d9/9a/4019b524b03a13438637b11538c82781a5eda427394380381af8f04f467a/pynacl-1.6.2.tar.gz", hash = "sha256:018494d6d696ae03c7e656e5e74cdfd8ea1326962cc401bcf018f1ed8436811c", size = 3511692, upload-time = "2026-01-01T17:48:10.851Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/7b/4845bbf88e94586ec47a432da4e9107e3fc3ce37eb412b1398630a37f7dd/pynacl-1.6.2-cp38-abi3-macosx_10_10_universal2.whl", hash = "sha256:c949ea47e4206af7c8f604b8278093b674f7c79ed0d4719cc836902bf4517465", size = 388458, upload-time = "2026-01-01T17:32:16.829Z" }, + { url = "https://files.pythonhosted.org/packages/1e/b4/e927e0653ba63b02a4ca5b4d852a8d1d678afbf69b3dbf9c4d0785ac905c/pynacl-1.6.2-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8845c0631c0be43abdd865511c41eab235e0be69c81dc66a50911594198679b0", size = 800020, upload-time = "2026-01-01T17:32:18.34Z" }, + { url = "https://files.pythonhosted.org/packages/7f/81/d60984052df5c97b1d24365bc1e30024379b42c4edcd79d2436b1b9806f2/pynacl-1.6.2-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:22de65bb9010a725b0dac248f353bb072969c94fa8d6b1f34b87d7953cf7bbe4", size = 1399174, upload-time = "2026-01-01T17:32:20.239Z" }, + { url = "https://files.pythonhosted.org/packages/68/f7/322f2f9915c4ef27d140101dd0ed26b479f7e6f5f183590fd32dfc48c4d3/pynacl-1.6.2-cp38-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:46065496ab748469cdd999246d17e301b2c24ae2fdf739132e580a0e94c94a87", size = 835085, upload-time = "2026-01-01T17:32:22.24Z" }, + { url = "https://files.pythonhosted.org/packages/3e/d0/f301f83ac8dbe53442c5a43f6a39016f94f754d7a9815a875b65e218a307/pynacl-1.6.2-cp38-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a66d6fb6ae7661c58995f9c6435bda2b1e68b54b598a6a10247bfcdadac996c", size = 1437614, upload-time = "2026-01-01T17:32:23.766Z" }, + { url = "https://files.pythonhosted.org/packages/c4/58/fc6e649762b029315325ace1a8c6be66125e42f67416d3dbd47b69563d61/pynacl-1.6.2-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:26bfcd00dcf2cf160f122186af731ae30ab120c18e8375684ec2670dccd28130", size = 818251, upload-time = "2026-01-01T17:32:25.69Z" }, + { url = "https://files.pythonhosted.org/packages/c9/a8/b917096b1accc9acd878819a49d3d84875731a41eb665f6ebc826b1af99e/pynacl-1.6.2-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:c8a231e36ec2cab018c4ad4358c386e36eede0319a0c41fed24f840b1dac59f6", size = 1402859, upload-time = "2026-01-01T17:32:27.215Z" }, + { url = "https://files.pythonhosted.org/packages/85/42/fe60b5f4473e12c72f977548e4028156f4d340b884c635ec6b063fe7e9a5/pynacl-1.6.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:68be3a09455743ff9505491220b64440ced8973fe930f270c8e07ccfa25b1f9e", size = 791926, upload-time = "2026-01-01T17:32:29.314Z" }, + { url = "https://files.pythonhosted.org/packages/fa/f9/e40e318c604259301cc091a2a63f237d9e7b424c4851cafaea4ea7c4834e/pynacl-1.6.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:8b097553b380236d51ed11356c953bf8ce36a29a3e596e934ecabe76c985a577", size = 1363101, upload-time = "2026-01-01T17:32:31.263Z" }, + { url = "https://files.pythonhosted.org/packages/48/47/e761c254f410c023a469284a9bc210933e18588ca87706ae93002c05114c/pynacl-1.6.2-cp38-abi3-win32.whl", hash = "sha256:5811c72b473b2f38f7e2a3dc4f8642e3a3e9b5e7317266e4ced1fba85cae41aa", size = 227421, upload-time = "2026-01-01T17:32:33.076Z" }, + { url = "https://files.pythonhosted.org/packages/41/ad/334600e8cacc7d86587fe5f565480fde569dfb487389c8e1be56ac21d8ac/pynacl-1.6.2-cp38-abi3-win_amd64.whl", hash = "sha256:62985f233210dee6548c223301b6c25440852e13d59a8b81490203c3227c5ba0", size = 239754, upload-time = "2026-01-01T17:32:34.557Z" }, + { url = "https://files.pythonhosted.org/packages/29/7d/5945b5af29534641820d3bd7b00962abbbdfee84ec7e19f0d5b3175f9a31/pynacl-1.6.2-cp38-abi3-win_arm64.whl", hash = "sha256:834a43af110f743a754448463e8fd61259cd4ab5bbedcf70f9dabad1d28a394c", size = 184801, upload-time = "2026-01-01T17:32:36.309Z" }, +] + +[[package]] +name = "pyopenssl" +version = "24.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/91/a8/cbeec652549e30103b9e6147ad433405fdd18807ac2d54e6dbb73184d8a1/pyOpenSSL-24.1.0.tar.gz", hash = "sha256:cabed4bfaa5df9f1a16c0ef64a0cb65318b5cd077a7eda7d6970131ca2f41a6f", size = 179671, upload-time = "2024-03-09T23:16:25.539Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/a7/2104f674a5a6845b04c8ff01659becc6b8978ca410b82b94287e0b1e018b/pyOpenSSL-24.1.0-py3-none-any.whl", hash = "sha256:17ed5be5936449c5418d1cd269a1a9e9081bc54c17aed272b45856a3d3dc86ad", size = 56945, upload-time = "2024-03-09T23:16:23.44Z" }, +] + +[[package]] +name = "pypdf2" +version = "2.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/77/d6/afcbdb452c335bccf22ec8ac5ac27b03222f9be8b96043bcce87ba1ce32a/PyPDF2-2.12.1.tar.gz", hash = "sha256:e03ef18abcc75da741a0acc1a7749253496887be38cd9887bcce1cee393da45e", size = 218096, upload-time = "2022-12-10T18:28:53.225Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2e/40/4f997b7cf72d89bb5aafd57b01dfa0be4e9560c8e5b993fde3986b3904f9/pypdf2-2.12.1-py3-none-any.whl", hash = "sha256:41ff16ee122bad9790d57a4235281a838002d7f1cc8d631d91b6f65d709bd825", size = 222844, upload-time = "2022-12-10T18:28:49.6Z" }, +] + +[[package]] +name = "pypng" +version = "0.20220715.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/93/cd/112f092ec27cca83e0516de0a3368dbd9128c187fb6b52aaaa7cde39c96d/pypng-0.20220715.0.tar.gz", hash = "sha256:739c433ba96f078315de54c0db975aee537cbc3e1d0ae4ed9aab0ca1e427e2c1", size = 128992, upload-time = "2022-07-15T14:11:05.301Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3e/b9/3766cc361d93edb2ce81e2e1f87dd98f314d7d513877a342d31b30741680/pypng-0.20220715.0-py3-none-any.whl", hash = "sha256:4a43e969b8f5aaafb2a415536c1a8ec7e341cd6a3f957fd5b5f32a4cfeed902c", size = 58057, upload-time = "2022-07-15T14:11:03.713Z" }, +] + +[[package]] +name = "pyserial" +version = "3.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1e/7d/ae3f0a63f41e4d2f6cb66a5b57197850f919f59e558159a4dd3a818f5082/pyserial-3.5.tar.gz", hash = "sha256:3c77e014170dfffbd816e6ffc205e9842efb10be9f58ec16d3e8675b4925cddb", size = 159125, upload-time = "2020-11-23T03:59:15.045Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl", hash = "sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0", size = 90585, upload-time = "2020-11-23T03:59:13.41Z" }, +] + +[[package]] +name = "pytest" +version = "9.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901, upload-time = "2025-12-06T21:30:51.014Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size = 374801, upload-time = "2025-12-06T21:30:49.154Z" }, +] + +[[package]] +name = "pytest-cov" +version = "7.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "coverage" }, + { name = "pluggy" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5e/f7/c933acc76f5208b3b00089573cf6a2bc26dc80a8aece8f52bb7d6b1855ca/pytest_cov-7.0.0.tar.gz", hash = "sha256:33c97eda2e049a0c5298e91f519302a1334c26ac65c1a483d6206fd458361af1", size = 54328, upload-time = "2025-09-09T10:57:02.113Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl", hash = "sha256:3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861", size = 22424, upload-time = "2025-09-09T10:57:00.695Z" }, +] + +[[package]] +name = "pytest-odoo" +version = "2.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5a/cc/fb1bb767db03873dfd1e74956049ac2235291deb37a5190379dc3ec64f19/pytest_odoo-2.1.2.tar.gz", hash = "sha256:f8f542e5e3b17f8150bc32beb36b340e7fb6c59b5a9dedce35c021097ad98456", size = 20040, upload-time = "2025-03-12T14:17:23.323Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4a/91/b11505eb2c2b3d85df86ddf72de8464d721cc6de6b5d06dad1204065e1c7/pytest_odoo-2.1.2-py3-none-any.whl", hash = "sha256:552926e4709835fc5314da21041d97d7ade1f4224cb767e5c3e4db8a272bd83d", size = 17937, upload-time = "2025-03-12T14:17:21.722Z" }, +] + +[[package]] +name = "pytest-xdist" +version = "3.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "execnet" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/b4/439b179d1ff526791eb921115fca8e44e596a13efeda518b9d845a619450/pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1", size = 88069, upload-time = "2025-07-01T13:30:59.346Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88", size = 46396, upload-time = "2025-07-01T13:30:56.632Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.8.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4c/c4/13b4776ea2d76c115c1d1b84579f3764ee6d57204f6be27119f13a61d0a9/python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", size = 357324, upload-time = "2021-07-14T08:19:19.783Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/36/7a/87837f39d0296e723bb9b62bbb257d0355c7f6128853c78955f57342a56d/python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9", size = 247702, upload-time = "2021-07-14T08:19:18.161Z" }, +] + +[[package]] +name = "python-ldap" +version = "3.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyasn1" }, + { name = "pyasn1-modules" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fd/8b/1eeb4025dc1d3ac2f16678f38dec9ebdde6271c74955b72db5ce7a4dbfbd/python-ldap-3.4.4.tar.gz", hash = "sha256:7edb0accec4e037797705f3a05cbf36a9fde50d08c8f67f2aef99a2628fab828", size = 377889, upload-time = "2023-11-17T21:14:16.32Z" } + +[[package]] +name = "python-stdnum" +version = "1.19" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/e7/6342f4a43c7b922817e6788074c82c10e640c972b428f176645a7adf9f28/python-stdnum-1.19.tar.gz", hash = "sha256:133ec82f56390ea74c190569e98f2fb14b869808b1d54785708f22d0fead8b3f", size = 1134517, upload-time = "2023-08-20T15:15:05.461Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e3/c3/6ce1809a33fb8d1a4cc5c118cc5cf423b8844ab80324ae76b7cd6bcf31b2/python_stdnum-1.19-py2.py3-none-any.whl", hash = "sha256:1b5b401ad3f45b798b0317313b781a433f5d7a5ff2c9feb8054664f76f78644e", size = 1006054, upload-time = "2023-08-20T15:15:02.043Z" }, +] + +[[package]] +name = "pytz" +version = "2025.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884, upload-time = "2025-03-25T02:25:00.538Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" }, +] + +[[package]] +name = "pyusb" +version = "1.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d9/6e/433a5614132576289b8643fe598dd5d51b16e130fd591564be952e15bb45/pyusb-1.2.1.tar.gz", hash = "sha256:a4cc7404a203144754164b8b40994e2849fde1cfff06b08492f12fff9d9de7b9", size = 75292, upload-time = "2021-07-09T02:58:46.962Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/a8/4982498b2ab44d1fcd5c49f07ea3795eab01601dc143b009d333fcace3b9/pyusb-1.2.1-py3-none-any.whl", hash = "sha256:2b4c7cb86dbadf044dfb9d3a4ff69fd217013dbe78a792177a3feb172449ea36", size = 58439, upload-time = "2021-07-09T02:58:44.894Z" }, +] + +[[package]] +name = "qrcode" +version = "7.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "pypng" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/30/35/ad6d4c5a547fe9a5baf85a9edbafff93fc6394b014fab30595877305fa59/qrcode-7.4.2.tar.gz", hash = "sha256:9dd969454827e127dbd93696b20747239e6d540e082937c90f14ac95b30f5845", size = 535974, upload-time = "2023-02-05T22:11:46.548Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/79/aaf0c1c7214f2632badb2771d770b1500d3d7cbdf2590ae62e721ec50584/qrcode-7.4.2-py3-none-any.whl", hash = "sha256:581dca7a029bcb2deef5d01068e39093e80ef00b4a61098a2182eac59d01643a", size = 46197, upload-time = "2023-02-05T22:11:43.4Z" }, +] + +[[package]] +name = "reportlab" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "chardet" }, + { name = "pillow" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bc/5c/ca4381f77af19be120173c53a398d7fb78940c79eca73af4816f3307d870/reportlab-4.1.0.tar.gz", hash = "sha256:3a99faf412691159c068b3ff01c15307ce2fd2cf6b860199434874e002040a84", size = 3146958, upload-time = "2024-02-08T16:42:23.696Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/70/c44e5fb6099cf28d01255ff1dfc6a4c8f2b981f314707018c802ac179e4e/reportlab-4.1.0-py3-none-any.whl", hash = "sha256:28a40d5000afbd8ccae15a47f7abe2841768461354bede1a9d42841132997c98", size = 1941429, upload-time = "2024-02-08T16:42:19.811Z" }, +] + +[[package]] +name = "requests" +version = "2.31.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/be/10918a2eac4ae9f02f6cfe6414b7a155ccd8f7f9d4380d62fd5b955065c3/requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1", size = 110794, upload-time = "2023-05-22T15:12:44.175Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/8e/0e2d847013cb52cd35b38c009bb167a1a26b2ce6cd6965bf26b47bc0bf44/requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", size = 62574, upload-time = "2023-05-22T15:12:42.313Z" }, +] + +[[package]] +name = "requests-file" +version = "3.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3c/f8/5dc70102e4d337063452c82e1f0d95e39abfe67aa222ed8a5ddeb9df8de8/requests_file-3.0.1.tar.gz", hash = "sha256:f14243d7796c588f3521bd423c5dea2ee4cc730e54a3cac9574d78aca1272576", size = 6967, upload-time = "2025-10-20T18:56:42.279Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/d5/de8f089119205a09da657ed4784c584ede8381a0ce6821212a6d4ca47054/requests_file-3.0.1-py2.py3-none-any.whl", hash = "sha256:d0f5eb94353986d998f80ac63c7f146a307728be051d4d1cd390dbdb59c10fa2", size = 4514, upload-time = "2025-10-20T18:56:41.184Z" }, +] + +[[package]] +name = "requests-toolbelt" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", size = 206888, upload-time = "2023-05-01T04:11:33.229Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481, upload-time = "2023-05-01T04:11:28.427Z" }, +] + +[[package]] +name = "rich" +version = "14.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fb/d2/8920e102050a0de7bfabeb4c4614a49248cf8d5d7a8d01885fbb24dc767a/rich-14.2.0.tar.gz", hash = "sha256:73ff50c7c0c1c77c8243079283f4edb376f0f6442433aecb8ce7e6d0b92d1fe4", size = 219990, upload-time = "2025-10-09T14:16:53.064Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl", hash = "sha256:76bc51fe2e57d2b1be1f96c524b890b816e334ab4c1e45888799bfaab0021edd", size = 243393, upload-time = "2025-10-09T14:16:51.245Z" }, +] + +[[package]] +name = "rjsmin" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ad/09/b05a0ed0aedb13c7b7a887b4638c5b3c6eb6a16df944deb2593997d8753c/rjsmin-1.2.0.tar.gz", hash = "sha256:6c529feb6c400984452494c52dd9fdf59185afeacca2afc5174a28ab37751a1b", size = 419866, upload-time = "2021-11-14T20:38:09.741Z" } + +[[package]] +name = "sentry-sdk" +version = "2.22.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/81/b6/662988ecd2345bf6c3a5c306a9a3590852742eff91d0a78a143398b816f3/sentry_sdk-2.22.0.tar.gz", hash = "sha256:b4bf43bb38f547c84b2eadcefbe389b36ef75f3f38253d7a74d6b928c07ae944", size = 303539, upload-time = "2025-02-17T14:12:43.204Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/7f/0e4459173e9671ba5f75a48dda2442bcc48a12c79e54e5789381c8c6a9bc/sentry_sdk-2.22.0-py2.py3-none-any.whl", hash = "sha256:3d791d631a6c97aad4da7074081a57073126c69487560c6f8bffcf586461de66", size = 325815, upload-time = "2025-02-17T14:12:40.223Z" }, +] + +[[package]] +name = "shellingham" +version = "1.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "smmap" +version = "5.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/44/cd/a040c4b3119bbe532e5b0732286f805445375489fceaec1f48306068ee3b/smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5", size = 22329, upload-time = "2025-01-02T07:14:40.909Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e", size = 24303, upload-time = "2025-01-02T07:14:38.724Z" }, +] + +[[package]] +name = "soupsieve" +version = "2.8.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/89/23/adf3796d740536d63a6fbda113d07e60c734b6ed5d3058d1e47fc0495e47/soupsieve-2.8.1.tar.gz", hash = "sha256:4cf733bc50fa805f5df4b8ef4740fc0e0fa6218cf3006269afd3f9d6d80fd350", size = 117856, upload-time = "2025-12-18T13:50:34.655Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/f3/b67d6ea49ca9154453b6d70b34ea22f3996b9fa55da105a79d8732227adc/soupsieve-2.8.1-py3-none-any.whl", hash = "sha256:a11fe2a6f3d76ab3cf2de04eb339c1be5b506a8a47f2ceb6d139803177f85434", size = 36710, upload-time = "2025-12-18T13:50:33.267Z" }, +] + +[[package]] +name = "textual" +version = "7.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py", extra = ["linkify"] }, + { name = "mdit-py-plugins" }, + { name = "platformdirs" }, + { name = "pygments" }, + { name = "rich" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/13/b5cb4995d1390dd6e43c89bfa879ae41fc1b97551ce1f6d29bd01d0f9395/textual-7.1.0.tar.gz", hash = "sha256:3c7148ef00a9277b45fd78a1a6adc7c419c451d3ed714a0b015b16eaa2a8a73b", size = 1582455, upload-time = "2026-01-10T10:32:36.791Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/f4/48e4a4c77ab7eea48d3b0a77f8dea0be101c83421abc64da0888c77c47cf/textual-7.1.0-py3-none-any.whl", hash = "sha256:9209dd0d1d958316832f7e59328f3911112f8e951abef7c3fbe54effd4e4caed", size = 715555, upload-time = "2026-01-10T10:32:35.117Z" }, +] + +[[package]] +name = "typer" +version = "0.21.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "rich" }, + { name = "shellingham" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/36/bf/8825b5929afd84d0dabd606c67cd57b8388cb3ec385f7ef19c5cc2202069/typer-0.21.1.tar.gz", hash = "sha256:ea835607cd752343b6b2b7ce676893e5a0324082268b48f27aa058bdb7d2145d", size = 110371, upload-time = "2026-01-06T11:21:10.989Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/1d/d9257dd49ff2ca23ea5f132edf1281a0c4f9de8a762b9ae399b670a59235/typer-0.21.1-py3-none-any.whl", hash = "sha256:7985e89081c636b88d172c2ee0cfe33c253160994d47bdfdc302defd7d1f1d01", size = 47381, upload-time = "2026-01-06T11:21:09.824Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, +] + +[[package]] +name = "uc-micro-py" +version = "1.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/91/7a/146a99696aee0609e3712f2b44c6274566bc368dfe8375191278045186b8/uc-micro-py-1.0.3.tar.gz", hash = "sha256:d321b92cff673ec58027c04015fcaa8bb1e005478643ff4a500882eaab88c48a", size = 6043, upload-time = "2024-02-09T16:52:01.654Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/87/1f677586e8ac487e29672e4b17455758fce261de06a0d086167bb760361a/uc_micro_py-1.0.3-py3-none-any.whl", hash = "sha256:db1dffff340817673d7b466ec86114a9dc0e9d4d9b5ba229d9d60e5c12600cd5", size = 6229, upload-time = "2024-02-09T16:52:00.371Z" }, +] + +[[package]] +name = "unidecode" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/7d/a8a765761bbc0c836e397a2e48d498305a865b70a8600fd7a942e85dcf63/Unidecode-1.4.0.tar.gz", hash = "sha256:ce35985008338b676573023acc382d62c264f307c8f7963733405add37ea2b23", size = 200149, upload-time = "2025-04-24T08:45:03.798Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/b7/559f59d57d18b44c6d1250d2eeaa676e028b9c527431f5d0736478a73ba1/Unidecode-1.4.0-py3-none-any.whl", hash = "sha256:c3c7606c27503ad8d501270406e345ddb480a7b5f38827eafe4fa82a137f0021", size = 235837, upload-time = "2025-04-24T08:45:01.609Z" }, +] + +[[package]] +name = "urllib3" +version = "2.0.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/af/47/b215df9f71b4fdba1025fc05a77db2ad243fa0926755a52c5e71659f4e3c/urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84", size = 282546, upload-time = "2023-10-17T17:46:50.542Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/b2/b157855192a68541a91ba7b2bbcb91f1b4faa51f8bae38d8005c034be524/urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e", size = 124213, upload-time = "2023-10-17T17:46:48.538Z" }, +] + +[[package]] +name = "vobject" +version = "0.9.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/da/ce/27c48c0e39cc69ffe7f6e3751734f6073539bf18a0cfe564e973a3709a52/vobject-0.9.6.1.tar.gz", hash = "sha256:96512aec74b90abb71f6b53898dd7fe47300cc940104c4f79148f0671f790101", size = 58556, upload-time = "2018-07-18T16:03:43.067Z" } + +[[package]] +name = "websocket-client" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/41/aa4bf9664e4cda14c3b39865b12251e8e7d239f4cd0e3cc1b6c2ccde25c1/websocket_client-1.9.0.tar.gz", hash = "sha256:9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98", size = 70576, upload-time = "2025-10-07T21:16:36.495Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef", size = 82616, upload-time = "2025-10-07T21:16:34.951Z" }, +] + +[[package]] +name = "werkzeug" +version = "3.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0d/cc/ff1904eb5eb4b455e442834dabf9427331ac0fa02853bf83db817a7dd53d/werkzeug-3.0.1.tar.gz", hash = "sha256:507e811ecea72b18a404947aded4b3390e1db8f826b494d76550ef45bb3b1dcc", size = 801436, upload-time = "2023-10-24T20:57:50.084Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/fc/254c3e9b5feb89ff5b9076a23218dafbc99c96ac5941e900b71206e6313b/werkzeug-3.0.1-py3-none-any.whl", hash = "sha256:90a285dc0e42ad56b34e696398b8122ee4c681833fb35b8334a095d82c56da10", size = 226669, upload-time = "2023-10-24T20:57:47.326Z" }, +] + +[[package]] +name = "xlrd" +version = "2.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/b3/19a2540d21dea5f908304375bd43f5ed7a4c28a370dc9122c565423e6b44/xlrd-2.0.1.tar.gz", hash = "sha256:f72f148f54442c6b056bf931dbc34f986fd0c3b0b6b5a58d013c9aef274d0c88", size = 100259, upload-time = "2020-12-11T10:14:22.201Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/0c/c2a72d51fe56e08a08acc85d13013558a2d793028ae7385448a6ccdfae64/xlrd-2.0.1-py2.py3-none-any.whl", hash = "sha256:6a33ee89877bd9abc1158129f6e94be74e2679636b8a205b43b85206c3f0bbdd", size = 96531, upload-time = "2020-12-11T10:14:20.877Z" }, +] + +[[package]] +name = "xlsxwriter" +version = "3.1.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2b/a3/dd02e3559b2c785d2357c3752cc191d750a280ff3cb02fa7c2a8f87523c3/XlsxWriter-3.1.9.tar.gz", hash = "sha256:de810bf328c6a4550f4ffd6b0b34972aeb7ffcf40f3d285a0413734f9b63a929", size = 272204, upload-time = "2023-10-19T08:03:14.549Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/3e/05ba2194cd5073602422859c949a4f21310a3c49bf8dccde9e03d4522b11/XlsxWriter-3.1.9-py3-none-any.whl", hash = "sha256:b61c1a0c786f82644936c0936ec96ee96cd3afb9440094232f7faef9b38689f0", size = 154753, upload-time = "2023-10-19T08:03:12.238Z" }, +] + +[[package]] +name = "xlwt" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/06/97/56a6f56ce44578a69343449aa5a0d98eefe04085d69da539f3034e2cd5c1/xlwt-1.3.0.tar.gz", hash = "sha256:c59912717a9b28f1a3c2a98fd60741014b06b043936dcecbc113eaaada156c88", size = 153929, upload-time = "2017-08-22T06:47:16.498Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/48/def306413b25c3d01753603b1a222a011b8621aed27cd7f89cbc27e6b0f4/xlwt-1.3.0-py2.py3-none-any.whl", hash = "sha256:a082260524678ba48a297d922cc385f58278b8aa68741596a87de01a9c628b2e", size = 99981, upload-time = "2017-08-22T06:47:15.281Z" }, +] + +[[package]] +name = "zeep" +version = "4.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "isodate" }, + { name = "lxml" }, + { name = "platformdirs" }, + { name = "pytz" }, + { name = "requests" }, + { name = "requests-file" }, + { name = "requests-toolbelt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fd/a4/8fa2337f1807fd9e671b85980b2c90052d524edf9d39b515aed4c5874c38/zeep-4.2.1.tar.gz", hash = "sha256:72093acfdb1d8360ed400869b73fbf1882b95c4287f798084c42ee0c1ff0e425", size = 161072, upload-time = "2022-11-20T20:37:27.761Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/49/1091bd708f8892dc2ed5155bdf71ff51fcde75df137d65ac53f5d7f4fa25/zeep-4.2.1-py3-none-any.whl", hash = "sha256:6754feb4c34a4b6d65fbc359252bf6654dcce3937bf1d95aae4402a60a8f5939", size = 101212, upload-time = "2022-11-20T20:37:26.349Z" }, +] + +[[package]] +name = "zope-event" +version = "6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/46/33/d3eeac228fc14de76615612ee208be2d8a5b5b0fada36bf9b62d6b40600c/zope_event-6.1.tar.gz", hash = "sha256:6052a3e0cb8565d3d4ef1a3a7809336ac519bc4fe38398cb8d466db09adef4f0", size = 18739, upload-time = "2025-11-07T08:05:49.934Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/b0/956902e5e1302f8c5d124e219c6bf214e2649f92ad5fce85b05c039a04c9/zope_event-6.1-py3-none-any.whl", hash = "sha256:0ca78b6391b694272b23ec1335c0294cc471065ed10f7f606858fc54566c25a0", size = 6414, upload-time = "2025-11-07T08:05:48.874Z" }, +] + +[[package]] +name = "zope-interface" +version = "8.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/86/a4/77daa5ba398996d16bb43fc721599d27d03eae68fe3c799de1963c72e228/zope_interface-8.2.tar.gz", hash = "sha256:afb20c371a601d261b4f6edb53c3c418c249db1a9717b0baafc9a9bb39ba1224", size = 254019, upload-time = "2026-01-09T07:51:07.253Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/a0/1e1fabbd2e9c53ef92b69df6d14f4adc94ec25583b1380336905dc37e9a0/zope_interface-8.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:624b6787fc7c3e45fa401984f6add2c736b70a7506518c3b537ffaacc4b29d4c", size = 208785, upload-time = "2026-01-09T08:05:17.348Z" }, + { url = "https://files.pythonhosted.org/packages/c3/2a/88d098a06975c722a192ef1fb7d623d1b57c6a6997cf01a7aabb45ab1970/zope_interface-8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bc9ded9e97a0ed17731d479596ed1071e53b18e6fdb2fc33af1e43f5fd2d3aaa", size = 208976, upload-time = "2026-01-09T08:05:18.792Z" }, + { url = "https://files.pythonhosted.org/packages/e9/e8/757398549fdfd2f8c89f32c82ae4d2f0537ae2a5d2f21f4a2f711f5a059f/zope_interface-8.2-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:532367553e4420c80c0fc0cabcc2c74080d495573706f66723edee6eae53361d", size = 259411, upload-time = "2026-01-09T08:05:20.567Z" }, + { url = "https://files.pythonhosted.org/packages/91/af/502601f0395ce84dff622f63cab47488657a04d0065547df42bee3a680ff/zope_interface-8.2-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2bf9cf275468bafa3c72688aad8cfcbe3d28ee792baf0b228a1b2d93bd1d541a", size = 264859, upload-time = "2026-01-09T08:05:22.234Z" }, + { url = "https://files.pythonhosted.org/packages/89/0c/d2f765b9b4814a368a7c1b0ac23b68823c6789a732112668072fe596945d/zope_interface-8.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0009d2d3c02ea783045d7804da4fd016245e5c5de31a86cebba66dd6914d59a2", size = 264398, upload-time = "2026-01-09T08:05:23.853Z" }, + { url = "https://files.pythonhosted.org/packages/4a/81/2f171fbc4222066957e6b9220c4fb9146792540102c37e6d94e5d14aad97/zope_interface-8.2-cp312-cp312-win_amd64.whl", hash = "sha256:845d14e580220ae4544bd4d7eb800f0b6034fe5585fc2536806e0a26c2ee6640", size = 212444, upload-time = "2026-01-09T08:05:25.148Z" }, +] From c6b4f9e82142d835fb267cfdf00d1464c3f9f0f6 Mon Sep 17 00:00:00 2001 From: Hussam Suleiman Date: Wed, 14 Jan 2026 10:53:14 +0100 Subject: [PATCH 33/45] Add test-requirements.txt. --- test-requirements.txt | 7 +++++++ uv.lock | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 test-requirements.txt diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 0000000..caae7ab --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1,7 @@ +# While running tests, coverage is trying to read configuration in pyproject.toml +pdfminer.six==20220319 +coverage[toml] +odoo-addon-membership-delegated-partner-line @ git+https://github.com/gfcapalbo/vertical-association.git@18.0-MIG-membership_delegated_partner_line#subdirectory=membership_delegated_partner_line +odoo-addon-github_connector_oca @ git+https://github.com/Therp/interface-github@18.0-mig-github_connector_oca#subdirectory=github_connector_oca +odoo-addon-survey_xlsx @ git+https://github.com/ByteMeAsap/survey@18.0-mig-survey_xlsx#subdirectory=survey_xlsx +odoo-addon-account_statement_import_online_wise @ git+https://github.com/Therp/bank-statement-import@18.0-mig-account-statement-import-online-wise#subdirectory=account_statement_import_online_wise diff --git a/uv.lock b/uv.lock index 9370711..0dcf777 100644 --- a/uv.lock +++ b/uv.lock @@ -700,7 +700,7 @@ requires-dist = [ { name = "lxml-html-clean" }, { name = "markupsafe", specifier = "==2.1.5" }, { name = "num2words", specifier = "==0.5.13" }, - { name = "odoo", git = "https://github.com/OCA/OCB" }, + { name = "odoo", git = "https://github.com/OCA/OCB?rev=refs%2Fpull%2F1319%2Fhead" }, { name = "odoo-addon-account-banking-pain-base", specifier = "==18.0.*" }, { name = "odoo-addon-account-banking-sepa-credit-transfer", specifier = "==18.0.*" }, { name = "odoo-addon-account-credit-control", specifier = "==18.0.*" }, @@ -796,7 +796,7 @@ dev = [ [[package]] name = "odoo" version = "18.0" -source = { git = "https://github.com/OCA/OCB#16055b5031886551238c14d54523701bcf35c0d7" } +source = { git = "https://github.com/OCA/OCB?rev=refs%2Fpull%2F1319%2Fhead#084e0f6e7417033b633370255a441cb267943fe9" } dependencies = [ { name = "asn1crypto" }, { name = "babel" }, From d21956169948b608c37a4ebd432a3d7a5a0e58a6 Mon Sep 17 00:00:00 2001 From: Tom Date: Wed, 28 Jan 2026 15:35:33 +0100 Subject: [PATCH 34/45] [ADD] account_invoice_overdue_reminder --- oca_all/__manifest__.py | 1 + uv.lock | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/oca_all/__manifest__.py b/oca_all/__manifest__.py index 74be070..0c362bb 100644 --- a/oca_all/__manifest__.py +++ b/oca_all/__manifest__.py @@ -110,6 +110,7 @@ "account_banking_sepa_credit_transfer", "account_credit_control", "account_financial_report", + "account_invoice_overdue_reminder", "account_lock_to_date", "account_payment_mode", "account_payment_order", diff --git a/uv.lock b/uv.lock index 0dcf777..2be4bf1 100644 --- a/uv.lock +++ b/uv.lock @@ -2,9 +2,6 @@ version = 1 revision = 3 requires-python = "==3.12.*" -[options] -prerelease-mode = "allow" - [[package]] name = "asn1crypto" version = "1.5.1" @@ -592,6 +589,7 @@ dependencies = [ { name = "odoo-addon-account-banking-sepa-credit-transfer" }, { name = "odoo-addon-account-credit-control" }, { name = "odoo-addon-account-financial-report" }, + { name = "odoo-addon-account-invoice-overdue-reminder" }, { name = "odoo-addon-account-lock-to-date" }, { name = "odoo-addon-account-payment-mode" }, { name = "odoo-addon-account-payment-order" }, @@ -705,6 +703,7 @@ requires-dist = [ { name = "odoo-addon-account-banking-sepa-credit-transfer", specifier = "==18.0.*" }, { name = "odoo-addon-account-credit-control", specifier = "==18.0.*" }, { name = "odoo-addon-account-financial-report", specifier = "==18.0.*" }, + { name = "odoo-addon-account-invoice-overdue-reminder", specifier = "==18.0.*" }, { name = "odoo-addon-account-lock-to-date", specifier = "==18.0.*" }, { name = "odoo-addon-account-payment-mode", specifier = "==18.0.*" }, { name = "odoo-addon-account-payment-order", specifier = "==18.0.*" }, @@ -891,6 +890,17 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9a/c4/b93659c2ea20102575483ec464f61608d925c02ca608fe27fa54331aaa4b/odoo_addon_account_financial_report-18.0.1.4.3-py3-none-any.whl", hash = "sha256:977b185350df96d3f08c7716a9d2a7ef816978e8ed0e819f61e42641dfb83469", size = 336394, upload-time = "2025-12-31T10:54:58.032Z" }, ] +[[package]] +name = "odoo-addon-account-invoice-overdue-reminder" +version = "18.0.1.2.0.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "odoo" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/e1/31876c971c6e8cc7ad23ec80628b246d456ba766286e6eb139161f926aca/odoo_addon_account_invoice_overdue_reminder-18.0.1.2.0.5-py3-none-any.whl", hash = "sha256:3d994116bd6ebea64ca18622521d6318be7af7a018f90b27f2e1363f31dccb34", size = 136603, upload-time = "2025-10-28T02:50:44.855Z" }, +] + [[package]] name = "odoo-addon-account-lock-to-date" version = "18.0.1.0.0.2" From 8cc93a4c17d175008e7e0b568bb9c7f3dad6b9cd Mon Sep 17 00:00:00 2001 From: Tom Date: Wed, 4 Feb 2026 22:40:29 +0100 Subject: [PATCH 35/45] [UPD] survey_xlsx was merged --- pyproject.toml | 1 - uv.lock | 9 ++++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 749fb2f..fcb4ed6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -100,7 +100,6 @@ odoo = { git = "https://github.com/OCA/OCB", rev = "refs/pull/1319/head" } # test pipeline to use it as well odoo-addon-membership_delegated_partner_line = { git = "https://github.com/gfcapalbo/vertical-association", branch = "18.0-MIG-membership_delegated_partner_line", subdirectory = "membership_delegated_partner_line" } odoo-addon-github_connector_oca = { git = "https://github.com/Therp/interface-github", branch = "18.0-mig-github_connector_oca", subdirectory = "github_connector_oca" } -odoo-addon-survey_xlsx = { git = "https://github.com/ByteMeAsap/survey", branch = "18.0-mig-survey_xlsx", subdirectory = "survey_xlsx" } odoo-addon-account_statement_import_online_wise = { git = "https://github.com/Therp/bank-statement-import", branch = "18.0-mig-account-statement-import-online-wise", subdirectory = "account_statement_import_online_wise" } # Example to develop module from an other repository diff --git a/uv.lock b/uv.lock index 2be4bf1..e26daad 100644 --- a/uv.lock +++ b/uv.lock @@ -745,7 +745,7 @@ requires-dist = [ { name = "odoo-addon-sentry", specifier = "==18.0.*" }, { name = "odoo-addon-server-action-mass-edit", specifier = "==18.0.*" }, { name = "odoo-addon-sql-request-abstract", specifier = "==18.0.*" }, - { name = "odoo-addon-survey-xlsx", git = "https://github.com/ByteMeAsap/survey?subdirectory=survey_xlsx&branch=18.0-mig-survey_xlsx" }, + { name = "odoo-addon-survey-xlsx", specifier = "==18.0.*" }, { name = "odoo-addon-uom-unece", specifier = "==18.0.*" }, { name = "odoo-addon-web-refresher", specifier = "==18.0.*" }, { name = "odoo-addon-web-responsive", specifier = "==18.0.*" }, @@ -1422,12 +1422,15 @@ wheels = [ [[package]] name = "odoo-addon-survey-xlsx" -version = "18.0.1.0.0" -source = { git = "https://github.com/ByteMeAsap/survey?subdirectory=survey_xlsx&branch=18.0-mig-survey_xlsx#07d26e715bd961c5599e3ff8491a4c143fab5a20" } +version = "18.0.1.0.0.2" +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "odoo" }, { name = "odoo-addon-report-xlsx" }, ] +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/e3/d8a79eefc62d272f91705b7521aebf3db528be1d7c14a916bcb4c27c0f8d/odoo_addon_survey_xlsx-18.0.1.0.0.2-py3-none-any.whl", hash = "sha256:69f701663d0eda80fd7fea31c7f6b03b10cc8077342aca85665cbeb9e1d45503", size = 24418, upload-time = "2026-02-02T16:55:22.082Z" }, +] [[package]] name = "odoo-addon-uom-unece" From 69d8dc4905d27cbe8b04d6fa3380c2c63db930eb Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 4 Feb 2026 22:35:15 +0000 Subject: [PATCH 36/45] [UPD] addons table in README.md --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1d774eb..ec94936 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,12 @@ oca-custom [//]: # (addons) -This part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools. +Available addons +---------------- +addon | version | maintainers | summary +--- | --- | --- | --- +[oca_all](oca_all/) | 18.0.0.0.1 | petrus-v | All oca modules dependencies +[oca_custom](oca_custom/) | 18.0.1.0.0 | | Custom Settings for OCA Instance [//]: # (end addons) From b16dd3201cc40588959450fed0b04355bc009452 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 4 Feb 2026 22:35:15 +0000 Subject: [PATCH 37/45] [UPD] README.rst --- oca_all/README.rst | 8 ++++++-- oca_all/static/description/index.html | 24 ++++++++++++++-------- oca_custom/README.rst | 8 ++++++-- oca_custom/static/description/index.html | 26 +++++++++++++++--------- 4 files changed, 43 insertions(+), 23 deletions(-) diff --git a/oca_all/README.rst b/oca_all/README.rst index 0a817c5..856447c 100644 --- a/oca_all/README.rst +++ b/oca_all/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + ======= OCA All ======= @@ -7,13 +11,13 @@ OCA All !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:c01e92c4aeb056ad41dd24d57aedfa0ae9e8bce10cd2674c930789fa113d0acb + !! source digest: sha256:0ac028a6276458862ff4220ae52cb85d631494c73015209b8511fd7923e6e6f8 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png :target: https://odoo-community.org/page/development-status :alt: Alpha -.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Foca--custom-lightgray.png?logo=github diff --git a/oca_all/static/description/index.html b/oca_all/static/description/index.html index a6b7e4b..1bf6dc6 100644 --- a/oca_all/static/description/index.html +++ b/oca_all/static/description/index.html @@ -3,7 +3,7 @@ -OCA All +README.rst -
-

OCA All

+
+ + +Odoo Community Association + +
+

OCA All

-

Alpha License: AGPL-3 OCA/oca-custom Translate me on Weblate Try me on Runboat

+

Alpha License: AGPL-3 OCA/oca-custom Translate me on Weblate Try me on Runboat

OCA’s Odoo instance’s dependencies.

Installing this module will create an instance likes the one used to manage the OCA association.

@@ -391,7 +396,7 @@

OCA All

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed @@ -399,15 +404,15 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -422,5 +427,6 @@

Maintainers

+
diff --git a/oca_custom/README.rst b/oca_custom/README.rst index fe39545..65b0dd4 100644 --- a/oca_custom/README.rst +++ b/oca_custom/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + =================== OCA Custom Settings =================== @@ -7,13 +11,13 @@ OCA Custom Settings !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:df0c7349e335de7ace652da62cd7743b27d7dc72eaec3da78766ff7f5fa0db54 + !! source digest: sha256:2242111460f577f89add9f3cf94bc7139284f8fe88b749439b70e762c3b972ce !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Foca--custom-lightgray.png?logo=github diff --git a/oca_custom/static/description/index.html b/oca_custom/static/description/index.html index 0189821..626ef86 100644 --- a/oca_custom/static/description/index.html +++ b/oca_custom/static/description/index.html @@ -3,7 +3,7 @@ -OCA Custom Settings +README.rst -
-

OCA Custom Settings

+
+ + +Odoo Community Association + +
+

OCA Custom Settings

-

Beta License: AGPL-3 OCA/oca-custom Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/oca-custom Translate me on Weblate Try me on Runboat

Custom module for OCA Instance.

Table of contents

@@ -384,7 +389,7 @@

OCA Custom Settings

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed @@ -392,16 +397,16 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • GRAP
  • Akretion
-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -435,5 +440,6 @@

Maintainers

+
From 0ad53035e70a32060c85ab19c06640f3e812ae39 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 4 Feb 2026 22:35:16 +0000 Subject: [PATCH 38/45] [BOT] add or update setup/_metapackage --- setup/_metapackage/pyproject.toml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 setup/_metapackage/pyproject.toml diff --git a/setup/_metapackage/pyproject.toml b/setup/_metapackage/pyproject.toml new file mode 100644 index 0000000..2406790 --- /dev/null +++ b/setup/_metapackage/pyproject.toml @@ -0,0 +1,12 @@ +[project] +name = "odoo-addons-oca-oca-custom" +version = "18.0.20260204.0" +dependencies = [ + "odoo-addon-oca_all==18.0.*", + "odoo-addon-oca_custom==18.0.*", +] +classifiers=[ + "Programming Language :: Python", + "Framework :: Odoo", + "Framework :: Odoo :: 18.0", +] From ec492a250d6bd1db76ce8461cb00521b1430b6d3 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Wed, 4 Feb 2026 22:41:25 +0000 Subject: [PATCH 39/45] [UPD] Update oca_all.pot --- oca_all/i18n/oca_all.pot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oca_all/i18n/oca_all.pot b/oca_all/i18n/oca_all.pot index 4d8b20f..aadee09 100644 --- a/oca_all/i18n/oca_all.pot +++ b/oca_all/i18n/oca_all.pot @@ -3,7 +3,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" +"Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" From 9574df979bde2a731e2c470c176d0c52d4de65e3 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Wed, 4 Feb 2026 22:41:25 +0000 Subject: [PATCH 40/45] [UPD] Update oca_custom.pot --- oca_custom/i18n/oca_custom.pot | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/oca_custom/i18n/oca_custom.pot b/oca_custom/i18n/oca_custom.pot index 948736d..63f5ce0 100644 --- a/oca_custom/i18n/oca_custom.pot +++ b/oca_custom/i18n/oca_custom.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" +"Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -18,23 +18,8 @@ msgstr "" msgid "Contact" msgstr "" -#. module: oca_custom -#: model:ir.model.fields,field_description:oca_custom.field_res_partner__display_name -msgid "Display Name" -msgstr "" - #. module: oca_custom #: model:ir.model.fields,field_description:oca_custom.field_res_partner__github_name #: model:ir.model.fields,field_description:oca_custom.field_res_users__github_name msgid "Github Technical Name" msgstr "" - -#. module: oca_custom -#: model:ir.model.fields,field_description:oca_custom.field_res_partner__id -msgid "ID" -msgstr "" - -#. module: oca_custom -#: model:ir.model.fields,field_description:oca_custom.field_res_partner____last_update -msgid "Last Modified on" -msgstr "" From 842d29ee4efd0995f9b93f498d91a9afa6977815 Mon Sep 17 00:00:00 2001 From: KKamaa Date: Mon, 26 Jan 2026 12:29:55 +0300 Subject: [PATCH 41/45] Draft:[18.0][RFR] #12975 Review automated action --- oca_custom/__manifest__.py | 12 ++- oca_custom/models/__init__.py | 1 + oca_custom/models/res_config_settings.py | 32 ++++++++ oca_custom/models/res_partner.py | 79 ++++++++++++++++++- oca_custom/tests/__init__.py | 1 + .../tests/test_membership_channel_sync.py | 56 +++++++++++++ oca_custom/views/res_config_settings.xml | 21 +++++ 7 files changed, 199 insertions(+), 3 deletions(-) create mode 100644 oca_custom/models/res_config_settings.py create mode 100644 oca_custom/tests/__init__.py create mode 100644 oca_custom/tests/test_membership_channel_sync.py create mode 100644 oca_custom/views/res_config_settings.xml diff --git a/oca_custom/__manifest__.py b/oca_custom/__manifest__.py index 01ef24f..aa9058a 100644 --- a/oca_custom/__manifest__.py +++ b/oca_custom/__manifest__.py @@ -9,7 +9,15 @@ "website": "https://github.com/OCA/oca-custom", "author": "GRAP, Akretion, Odoo Community Association (OCA)", "license": "AGPL-3", - "depends": ["github_connector"], - "data": ["views/res_partner.xml"], + "depends": [ + "base", + "contacts", + "github_connector", + "membership", + ], + "data": [ + "views/res_config_settings.xml", + "views/res_partner.xml", + ], "installable": True, } diff --git a/oca_custom/models/__init__.py b/oca_custom/models/__init__.py index 91fed54..0d7a048 100644 --- a/oca_custom/models/__init__.py +++ b/oca_custom/models/__init__.py @@ -1 +1,2 @@ from . import res_partner +from . import res_config_settings diff --git a/oca_custom/models/res_config_settings.py b/oca_custom/models/res_config_settings.py new file mode 100644 index 0000000..00da96c --- /dev/null +++ b/oca_custom/models/res_config_settings.py @@ -0,0 +1,32 @@ +from odoo import api, fields, models + +PARAM_PREFIX = "oca_membership_channel_sync." + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + member_tag_id = fields.Many2one( + "res.partner.category", + string="Member tag", + help="Partner tag that marks Members.", + ) + + @api.model + def get_values(self): + res = super().get_values() + ICP = self.env["ir.config_parameter"].sudo() + val = ICP.get_param(PARAM_PREFIX + "member_tag_id") + res.update( + member_tag_id=int(val) if val and val.isdigit() else False, + ) + return res + + def set_values(self): + res = super().set_values() + ICP = self.env["ir.config_parameter"].sudo() + ICP.set_param( + PARAM_PREFIX + "member_tag_id", + str(self.member_tag_id.id) if self.member_tag_id else "", + ) + return res diff --git a/oca_custom/models/res_partner.py b/oca_custom/models/res_partner.py index a25c9f0..bc22890 100644 --- a/oca_custom/models/res_partner.py +++ b/oca_custom/models/res_partner.py @@ -2,10 +2,87 @@ # @author: Sylvain LE GAL (https://twitter.com/legalsylvain) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import fields, models +import logging + +from odoo import api, fields, models + +_logger = logging.getLogger(__name__) + +PARAM_PREFIX = "oca_membership_channel_sync." +MEMBER_STATES = {"paid"} class ResPartner(models.Model): _inherit = "res.partner" github_name = fields.Char(readonly=False) + + def _cfg_id(self, key: str) -> int | None: + val = self.env["ir.config_parameter"].sudo().get_param(PARAM_PREFIX + key) + if val and str(val).isdigit(): + return int(val) + return None + + def _sync_member_tag_from_membership_state(self): + member_tag_id = self._cfg_id("member_tag_id") or 3 + member_tag = self.env["res.partner.category"].browse(member_tag_id).exists() + if not member_tag: + _logger.info( + "\nMember tag id=%s not found; skip membership_state tag sync\n", + member_tag_id, + ) + return + + to_add = self.filtered( + lambda p: p.membership_state in MEMBER_STATES + and member_tag not in p.category_id + ) + to_remove = self.filtered( + lambda p: p.membership_state not in MEMBER_STATES + and member_tag in p.category_id + ) + + if to_add: + to_add.with_context(skip_membership_channel_sync=True).write( + {"category_id": [(4, member_tag.id)]} + ) + if to_remove: + to_remove.with_context(skip_membership_channel_sync=True).write( + {"category_id": [(3, member_tag.id)]} + ) + + @api.model + def _cron_membership_tag_sync(self, batch_size: int = 500): + ICP = self.env["ir.config_parameter"].sudo() + cursor_key = PARAM_PREFIX + "cron_last_partner_id" + last_id = int(ICP.get_param(cursor_key, default="0") or 0) + member_tag_id = self._cfg_id("member_tag_id") or 3 + + partners = self.sudo().search( + [ + ("id", ">", last_id), + "|", + ("membership_state", "in", list(MEMBER_STATES)), + ("category_id", "in", [member_tag_id]), + ], + order="id asc", + limit=batch_size, + ) + + if not partners: + ICP.set_param(cursor_key, "0") + return True + + partners._sync_member_tag_from_membership_state() + ICP.set_param(cursor_key, str(partners[-1].id)) + return True + + def write(self, vals): + res = super().write(vals) + if self.env.context.get("skip_membership_channel_sync"): + return res + + if "membership_state" in vals: + self._sync_member_tag_from_membership_state() + + return res diff --git a/oca_custom/tests/__init__.py b/oca_custom/tests/__init__.py new file mode 100644 index 0000000..c77e25e --- /dev/null +++ b/oca_custom/tests/__init__.py @@ -0,0 +1 @@ +from . import test_membership_channel_sync diff --git a/oca_custom/tests/test_membership_channel_sync.py b/oca_custom/tests/test_membership_channel_sync.py new file mode 100644 index 0000000..9781d59 --- /dev/null +++ b/oca_custom/tests/test_membership_channel_sync.py @@ -0,0 +1,56 @@ +# Copyright (C) 2016-Today: Odoo Community Association (OCA) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo.tests import tagged +from odoo.tests.common import TransactionCase + + +@tagged("post_install", "-at_install") +class TestMembershipTagSync(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.ICP = cls.env["ir.config_parameter"].sudo() + cls.tag_member = cls.env["res.partner.category"].create({"name": "Member"}) + cls.partner = cls.env["res.partner"].create({"name": "Partner A"}) + cls.ICP.set_param( + "oca_membership_channel_sync.member_tag_id", str(cls.tag_member.id) + ) + + def _set_membership_state_sql(self, partner, state): + # membership_state is computed/stored and not always writable directly. + self.env.cr.execute( + "UPDATE res_partner SET membership_state=%s WHERE id=%s", + (state, partner.id), + ) + self.env.invalidate_all() + return self.env["res.partner"].browse(partner.id) + + def test_01_action_sync_adds_member_tag_when_paid(self): + partner = self._set_membership_state_sql(self.partner, "paid") + self.assertNotIn(self.tag_member, partner.category_id) + + partner.action_membership_sync() + self.assertIn(self.tag_member, partner.category_id) + + def test_02_action_sync_removes_member_tag_when_not_paid(self): + partner = self._set_membership_state_sql(self.partner, "paid") + partner.action_membership_sync() + self.assertIn(self.tag_member, partner.category_id) + + partner = self._set_membership_state_sql(self.partner, "none") + partner.action_membership_sync() + self.assertNotIn(self.tag_member, partner.category_id) + + def test_03_cron_sync_reconciles_in_batches(self): + # Reset cron cursor so this test is deterministic + self.ICP.set_param("oca_membership_channel_sync.cron_last_partner_id", "0") + + partner = self._set_membership_state_sql(self.partner, "paid") + self.assertNotIn(self.tag_member, partner.category_id) + + # Run cron manually + self.env["res.partner"]._cron_membership_tag_sync(batch_size=100) + + partner = self.env["res.partner"].browse(self.partner.id) + self.assertIn(self.tag_member, partner.category_id) diff --git a/oca_custom/views/res_config_settings.xml b/oca_custom/views/res_config_settings.xml new file mode 100644 index 0000000..9352948 --- /dev/null +++ b/oca_custom/views/res_config_settings.xml @@ -0,0 +1,21 @@ + + + + res.config.settings.membership.tag.sync + res.config.settings + + + + + + + + + + + + From 73054c031f66ce38aa99a6f0994771ee15cfc92a Mon Sep 17 00:00:00 2001 From: KKamaa Date: Wed, 28 Jan 2026 12:05:42 +0300 Subject: [PATCH 42/45] fixup! Draft:[18.0][RFR] #12975 Review automated action --- oca_custom/models/res_partner.py | 20 +++++++++++-------- .../tests/test_membership_channel_sync.py | 7 ------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/oca_custom/models/res_partner.py b/oca_custom/models/res_partner.py index bc22890..19370d0 100644 --- a/oca_custom/models/res_partner.py +++ b/oca_custom/models/res_partner.py @@ -52,17 +52,20 @@ def _sync_member_tag_from_membership_state(self): ) @api.model - def _cron_membership_tag_sync(self, batch_size: int = 500): + def _cron_membership_tag_sync(self, batch_size=500): ICP = self.env["ir.config_parameter"].sudo() - cursor_key = PARAM_PREFIX + "cron_last_partner_id" - last_id = int(ICP.get_param(cursor_key, default="0") or 0) - member_tag_id = self._cfg_id("member_tag_id") or 3 + last_id = int( + ICP.get_param("oca_membership_channel_sync.cron_last_partner_id", "0") or 0 + ) + member_tag_id = int( + ICP.get_param("oca_membership_channel_sync.member_tag_id", "3") or 3 + ) partners = self.sudo().search( [ ("id", ">", last_id), "|", - ("membership_state", "in", list(MEMBER_STATES)), + ("membership_state", "=", "paid"), ("category_id", "in", [member_tag_id]), ], order="id asc", @@ -70,12 +73,13 @@ def _cron_membership_tag_sync(self, batch_size: int = 500): ) if not partners: - ICP.set_param(cursor_key, "0") + ICP.set_param("oca_membership_channel_sync.cron_last_partner_id", "0") return True partners._sync_member_tag_from_membership_state() - ICP.set_param(cursor_key, str(partners[-1].id)) - return True + ICP.set_param( + "oca_membership_channel_sync.cron_last_partner_id", str(partners[-1].id) + ) def write(self, vals): res = super().write(vals) diff --git a/oca_custom/tests/test_membership_channel_sync.py b/oca_custom/tests/test_membership_channel_sync.py index 9781d59..c59dc70 100644 --- a/oca_custom/tests/test_membership_channel_sync.py +++ b/oca_custom/tests/test_membership_channel_sync.py @@ -26,13 +26,6 @@ def _set_membership_state_sql(self, partner, state): self.env.invalidate_all() return self.env["res.partner"].browse(partner.id) - def test_01_action_sync_adds_member_tag_when_paid(self): - partner = self._set_membership_state_sql(self.partner, "paid") - self.assertNotIn(self.tag_member, partner.category_id) - - partner.action_membership_sync() - self.assertIn(self.tag_member, partner.category_id) - def test_02_action_sync_removes_member_tag_when_not_paid(self): partner = self._set_membership_state_sql(self.partner, "paid") partner.action_membership_sync() From 170e7bdf69d9bd3d101f5c3c6c930a63c62a7dd2 Mon Sep 17 00:00:00 2001 From: KKamaa Date: Wed, 28 Jan 2026 12:38:50 +0300 Subject: [PATCH 43/45] fixup! fixup! Draft:[18.0][RFR] #12975 Review automated action --- oca_custom/__manifest__.py | 1 + oca_custom/data/ir_cron_data.xml | 13 +++++ oca_custom/models/res_partner.py | 49 +++++++++++-------- .../tests/test_membership_channel_sync.py | 15 ++++-- 4 files changed, 54 insertions(+), 24 deletions(-) create mode 100644 oca_custom/data/ir_cron_data.xml diff --git a/oca_custom/__manifest__.py b/oca_custom/__manifest__.py index aa9058a..ba051b9 100644 --- a/oca_custom/__manifest__.py +++ b/oca_custom/__manifest__.py @@ -16,6 +16,7 @@ "membership", ], "data": [ + "data/ir_cron_data.xml", "views/res_config_settings.xml", "views/res_partner.xml", ], diff --git a/oca_custom/data/ir_cron_data.xml b/oca_custom/data/ir_cron_data.xml new file mode 100644 index 0000000..3704250 --- /dev/null +++ b/oca_custom/data/ir_cron_data.xml @@ -0,0 +1,13 @@ + + + + Membership: sync Member tag from membership_state + + + code + model._cron_membership_tag_sync() + 15 + minutes + True + + diff --git a/oca_custom/models/res_partner.py b/oca_custom/models/res_partner.py index 19370d0..8b5071f 100644 --- a/oca_custom/models/res_partner.py +++ b/oca_custom/models/res_partner.py @@ -23,43 +23,53 @@ def _cfg_id(self, key: str) -> int | None: return int(val) return None - def _sync_member_tag_from_membership_state(self): + def _get_member_tag(self): member_tag_id = self._cfg_id("member_tag_id") or 3 - member_tag = self.env["res.partner.category"].browse(member_tag_id).exists() - if not member_tag: + tag = self.env["res.partner.category"].browse(member_tag_id).exists() + if not tag: _logger.info( - "\nMember tag id=%s not found; skip membership_state tag sync\n", + "Member tag id=%s not found; skip membership_state tag sync", member_tag_id, ) + return tag + + def _sync_member_tag_from_membership_state(self): + member_tag = self._get_member_tag() + if not member_tag: return + tag_id = member_tag.id + to_add = self.filtered( - lambda p: p.membership_state in MEMBER_STATES - and member_tag not in p.category_id + lambda p, tag_id=tag_id: (p.membership_state in MEMBER_STATES) + and (tag_id not in p.category_id.ids) ) to_remove = self.filtered( - lambda p: p.membership_state not in MEMBER_STATES - and member_tag in p.category_id + lambda p, tag_id=tag_id: (p.membership_state not in MEMBER_STATES) + and (tag_id in p.category_id.ids) ) if to_add: to_add.with_context(skip_membership_channel_sync=True).write( - {"category_id": [(4, member_tag.id)]} + {"category_id": [(4, tag_id)]} ) if to_remove: to_remove.with_context(skip_membership_channel_sync=True).write( - {"category_id": [(3, member_tag.id)]} + {"category_id": [(3, tag_id)]} ) + def action_membership_sync(self): + self._sync_member_tag_from_membership_state() + return True + @api.model def _cron_membership_tag_sync(self, batch_size=500): ICP = self.env["ir.config_parameter"].sudo() - last_id = int( - ICP.get_param("oca_membership_channel_sync.cron_last_partner_id", "0") or 0 - ) - member_tag_id = int( - ICP.get_param("oca_membership_channel_sync.member_tag_id", "3") or 3 - ) + + cursor_key = PARAM_PREFIX + "cron_last_partner_id" + last_id = int(ICP.get_param(cursor_key, "0") or 0) + + member_tag_id = int(ICP.get_param(PARAM_PREFIX + "member_tag_id", "3") or 3) partners = self.sudo().search( [ @@ -73,13 +83,12 @@ def _cron_membership_tag_sync(self, batch_size=500): ) if not partners: - ICP.set_param("oca_membership_channel_sync.cron_last_partner_id", "0") + ICP.set_param(cursor_key, "0") return True partners._sync_member_tag_from_membership_state() - ICP.set_param( - "oca_membership_channel_sync.cron_last_partner_id", str(partners[-1].id) - ) + ICP.set_param(cursor_key, str(partners[-1].id)) + return True def write(self, vals): res = super().write(vals) diff --git a/oca_custom/tests/test_membership_channel_sync.py b/oca_custom/tests/test_membership_channel_sync.py index c59dc70..87c5756 100644 --- a/oca_custom/tests/test_membership_channel_sync.py +++ b/oca_custom/tests/test_membership_channel_sync.py @@ -11,6 +11,7 @@ class TestMembershipTagSync(TransactionCase): def setUpClass(cls): super().setUpClass() cls.ICP = cls.env["ir.config_parameter"].sudo() + cls.tag_member = cls.env["res.partner.category"].create({"name": "Member"}) cls.partner = cls.env["res.partner"].create({"name": "Partner A"}) cls.ICP.set_param( @@ -18,7 +19,6 @@ def setUpClass(cls): ) def _set_membership_state_sql(self, partner, state): - # membership_state is computed/stored and not always writable directly. self.env.cr.execute( "UPDATE res_partner SET membership_state=%s WHERE id=%s", (state, partner.id), @@ -26,23 +26,30 @@ def _set_membership_state_sql(self, partner, state): self.env.invalidate_all() return self.env["res.partner"].browse(partner.id) + def test_01_action_sync_adds_member_tag_when_paid(self): + partner = self._set_membership_state_sql(self.partner, "paid") + self.assertNotIn(self.tag_member, partner.category_id) + + partner.action_membership_sync() + partner.invalidate_recordset() + self.assertIn(self.tag_member, partner.category_id) + def test_02_action_sync_removes_member_tag_when_not_paid(self): partner = self._set_membership_state_sql(self.partner, "paid") partner.action_membership_sync() + partner.invalidate_recordset() self.assertIn(self.tag_member, partner.category_id) partner = self._set_membership_state_sql(self.partner, "none") partner.action_membership_sync() + partner.invalidate_recordset() self.assertNotIn(self.tag_member, partner.category_id) def test_03_cron_sync_reconciles_in_batches(self): - # Reset cron cursor so this test is deterministic self.ICP.set_param("oca_membership_channel_sync.cron_last_partner_id", "0") partner = self._set_membership_state_sql(self.partner, "paid") self.assertNotIn(self.tag_member, partner.category_id) - - # Run cron manually self.env["res.partner"]._cron_membership_tag_sync(batch_size=100) partner = self.env["res.partner"].browse(self.partner.id) From 530a2db14817270afee0127a8bc82c0c68b98103 Mon Sep 17 00:00:00 2001 From: KKamaa Date: Wed, 28 Jan 2026 12:51:31 +0300 Subject: [PATCH 44/45] fixup! fixup! fixup! Draft:[18.0][RFR] #12975 Review automated action --- oca_custom/__manifest__.py | 1 + oca_custom/data/ir_action_server_data.xml | 13 +++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 oca_custom/data/ir_action_server_data.xml diff --git a/oca_custom/__manifest__.py b/oca_custom/__manifest__.py index ba051b9..9920f5d 100644 --- a/oca_custom/__manifest__.py +++ b/oca_custom/__manifest__.py @@ -17,6 +17,7 @@ ], "data": [ "data/ir_cron_data.xml", + "data/ir_action_server_data.xml", "views/res_config_settings.xml", "views/res_partner.xml", ], diff --git a/oca_custom/data/ir_action_server_data.xml b/oca_custom/data/ir_action_server_data.xml new file mode 100644 index 0000000..ea2252c --- /dev/null +++ b/oca_custom/data/ir_action_server_data.xml @@ -0,0 +1,13 @@ + + + + Sync Member Tag from Membership + + code + records.action_membership_sync() + + + + list,form + + From e49e365289712478e8e453c567f27120cd04bc6d Mon Sep 17 00:00:00 2001 From: KKamaa Date: Wed, 28 Jan 2026 12:56:08 +0300 Subject: [PATCH 45/45] fixup! fixup! fixup! fixup! Draft:[18.0][RFR] #12975 Review automated action --- oca_custom/data/ir_action_server_data.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/oca_custom/data/ir_action_server_data.xml b/oca_custom/data/ir_action_server_data.xml index ea2252c..346b0f5 100644 --- a/oca_custom/data/ir_action_server_data.xml +++ b/oca_custom/data/ir_action_server_data.xml @@ -5,8 +5,6 @@ code records.action_membership_sync() - - list,form