#
|
# (C) Copyright 2014 Enthought, Inc., Austin, TX
|
# All right reserved.
|
#
|
# This file is open source software distributed according to the terms in
|
# LICENSE.txt
|
#
|
""" A module which supports common Windows types. """
|
import contextlib
|
import collections
|
import time
|
from datetime import datetime as _datetime
|
|
|
class error(Exception):
|
def __init__(self, *args, **kw):
|
nargs = len(args)
|
if nargs > 0:
|
self.winerror = args[0]
|
else:
|
self.winerror = None
|
if nargs > 1:
|
self.funcname = args[1]
|
else:
|
self.funcname = None
|
if nargs > 2:
|
self.strerror = args[2]
|
else:
|
self.strerror = None
|
Exception.__init__(self, *args, **kw)
|
|
|
@contextlib.contextmanager
|
def pywin32error():
|
try:
|
yield
|
except WindowsError as exception:
|
if not hasattr(exception, 'function'):
|
exception.function = 'unknown'
|
raise error(exception.winerror, exception.function, exception.strerror)
|
|
|
class datetime(_datetime):
|
|
def Format(self, fmt='%c'):
|
return self.strftime(fmt)
|
|
|
def Time(value):
|
if isinstance(value, datetime):
|
return value
|
elif hasattr(value, 'timetuple'):
|
timetuple = value.timetuple()
|
return datetime.fromtimestamp(time.mktime(timetuple))
|
elif isinstance(value, collections.abc.Sequence):
|
time_value = time.mktime(value[:9])
|
if len(value) == 10:
|
time_value += value[9] / 1000.0
|
return datetime.fromtimestamp(time_value)
|
else:
|
try:
|
return datetime.fromtimestamp(value)
|
except OSError as error:
|
if error.errno == 22:
|
raise ValueError(error.strerror)
|
else:
|
raise
|