wmi-1.3.16 from opsview.com
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
###########################################################################
|
||||
#
|
||||
# This program is part of Zenoss Core, an open source monitoring platform.
|
||||
# Copyright (C) 2008-2010, Zenoss Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2, or (at your
|
||||
# option) any later version, as published by the Free Software Foundation.
|
||||
#
|
||||
# For complete information please visit: http://www.zenoss.com/oss/
|
||||
#
|
||||
###########################################################################
|
||||
|
||||
__doc__="""
|
||||
Support classes for integrating deferreds into the Samba asynchronous framework
|
||||
"""
|
||||
|
||||
from pysamba.library import logFuncCall
|
||||
from pysamba.composite_context import *
|
||||
from twisted.internet import defer
|
||||
|
||||
DEFERS = {}
|
||||
COUNTER = 0L
|
||||
|
||||
class WMIFailure(Exception):
|
||||
"Exception that represents a composite_context failure"
|
||||
def __str__(self):
|
||||
return library.nt_errstr(self.args[1])
|
||||
|
||||
class Callback(object):
|
||||
"Turn a composite_context callback into a deferred callback"
|
||||
def __init__(self):
|
||||
# keep a reference to this object as long as it lives in the C code
|
||||
global COUNTER
|
||||
COUNTER += 1
|
||||
self.which = COUNTER
|
||||
DEFERS[self.which] = self
|
||||
self.callback = composite_context_callback(self.callback)
|
||||
self.deferred = defer.Deferred()
|
||||
|
||||
@logFuncCall
|
||||
def callback(self, ctx):
|
||||
# remove the reference to the object now that we're out of C code
|
||||
try:
|
||||
DEFERS.pop(self.which)
|
||||
except KeyError, ex:
|
||||
log.error("Encountered error in pysamba.Callback.callback: " + ex)
|
||||
d = self.deferred
|
||||
if ctx.contents.state == COMPOSITE_STATE_DONE:
|
||||
d.callback(ctx.contents.async.private_data)
|
||||
else:
|
||||
d.errback(WMIFailure(ctx.contents.state,
|
||||
ctx.contents.status))
|
||||
Reference in New Issue
Block a user