SF.net SVN: fclient: [126] trunk/sandbox/fcp/fcp2_0_client.py
Status: Pre-Alpha
Brought to you by:
jurner
|
From: <ju...@us...> - 2008-02-03 13:14:54
|
Revision: 126
http://fclient.svn.sourceforge.net/fclient/?rev=126&view=rev
Author: jurner
Date: 2008-02-03 05:14:59 -0800 (Sun, 03 Feb 2008)
Log Message:
-----------
persistence == connection is now handled ++ some fixes
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-03 13:13:56 UTC (rev 125)
+++ trunk/sandbox/fcp/fcp2_0_client.py 2008-02-03 13:14:59 UTC (rev 126)
@@ -485,7 +485,8 @@
self.close()
msg = self.Message(
consts.Message.ClientDisconnected,
- DisconnectReason=consts.DisconnectReason.VersionMissmatch
+ DisconnectReason=consts.DisconnectReason.VersionMissmatch,
+ Param=msg,
)
self.events.ClientDisconnected(msg)
yield self._nodeHelloMessage
@@ -503,7 +504,8 @@
msg = self.Message(
consts.Message.ClientDisconnected,
- DisconnectReason=consts.DisconnectReason.ConnectingFailed
+ DisconnectReason=consts.DisconnectReason.ConnectingFailed,
+ Param=None,
)
self.events.ClientDisconnected(msg)
self._log.info(consts.LogMessages.ConnectingFailed)
@@ -605,7 +607,8 @@
self.close()
msg = self.Message(
consts.Message.ClientDisconnected,
- DisconnectReason=DisconnectReason.Shutdown,
+ DisconnectReason=consts.DisconnectReason.Shutdown,
+ Param=None,
)
self.events.ClientDisconnected(msg)
return True
@@ -810,45 +813,49 @@
elif msg.name == consts.Message.AllData:
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:
+ del self._requests[requestIdentifier]
+
+ initialRequest['FcStatus'] = consts.MessageStatus.Complete
initialRequest.data = msg.data
self.events.RequestCompleted(initialRequest)
return True
elif msg.name == consts.Message.DataFound:
-
if initialRequest is None:
- # something is going wrong
return False
initialRequest['FcStatus'] = consts.MessageStatus.Complete
initialRequest['FcMetadataContentType'] = msg.get('Metadata.ContentType', '')
initialRequest['FcDataLength'] = msg.get('DataLength', '')
if initialRequest['FcSubType'] != consts.MessageSubType.GetData:
+ initialRequest['FcStatus'] = consts.MessageStatus.Complete
+
+ # Fcp removes requests from queue with Persistence.Connection.. so do we
+ if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection:
+ del self._requests[requestIdentifier]
self.events.RequestCompleted(initialRequest)
return True
-
+
-
elif msg.name == consts.Message.GetFailed:
- code = msg['Code']
if initialRequest is None:
- # something is going wrong
return False
+ # Fcp removes requests from queue with Persistence.Connection.. so do we
+ if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection:
+ del self._requests[requestIdentifier]
+
# check if it is one of our requests for key information
- if code == self.FetchError.TooBig and initialRequest['FcSubType'] == consts.MessageSubType.GetKeyInfo:
+ code = msg['Code']
+ if code == consts.FetchError.TooBig and initialRequest['FcSubType'] == consts.MessageSubType.GetKeyInfo:
initialRequest['FcStatus'] = consts.MessageStatus.Complete
initialRequest['FcMetadataContentType'] = msg.get('ExpectedMetadata.ContentType', '')
initialRequest['FcDataLength'] = msg.get('ExpectedDataLength', -1)
- initialRequest['FcProgressCompleted'] = True
- #TODO: check if Fcp removed the request
-
self.events.RequestCompleted(initialRequest)
else:
-
- #TODO: check if Fcp removed the request
-
initialRequest['FcErrorMessage'] = msg
initialRequest['FcStatus'] = consts.MessageStatus.Error
self.events.RequestFailed(initialRequest)
@@ -975,7 +982,6 @@
elif msg.name == consts.Message.SimpleProgress:
if initialRequest is None:
- # something went wrong
return False
initialRequest['FcProgressTotal'] = msg['Total']
@@ -989,11 +995,24 @@
## put related
elif msg.name == consts.Message.URIGenerated:
- if initialRequest is None: # something went wrong
+ if initialRequest is None:
return False
initialRequest['URI'] = msg['URI']
return True
+ elif msg.name == consts.Message.PutFailed:
+ 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:
+ del self._requests[requestIdentifier]
+
+ initialRequest['FcErrorMessage'] = msg
+ initialRequest['FcStatus'] = consts.MessageStatus.Error
+ self.events.RequestFailed(initialRequest)
+ return True
+
elif msg.name == consts.Message.PutFetchable:
if initialRequest is None:
@@ -1006,12 +1025,12 @@
elif msg.name == consts.Message.PutSuccessful:
if initialRequest is None:
- # something went wrong
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.MessageStatus.Complete
initialRequest['URI'] = msg['URI']
self.events.RequestCompleted(initialRequest)
return True
@@ -1075,9 +1094,10 @@
elif msg.name == consts.Message.CloseConnectionDuplicateClientName:
msg = self.Message(
consts.Message.ClientDisconnected,
- DisconnectReason=DisconnectReason.DuplicateClientName,
+ DisconnectReason=consts.DisconnectReason.DuplicateClientName,
+ Param=None,
)
- self.events.ClientDisconnect(msg)
+ self.events.ClientDisconnected(msg)
return True
@@ -1119,9 +1139,13 @@
msg = self.Message.fromSocket(self._socket)
if msg.name == consts.Message.ClientSocketDied:
if dispatch:
- msg['DisconnectReason'] = consts.DisconnectReason.SocketDied
+ msg = self.Message(
+ consts.Message.ClientDisconnected,
+ DisconnectReason=consts.DisconnectReason.SocketDied,
+ Param=msg,
+ )
self.events.ClientDisconnected(msg)
- raise socket.error(msg['Details'])
+ #raise socket.error(msg['Param']['Details'])
elif msg.name == consts.Message.ClientSocketTimeout:
if dispatch:
@@ -1166,14 +1190,12 @@
except socket.error, d:
self._log.info(consts.LogMessages.SocketDied)
self.close()
-
- errorMsg = self.Message(
- consts.Message.ClientSocketDied,
- DisconnectReason=consts.DisconnectReason.SocketDied,
- Exception=socket.error,
- Details=d
+ msg = self.Message(
+ consts.Message.ClientDisconnected,
+ DisconnectReason=consts.DisconnectReason.SocketDied,
+ Param=self.Message(consts.Message.ClientSocketDied, Exception=socket.error, Details=d)
)
- self.events.ClientDisconnected(errorMsg)
+ self.events.ClientDisconnected(msg)
raise socket.error(d)
return msg
@@ -1288,12 +1310,19 @@
@param maxSize: (int) maximum size of the file in bytes or None to set no limited
@param persistence: (L{consts.Persistence}) persistence of the request
@param priorityClass: (L{consts.Priority}) priority of the request
-
@param userData: any non persistent data to associate to the request
@param persistentUserData: any string to associate to the request as persistent data
+
+ @return: (str) request identifier
- @return: (str) request identifier
- @note: if a filename collision is handled a RequestFilenameChanged event is triggered
+ @param event: RequestCompleted(event, message) triggered when the request is complete
+ @param event: RequestFailed(event, message) triggered when the request failes
+ @param event: RequestStarted(event, message) triggered when as the request is started
+ @param event: RequestModified(event, message) trigggered if the request identifier changes
+ or the request is modified otherwise (see L{modifyRequest})
+
+ @note: if persistence is L{consts.Persistence.Connection} the request is removed from the client
+ as soon as it completes or failes
"""
return self.clientGet(
uri,
@@ -1349,13 +1378,20 @@
@param maxSize: (int) maximum size of the file in bytes or None to set no limited
@param persistence: (L{consts.Persistence}) persistence of the request
@param priorityClass: (L{consts.Priority}) priority of the request
-
@param filenameCollision: what to do if the disk target alreaady exists. One of the FilenameCollision.* consts
@param userData: any non persistent data to associate to the request
@param persistentUserData: any string to associate to the request as persistent data
@return: (str) request identifier
- @note: if a filename collision is handled a RequestFilenameChanged event is triggered
+
+ @param event: RequestCompleted(event, message) triggered when the request is complete
+ @param event: RequestFailed(event, message) triggered when the request failes
+ @param event: RequestStarted(event, message) triggered when as the request is started
+ @param event: RequestModified(event, message) trigggered if the request identifier changes,
+ filename changes or the request is modified otherwise (see L{modifyRequest})
+
+ @note: if persistence is L{consts.Persistence.Connection} the request is removed from the client
+ as soon as it completes or failes
"""
return self.clientGet(
uri,
@@ -1407,6 +1443,15 @@
@param persistentUserData: any string to associate to the request as persistent data
@return: (str) request identifier
+
+ @param event: RequestCompleted(event, message) triggered when the request is complete
+ @param event: RequestFailed(event, message) triggered when the request failes
+ @param event: RequestStarted(event, message) triggered when as the request is started
+ @param event: RequestModified(event, message) trigggered if the request identifier changes
+ or the request is modified otherwise (see L{modifyRequest})
+
+ @note: if persistence is L{consts.Persistence.Connection} the request is removed from the client
+ as soon as it completes or failes
"""
# how to retrieve meta info about a key? ...idea is to provoke a GetFailed (TooBig)
return self.clientGet(
@@ -1902,9 +1947,9 @@
for i in xrange(50):
c.next()
- c.removeRequest(identifier)
- for i in xrange(5):
- c.next()
+ #c.removeRequest(identifier)
+ #for i in xrange(5):
+ # c.next()
#testGetData()
@@ -1917,30 +1962,42 @@
'CHK@q4~2soHTd9SOINIoXmg~dn7LNUAOYzN1tHNHT3j4c9E,gcVRtoglEhgqN-DJolXPqJ4yX1f~1gBGh89HNWlFMWQ,AAIC--8/snow_002%20%2810%29.jpg',
filename,
filenameCollision=c.FilenameCollision.HandleRename,
- persistence=consts.Persistence.Forever,
+ #persistence=consts.Persistence.Forever,
)
for i in xrange(50):
c.next()
- c.removeRequest(identifier)
- for i in xrange(5):
- c.next()
+ #c.removeRequest(identifier)
+ #for i in xrange(5):
+ # c.next()
#testGetFile()
def testGetKeyInfo():
+
+
+
identifier = c.getKeyInfo(
'CHK@q4~2soHTd9SOINIoXmg~dn7LNUAOYzN1tHNHT3j4c9E,gcVRtoglEhgqN-DJolXPqJ4yX1f~1gBGh89HNWlFMWQ,AAIC--8/snow_002%20%2810%29.jpg',
+ #persistence=c.consts.Persistence.Reboot,
)
-
- for i in xrange(50):
+
+
+ def cb(event, msg):
+ if event == c.events.RequestCompleted:
+ pass
+ #c.sendMessage(c.consts.Message.GetRequestStatus, Identifier=identifier)
+ c.events.RequestCompleted += cb
+
+ for i in xrange(55):
c.next()
- c.removeRequest(identifier)
- for i in xrange(5):
- c.next()
+ #c.removeRequest(identifier)
+ #for i in xrange(5):
+ # c.next()
+ c.events.RequestCompleted -= cb
#testGetKeyInfo()
@@ -1953,9 +2010,9 @@
for i in xrange(100):
c.next()
- c.removeRequest(myIdentifier)
- for i in xrange(5):
- c.next()
+ #c.removeRequest(myIdentifier)
+ #for i in xrange(5):
+ # c.next()
#testPutData()
@@ -1969,9 +2026,9 @@
for i in xrange(1000):
c.next()
- c.removeRequest(identifier)
- for i in xrange(5):
- c.next()
+ #c.removeRequest(identifier)
+ #for i in xrange(5):
+ # c.next()
#testPutFile()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|