From 0d2afda2b0eccaa295f24bb5290e77d37d083fcd Mon Sep 17 00:00:00 2001
From: Adam Paquette <acpaquette@usgs.gov>
Date: Fri, 17 Jan 2025 13:08:56 -0700
Subject: [PATCH] Address gdal warning (#626)

---
 ale/base/base.py | 70 +++++++++++++++++++++---------------------------
 1 file changed, 31 insertions(+), 39 deletions(-)

diff --git a/ale/base/base.py b/ale/base/base.py
index 7c8a1ad..c7d12cb 100644
--- a/ale/base/base.py
+++ b/ale/base/base.py
@@ -422,45 +422,51 @@ class Driver():
         """
         return self.__module__.split('.')[-1].split('_')[0]
 
-    @property 
-    def projection(self):
-        """
-        Return projection information generated by osgeo.
-
-        Returns
-        -------
-        str
-            A string representation of the projection information.
-
-        """
-        if not hasattr(self, "_projection"): 
+    @property
+    def read_geodata(self):
+        if not hasattr(self, "_geodata"):
             try: 
-              from osgeo import gdal 
+              from osgeo import gdal
+              gdal.UseExceptions()
             except: 
                 self._projection = ""
                 return self._projection
 
-            geodata = None
+            self._geodata = None
             if isinstance(self._file, pvl.PVLModule):
                 # save it to a temp folder
                 with tempfile.NamedTemporaryFile() as tmp:
                     tmp.write(pvl.dumps(self._file)) 
 
-                    geodata = gdal.Open(tempfile.name)
+                    self._geodata = gdal.Open(tempfile.name)
             else: 
                 # should be a path
                 if not os.path.exists(self._file): 
-                    self._projection = "" 
+                    self._geodata = None
                 else: 
-                    geodata = gdal.Open(self._file)
-   
+                    self._geodata = gdal.Open(self._file)
+
+        return self._geodata
+
+    @property 
+    def projection(self):
+        """
+        Return projection information generated by osgeo.
+
+        Returns
+        -------
+        str
+            A string representation of the projection information.
 
+        """
+        if not hasattr(self, "_projection"):
             # Try to get the projection, if we are unsuccessful set it
             # to empty
             try:
-              self._projection = geodata.GetSpatialRef().ExportToProj4()
+                self._projection = self.read_geodata.GetSpatialRef().ExportToProj4()
             except:
-              self._projection = "" 
+                self._projection = ""
+
         return self._projection
     
     @property 
@@ -475,25 +481,11 @@ class Driver():
 
         """
         if not hasattr(self, "_geotransform"): 
-            try: 
-              from osgeo import gdal 
-            except: 
+            # Try to get the geotransform, if we are unsuccessful set it
+            # to the identity
+            try:
+                self._geotransform = self.read_geodata.GetGeoTransform()
+            except:
                 self._geotransform = (0.0, 1.0, 0.0, 0.0, 0.0, 1.0)
-                return self._geotransform
-
-            if isinstance(self._file, pvl.PVLModule):
-                # save it to a temp folder
-                with tempfile.NamedTemporaryFile() as tmp:
-                    tmp.write(pvl.dumps(self._file)) 
-
-                    geodata = gdal.Open(tempfile.name)
-                    self._geotransform = geodata.GetGeoTransform()
-            else: 
-                # should be a path
-                if not os.path.exists(self._file): 
-                    self._geotransform = (0.0, 1.0, 0.0, 0.0, 0.0, 1.0) 
-                else: 
-                    geodata = gdal.Open(self._file)
-                    self._geotransform = geodata.GetGeoTransform()
                 
         return self._geotransform
\ No newline at end of file
-- 
GitLab