11from __future__ import annotations
22
3- import importlib
43import logging
54import sys
6- from typing import Any
75
86logger = logging .getLogger (__name__ )
97
@@ -28,66 +26,15 @@ def monkeypatch() -> None:
2826 from django_lazy_gdal import libgdal as lazy_libgdal
2927
3028 django_libgdal_mod = "django.contrib.gis.gdal.libgdal"
31- lazy_libgdal_mod = "django_lazy_gdal.lazy_libgdal"
32-
33- original_libgdal = None
34- original_module_dict : dict [str , Any ] = {}
35- try :
36- if (
37- django_libgdal_mod in sys .modules
38- and sys .modules [django_libgdal_mod ] is not lazy_libgdal
39- ):
40- logger .warning (
41- f"{ django_libgdal_mod } was imported before django_lazy_gdal could monkeypatch it. "
42- "Call django_lazy_gdal.monkeypatch_libgdal() early in your settings module."
43- )
44- original_libgdal = sys .modules [django_libgdal_mod ]
45- elif django_libgdal_mod not in sys .modules :
46- try :
47- original_libgdal = importlib .import_module (django_libgdal_mod )
48- except ImportError :
49- # This might happen if django.contrib.gis is partially available
50- # but libgdal itself fails to import. Patching might still be desired
51- # but attribute copying won't work.
52- logger .warning (
53- f"Could not import original { django_libgdal_mod } for attribute copying." ,
54- exc_info = True ,
55- )
56- pass
57-
58- if original_libgdal :
59- original_module_dict = original_libgdal .__dict__ .copy ()
60-
61- except Exception :
62- logger .exception (
63- f"Error trying to access original module { django_libgdal_mod } for attribute copying."
29+ lazy_libgdal_mod = "django_lazy_gdal.libgdal"
30+
31+ if (
32+ django_libgdal_mod in sys .modules
33+ and sys .modules [django_libgdal_mod ] is not lazy_libgdal
34+ ):
35+ logger .warning (
36+ f"{ django_libgdal_mod } was imported before django_lazy_gdal could monkeypatch it. Call django_lazy_gdal.monkeypatch() early in your settings module."
6437 )
65- # Decide whether to proceed without attribute copying or bail out.
66- # Let's proceed but without attributes.
67- pass
6838
6939 sys .modules [django_libgdal_mod ] = lazy_libgdal
7040 logger .debug (f"Monkeypatched { django_libgdal_mod } to use { lazy_libgdal_mod } " )
71-
72- # Transfer attributes from the original module dict if we have it
73- if original_module_dict :
74- copied_attrs_count = 0
75- for key , value in original_module_dict .items ():
76- # Only copy if the attribute doesn't already exist on the lazy module
77- if not hasattr (lazy_libgdal , key ):
78- try :
79- setattr (lazy_libgdal , key , value )
80- copied_attrs_count += 1
81- except Exception :
82- logger .warning (
83- f"Failed to copy attribute '{ key } ' from original { django_libgdal_mod } to lazy module." ,
84- exc_info = True ,
85- )
86- pass
87- logger .debug (
88- f"Transferred { copied_attrs_count } missing attributes from { django_libgdal_mod } ."
89- )
90- else :
91- logger .debug (
92- f"Skipping attribute transfer as original module dict for { django_libgdal_mod } wasn't available."
93- )
0 commit comments