add skeleton for variant type support
[pywinlite.git] / winliteutils.py
blob2b5537061666a9f85f39bc5066f86244fbf4d429
1 #Copyright (c) 2008 Vincent Povirk
3 #Permission is hereby granted, free of charge, to any person
4 #obtaining a copy of this software and associated documentation
5 #files (the "Software"), to deal in the Software without
6 #restriction, including without limitation the rights to use,
7 #copy, modify, merge, publish, distribute, sublicense, and/or sell
8 #copies of the Software, and to permit persons to whom the
9 #Software is furnished to do so, subject to the following
10 #conditions:
12 #The above copyright notice and this permission notice shall be
13 #included in all copies or substantial portions of the Software.
15 #THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 #EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17 #OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 #NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19 #HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20 #WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 #FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 #OTHER DEALINGS IN THE SOFTWARE.
24 from ctypes import GetLastError, WinError
26 class collapsed_attr(object):
27 __fields__ = ['attr', 'subattr']
29 def __init__(self, attr, subattr):
30 self.attr = attr
31 self.subattr = subattr
33 def __get__(self, instance, owner):
34 return getattr(getattr(instance or owner, self.attr), self.subattr)
36 def __set__(self, instance, value):
37 setattr(getattr(instance, self.attr), self.subattr, value)
39 def __delete__(self, instance):
40 delattr(getattr(instance, self.attr), self.subattr)
42 class WinLiteException(Exception):
43 pass
45 def CheckError():
46 "CheckError() - raise a WindowsError if GetLastError() returns a non-zero value"
47 err = GetLastError()
48 if err:
49 raise WinError()
51 def NONZERO(i):
52 if i == 0 and GetLastError() != 0:
53 raise WinError()
54 return i
56 def ZERO(i):
57 if i != 0 and GetLastError() != 0:
58 exc = WinError()
59 exc.result = i
60 raise exc
61 return i
63 class ERRFLAGS(object):
64 __fields__ = ['flags']
66 def __init__(self, module_dict, prefix):
67 self.flags = {}
68 for name in module_dict:
69 if name.startswith(prefix):
70 self.flags[name] = module_dict[name]
72 def __call__(self, i):
73 if i != 0:
74 flags = []
75 for name in self.flags:
76 if self.flags[name] & i:
77 flags.append(name)
78 e = WinLiteException('|'.join(flags))
79 e.flags = i
80 raise e
81 return i
83 def get_symbols(globals, module, names):
84 for name in names:
85 globals[name] = getattr(module, name)