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.
|