⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pystaf.py

📁 Software Testing Automation Framework (STAF)的开发代码
💻 PY
📖 第 1 页 / 共 2 页
字号:
#!/usr/bin/python############################################################################## Software Testing Automation Framework (STAF)                              ## (C) Copyright IBM Corp. 2001, 2005                                        ##                                                                           ## This software is licensed under the Common Public License (CPL) V1.0.     ##############################################################################import PYSTAF# Utility functionsdef STAFWrapData(message):    return ":%d:%s" % (len(message), message)# Allows you to access this function using either namewrapData = STAFWrapData# Privacy utility methodsdef STAFAddPrivacyDelimiters(data):    return "%s" % (PYSTAF.STAFAddPrivacyDelimiters(data))def STAFEscapePrivacyDelimiters(data):    return "%s" % (PYSTAF.STAFEscapePrivacyDelimiters(data))def STAFMaskPrivateData(data):    return "%s" % (PYSTAF.STAFMaskPrivateData(data))def STAFRemovePrivacyDelimiters(data, numLevels = 0):    return "%s" % (PYSTAF.STAFRemovePrivacyDelimiters(data, numLevels))    # Allows you to access these functions using either nameaddPrivacyDelimiters = STAFAddPrivacyDelimitersescapePrivacyDelimiters = STAFEscapePrivacyDelimitersmaskPrivateData = STAFMaskPrivateDataremovePrivacyDelimiters = STAFRemovePrivacyDelimiters# STAFException classclass STAFException:    def __init__(self, rc = 0, result = ""):        self.rc = rc        self.result = result# STAFResult classclass STAFResult:    Ok                          = 0    InvalidAPI                  = 1    UnknownService              = 2    InvalidHandle               = 3    HandleAlreadyExists         = 4    HandleDoesNotExist          = 5    UnknownError                = 6    InvalidRequestString        = 7    InvalidServiceResult        = 8    REXXError                   = 9    BaseOSError                 = 10    ProcessAlreadyComplete      = 11    ProcessNotComplete          = 12    VariableDoesNotExist        = 13    UnResolvableString          = 14    InvalidResolveString        = 15    NoPathToMachine             = 16    FileOpenError               = 17    FileReadError               = 18    FileWriteError              = 19    FileDeleteError             = 20    STAFNotRunning              = 21    CommunicationError          = 22    TrusteeDoesNotExist         = 23    InvalidTrustLevel           = 24    AccessDenied                = 25    STAFRegistrationError       = 26    ServiceConfigurationError   = 27    QueueFull                   = 28    NoQueueElement              = 29    NotifieeDoesNotExist        = 30    InvalidAPILevel             = 31    ServiceNotUnregisterable    = 32    ServiceNotAvailable         = 33    SemaphoreDoesNotExist       = 34    NotSemaphoreOwner           = 35    SemaphoreHasPendingRequests = 36    Timeout                     = 37    JavaError                   = 38    ConverterError              = 39    InvalidObject               = 41    InvalidParm                 = 42    RequestNumberNotFound       = 43    InvalidAsynchOption         = 44    RequestNotComplete          = 45    ProcessAuthenticationDenied = 46    InvalidValue                = 47    DoesNotExist                = 48    AlreadyExists               = 49    DirectoryNotEmpty           = 50    DirectoryCopyError          = 51    DiagnosticsNotEnabled       = 52    HandleAuthenticationDenied  = 53    HandleAlreadyAuthenticated  = 54    InvalidSTAFVersion          = 55    RequestCancelled            = 56    def __init__(self, rc = 0, result = ""):        self.rc = rc        self.result = result# STAFHandle classclass STAFHandle:    # STAFHandle types    Standard = 0    Static   = 1    # Modes for submit call    Synchronous   = 0    FireAndForget = 1    Queue         = 2    Retain        = 3    QueueRetain   = 4    # Note: I would have liked to have used STAFHandle.Standard in place of "0"    #       in the methods below, but the class hasn't been defined yet.    def __init__(self, handleNameOrNumber, handleType = 0):        self.handleType = handleType        if (handleType == STAFHandle.Standard):            rc, self.handle = PYSTAF.STAFRegister(handleNameOrNumber)            if (rc != 0):                raise STAFException(rc)        else:            self.handle = handleNameOrNumber    def submit(self, location, service, request, mode = Synchronous):        rc, result = PYSTAF.STAFSubmit(self.handle, mode, location, service,                                       request)        return STAFResult(rc, result)    def unregister(self):        if (self.handleType == 0):            rc = PYSTAF.STAFUnregister(self.handle)            if (rc != 0):                raise STAFException(rc)            self.handle = 0        return 0# Marshalling constants and importsimport typesUNMARSHALLING_DEFAULTS  = 0IGNORE_INDIRECT_OBJECTS = 1MARSHALLED_DATA_MARKER = '@SDT/'NONE_MARKER            = '@SDT/$0:0:'SCALAR_MARKER          = '@SDT/$'SCALAR_STRING_MARKER   = '@SDT/$S'LIST_MARKER            = '@SDT/['MAP_MARKER             = '@SDT/{'MC_INSTANCE_MARKER     = '@SDT/%'CONTEXT_MARKER         = '@SDT/*'# Formatting constants and importsimport osNONE_STRING            = '<None>'DISPLAY_NAME_KEY       = 'display-name'MAP_CLASS_MAP_KEY      = 'map-class-map'MAP_CLASS_NAME_KEY     = 'staf-map-class-name'ENTRY_SEPARATOR        = ''INDENT_DELTA           = 2# 80 spacesSPACES = ('                                         ' +           '                                         ')# STAFMapClassDefinitionClassclass STAFMapClassDefinition:    # Constructors    def __init__(self, name = None, mapClassDef = None):        if (mapClassDef is None) and (name is None):            self.mapClassDef = { 'name': '', 'keys': [] }        elif (name is not None):            self.mapClassDef = { 'name': name, 'keys': [] }        else:            self.mapClassDef = mapClassDef    def createInstance(self):        return { 'staf-map-class-name' : self.mapClassDef['name'] }    def addKey(self, keyName, displayName = None):        theKey = { 'key': keyName }        if displayName is not None:            theKey['display-name'] = displayName        self.mapClassDef['keys'].append(theKey)    def setKeyProperty(self, keyName, property, value):        for key in self.mapClassDef['keys']:            if key['key'] == keyName:                key[property] = value    def keys(self):        return self.mapClassDef['keys']    def name(self):        return self.mapClassDef['name']    def getMapClassDefinitionObject(self):        return self.mapClassDef    def __str__(self):        return formatObject(self.mapClassDef)    def __repr__(self):        return formatObject(self.mapClassDef)# STAFMarshallingContext classclass STAFMarshallingContext:    def isMarshalledData(self, someData):        return someData.startswith('@SDT/')    def __init__(self, obj = None, mapClassMap = None):        if mapClassMap is None:            self.mapClassMap = {}        else:            self.mapClassMap = mapClassMap        self.rootObject = obj    def setMapClassDefinition(self,  mapClassDef):        self.mapClassMap[mapClassDef.name()] = mapClassDef.getMapClassDefinitionObject()    def getMapClassDefinition(self, mapClassName):        return STAFMapClassDefinition(            mapClassDef = self.mapClassMap.get(mapClassName, None))    def hasMapClassDefinition(self, mapClassName):        return self.mapClassMap.has_key(mapClassName)    def getMapClassMap(self):        return self.mapClassMap    def mapClassDefinitionIterator(self):        return self.mapClassMap.keys()    def setRootObject(self, rootObject):        self.rootObject = rootObject    def getRootObject(self):        return self.rootObject    def getPrimaryObject(self):        if  len(self.mapClassMap.keys()) == 0:            return self.rootObject        else:            return self    def marshall(self):        return marshall(self, self)    def __str__(self):        return formatObject(self.rootObject, self)    # XXX: Change to show the key map class in addition?    def __repr__(self):        return formatObject(self.rootObject, self)# Function that tests if a string is marshalled datadef isMarshalledData(someData):    return someData.startswith('@SDT/')# General marshalling functiondef marshall(object, context = None):    if object is None:        return NONE_MARKER    if type(object) == types.ListType:        # Build a list of strings and join them for performance reasons        listDataList = []        for item in object:            listDataList.append(marshall(item, context))        listData = ''.join(listDataList)        return "%s%s:%s:%s" % (LIST_MARKER, len(object), len(listData), listData)    if type(object) == types.DictType:        # If a staf-map-class-name key exists in the map, make sure that        # it's map class definition is provided in the marshalling context.        # If it's not, then treat the map as a plain map object.        isMapClass = 0        mapClassName = ''        if ((context is not None) and            (isinstance(context, STAFMarshallingContext)) and            (object.has_key('staf-map-class-name'))):            mapClassName = object['staf-map-class-name']            if context.hasMapClassDefinition(mapClassName):                isMapClass = 1        if isMapClass:            mapClass = context.getMapClassDefinition(mapClassName)            # Build a list of strings and join them for performance reasons            mapDataList = []            mapDataList.append(":%s:%s" % (len(mapClassName), mapClassName))            for key in mapClass.keys():                if object.has_key(key['key']):                    thisObj = object[key['key']]                else:                    thisObj = None                mapDataList.append(marshall(thisObj, context))            mapData = ''.join(mapDataList)            return "%s:%s:%s" % (MC_INSTANCE_MARKER, len(mapData), mapData)        else:            # Build a list of strings and join them for performance reasons                        mapDataList = []            for key in object.keys():                mapDataList.append(                    ":%s:%s%s" % (len(str(key)), str(key),                                  marshall(object[key], context)))                        mapData = ''.join(mapDataList)            return "%s:%s:%s" % (MAP_MARKER, len(mapData), mapData)    if isinstance(object, STAFMarshallingContext):        if len(object.mapClassMap.keys()) == 0:            return marshall(object.getRootObject(), context)        else:            contextMap = { 'map-class-map': object.mapClassMap }            # Note: We can't simply put the root object as a map key like            #       "root-object" and then marshall the whole map, as in

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -