[Python-modules-commits] [cf-python] 01/03: netcdftime compatibility

Klaus Zimmermann zklaus-guest at moszumanska.debian.org
Sun Dec 11 12:27:18 UTC 2016


This is an automated email from the git hooks/post-receive script.

zklaus-guest pushed a commit to branch master
in repository cf-python.

commit bbf9f2be93a1f9105ee93b50fa3f0c841dbc6e71
Author: Klaus Zimmermann <klaus_zimmermann at gmx.de>
Date:   Fri Dec 9 18:15:24 2016 +0100

    netcdftime compatibility
    
    Remove some internal netcdftime functions that are no longer accessible.
    
    Signed-off-by: Klaus Zimmermann <klaus_zimmermann at gmx.de>
---
 cf/cfdatetime.py | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++------
 cf/units.py      |  6 +++++-
 2 files changed, 57 insertions(+), 7 deletions(-)

diff --git a/cf/cfdatetime.py b/cf/cfdatetime.py
index 36819e2..b438362 100644
--- a/cf/cfdatetime.py
+++ b/cf/cfdatetime.py
@@ -14,9 +14,60 @@ from .units        import Units
 if netCDF4.__version__ <= '1.1.1':
     _netCDF4_netcdftime_parse_date = netCDF4.netcdftime._parse_date
     _netCDF4_netcdftime_strftime   = netCDF4.netcdftime._strftime
-else:
+elif netCDF4.__version__ <= '1.2.4':
     _netCDF4_netcdftime_parse_date = netCDF4.netcdftime.netcdftime._parse_date
     _netCDF4_netcdftime_strftime   = netCDF4.netcdftime._datetime._strftime
+else:
+    import time
+
+    def _findall(text, substr):
+        # Also finds overlaps
+        sites = []
+        i = 0
+        while 1:
+            j = text.find(substr, i)
+            if j == -1:
+                break
+            sites.append(j)
+            i = j + 1
+        return sites
+
+
+    def _netCDF4_netcdftime_strftime(dt, fmt):
+        if _illegal_s.search(fmt):
+            raise TypeError("This strftime implementation does not handle %s")
+        # don't use strftime method at all.
+        # if dt.year > 1900:
+        #    return dt.strftime(fmt)
+
+        year = dt.year
+        # For every non-leap year century, advance by
+        # 6 years to get into the 28-year repeat cycle
+        delta = 2000 - year
+        off = 6 * (delta // 100 + delta // 400)
+        year = year + off
+
+        # Move to around the year 2000
+        year = year + ((2000 - year) // 28) * 28
+        timetuple = dt.timetuple()
+        s1 = time.strftime(fmt, (year,) + timetuple[1:])
+        sites1 = _findall(s1, str(year))
+
+        s2 = time.strftime(fmt, (year + 28,) + timetuple[1:])
+        sites2 = _findall(s2, str(year + 28))
+
+        sites = []
+        for site in sites1:
+            if site in sites2:
+                sites.append(site)
+
+        s = s1
+        syear = "%4d" % (dt.year,)
+        for site in sites:
+            s = s[:site] + syear + s[site + 4:]
+        return s
+
+    _netCDF4_netcdftime_parse_date = netCDF4.netcdftime._parse_date
 
 
 # Define some useful units
@@ -730,11 +781,6 @@ second).
 
     return jd
 #--- End: def
-if netCDF4.__version__ <= '1.1.1':
-    netCDF4.netcdftime._NoLeapDayFromDate = _NoLeapDayFromDate
-else:
-    netCDF4.netcdftime.netcdftime._NoLeapDayFromDate = _NoLeapDayFromDate
-
 
 def interval(value, units_in, units_out=None, dummy1=None):
     '''
diff --git a/cf/units.py b/cf/units.py
index ada337c..d35c967 100644
--- a/cf/units.py
+++ b/cf/units.py
@@ -263,10 +263,14 @@ if netCDF4.__version__ <= '1.1.1':
     _DateFromNoLeapDay = netCDF4.netcdftime._DateFromNoLeapDay
     _DateFromAllLeap   = netCDF4.netcdftime._DateFromAllLeap
     _DateFrom360Day    = netCDF4.netcdftime._DateFrom360Day
-else:
+elif netCDF4.__version__ <= '1.2.4':
     _DateFromNoLeapDay = netCDF4.netcdftime.netcdftime._DateFromNoLeapDay
     _DateFromAllLeap   = netCDF4.netcdftime.netcdftime._DateFromAllLeap
     _DateFrom360Day    = netCDF4.netcdftime.netcdftime._DateFrom360Day
+else:
+    # In 1.2.5 these functions have been moved to pure cython (cdef)
+    # functions, inaccessible from python.
+    pass
 
 # --------------------------------------------------------------------
 # Aliases for netCDF4.netcdftime functions

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/cf-python.git



More information about the Python-modules-commits mailing list