88import tempfile
99from base64 import b64decode , b64encode
1010from contextlib import contextmanager
11+ from importlib .resources import as_file , files
1112from unittest import mock
1213
13- import pkg_resources
1414from PyPDF2 import PdfFileWriter
15- from PyPDF2 .pdf import PageObject
15+
16+ try :
17+ # For PyPDF2 <= 1.26.0
18+ from PyPDF2 .pdf import PageObject
19+ except ImportError :
20+ # For PyPDF2 >= 2.0.0
21+ from PyPDF2 import PageObject
1622
1723from odoo import tools
1824from odoo .exceptions import ValidationError
@@ -44,12 +50,13 @@ def temporary_copy(path):
4450
4551
4652class TestReportPy3o (TransactionCase ):
47- def setUp (self ):
48- super (TestReportPy3o , self ).setUp ()
49- self .env .user .image_1920 = PNG
50- self .report = self .env .ref ("report_py3o.res_users_report_py3o" )
51- self .py3o_report = self .env ["py3o.report" ].create (
52- {"ir_actions_report_id" : self .report .id }
53+ @classmethod
54+ def setUpClass (cls ):
55+ super ().setUpClass ()
56+ cls .env .user .image_1920 = PNG
57+ cls .report = cls .env .ref ("report_py3o.res_users_report_py3o" )
58+ cls .py3o_report = cls .env ["py3o.report" ].create (
59+ {"ir_actions_report_id" : cls .report .id }
5360 )
5461
5562 def test_required_py3_filetype (self ):
@@ -146,10 +153,9 @@ def test_report_template_configs(self):
146153 # the demo template is specified with a relative path in in the module
147154 # path
148155 tmpl_name = self .report .py3o_template_fallback
149- flbk_filename = pkg_resources .resource_filename (
150- "odoo.addons.%s" % self .report .module , tmpl_name
151- )
152- self .assertTrue (os .path .exists (flbk_filename ))
156+ with as_file (files (f"odoo.addons.{ self .report .module } " )) as _asf :
157+ flbk_filename = _asf .joinpath (tmpl_name )
158+ self .assertTrue (flbk_filename .is_file ())
153159 res = self .report ._render (self .report .id , self .env .user .ids )
154160 self .assertTrue (res )
155161 # The generation fails if the template is not found
@@ -190,9 +196,8 @@ def test_report_template_configs(self):
190196 @tools .misc .mute_logger ("odoo.addons.report_py3o.models.py3o_report" )
191197 def test_report_template_fallback_validity (self ):
192198 tmpl_name = self .report .py3o_template_fallback
193- flbk_filename = pkg_resources .resource_filename (
194- "odoo.addons.%s" % self .report .module , tmpl_name
195- )
199+ with as_file (files (f"odoo.addons.{ self .report .module } " )) as _asf :
200+ flbk_filename = _asf .joinpath (tmpl_name )
196201 # an exising file in a native format is a valid template if it's
197202 self .assertTrue (self .py3o_report ._get_template_from_path (tmpl_name ))
198203 self .report .module = None
@@ -208,7 +213,7 @@ def test_report_template_fallback_validity(self):
208213 self .assertTrue (self .py3o_report ._get_template_from_path (tmp_filename ))
209214 # check security
210215 self .assertFalse (
211- self .py3o_report ._get_template_from_path ("rm -rf . & %s" % flbk_filename )
216+ self .py3o_report ._get_template_from_path (f "rm -rf . & { flbk_filename } " )
212217 )
213218 # a file in a non native LibreOffice format is not a valid template
214219 with tempfile .NamedTemporaryFile (suffix = ".toto" ) as f :
0 commit comments