SF.net SVN: fclient:[691] trunk/fclient/src/fclient/lib/fcp2
Status: Pre-Alpha
Brought to you by:
jurner
|
From: <jU...@us...> - 2008-07-20 10:38:16
|
Revision: 691
http://fclient.svn.sourceforge.net/fclient/?rev=691&view=rev
Author: jUrner
Date: 2008-07-20 10:38:14 +0000 (Sun, 20 Jul 2008)
Log Message:
-----------
filenameCollision is now handleFilenameCollision (bool)
Modified Paths:
--------------
trunk/fclient/src/fclient/lib/fcp2/client.py
trunk/fclient/src/fclient/lib/fcp2/test/test_client.py
Modified: trunk/fclient/src/fclient/lib/fcp2/client.py
===================================================================
--- trunk/fclient/src/fclient/lib/fcp2/client.py 2008-07-20 10:35:34 UTC (rev 690)
+++ trunk/fclient/src/fclient/lib/fcp2/client.py 2008-07-20 10:38:14 UTC (rev 691)
@@ -357,13 +357,13 @@
identifier=None,
initTime=None,
persistentUserData='',
- filenameCollision=consts.ConstFilenameCollision.HandleNever,
+ handleFilenameCollision=False,
):
"""Registers a request
@param msg: message to register
@param requestType: (L{consts.ConstRequestType}) type of request to register
- @param filenameCollision: (L{consts.ConstFilenameCollision}) how to handle filename collisions.
- Default is L{consts.ConstFilenameCollision.HandleNever}
+ @param handleFilenameCollision: (bool) if True, the file is automatically renamed if "filename" collides
+ with a file object already present on disk
@param identifier: (str) identifier of the request or None to create a new one
@param initTime: (int) init time of the request or None to set it to now
@param persistentUserData: (str) anyuser defined persistent data
@@ -381,7 +381,7 @@
msg['RequestType'] = requestType
msg['InitTime'] = time.time() if initTime is None else initTime
if requestType & consts.ConstRequestType.MaskGet:
- msg['FilenameCollision'] = filenameCollision
+ msg['HandleFilenameCollision'] = handleFilenameCollision
msg['UserData'] = userData
msg['PersistentUserData'] = persistentUserData
msg['ClientToken'] = ''
@@ -669,25 +669,22 @@
# handle filename collisions
elif code == consts.ConstProtocolError.DiskTargetExists:
- handleCollision = initialRequest.get('FilenameCollision', consts.ConstFilenameCollision.HandleNever)
- collisionHandled = bool(handleCollision & consts.ConstFilenameCollision.CollisionHandled)
-
- # rename filename
- if handleCollision & consts.ConstFilenameCollision.HandleRename:
- filename = initialRequest['Filename']
- initialRequest['FilenameCollision'] |= consts.ConstFilenameCollision.CollisionHandled
- newFilename = namespace.unique_filename(filename, extensions=1, ispostfixed=collisionHandled)
- initialRequest['Filename'] = newFilename
- initialRequest['Modified'] = {consts.ConstRequestModified.Filename: filename}
- self.sendMessage(initialRequest)
- self.events.RequestModified(initialRequest)
- return True
-
- # don't handle
- else:
- initialRequest['FilenameCollision'] &= ~consts.ConstFilenameCollision.CollisionHandled
-
-
+ handleCollision = initialRequest.get('HandleFilenameCollision', None)
+ if handleCollision is not None: # looks like one of our requests
+ collisionHandled = initialRequest.get('FilenameCollisionHandled', None)
+ if collisionHandled is not None: # one more hint that it is one of our requests
+ if handleCollision:
+ # rename file and resend request
+ initialRequest['FilenameCollisionHandled'] = True
+ filename = initialRequest['Filename']
+ newFilename = namespace.unique_filename(filename, extensions=1, ispostfixed=collisionHandled)
+ initialRequest['Filename'] = newFilename
+ initialRequest['Modified'] = {consts.ConstRequestModified.Filename: filename}
+ initialRequest.updatePersistentParams()
+ self.sendMessage(initialRequest)
+ self.events.RequestModified(initialRequest)
+ return True
+
# handle plugin related request failures
elif code == consts.ConstProtocolError.NoSuchPlugin or code == consts.ConstProtocolError.AccessDenied:
if initialRequest == message.MsgGetPluginInfo:
@@ -1263,7 +1260,7 @@
requestType,
userData,
persistentUserData,
- filenameCollision,
+ handleFilenameCollision=False,
**messageParams
):
"""Requests a key from the node
@@ -1271,7 +1268,8 @@
@param requestType: (L{consts.ConstRequestType}) sub type of the message
@param userData: any non persistent data to associate to the request or None
@param persistentUserData: any string to associate to the request as persistent data or None
- @param filenameCollision: what to do if the disk target alreaady exists. One of the FilenameCollision.* consts
+ @param handleFilenameCollision: (bool) if True, the file is automatically renamed if "filename" collides
+ with a file object already present on disk
@param messageParams: keyword arguments to pass along with the ClientGet message (uppercase first letter!!).
If the value of a keyword is None, it is ignored.
@@ -1285,7 +1283,7 @@
self._registerRequest(
msg,
requestType,
- filenameCollision=filenameCollision,
+ handleFilenameCollision=handleFilenameCollision,
persistentUserData=persistentUserData,
userData=userData,
)
@@ -1340,8 +1338,7 @@
consts.ConstRequestType.GetData,
userData,
persistentUserData,
- consts.ConstFilenameCollision.HandleNever,
-
+
# Fcp params
AllowedMimeTypes = allowedMimeTypes,
BinaryBlob=binaryBlob,
@@ -1373,7 +1370,7 @@
userData=None,
persistentUserData='',
- filenameCollision=consts.ConstFilenameCollision.HandleNever,
+ handleFilenameCollision=False,
):
"""Requests a file from the node
@@ -1388,7 +1385,8 @@
@param maxSize: (int) maximum size of the file in bytes or None to set no limited
@param persistence: (L{consts.ConstPersistence}) persistence of the request
@param priorityClass: (L{consts.ConstPriority}) priority of the request
- @param filenameCollision: what to do if the disk target alreaady exists. One of the FilenameCollision.* consts
+ @param handleFilenameCollision: (bool) if True, the file is automatically renamed if "filename" collides
+ with a file object already present on disk
@param userData: any non persistent data to associate to the request
@param persistentUserData: any string to associate to the request as persistent data
@@ -1408,7 +1406,7 @@
consts.ConstRequestType.GetFile,
userData,
persistentUserData,
- filenameCollision,
+ handleFilenameCollision=handleFilenameCollision,
# Fcp params
AllowedMimeTypes = allowedMimeTypes,
@@ -1468,8 +1466,7 @@
consts.ConstRequestType.GetKeyInfo,
userData,
persistentUserData,
- consts.ConstFilenameCollision.HandleNever,
-
+
# Fcp params
Global=False,
DSOnly=dsOnly,
Modified: trunk/fclient/src/fclient/lib/fcp2/test/test_client.py
===================================================================
--- trunk/fclient/src/fclient/lib/fcp2/test/test_client.py 2008-07-20 10:35:34 UTC (rev 690)
+++ trunk/fclient/src/fclient/lib/fcp2/test/test_client.py 2008-07-20 10:38:14 UTC (rev 691)
@@ -2507,7 +2507,7 @@
self.failIf(requestsAll)
- def test_filenameCollision_HandleRename(self):
+ def test_filenameCollision_doHandle(self):
self.connectClient()
# request a file
@@ -2519,7 +2519,7 @@
myIdentifier = self.client.getFile(
myKey,
fpath,
- filenameCollision=fcp2.ConstFilenameCollision.HandleRename,
+ handleFilenameCollision=True,
)
myRequest = self.client.getRequest(myIdentifier)
requestsAll = self.client.getRequests()
@@ -2549,12 +2549,8 @@
self.assertNotEqual(msg['Filename'], fpath)
# check flags
- filenameCollision = msg['FilenameCollision']
- self.assertEqual(
- filenameCollision & fcp2.ConstFilenameCollision.MaskHandle,
- fcp2.ConstFilenameCollision.HandleRename
- )
- self.failUnless(filenameCollision & fcp2.ConstFilenameCollision.CollisionHandled)
+ self.failUnless(myRequest['HandleFilenameCollision'])
+ self.failUnless(myRequest['FilenameCollisionHandled'])
self.assertHasNextEvent(None)
self.assertHasNextMessage(None)
@@ -2563,7 +2559,7 @@
self.failIf(requestsAll)
- def test_filenameCollision_HandleNever(self):
+ def test_filenameCollision_doNotHandle(self):
self.connectClient()
# request a file
@@ -2575,7 +2571,7 @@
myIdentifier = self.client.getFile(
myKey,
fpath,
- filenameCollision=fcp2.ConstFilenameCollision.HandleNever,
+ handleFilenameCollision=False,
)
myRequest = self.client.getRequest(myIdentifier)
requestsAll = self.client.getRequests()
@@ -2597,6 +2593,10 @@
Global='false',
)
+ # check flags
+ self.failIf(myRequest['HandleFilenameCollision'])
+ self.failIf(myRequest['FilenameCollisionHandled'])
+
# client schould send no messages and trigger a RequestFailed event
self.assertHasNextEvent(self.client.events.RequestFailed)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|