SF.net SVN: fclient:[690] trunk/fclient/src/fclient/lib/fcp2/message.py
Status: Pre-Alpha
Brought to you by:
jurner
|
From: <jU...@us...> - 2008-07-20 10:35:33
|
Revision: 690
http://fclient.svn.sourceforge.net/fclient/?rev=690&view=rev
Author: jUrner
Date: 2008-07-20 10:35:34 +0000 (Sun, 20 Jul 2008)
Log Message:
-----------
bit betterr persistent params handling
Modified Paths:
--------------
trunk/fclient/src/fclient/lib/fcp2/message.py
Modified: trunk/fclient/src/fclient/lib/fcp2/message.py
===================================================================
--- trunk/fclient/src/fclient/lib/fcp2/message.py 2008-07-20 10:34:07 UTC (rev 689)
+++ trunk/fclient/src/fclient/lib/fcp2/message.py 2008-07-20 10:35:34 UTC (rev 690)
@@ -13,7 +13,7 @@
from . import config
from . import types
from . import key
-from .lib import node
+from .lib import node, pmstruct
#********************************************************************************
# consts
#********************************************************************************
@@ -170,30 +170,6 @@
pass
- def _setPersistentParams(self, persistentData):
- """updates message with persisten params
- @param persistentData: (str)
- """
- params = persistentData.split(PersistentParamsSep)
- if len(params) > len(self._persistent_params_):
- raise ValueError('Too many parameters in persistentData')
- elif len(params) < len(self._persistent_params_):
- raise ValueError('Too few parameters in persistentData')
- for n, (getter, setter) in enumerate(self._persistent_params_):
- setter(self, params[n])
-
-
- def _getPersistentParams(self):
- """retrieves persisten params from the message
- @return: (str) persistent params
- """
- out = []
- for n, (getter, setter) in enumerate(self._persistent_params_):
- #TODO: check if PersistentParamsSep is in data returned
- out.append(getter(self))
- return PersistentParamsSep.join(out)
-
-
def _restoreParams(self, params):
"""updates the message with mesasage params
@param params: (dict) containing message params
@@ -221,12 +197,15 @@
#********************************************************************************
_AdditionalGetParams = {
- # persistent params that will go into identifier
+ # persistent params
_PrivateParam('RequestType'): consts.ConstRequestType.Null, # identifies sub message types
_PrivateParam('InitTime'): 0, # when was the request started?
- _PrivateParam('FilenameCollision'): consts.ConstFilenameCollision.HandleNever, # handle fielanem collisions?
_PrivateParam('PersistentUserData'): '', # any user defined persistent data
-
+ _PrivateParam('HandleFilenameCollision'): False,
+ _PrivateParam('FilenameCollisionHandled'): False,
+ _PrivateParam('HandlePermanentRedirect'): False,
+ _PrivateParam('PermanentRedirectHandled'): False,
+
# non persistent params
_PrivateParam('RequestStatus'): consts.ConstRequestStatus.Null,
_PrivateParam('ErrorMessage'): None, # error message in case an error occured
@@ -253,11 +232,9 @@
_AdditionalPutParams = {
- # persistent params that will go into identifier
+ # persistent params
_PrivateParam('RequestType'): consts.ConstRequestType.Null, # identifies sub message types
_PrivateParam('InitTime'): 0, # when was the request started?
-
- #TODO: not really necessary, but we need it for persistent params
_PrivateParam('PersistentUserData'): '', # any user defined persistent data
# non persistent params
@@ -309,39 +286,26 @@
# these params are stored in ClientToken
#
#********************************************************************************
-_PersistentParamsGet = (
- (
- lambda msg: str(msg.__getitem__('RequestType')),
- lambda msg, value: msg.__setitem__('RequestType', int(value)),
- ),
- (
- lambda msg: str(msg.__getitem__('InitTime')),
- lambda msg, value: msg.__setitem__('InitTime', float(value)),
- ),
- (
- lambda msg: str(msg.__getitem__('FilenameCollision')),
- lambda msg, value: msg.__setitem__('FilenameCollision', int(value)),
- ),
- (
- lambda msg: base64.b64encode(msg.__getitem__('PersistentUserData')),
- lambda msg, value: msg.__setitem__('PersistentUserData', base64.b64decode(value)),
- ),
- )
+class PersistentParamsGet(pmstruct.PMStruct):
+ _fields_ = (
+ ('Version', pmstruct.INT),
+ ('RequestType', pmstruct.INT),
+ ('InitTime', pmstruct.FLOAT),
+ ('PersistentUserData', pmstruct.STRING),
+ ('HandleFilenameCollision', pmstruct.BOOL),
+ ('FilenameCollisionHandled', pmstruct.BOOL),
+ ('HandlePermanentRedirect', pmstruct.BOOL),
+ ('PermanentRedirectHandled', pmstruct.BOOL),
+ )
-_PersistentParamsPut = (
- (
- lambda msg: str(msg.__getitem__('RequestType')),
- lambda msg, value: msg.__setitem__('RequestType', int(value)),
- ),
- (
- lambda msg: str(msg.__getitem__('InitTime')),
- lambda msg, value: msg.__setitem__('InitTime', float(value)),
- ),
- (
- lambda msg: base64.b64encode(msg.__getitem__('PersistentUserData')),
- lambda msg, value: msg.__setitem__('PersistentUserData', base64.b64decode(value)),
- ),
- )
+class PersistentParamsPut(pmstruct.PMStruct):
+ _fields_ = (
+ ('Version', pmstruct.INT),
+ ('RequestType', pmstruct.INT),
+ ('InitTime', pmstruct.FLOAT),
+ ('PersistentUserData', pmstruct.STRING),
+ )
+
#********************************************************************************
#
#********************************************************************************
@@ -444,7 +408,6 @@
class MsgClientGet(_MessageBase):
name = consts.ConstMessage.ClientGet
_additional_params_ = _AdditionalGetParams
- _persistent_params_ = _PersistentParamsGet
_param_types_ = {
'BinaryBlob': types.TypeBool,
'DSOnly': types.TypeBool,
@@ -460,14 +423,25 @@
def _restoreParams(self, params):
_MessageBase._restoreParams(self, params)
try:
- _MessageBase._setPersistentParams(self, self['ClientToken'])
- except Exception, d:
- #print Exception, d
+ params = PersistentParamsGet.load(self['ClientToken'])
+ except pmstruct.PMStructError:
return False
+ self.params.update(params.values)
return True
+
def updatePersistentParams(self):
- self['ClientToken'] = _MessageBase._getPersistentParams(self)
+ params = PersistentParamsGet(
+ Version=1,
+ RequestType=self['RequestType'],
+ InitTime=self['InitTime'],
+ PersistentUserData=self['PersistentUserData'],
+ HandleFilenameCollision=self['HandleFilenameCollision'],
+ FilenameCollisionHandled=self['FilenameCollisionHandled'],
+ HandlePermanentRedirect=self['HandlePermanentRedirect'],
+ PermanentRedirectHandled=self['PermanentRedirectHandled'],
+ )
+ self['ClientToken'] = params.dump()
class MsgClientHello(_MessageBase):
@@ -481,7 +455,6 @@
class MsgClientPut(_MessageBase):
name = consts.ConstMessage.ClientPut
_additional_params_ = _AdditionalPutParams
- _persistent_params_ = _PersistentParamsPut
_param_types_ = {
'BinaryBlob': types.TypeBool,
'DataLength': types.TypeInt,
@@ -494,20 +467,27 @@
'Verbosity': types.TypeInt,
}
+
def _getDataLength(self):
return self['DataLength']
def _restoreParams(self, params):
_MessageBase._restoreParams(self, params)
try:
- _MessageBase._setPersistentParams(self, self['ClientToken'])
- except Exception, d:
- #print Exception, d
+ params = PersistentParamsPut.load(self['ClientToken'])
+ except pmstruct.PMStructError:
return False
+ self.params.update(params.values)
return True
-
+
def updatePersistentParams(self):
- self['ClientToken'] = _MessageBase._getPersistentParams(self)
+ params = PersistentParamsPut(
+ Version=1,
+ RequestType=self['RequestType'],
+ InitTime=self['InitTime'],
+ PersistentUserData=self['PersistentUserData'],
+ )
+ self['ClientToken'] = params.dump()
class MsgClientPutComplexDir(MsgClientPut):
@@ -886,50 +866,29 @@
}
-class MsgPersistentGet(_MessageBase):
+class MsgPersistentGet(MsgClientGet):
name = consts.ConstMessage.PersistentGet
_additional_params_ = _AdditionalGetParams
- _persistent_params_ = _PersistentParamsGet
_param_types_ = MsgClientGet._param_types_.copy()
_param_types_['Started'] = types.TypeBool
- def _restoreParams(self, params):
- _MessageBase._restoreParams(self, params)
- try:
- _MessageBase._setPersistentParams(self, self['ClientToken'])
- except Exception, d:
- #print Exception, d
- return False
- return True
-
-
-class MsgPersistentPut(_MessageBase):
+
+class MsgPersistentPut(MsgClientPut):
name = consts.ConstMessage.PersistentPut
_additional_params_ = _AdditionalPutParams
- _persistent_params_ = _PersistentParamsPut
_param_types_ = MsgClientPut._param_types_.copy()
_param_types_['Started'] = types.TypeBool
- def _restoreParams(self, params):
- _MessageBase._restoreParams(self, params)
- try:
- _MessageBase._setPersistentParams(self, self['ClientToken'])
- except Exception, d:
- #print Exception, d
- return False
- return True
-
-class MsgPersistentPutDir(_MessageBase):
+class MsgPersistentPutDir(MsgClientPut):
name = consts.ConstMessage.PersistentPutDir
_additional_params_ = _AdditionalPutParams
- _persistent_params_ = _PersistentParamsPut
_param_types_ = MsgClientPutDiskDir._param_types_.copy()
_param_types_['Started'] = types.TypeBool
def _restoreParams(self, params):
- _MessageBase._restoreParams(self, params)
+ MsgClientPut._restoreParams(self, params)
for paramName, paramValue in self.params.items():
tmp_paramName = paramName.split('.')
@@ -937,14 +896,7 @@
if tmp_paramName[-1] == 'DataLength':
n = types.TypeInt.fcpToPython(paramValue)
self[paramName] = n
-
- try:
- _MessageBase._setPersistentParams(self, self['ClientToken'])
- except Exception, d:
- #print Exception, d
- return False
- return True
-
+
class MsgPersistentRequestModified(_MessageBase):
name = consts.ConstMessage.PersistentRequestModified
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|