diff --git a/GaudiKernel/python/GaudiKernel/DataObjectHandleBase.py b/GaudiKernel/python/GaudiKernel/DataObjectHandleBase.py index f97d1f2ec4d75ee47ef3ff47c12d298f9a982f5f..1c85dfa3209f29f5e6eccf5fbb5c14bb0cdd16a3 100644 --- a/GaudiKernel/python/GaudiKernel/DataObjectHandleBase.py +++ b/GaudiKernel/python/GaudiKernel/DataObjectHandleBase.py @@ -5,13 +5,14 @@ __doc__ = """The python module holding python bindings to DataObjectHandle""" class DataObjectHandleBase(object): - __slots__ = ('Path', ) + __slots__ = ('Path', 'Mode') # define accessTypes - def __init__(self, path): + def __init__(self, path, mode='R'): object.__init__(self) self.Path = path + self.Mode = mode def __eq__(self, other): """ @@ -43,12 +44,15 @@ class DataObjectHandleBase(object): def __add__(self, other): path = ':'.join(i + other for i in self.Path.split(':')) - return DataObjectHandleBase(path) + return DataObjectHandleBase(path, self.Mode) def __radd__(self, other): path = ':'.join(other + i for i in self.Path.split(':')) - return DataObjectHandleBase(path) + return DataObjectHandleBase(path, self.Mode) def __iadd__(self, other): self.Path = ':'.join(i + other for i in self.Path.split(':')) return self + + def mode(self): + return self.Mode diff --git a/GaudiKernel/python/GaudiKernel/PropertyProxy.py b/GaudiKernel/python/GaudiKernel/PropertyProxy.py index fa1b773c417045d8a9274a7d99ebb7029a207f00..73fa811b83fb902330098c20bbf7569dce1d84fd 100644 --- a/GaudiKernel/python/GaudiKernel/PropertyProxy.py +++ b/GaudiKernel/python/GaudiKernel/PropertyProxy.py @@ -407,10 +407,11 @@ class DataObjectHandleBasePropertyProxy(PropertyProxy): if value is None: value = '' + mode = obj.__class__.getDefaultProperty(self.descr.__name__).mode() if type(value) == str: - return DataObjectHandleBase(value) + return DataObjectHandleBase(value, mode) elif isinstance(value, DataObjectHandleBase): - return DataObjectHandleBase(value.__str__()) + return DataObjectHandleBase(value.__str__(), mode) else: raise ValueError("received an instance of %s, but %s expected" % (type(value), 'str or DataObjectHandleBase')) diff --git a/GaudiKernel/src/Lib/DataObjectHandleBase.cpp b/GaudiKernel/src/Lib/DataObjectHandleBase.cpp index d80ade75d7597cd64d568f904edb342d18c75980..8bc2077fc6692db8c5cb99feea0c86bc28824944 100644 --- a/GaudiKernel/src/Lib/DataObjectHandleBase.cpp +++ b/GaudiKernel/src/Lib/DataObjectHandleBase.cpp @@ -109,7 +109,21 @@ DataObject* DataObjectHandleBase::fetch() const { std::string DataObjectHandleBase::toString() const { return objKey(); } //--------------------------------------------------------------------------- -std::string DataObjectHandleBase::pythonRepr() const { return "DataObjectHandleBase(\"" + toString() + "\")"; } +std::string DataObjectHandleBase::pythonRepr() const { + std::string m; + switch ( mode() ) { + case Gaudi::DataHandle::Mode::Reader: + m = "R"; + break; + case Gaudi::DataHandle::Mode::Writer: + m = "W"; + break; + default: + m = "UNKNOWN"; + break; + } + return "DataObjectHandleBase('" + toString() + "', '" + m + "')"; +} //--------------------------------------------------------------------------- void DataObjectHandleBase::fromString( const std::string& s ) { Gaudi::Parsers::parse( *this, s ).ignore(); } diff --git a/GaudiKernel/tests/nose/test_Configurables.py b/GaudiKernel/tests/nose/test_Configurables.py index 2583b8078ec00e54ba7a346d342087539d34f12e..aa33927fbb48f222e2f7239370f5762ff3ff768b 100644 --- a/GaudiKernel/tests/nose/test_Configurables.py +++ b/GaudiKernel/tests/nose/test_Configurables.py @@ -7,7 +7,7 @@ class MyAlg(ConfigurableAlgorithm): __slots__ = { 'Text': 'some text', 'Int': 23, - 'DataHandle': DataObjectHandleBase('Location') + 'DataHandle': DataObjectHandleBase('Location', 'R') } def getDlls(self): @@ -34,13 +34,13 @@ def test_correct(): assert a.getValuedProperties() == { 'Int': 42, 'Text': 'value', - 'DataHandle': DataObjectHandleBase('/Event/X') + 'DataHandle': DataObjectHandleBase('/Event/X', 'R') } def test_str_from_datahandle(): a = MyAlg() - a.Text = DataObjectHandleBase('value') + a.Text = DataObjectHandleBase('value', 'R') assert a.getProp('Text') == 'value'