From 9b6c15a9b43d9f98b14d87eab2a206e3bc419b84 Mon Sep 17 00:00:00 2001 From: "George V. Reilly" Date: Thu, 8 Dec 2022 23:24:58 -0800 Subject: [PATCH] Workaround for zipimporter not having exec_module before Python 3.10 (#1069) --- dateparser/utils/strptime.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/dateparser/utils/strptime.py b/dateparser/utils/strptime.py index dc7cf4caa..c557539ad 100644 --- a/dateparser/utils/strptime.py +++ b/dateparser/utils/strptime.py @@ -14,6 +14,14 @@ MS_SEARCHER = re.compile(r'\.(?P[0-9]{1,6})') +def _exec_module(spec, module): + if hasattr(spec.loader, "exec_module"): + spec.loader.exec_module(module) + else: + # This can happen before Python 3.10 + # if spec.loader is a zipimporter and the Python runtime is in a zipfile + code = spec.loader.get_code(module.__name__) + exec(code, module.__dict__) def patch_strptime(): """Monkey patching _strptime to avoid problems related with non-english @@ -23,13 +31,12 @@ def patch_strptime(): any date since all languages are translated to english dates. """ _strptime_spec = importlib.util.find_spec('_strptime') - _strptime = importlib.util.module_from_spec(_strptime_spec) - _strptime_spec.loader.exec_module(_strptime) + _exec_module(_strptime_spec, _strptime) sys.modules['strptime_patched'] = _strptime _calendar = importlib.util.module_from_spec(_strptime_spec) - _strptime_spec.loader.exec_module(_calendar) + _exec_module(_strptime_spec, _calendar) sys.modules['calendar_patched'] = _calendar _strptime._getlang = lambda: ('en_US', 'UTF-8')