On Fri, 2007-03-16 at 18:07 +1100, Edward d'Auvergne wrote:
> Chris,
> 
> I've cleaned up the unit tests so that you should be able to check
> that these changes are working properly.  Would you be able to fix the
> relax module import statements for the alternative relax data storage
> object?  This commit has put relax into a very bad shape (not that
> much was functioning anyway, but now nothing is).  I'm also not sure
> why but the data storage singleton instance method 'add()' (to add a
> new data pipe) is not working as it should.

It seems my attempt to delegate unbound methods from the Data class to a
proxy object was pushing Pythons polymorphism a step too far, hence the
test failures (ie. the problem was in the test, not in the code). My
solution to that (in r3209) is rather cheeky, but acceptable I hope in
the context of a unit-test?

All the imports are now fixed, and relax at least gets to a prompt.
There is even one working system test! Would you like me to do anything
more to get closer to a functional system at this stage, or can further
changes continue with the progressive redesign?

Chris

> 
> Cheers,
> 
> Edward
> 
> 
> On 3/16/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
> > Author: macraild
> > Date: Thu Mar 15 17:58:23 2007
> > New Revision: 3200
> >
> > URL: http://svn.gna.org/viewcvs/relax?rev=3200&view=rev
> > Log:
> > Alternative implimentation of the data object as a singleton.
> >
> > As proposed here:
> > https://mail.gna.org/public/relax-devel/2007-03/msg00013.html
> >
> > and agreed here:
> > https://mail.gna.org/public/relax-devel/2007-03/msg00058.html#
> >
> >
> > Modified:
> >     1.3/data/__init__.py
> >     1.3/test_suite/unit_tests/data/test___init__.py
> >
> > Modified: 1.3/data/__init__.py
> > URL: 
> > http://svn.gna.org/viewcvs/relax/1.3/data/__init__.py?rev=3200&r1=3199&r2=3200&view=diff
> > ==============================================================================
> > --- 1.3/data/__init__.py (original)
> > +++ 1.3/data/__init__.py Thu Mar 15 17:58:23 2007
> > @@ -37,28 +37,8 @@
> >  class Data(dict):
> >      """The relax data storage object."""
> >
> > -    # Singleton initialisation, the reference to the single instance of 
> > this class.
> > -    __instance = None
> > -
> >      # The current data pipe.
> >      current_pipe = None
> > -
> > -
> > -    def __new__(self, *args, **kargs):
> > -        """Method for implementing the singleton design pattern.
> > -
> > -        If no other class instance currently exists, create a new instance 
> > of this class.  Otherwise
> > -        return the class instance.  See 
> > http://en.wikipedia.org/wiki/Singleton_pattern for a
> > -        description of this design pattern.
> > -        """
> > -
> > -        # Create a new instance if none exists.
> > -        if self.__instance is None:
> > -            self.__instance = dict.__new__(self, *args, **kargs)
> > -
> > -        # Return the class instance.
> > -        return self.__instance
> > -
> >
> >      def __repr__(self):
> >          """The string representation of the object.
> > @@ -145,3 +125,6 @@
> >          # Change the current data pipe.
> >          self.current_pipe = pipe_name
> >
> > +# Rebind the name Data with an instance to prevent accidental creation
> > +# of multiple instances of the Data class
> > +Data = Data()
> >
> > Modified: 1.3/test_suite/unit_tests/data/test___init__.py
> > URL: 
> > http://svn.gna.org/viewcvs/relax/1.3/test_suite/unit_tests/data/test___init__.py?rev=3200&r1=3199&r2=3200&view=diff
> > ==============================================================================
> > --- 1.3/test_suite/unit_tests/data/test___init__.py (original)
> > +++ 1.3/test_suite/unit_tests/data/test___init__.py Thu Mar 15 17:58:23 2007
> > @@ -27,9 +27,12 @@
> >  from data import Data
> >
> >
> > -class NewStore(Data):
> > -    """Subclass the relax data storage object for the isolation and 
> > creation of a new singleton."""
> > -
> > +class NewStore(dict):
> > +    """Dict subclass to act as proxy for the Singleton Data object."""
> > +    def __getattr__(self, attr):
> > +        """Delegate to the Data class to get methods for testing"""
> > +        return getattr(Data.__class__, attr)
> > +
> >
> >  class Empty_container:
> >      """An empty data container."""
> > @@ -53,15 +56,11 @@
> >          # Add an object to the data store object.
> >          self.data_store.test = 1
> >
> > -        # Create a new reference.
> > -        self.new_ref = NewStore()
> > -
> >
> >      def tearDown(self):
> >          """Destroy the subclassed data store."""
> >
> >          # Delete all references (which should decrement the singleton's 
> > ref counter to 0, hence destroying it).
> > -        del self.new_ref
> >          del self.data_store
> >
> >
> > @@ -104,18 +103,3 @@
> >          self.assert_(hasattr(self.data_store, 'current_pipe'))
> >
> >
> > -    def test_singleton(self):
> > -        """Test that the relax data storage object is functioning as a 
> > singleton."""
> > -
> > -        # Test that the new reference to NewStore is the singleton 
> > instance reference.
> > -        self.assertEqual(self.data_store, self.new_ref)
> > -
> > -        # Delete all references (which should decrement the singleton's 
> > ref counter to 0, hence destroying it).
> > -        del self.new_ref
> > -        del self.data_store
> > -
> > -        # Create a new singleton.
> > -        new = NewStore()
> > -
> > -        # Test that the object 'test' from the original singleton does not 
> > exist.
> > -        self.assert_(not hasattr(new, 'test'))
> >
> >
> > _______________________________________________
> > relax (http://nmr-relax.com)
> >
> > This is the relax-commits mailing list
> > [email protected]
> >
> > To unsubscribe from this list, get a password
> > reminder, or change your subscription options,
> > visit the list information page at
> > https://mail.gna.org/listinfo/relax-commits
> >
> 


_______________________________________________
relax (http://nmr-relax.com)

This is the relax-devel mailing list
[email protected]

To unsubscribe from this list, get a password
reminder, or change your subscription options,
visit the list information page at
https://mail.gna.org/listinfo/relax-devel

Reply via email to