Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(138)

Unified Diff: third_party/recipe_engine/third_party/dateutil/tzwin.py

Issue 1241323004: Cross-repo recipe package system. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: Moved show_me_the_modules into recipe_engine Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/recipe_engine/third_party/dateutil/tzwin.py
diff --git a/third_party/recipe_engine/third_party/dateutil/tzwin.py b/third_party/recipe_engine/third_party/dateutil/tzwin.py
new file mode 100644
index 0000000000000000000000000000000000000000..073e0ff68e3fb586af05908407982cfec34599b5
--- /dev/null
+++ b/third_party/recipe_engine/third_party/dateutil/tzwin.py
@@ -0,0 +1,180 @@
+# This code was originally contributed by Jeffrey Harris.
+import datetime
+import struct
+import _winreg
+
+__author__ = "Jeffrey Harris & Gustavo Niemeyer <gustavo@niemeyer.net>"
+
+__all__ = ["tzwin", "tzwinlocal"]
+
+ONEWEEK = datetime.timedelta(7)
+
+TZKEYNAMENT = r"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones"
+TZKEYNAME9X = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Time Zones"
+TZLOCALKEYNAME = r"SYSTEM\CurrentControlSet\Control\TimeZoneInformation"
+
+def _settzkeyname():
+ global TZKEYNAME
+ handle = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
+ try:
+ _winreg.OpenKey(handle, TZKEYNAMENT).Close()
+ TZKEYNAME = TZKEYNAMENT
+ except WindowsError:
+ TZKEYNAME = TZKEYNAME9X
+ handle.Close()
+
+_settzkeyname()
+
+class tzwinbase(datetime.tzinfo):
+ """tzinfo class based on win32's timezones available in the registry."""
+
+ def utcoffset(self, dt):
+ if self._isdst(dt):
+ return datetime.timedelta(minutes=self._dstoffset)
+ else:
+ return datetime.timedelta(minutes=self._stdoffset)
+
+ def dst(self, dt):
+ if self._isdst(dt):
+ minutes = self._dstoffset - self._stdoffset
+ return datetime.timedelta(minutes=minutes)
+ else:
+ return datetime.timedelta(0)
+
+ def tzname(self, dt):
+ if self._isdst(dt):
+ return self._dstname
+ else:
+ return self._stdname
+
+ def list():
+ """Return a list of all time zones known to the system."""
+ handle = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
+ tzkey = _winreg.OpenKey(handle, TZKEYNAME)
+ result = [_winreg.EnumKey(tzkey, i)
+ for i in range(_winreg.QueryInfoKey(tzkey)[0])]
+ tzkey.Close()
+ handle.Close()
+ return result
+ list = staticmethod(list)
+
+ def display(self):
+ return self._display
+
+ def _isdst(self, dt):
+ dston = picknthweekday(dt.year, self._dstmonth, self._dstdayofweek,
+ self._dsthour, self._dstminute,
+ self._dstweeknumber)
+ dstoff = picknthweekday(dt.year, self._stdmonth, self._stddayofweek,
+ self._stdhour, self._stdminute,
+ self._stdweeknumber)
+ if dston < dstoff:
+ return dston <= dt.replace(tzinfo=None) < dstoff
+ else:
+ return not dstoff <= dt.replace(tzinfo=None) < dston
+
+
+class tzwin(tzwinbase):
+
+ def __init__(self, name):
+ self._name = name
+
+ handle = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
+ tzkey = _winreg.OpenKey(handle, "%s\%s" % (TZKEYNAME, name))
+ keydict = valuestodict(tzkey)
+ tzkey.Close()
+ handle.Close()
+
+ self._stdname = keydict["Std"].encode("iso-8859-1")
+ self._dstname = keydict["Dlt"].encode("iso-8859-1")
+
+ self._display = keydict["Display"]
+
+ # See http://ww_winreg.jsiinc.com/SUBA/tip0300/rh0398.htm
+ tup = struct.unpack("=3l16h", keydict["TZI"])
+ self._stdoffset = -tup[0]-tup[1] # Bias + StandardBias * -1
+ self._dstoffset = self._stdoffset-tup[2] # + DaylightBias * -1
+
+ (self._stdmonth,
+ self._stddayofweek, # Sunday = 0
+ self._stdweeknumber, # Last = 5
+ self._stdhour,
+ self._stdminute) = tup[4:9]
+
+ (self._dstmonth,
+ self._dstdayofweek, # Sunday = 0
+ self._dstweeknumber, # Last = 5
+ self._dsthour,
+ self._dstminute) = tup[12:17]
+
+ def __repr__(self):
+ return "tzwin(%s)" % repr(self._name)
+
+ def __reduce__(self):
+ return (self.__class__, (self._name,))
+
+
+class tzwinlocal(tzwinbase):
+
+ def __init__(self):
+
+ handle = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
+
+ tzlocalkey = _winreg.OpenKey(handle, TZLOCALKEYNAME)
+ keydict = valuestodict(tzlocalkey)
+ tzlocalkey.Close()
+
+ self._stdname = keydict["StandardName"].encode("iso-8859-1")
+ self._dstname = keydict["DaylightName"].encode("iso-8859-1")
+
+ try:
+ tzkey = _winreg.OpenKey(handle, "%s\%s"%(TZKEYNAME, self._stdname))
+ _keydict = valuestodict(tzkey)
+ self._display = _keydict["Display"]
+ tzkey.Close()
+ except OSError:
+ self._display = None
+
+ handle.Close()
+
+ self._stdoffset = -keydict["Bias"]-keydict["StandardBias"]
+ self._dstoffset = self._stdoffset-keydict["DaylightBias"]
+
+
+ # See http://ww_winreg.jsiinc.com/SUBA/tip0300/rh0398.htm
+ tup = struct.unpack("=8h", keydict["StandardStart"])
+
+ (self._stdmonth,
+ self._stddayofweek, # Sunday = 0
+ self._stdweeknumber, # Last = 5
+ self._stdhour,
+ self._stdminute) = tup[1:6]
+
+ tup = struct.unpack("=8h", keydict["DaylightStart"])
+
+ (self._dstmonth,
+ self._dstdayofweek, # Sunday = 0
+ self._dstweeknumber, # Last = 5
+ self._dsthour,
+ self._dstminute) = tup[1:6]
+
+ def __reduce__(self):
+ return (self.__class__, ())
+
+def picknthweekday(year, month, dayofweek, hour, minute, whichweek):
+ """dayofweek == 0 means Sunday, whichweek 5 means last instance"""
+ first = datetime.datetime(year, month, 1, hour, minute)
+ weekdayone = first.replace(day=((dayofweek-first.isoweekday())%7+1))
+ for n in xrange(whichweek):
+ dt = weekdayone+(whichweek-n)*ONEWEEK
+ if dt.month == month:
+ return dt
+
+def valuestodict(key):
+ """Convert a registry key's values to a dictionary."""
+ dict = {}
+ size = _winreg.QueryInfoKey(key)[1]
+ for i in range(size):
+ data = _winreg.EnumValue(key, i)
+ dict[data[0]] = data[1]
+ return dict

Powered by Google App Engine
This is Rietveld 408576698