SF.net SVN: fclient: [163] trunk/sandbox/fcp/fcp2_0_client.py
Status: Pre-Alpha
Brought to you by:
jurner
From: <ju...@us...> - 2008-02-06 13:57:33
|
Revision: 163 http://fclient.svn.sourceforge.net/fclient/?rev=163&view=rev Author: jurner Date: 2008-02-06 05:57:32 -0800 (Wed, 06 Feb 2008) Log Message: ----------- refactored finalizing of requests to handle it in one place Modified Paths: -------------- trunk/sandbox/fcp/fcp2_0_client.py Modified: trunk/sandbox/fcp/fcp2_0_client.py =================================================================== --- trunk/sandbox/fcp/fcp2_0_client.py 2008-02-06 11:13:27 UTC (rev 162) +++ trunk/sandbox/fcp/fcp2_0_client.py 2008-02-06 13:57:32 UTC (rev 163) @@ -307,7 +307,7 @@ # non persistent params 'FcStatus': consts.RequestStatus.Null, - 'FcErrorMessage': None, # did an error occur? + 'FcErrorMessage': None, # error message in case an error occured 'FcUserData': userData, # any user defined runtime data here # params for SSKKeypair @@ -335,6 +335,34 @@ return msg + def _finalizeRequest(self, msg, request, event): + """Finalzes a request + @param msg: message that is the reason for finalizing + @param request: request to finalize + @param event: event to trigger or None + + @note: this method sets the requests L{consts.RequestStatus.Removed} and + L{consts.RequestStatus.Completed} flags accordingly + @note: Fcp removes Get / Put requests with Persistence == connection emidiately + from its queue. Same goes all requests on ProtocolError. We inform the caller + that the request has been completed and remove it fom our queue if necessary. + Non Get / Put requests will be removed in any case. + """ + removeRequest = msg.name in (consts.Message.ProtocolError, consts.Message.PersistentRequestRemoved) + if not removeRequest: + #NOTE: non Get / Put related requests do not have a Persistence param + removeRequest = request.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection + if removeRequest: + request['FcStatus'] |= consts.RequestStatus.Removed + + if event is not None: + event(request) + + request['FcStatus'] |= consts.RequestStatus.Completed + if removeRequest: + del self._requests[request['Identifier']] + + def _registerRequest(self, msg, userData, @@ -691,16 +719,14 @@ # handle plugin related request failures elif code == consts.ProtocolError.NoSuchPlugin: if initialRequest.name == consts.Message.PluginInfo: - initialRequest['FcStatus'] |= consts.RequestStatus.Error | consts.RequestStatus.Success | consts.RequestStatus.Removed - self.events.PluginInfoFailed(initialRequest) - initialRequest['FcStatus'] |= consts.RequestStatus.Completed - del self._requests[requestIdentifier] + initialRequest['FcErrorMessage'] = msg + initialRequest['FcStatus'] |= consts.RequestStatus.Error + self._finalizeRequest(msg, initialRequest, self.events.PluginInfoFailed) return True elif initialRequest.name == consts.Message.FCPPluginMessage: - initialRequest['FcStatus'] |= consts.RequestStatus.Error | consts.RequestStatus.Success | consts.RequestStatus.Removed - self.events.PluginMessageFailed(initialRequest) - initialRequest['FcStatus'] |= consts.RequestStatus.Completed - del self._requests[requestIdentifier] + initialRequest['FcErrorMessage'] = msg + initialRequest['FcStatus'] |= consts.RequestStatus.Error + self._finalizeRequest(msg, initialRequest, self.events.PluginMessageFailed) return True elif code == consts.ProtocolError.AccessDenied: @@ -721,10 +747,8 @@ # NOTE: Fcp already removed the request initialRequest['FcErrorMessage'] = msg - initialRequest['FcStatus'] = consts.RequestStatus.Success | consts.RequestStatus.Error | consts.RequestStatus.Removed - self.events.RequestFailed(initialRequest) - initialRequest['FcStatus'] |= consts.RequestStatus.Completed - del self._requests[requestIdentifier] + initialRequest['FcStatus'] = consts.RequestStatus.Error + self._finalizeRequest(msg, initialRequest, self.events.RequestFailed) return True @@ -802,20 +826,13 @@ testFailed = not msg.params.get('ReadDirectoryAllowed', False) if testFailed: - #TODO: check if errorMsg gives reasonable feedback - initialRequest['FcStatus'] = consts.RequestStatus.Error | consts.RequestStatus.Removed + initialRequest['FcStatus'] = consts.RequestStatus.Error initialRequest['FcErrorMessage'] = initialRequest['FcTestDDA']['ErrorMsg'] - - # notify listeners - self.events.ProtocolError(initialRequest) - # the node removed the request in any case (ProtocolError) so do we... - initialRequest['FcStatus'] = consts.RequestStatus.Completed - del self._requests[initialRequest['Identifier']] + self._finalizeRequest(msg, initialRequest, self.events.RequestFailed) return True - - - # resend message + + # else: resend message self.sendMessageEx(initialRequest) return True @@ -846,16 +863,7 @@ initialRequest['FcStatus'] |= consts.RequestStatus.Success initialRequest.data = msg.data - - # Fcp removes requests from queue with Persistence.Connection.. so do we - if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection: - initialRequest['FcStatus'] |= consts.RequestStatus.Removed - - # notify listeners - self.events.RequestCompleted(initialRequest) - initialRequest['FcStatus'] |= consts.RequestStatus.Completed - if initialRequest['FcStatus'] & consts.RequestStatus.Removed: - del self._requests[requestIdentifier] + self._finalizeRequest(msg, initialRequest, self.events.RequestCompleted) return True elif msg.name == consts.Message.DataFound: @@ -868,16 +876,7 @@ # except from GetData all requests are complete here. Next GetData will run through AllData... if initialRequest['FcRequestType'] != consts.RequestType.GetData: - # Fcp removes requests from queue with Persistence.Connection.. so do we - if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection: - initialRequest['FcStatus'] |= consts.RequestStatus.Removed - - # notify listeners - self.events.RequestCompleted(initialRequest) - initialRequest['FcStatus'] |= consts.RequestStatus.Completed - if initialRequest['FcStatus'] & consts.RequestStatus.Removed: - del self._requests[requestIdentifier] - + self._finalizeRequest(msg, initialRequest, self.events.RequestCompleted) return True @@ -885,29 +884,20 @@ if initialRequest is None: return False - # Fcp removes requests from queue with Persistence.Connection.. so do we - if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection: - initialRequest['FcStatus'] |= consts.RequestStatus.Removed - # check if it is one of our requests for key information code = msg['Code'] if code == consts.FetchError.TooBig and initialRequest['FcRequestType'] == consts.RequestType.GetKeyInfo: - initialRequest['FcStatus'] |= consts.RequestStatus.Success initialRequest['FcMetadataContentType'] = msg.get('ExpectedMetadata.ContentType', '') initialRequest['FcDataLength'] = msg.get('ExpectedDataLength', -1) - self.events.RequestCompleted(initialRequest) + initialRequest['FcStatus'] |= consts.RequestStatus.Success + self._finalizeRequest(msg, initialRequest, self.events.RequestCompleted) else: initialRequest['FcErrorMessage'] = msg initialRequest['FcStatus'] |= consts.RequestStatus.Error - self.events.RequestFailed(initialRequest) - - initialRequest['FcStatus'] |= consts.RequestStatus.Completed - if initialRequest['FcStatus'] & consts.RequestStatus.Removed: - del self._requests[requestIdentifier] + self._finalizeRequest(msg, initialRequest, self.events.RequestFailed) return True - - - + + elif msg.name == consts.Message.PersistentGet: # unknown request... try to restore it @@ -978,10 +968,8 @@ elif msg.name == consts.Message.PersistentRequestRemoved: if initialRequest is None: return False - - #TODO: notify user ? - initialRequest['FcStatus'] |= consts.RequestStatus.Removed - del self._requests[requestIdentifier] + #TODO: notify user? + self._finalizeRequest(msg, initialRequest, None) return True @@ -1043,20 +1031,9 @@ elif msg.name == consts.Message.PutFailed: if initialRequest is None: return False - initialRequest['FcStatus'] |= consts.RequestStatus.Error initialRequest['FcErrorMessage'] = msg - - # Fcp removes requests from queue with Persistence.Connection.. so do we - if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection: - initialRequest['FcStatus'] |= consts.RequestStatus.Removed - del self._requests[requestIdentifier] - - # notify listeners - self.events.RequestFailed(initialRequest) - initialRequest['FcStatus'] |= consts.RequestStatus.Completed - if initialRequest['FcStatus'] & consts.RequestStatus.Removed: - del self._requests[requestIdentifier] + self._finalizeRequest(msg, initialRequest, self.events.RequestFailed) return True @@ -1072,20 +1049,12 @@ elif msg.name == consts.Message.PutSuccessful: if initialRequest is None: return False - # TODO: StartupTime and CompletionTime are passed, but # as long as no corrosponding params are passed in DataFound # we ignore them initialRequest['FcStatus'] |= consts.RequestStatus.Success initialRequest['URI'] = msg['URI'] - if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection: - initialRequest['FcStatus'] |= consts.RequestStatus.Removed - - # notify listeners - self.events.RequestCompleted(initialRequest) - initialRequest['FcStatus'] |= consts.RequestStatus.Completed - if initialRequest['FcStatus'] & consts.RequestStatus.Removed: - del self._requests[requestIdentifier] + self._finalizeRequest(msg, initialRequest, self.events.RequestCompleted) return True @@ -1146,25 +1115,15 @@ elif msg.name == consts.Message.PluginInfo: if initialRequest is None: return False - - initialRequest['FcStatus'] |= consts.RequestStatus.Success | consts.RequestStatus.Removed - - # notify listeners - self.events.PluginInfo(msg) - initialRequest['FcStatus'] |= consts.RequestStatus.Completed - del self._pluginRequests[requestIdentifier] + initialRequest['FcStatus'] |= consts.RequestStatus.Success + self._finalizeRequest(msg, initialRequest, self.events.PluginInfo) return True elif msg.name == consts.Message.FCPPluginReply: if initialRequest is None: return False - - initialRequest['FcStatus'] |= consts.RequestStatus.Success | consts.RequestStatus.Removed - - # notify listeners - self.events.PluginMessage(msg) - initialRequest['FcStatus'] |= consts.RequestStatus.Completed - del self._requests[requestIdentifier] + initialRequest['FcStatus'] |= consts.RequestStatus.Success + self._finalizeRequest(msg, initialRequest, self.events.PluginMessage) return True #################################################### @@ -1196,12 +1155,8 @@ initialRequest['InsertURI'] = insertURI initialRequest['RequestURI'] = requestURI - initialRequest['FcStatus'] |= consts.RequestStatus.Success | consts.RequestStatus.Removed - self.events.KeypairGenerated(initialRequest) - - # notify listeners - initialRequest['FcStatus'] |= consts.RequestStatus.Completed - del self._requests[requestIdentifier] + initialRequest['FcStatus'] |= consts.RequestStatus.Success + self._finalizeRequest(msg, initialRequest, self.events.KeypairGenerated) return True elif msg.name == consts.Message.SubscribedUSKUpdate: @@ -2036,14 +1991,17 @@ """ identifier = self.FcParam.newUuid(uuids=self._requests) msg = self.Message( - consts.Message.GetPluginInfo, - FcModified={}, - FcStatus=consts.RequestStatus.Pending, - FcRequestType=consts.RequestType.PluginInfo, - Identifier=identifier, - PluginName=pluginName, - Detailed=detailed, - ) + consts.Message.GetPluginInfo, + + FcErrorMessage=None, + FcModified={}, + FcRequestType=consts.RequestType.PluginInfo, + FcStatus=consts.RequestStatus.Pending, + + Identifier=identifier, + PluginName=pluginName, + Detailed=detailed, + ) self._requests[identifier] = msg self.sendMessageEx(msg) return identifier @@ -2058,14 +2016,17 @@ """ identifier = self.FcParam.newUuid(uuids=self._requests) msg = self.Message( - consts.Message.GetPluginInfo, - FcModified={}, - FcStatus=consts.RequestStatus.Pending, - FcRequestType=consts.RequestType.PluginMessage, - Identifier=identifier, - PluginName=pluginName, - **params - ) + consts.Message.GetPluginInfo, + + FcErrorMessage=None, + FcModified={}, + FcRequestType=consts.RequestType.PluginMessage, + FcStatus=consts.RequestStatus.Pending, + + Identifier=identifier, + PluginName=pluginName, + **params + ) if data is not None: msg['DataLength'] = len(data) msg.data = data @@ -2150,12 +2111,13 @@ identifier = c.getFile( 'CHK@q4~2soHTd9SOINIoXmg~dn7LNUAOYzN1tHNHT3j4c9E,gcVRtoglEhgqN-DJolXPqJ4yX1f~1gBGh89HNWlFMWQ,AAIC--8/snow_002%20%2810%29.jpg', filename, - filenameCollision=c.FilenameCollision.HandleRename, + filenameCollision=consts.FilenameCollision.HandleRename, #persistence=consts.Persistence.Forever, ) - for i in xrange(50): - c.next() + c.run() + #for i in xrange(50): + # c.next() #c.removeRequest(identifier) #for i in xrange(5): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |