Нир: “легковесная платформа управления виртуализацией”





НазваниеНир: “легковесная платформа управления виртуализацией”
страница4/7
Дата публикации22.10.2014
Размер1.13 Mb.
ТипОтчет
100-bal.ru > Право > Отчет
1   2   3   4   5   6   7

Приложение Б
Основной модуль программы


___________________
Аннотация
Данное приложение представлено в виде модуля для языка Python, которое представляет собой общую библиотеку для платформы VirtPlatform и реализующее спецификацию протокола AgentProtocol.txt.
_____________________

! *  Наименование программы: VirtPlatform
! *  Авторы: Харин Илья, Соколков Роман, Гуреев Илья
! *  Версия: 1.0
! *  Дата создания: 13 сентября 2011
! *  Дата последнего изменения: 25 октября 2011
__init__.py
from platform import VirtPlatform
config.py
import yaml

class PlatformConfigError(Exception):

pass

class PlatformConfig(object):

def getNodeAddress(self, node_name):

raise NotImplementedError
def getNodesBySite(self, site_name):

raise NotImplementedError
def getSiteByNode(self, node_name):

raise NotImplementedError
def getAllNodes(self):

raise NotImplementedError
def getAllSites(self):

raise NotImplementedError

class FilePlatformConfig(PlatformConfig):

def __init__(self, config):

self.node_to_address = {}

self.node_to_site = {}

self.site_to_nodes = {}

self._loadConfig(config)
def _loadConfig(self, config):

if type(config) != file:

stream = open(config)

else:

stream = config

data = yaml.load(stream)

for site_name, nodes in data.iteritems():

site_nodes = []

self.site_to_nodes[site_name] = site_nodes

for node_name, node_address in nodes.iteritems():

self.node_to_address[node_name] = node_address

self.node_to_site[node_name] = site_name

site_nodes.append(node_name)
def getNodeAddress(self, node_name):

address = self.node_to_address.get(node_name)

if address is None:

raise PlatformConfigError("Node name %r not found." % node_name)

return address
def getNodesBySite(self, site_name):

nodes = self.site_to_nodes.get(site_name)

if nodes is None:

raise PlatformConfigError("Site name %r not found." % site_name)

return nodes[:]
def getSiteByNode(self, node_name):

site_name = self.node_to_site.get(node_name)

if site_name is None:

raise PlatformConfigError("Node name %r not found." % node_name)

return site_name
def getAllNodes(self):

return self.node_to_address.keys()
def getAllSites(self):

return self.site_to_nodes.keys()
platform.py
from twisted.internet import reactor, defer

from twisted.internet.protocol import Factory

from twisted.internet.endpoints import TCP4ClientEndpoint

from twisted.python import log
from virt_platform.client.protocol import ClientProtocol

class AgentPool(object):

default_port = 10321
def __init__(self):

self._pool = {}
@defer.inlineCallbacks

def getAgent(self, addr):

agent = self._pool.get(addr)

if agent:

if agent.connected:

defer.returnValue(agent)

else:

self._pool.pop(addr)

agent = yield self.createAgent(addr)

self._pool[addr] = agent

defer.returnValue(agent)
@defer.inlineCallbacks

def createAgent(self, addr):

if ':' in addr:

host, port = addr.rsplit(':', 1)

if port.isdigit():

port = int(port)

else:

host, port = addr, self.default_port

endpoint = TCP4ClientEndpoint(reactor, host, port)

factory = Factory()

factory.protocol = ClientProtocol

agent = yield endpoint.connect(factory)

defer.returnValue(agent)
def disconnectAll(self):

for agent in self._pool.itervalues():

agent.transport.loseConnection()
class VirtPlatformError(Exception):

pass
class VirtPlatform(object):

agentPool = AgentPool
def __init__(self, config):

self.config = config

self.agent_pool = self.agentPool()
def msg(self, msg):

log.msg("VirtPlatform | %s" % msg)
@defer.inlineCallbacks

def _getLibvirtAgent(self, node_name):

self.msg("Called _getLibvirtAgent(node_name=%r)." % node_name)

addr = self.config.getNodeAddress(node_name)

agent = yield self.agent_pool.getAgent(addr)

self.msg("Result of _getLibvirtAgent(node_name=%r): %r." % (node_name, agent))

defer.returnValue(agent)
@defer.inlineCallbacks

def _getStorageAgent(self, site_name):

self.msg("Called _getStorageAgent(site_name=%r)." % site_name)

nodes = self.config.getNodesBySite(site_name)

if not nodes:

raise VirtPlatformError("Nodes of site %r not found." % site_name)

# XXX: now StorageAgent is LibvirtAgent

agent = yield self._getLibvirtAgent(nodes[0])

self.msg("Result of _getStorageAgent(site_name=%r): %r" % (site_name, agent))

defer.returnValue(agent)
@defer.inlineCallbacks

def _getAoEAgent(self, node_name):

# XXX: now AoEAgent is LibvirtAgent

agent = yield self._getLibvirtAgent(node_name)

defer.returnValue(agent)
@defer.inlineCallbacks

def getNodeInfo(self, node_name):

self.msg("Called getNodeInfo(node_name=%r)." % node_name)

agent = yield self._getLibvirtAgent(node_name)

info = yield agent.getNodeInfo()

self.msg("Result of getNodeInfo(node_name=%r): %r." % (node_name, info))

defer.returnValue(info)
def getNodeSite(self, node_name):

site_name = self.config.getSiteByNode(node_name)

return defer.succeed(site_name)
def getNodeAddress(self, node_name):

node_address = self.config.getNodeAddress(node_name)

return defer.succeed(node_address)
def listNodes(self):

self.msg("Called listNodes().")

nodes = self.config.getAllNodes()

self.msg("Result of listNodes(): %r." % nodes)

return defer.succeed(nodes)
def listNodesBySite(self, site_name):

self.msg("Called listNodesBySite(site_name=%r)." % site_name)

nodes = self.config.getNodesBySite(site_name)

self.msg("Result of listNodesBySite(site_name=%r): %r." % (site_name, nodes))

return defer.succeed(nodes)
def listSites(self):

self.msg("Called listSites().")

sites = self.config.getAllSites()

self.msg("Result of listSites(): %r." % sites)

return defer.succeed(sites)
@defer.inlineCallbacks

def listDomains(self, node_name):

self.msg("Called listDomains(node_name=%r)." % node_name)

agent = yield self._getLibvirtAgent(node_name)

domains = yield agent.listDomains()

self.msg("Result of listDomains(node_name=%r): %r." % (node_name, domains))

defer.returnValue(domains)
@defer.inlineCallbacks

def listBridges(self, node_name):

self.msg("Called listBridges(node_name=%r)." % node_name)

agent = yield self._getLibvirtAgent(node_name)

bridges = yield agent.listBridges()

self.msg("Result of listBridges(node_name=%r): %r." % (node_name, bridges))

defer.returnValue(bridges)
@defer.inlineCallbacks

def getDomainInfo(self, node_name, domain_name):

self.msg("Called getDomainInfo(node_name=%r, domain_name=%r)." % (node_name, domain_name))

agent = yield self._getLibvirtAgent(node_name)

domain_info = yield agent.getDomainInfo(domain_name)

self.msg("Result of getDomainInfo(node_name=%r, domain_name=%r): %r" % (node_name, domain_name, domain_info))

defer.returnValue(domain_info)
@defer.inlineCallbacks

def defineDomainXML(self, node_name, xml):

self.msg("Called defineDomainXML(node_name=%r, xml=%r)." % (node_name, xml))

agent = yield self._getLibvirtAgent(node_name)

yield agent.defineDomainXML(xml)

self.msg("Result of defineDomainXML(node_name=%r, xml=%r): ok." % (node_name, xml))
@defer.inlineCallbacks

def defineDomainTemplate(self, node_name, template_name, domain_name, memory, number_vcpu, volume_name, network_bridge):

self.msg("Called defineDomainTemplate(node_name=%r, template_name=%r, domain_name=%r,\

memory=%r, number_vcpu=%r, volume_name=%r, network_bridge=%r)."\

% (node_name, template_name, domain_name, memory, number_vcpu, volume_name, network_bridge))

agent = yield self._getLibvirtAgent(node_name)

yield agent.defineDomainTemplate(template_name, domain_name, memory, number_vcpu, volume_name, network_bridge)

self.msg("Result of defineDomainTemplate(node_name=%r, template_name=%r, domain_name=%r,\

memory=%r, number_vcpu=%r, volume_name=%r, network_bridge=%r): ok."\

% (node_name, template_name, domain_name, memory, number_vcpu, volume_name, network_bridge))
@defer.inlineCallbacks

def getDomainXML(self, node_name, domain_name):

self.msg("Called getDomainXML(node_name=%r, domain_name=%r)." % (node_name, domain_name))

agent = yield self._getLibvirtAgent(node_name)

xml = yield agent.getDomainXML(domain_name)

self.msg("Result of getDomainXML(node_name=%r, domain_name=%r): %s." % (node_name, domain_name, xml))

defer.returnValue(xml)
@defer.inlineCallbacks

def startDomain(self, node_name, domain_name):

self.msg("Called startDomain(node_name=%r, domain_name=%r)." % (node_name, domain_name))

agent = yield self._getLibvirtAgent(node_name)

yield agent.startDomain(domain_name)

self.msg("Result of startDomain(node_name=%r, domain_name=%r): ok." % (node_name, domain_name))
@defer.inlineCallbacks

def rebootDomain(self, node_name, domain_name):

self.msg("Called rebootDomain(node_name=%r, domain_name=%r)." % (node_name, domain_name))

agent = yield self._getLibvirtAgent(node_name)

yield agent.rebootDomain(domain_name)

self.msg("Result of rebootDomain(node_name=%r, domain_name=%r): ok." % (node_name, domain_name))
@defer.inlineCallbacks

def shutdownDomain(self, node_name, domain_name):

self.msg("Called shutdownDomain(node_name=%r, domain_name=%r)." % (node_name, domain_name))

agent = yield self._getLibvirtAgent(node_name)

yield agent.shutdownDomain(domain_name)

self.msg("Result of shutdownDomain(node_name=%r, domain_name=%r): ok." % (node_name, domain_name))
@defer.inlineCallbacks

def destroyDomain(self, node_name, domain_name):

self.msg("Called destroyDomain(node_name=%r, domain_name=%r)." % (node_name, domain_name))

agent = yield self._getLibvirtAgent(node_name)

yield agent.destroyDomain(domain_name)

self.msg("Result of destroyDomain(node_name=%r, domain_name=%r): ok." % (node_name, domain_name))
@defer.inlineCallbacks

def undefineDomain(self, node_name, domain_name):

self.msg("Called undefineDomain(node_name=%r, domain_name=%r)." % (node_name, domain_name))

agent = yield self._getLibvirtAgent(node_name)

yield agent.undefineDomain(domain_name)

self.msg("Result of undefineDomain(node_name=%r, domain_name=%r): ok." % (node_name, domain_name))
@defer.inlineCallbacks

def suspendDomain(self, node_name, domain_name):

self.msg("Called suspendDomain(node_name=%r, domain_name=%r)." % (node_name, domain_name))

agent = yield self._getLibvirtAgent(node_name)

yield agent.suspendDomain(domain_name)

self.msg("Result of suspendDomain(node_name=%r, domain_name=%r): ok." % (node_name, domain_name))
@defer.inlineCallbacks

def resumeDomain(self, node_name, domain_name):

self.msg("Called resumeDomain(node_name=%r, domain_name=%r)." % (node_name, domain_name))

agent = yield self._getLibvirtAgent(node_name)

yield agent.resumeDomain(domain_name)

self.msg("Result of resumeDomain(node_name=%r, domain_name=%r): ok." % (node_name, domain_name))
@defer.inlineCallbacks

def migrateDomain(self, src_node_name, dst_node_name, domain_name, live=None, persist_dest=None, undefine_source=None, non_shared_disk=None):

self.msg("Called migrateDomain(src_node_name=%r, dst_node_name=%r, domain_name=%r,\

live=%r, persist_dest=%r, undefine_source=%r, non_shared_disk=%r)."\

% (src_node_name, dst_node_name, domain_name, live, persist_dest, undefine_source, non_shared_disk))

if live is None:

live = False

if persist_dest is None:

persist_dest = True

if undefine_source is None:

undefine_source = True

if non_shared_disk is None:

non_shared_disk = False

agent = yield self._getLibvirtAgent(src_node_name)

dest = self.config.getNodeAddress(dst_node_name)

yield agent.migrateDomain(domain_name, dest, live, persist_dest, undefine_source, non_shared_disk)

self.msg("Result of migrateDomain(src_node_name=%r, dst_node_name=%r, domain_name=%r,\

live=%r, persist_dest=%r, undefine_source=%r, non_shared_disk=%r): ok."\

% (src_node_name, dst_node_name, domain_name, live, persist_dest, undefine_source, non_shared_disk))
@defer.inlineCallbacks

def migrateDomainWithAoE(self, src_node_name, dst_node_name, domain_name, live=None, persist_dest=None, undefine_source=None):

self.msg("Called migrateDomainWithAoE(src_node_name=%r, dst_node_name=%r, domain_name=%r,\

persist_dest=%r, undefine_source=%r)"\

% (src_node_name, dst_node_name, domain_name, persist_dest, undefine_source))

src_agent = yield self._getLibvirtAgent(src_node_name)

volumes = yield src_agent.listDomainStorageVolumes(domain_name)

for volume in volumes:

volume_name = volume['volume_name']

yield self.shareStorageVolumeWithAoE(src_node_name, dst_node_name, volume_name)

yield self.migrateDomain(src_node_name, dst_node_name, domain_name, live, persist_dest, undefine_source)

self.msg("Result of migrateDomainWithAoE(src_node_name=%r, dst_node_name=%r, domain_name=%r,\

persist_dest=%r, undefine_source=%r)"\

% (src_node_name, dst_node_name, domain_name, persist_dest, undefine_source))
@defer.inlineCallbacks

def listDomainStorageVolumes(self, node_name, domain_name):

self.msg("Called listDomainVolumes(node_name=%r, domain_name=%r)." % (node_name, domain_name))

agent = yield self._getLibvirtAgent(node_name)

result = yield agent.listDomainStorageVolumes(domain_name)

self.msg("Result of listDomainVolumes(node_name=%r, domain_name=%r): %r." % (node_name, domain_name, result))

defer.returnValue(result)
@defer.inlineCallbacks

def exportStorageVolume(self, node_name, volume_name):

self.msg("Called exportStorageVolume(node_name=%r, volume_name=%r)." % (node_name, volume_name))

agent = yield self._getAoEAgent(node_name)

yield agent.exportStorageVolume(volume_name)

self.msg("Result of exportStorageVolume(node_name=%r, volume_name=%r): ok." % (node_name, volume_name))
@defer.inlineCallbacks

def importStorageVolume(self, node_name, shelf, slot, filename):

self.msg("Called importStorageVolume(node_name=%r, shelf=%r, slot=%r, filename=%r)." % \

(node_name, shelf, slot, filename))

agent = yield self._getAoEAgent(node_name)

yield agent.importStorageVolume(shelf, slot, filename)

self.msg("Result of importStorageVolume(node_name=%r, shelf=%r, slot=%r, filename=%r): ok." % \

(node_name, shelf, slot, filename))
@defer.inlineCallbacks

def createStorageVolume(self, site_name, volume_name, size):

self.msg("Called createStorageVolume(site_name=%r, volume_name=%r, size=%r)." %\

(site_name, volume_name, size))

agent = yield self._getStorageAgent(site_name)

yield agent.createStorageVolume(volume_name, size)

self.msg("Result of createStorageVolume(site_name=%r, volume_name=%r, size=%r): ok." %\

(site_name, volume_name, size))
@defer.inlineCallbacks

def removeStorageVolume(self, site_name, volume_name):

self.msg("Called removeStorageVolume(site_name=%r, volume_name=%r)." % (site_name, volume_name))

agent = yield self._getStorageAgent(site_name)

yield agent.removeStorageVolume(volume_name)

self.msg("Result of removeStorageVolume(site_name=%r, volume_name=%r): ok." % (site_name, volume_name))
@defer.inlineCallbacks

def extendStorageVolume(self, site_name, volume_name, size, mode):

self.msg("Called extendStorageVolume(site_name=%r, volume_name=%r, size=%s, mode=%r)."\

% (site_name, volume_name, size, mode))

agent = yield self._getStorageAgent(site_name)

yield agent.extendStorageVolume(volume_name, size, mode)

self.msg("Result of extendStorageVolume(site_name=%r, volume_name=%r, size=%s, mode=%r): ok."\

% (site_name, volume_name, size, mode))
@defer.inlineCallbacks

def resizeStorageVolumeFS(self, site_name, volume_name):

self.msg("Called resizeStorageVolumeFS(site_name=%r, volume_name=%r)."\

% (site_name, volume_name))

agent = yield self._getStorageAgent(site_name)

yield agent.resizeStorageVolumeFS(volume_name)

self.msg("Result of resizeStorageVolumeFS(site_name=%r, volume_name=%r): ok."\

% (site_name, volume_name))
@defer.inlineCallbacks

def listStorageVolumes(self, site_name):

self.msg("Called listStorageVolumes(site_name=%r)." % site_name)

agent = yield self._getStorageAgent(site_name)

result = yield agent.listStorageVolumes()

self.msg("Result of listStorageVolues(site_name=%r): %r." % (site_name, result))

defer.returnValue(result)
@defer.inlineCallbacks

def writeStorageImage(self, site_name, image_name, volume_name):

self.msg("Called writeStorageImage(site_name=%r, image_name=%r, volume_name=%r)."\

% (site_name, image_name, volume_name))

agent = yield self._getStorageAgent(site_name)

yield agent.writeStorageImage(image_name, volume_name)

self.msg("Result of writeStorageImage(site_name=%r, image_name=%r, volume_name=%r): ok."\

% (site_name, image_name, volume_name))
@defer.inlineCallbacks

def shareStorageVolumeWithAoE(self, src_node_name, dst_node_name, volume_name):

self.msg("Called shareStorageVolumeWithAoE(src_node_name=%r, dst_node_name=%r, volume_name=%r)."\

% (src_node_name, dst_node_name, volume_name))

src_node_agent = yield self._getLibvirtAgent(src_node_name)

dst_node_agent = yield self._getLibvirtAgent(dst_node_name)

result = yield src_node_agent.exportStorageVolume(volume_name)

shelf = result['shelf']

slot = result['slot']

filename = result['filename']

yield dst_node_agent.importStorageVolume(volume_name, shelf, slot, filename)

self.msg("Result of shareStorageVolumeWithAoE(src_node_name=%r, dst_node_name=%r, volume_name=%r): ok."\

% (src_node_name, dst_node_name, volume_name))
@defer.inlineCallbacks

def deploy(self, node_name, template_name, domain_name, memory, number_vcpu, network_bridge, volume_size, image_name=None):

self.msg("Called deploy(template=%r, domain_name=%r, memory=%s, number_vcpu=%s, bridge=%r, volume_size=%s, image_name=%r)."\

% (template_name, domain_name, memory, number_vcpu, network_bridge, volume_size, image_name))

site_name = yield self.getNodeSite(node_name)

volume_name = domain_name

yield self.createStorageVolume(site_name, volume_name, volume_size)

try:

if image_name:

yield self.writeStorageImage(site_name, image_name, volume_name)

yield self.defineDomainTemplate(node_name, template_name, domain_name, memory, number_vcpu, volume_name, network_bridge)

except Exception, e:

yield self.removeStorageVolume(site_name, volume_name)

raise e

self.msg("Result of deploy(template=%r, domain_name=%r, memory=%s, number_vcpu=%s, bridge=%r, volume_size=%s, image_name=%r): ok."\

% (template_name, domain_name, memory, number_vcpu, network_bridge, volume_size, image_name))
@defer.inlineCallbacks

def getStorageInfo(self, site_name):

self.msg("Called getStorageInfo(site_name=%r)." % site_name)

agent = yield self._getStorageAgent(site_name)

result = yield agent.getStorageInfo()

self.msg("Result of getStorageInfo(site_name=%r): %r." % (site_name, result))

defer.returnValue(result)
protocol.py
import json
from twisted.internet import defer

from twisted.protocols.basic import Int16StringReceiver

from twisted.python import log

class Message(object):

def __init__(self):

self.sequence_number = -1

class Request(Message):

def __init__(self, method, data=None):

Message.__init__(self)

self.type = "request"

self.method = method

self.data = data
def __repr__(self):

return "" % (self.method, self.data)
def dump(self):

return self.__dict__
@classmethod

def load(cls, data):

request = cls(data['method'], data['data'])

request.sequence_number = data['sequence_number']

return request

class Response(Message):

default_code = 200
def __init__(self, code=None, data=None, error_msg=None):

Message.__init__(self)

self.type = "response"

if code is None:

code = self.default_code

self.code = code

self.data = data

self.error_msg = error_msg
def __repr__(self):

return "" % (self.code, self.data, self.error_msg)
def dump(self):

return self.__dict__
@classmethod

def load(cls, data):

response = cls(data['code'], data['data'], data['error_msg'])

response.sequence_number = data['sequence_number']

return response

def create_response(request, code=None, data=None, error_msg=None):

response = Response(code, data, error_msg)

response.sequence_number = request.sequence_number

return response

def handler(method):

method.is_handler = True

return method

class BaseProtocol(Int16StringReceiver):

'''

BaseProtocol specification (wire level).
Message:

{

"sequence_number": int,

"type": "request" / "response",

}
Request message (Message subclass):

{

"type": "request",

"method": str,

"data": int / str / list / dict / etc,

}
Response message (Message subclass):

{

"type": "response",

"code": int,

"data": int / str / list / dict / etc,

"error_msg": str,

}
'''
def __init__(self):

self.sequence_number = 0

self.pending_requests = {}
def stringReceived(self, msg):

log.msg("stringReceived: received message: %s." % msg)

try:

message = json.loads(msg)

except ValueError, e:

log.msg("Invalid json received: %r" % msg)

return
for field in ['sequence_number', 'type']:

if field not in message:

log.msg("Invalid message received: %r. Mandatory field %r not found." % (message, field))

return
type = message['type']

if type == 'request':

self._requestReceived(message)

elif type == 'response':

self._responseReceived(message)

else:

log.msg("Invalid message received: %r. Unknown type %r." % (message, type))
def _requestReceived(self, req):

for field in ['method', 'data']:

if field not in req:

log.msg("Invalid request received: %r. Mandatory field %r not found." % (req, field))

return
request = Request.load(req)

self.requestReceived(request)
def requestReceived(self, request):

raise NotImplementedError
def _responseReceived(self, resp):

for field in ['code', 'data', 'error_msg']:

if field not in resp:

log.msg("Invalid response received %r. Mandatory field %r not found." % (resp, field))

return
response = Response.load(resp)

self.responseReceived(response)
def responseReceived(self, response):

log.msg("Received response %r." % response)

d = self.pending_requests.pop(response.sequence_number, None)

if not d:

log.msg("WARNING: Drop unexpected response: %r." % response)

return

# TODO: analyze response.code and call errback on error?

d.callback(response)
def sendRequest(self, request):

request.sequence_number = self.sequence_number

self.sequence_number +=1

d = defer.Deferred()

# TODO: timeouts?

self.pending_requests[request.sequence_number] = d

msg = json.dumps(request.dump())

self.sendString(msg)

return d
def sendResponse(self, response):

msg = json.dumps(response.dump())

self.sendString(msg)

class Protocol(BaseProtocol):

def requestReceived(self, request):

log.msg("Received request %r." % request)

handler = getattr(self.factory, request.method, None)

is_handler = getattr(handler, "is_handler", False)

if not handler or not is_handler:

log.msg("WARNING: Handler for method %r not found." % request.method)

response = create_response(request, code=501, error_msg="Method %r not implemented." % request.method)

self.sendResponse(response)

return

log.msg("Found handler %r for method %r." % (handler, request.method))

d = defer.maybeDeferred(handler, self, request)

d.addErrback(self._failedResponse, request)

d.addCallback(self._completeResponse, request)
def _completeResponse(self, response, request):

log.msg("Response for request %r: %r" % (request, response))

self.sendResponse(response)
def _failedResponse(self, failure, request):

log.msg("WARNING: Caught exection for request %r: %s" % (request, failure))

response = create_response(request, code=500, error_msg="Caught exception: %r" % failure.value)

return response
utils.py
from twisted.internet import defer

from twisted.python import failure
def size_fmt(size):

for x in ['K', 'M', 'G']:

if size < 1024:

return "%.1f%s" % (size, x)

size /= 1024.

return "%.1fT" % size

UNITS_SIZE = {'K': 1, 'M': 1024, 'G': 1024 * 1024, 'T': 1024 * 1024 * 1024}

def fmt_to_size(s, default='M'):

if s.isdigit():

units = default

else:

units = s[-1]

s = s[:-1]

if units not in ['K', 'M', 'G', 'T']:

raise ValueError("Unknown size format %s" % s)

size = int(s)

return size * UNITS_SIZE[units]

class ScatterDeferred(defer.Deferred):

def __init__(self, deferreds=[]):

defer.Deferred.__init__(self)

self.deferreds = deferreds[:]
def add(self, d):

if self.called:

if isinstance(self.result, failure.Failure):

d.errback(self.result)

else:

d.callback(self.result)

self.deferreds.append(d)
def callback(self, result):

for d in self.deferreds:

d.callback(result)

defer.Deferred.callback(self, result)
def errback(self, fail=None):

for d in self.deferreds:

d.errback(fail)

defer.Deferred.errback(self, fail)
1   2   3   4   5   6   7

Похожие:

Нир: “легковесная платформа управления виртуализацией” icon«Название темы»
Обязательные структурные элементы отчета о нир выделены полужирным шрифтом. В отчет о нир объемом не более 10 страниц содержание...
Нир: “легковесная платформа управления виртуализацией” iconРеферат Тема нир
Тема нир: Исследование возможности принудительного радиоактивного распада ядер вольфрама
Нир: “легковесная платформа управления виртуализацией” iconРеферат Тема нир
Тема нир: Исследование возможности принудительного радиоактивного распада ядер вольфрама
Нир: “легковесная платформа управления виртуализацией” iconРеферат Тема нир
Тема нир: Анализ экономического механизма и разработка критериев эффективности системы консалтинга для издательско-полиграфического...
Нир: “легковесная платформа управления виртуализацией” iconРеферат Тема нир
...
Нир: “легковесная платформа управления виртуализацией” iconРеферат Тема нир
...
Нир: “легковесная платформа управления виртуализацией” iconРеферат Тема нир
Тема нир: Анализ экономического механизма и разработка критериев эффективности системы консалтинга для издательско-полиграфического...
Нир: “легковесная платформа управления виртуализацией” iconРеферат Тема нир
Тема нир: Математическое моделирование и исследование квазипериодических структур
Нир: “легковесная платформа управления виртуализацией” iconРеферат Тема нир
Тема нир: Математическое моделирование и исследование квазипериодических структур
Нир: “легковесная платформа управления виртуализацией” iconРеферат Тема нир
Тема нир: Разработка способов снижения износа и повышения химической стойкости резинотехнических изделий для полиграфии и других...
Нир: “легковесная платформа управления виртуализацией” iconРеферат Тема нир
Тема нир: Методология определения цветового и структурного соответствия при сравнении изображений, воспроизведенных на носителях...
Нир: “легковесная платформа управления виртуализацией” iconРекомендации по предотвращению типовых недостатков в оформлении итоговых...
Нир, выполненных по Программе фи, необходимо соблюдать требования гост 32-2001. По результатам внутренней экспертизы итоговых отчетов...
Нир: “легковесная платформа управления виртуализацией” iconРекомендации по предотвращению типовых недостатков в оформлении итоговых...
Нир, выполненных по Программе фи, необходимо соблюдать требования гост 32-2001. По результатам внутренней экспертизы итоговых отчетов...
Нир: “легковесная платформа управления виртуализацией” iconПлан нир управления инновационного развития
Совершенствование моделей краткосрочного прогнозирования социально-экономического развития Российской Федерации
Нир: “легковесная платформа управления виртуализацией” iconОтчет о нир (заключительный)
Рекомендации по оформлению отчетной документации по государственным контрактам на выполнение нир в рамках федеральной целевой программы...
Нир: “легковесная платформа управления виртуализацией” iconРеферат с элементами нир, представляемый на Конкурс может содержать следующие разделы
К положению об организации и проведении конкурса на лучший реферат с элементами нир для студентов младших курсов в рамках ниу


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск