From 1267d020e1ef942514f59a7d6aaa97640b9f94d2 Mon Sep 17 00:00:00 2001 From: alex_nanou Date: Sat, 21 Aug 2004 17:09:07 +0000 Subject: [PATCH] *** empty log message *** --- CHANGES | 2 +- PKG-INFO | 2 +- pli/pattern/mixin/mapping.py | 8 ++-- pli/pattern/store/store.py | 91 ++++++++++++++++++++++------------------- pli/pattern/store/storeproxy.py | 64 +++++++++++++++++++++++++++++ 5 files changed, 120 insertions(+), 47 deletions(-) create mode 100644 pli/pattern/store/storeproxy.py diff --git a/CHANGES b/CHANGES index da6c7e2..56a7559 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,4 @@ -# this file was generated on [200408212108] +# this file was generated on [200408212109] pli changes: version 0.0.72 (200408212051): diff --git a/PKG-INFO b/PKG-INFO index ea95c61..289b6fc 100644 --- a/PKG-INFO +++ b/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 1.0 Name: pli -Version: 0.0.71 +Version: 0.0.72 Summary: PLI: a utility library for the Python language. Home-page: http://pli.sourceforge.net/ Author: Alex A. Naanou diff --git a/pli/pattern/mixin/mapping.py b/pli/pattern/mixin/mapping.py index 78aadf1..452223d 100644 --- a/pli/pattern/mixin/mapping.py +++ b/pli/pattern/mixin/mapping.py @@ -1,7 +1,7 @@ #======================================================================= __version__ = '''0.1.01''' -__sub_version__ = '''20040820025303''' +__sub_version__ = '''20040820043927''' __copyright__ = '''(c) Alex A. Naanou 2003''' @@ -125,7 +125,7 @@ class BasicMappingProxy(AbstractMapping): #---------------------------------------------------ComparableMapping--- -##!!! REVIZE !!!## +##!!! REVIZE/REWRITE !!!## class ComparableMapping(BasicMapping): ''' this defines the basic comparability interface for the basic mapping. @@ -135,7 +135,9 @@ class ComparableMapping(BasicMapping): ''' ''' ##!!! ugly !!!## - return cmp(dict([ (k, self[k]) for k in self ]), dict([ (k, other[k]) for k in other ])) + if hasattr(other, '__iter__') and hasattr(other, '__getitem__'): + return cmp(dict([ (k, self[k]) for k in self ]), dict([ (k, other[k]) for k in other ])) + return -1 def __eq__(self, other): ''' diff --git a/pli/pattern/store/store.py b/pli/pattern/store/store.py index df3f35d..fe02631 100644 --- a/pli/pattern/store/store.py +++ b/pli/pattern/store/store.py @@ -1,7 +1,7 @@ #======================================================================= __version__ = '''0.0.47''' -__sub_version__ = '''20040803235503''' +__sub_version__ = '''20040820033403''' __copyright__ = '''(c) Alex A. Naanou 2003''' @@ -11,6 +11,8 @@ from __future__ import generators import time import re +import pli.pattern.mixin.mapping as mapping + #----------------------------------------------------------------------- #---------------------------------------------------isstorecompatible--- @@ -37,7 +39,8 @@ def isstoredtype(store, name): # argument... # TODO rename to MappingBaseStore... # -class BaseStore(object): +##class BaseStore(mapping.Mapping, mapping.BasicMappingProxy): +class BaseStore(mapping.MappingWithMethods, mapping.BasicMappingProxy): ''' ''' # if this is true strict object type checking will be enabled... @@ -49,6 +52,8 @@ class BaseStore(object): # name... (attrname = __typenameformat___ % .__name__) __typenameformat___ = '%s' + __source_attr__ = '_store_data' + def __init__(self, name): ''' ''' @@ -56,11 +61,11 @@ class BaseStore(object): self._store_types = {} self._store_data = {} ## super(BaseStore, self).__init__(name) - def __getitem__(self, key): - ''' - ''' -## print '>>>', self.__name__, id(self) - return self._store_data[key] + # dict minimal methods: +## def __getitem__(self, key): +## ''' +## ''' +## return self._store_data[key] def __setitem__(self, key, obj): ''' ''' @@ -73,41 +78,43 @@ class BaseStore(object): # add the object if self.__strictnames__ and key in self._store_data: raise TypeError, 'an object with the id "%s" already exists.' % key - self._store_data[key] = obj - def __delitem__(self, key): - ''' - ''' - del self._store_data[key] - def __contains__(self, key): - ''' - ''' - return key in self._store_data - def __iter__(self): - ''' - ''' -## for n in self._store_data: -## yield n - return self._store_data.__iter__() - def iterkeys(self): - ''' - ''' - return self._store_data.iterkeys() - def itervalues(self): - ''' - ''' - return self._store_data.itervalues() - def iteritems(self): - ''' - ''' - return self._store_data.iteritems() - def keys(self): - ''' - ''' - return self._store_data.keys() - def values(self): - ''' - ''' - return self._store_data.values() +## self._store_data[key] = obj + super(BaseStore, self).__setitem__(key, obj) +## def __delitem__(self, key): +## ''' +## ''' +## del self._store_data[key] +## def __iter__(self): +## ''' +## ''' +## return self._store_data.__iter__() + # dict secondary methods: + # NOTE: might be good to un comment these... +## def __contains__(self, key): +## ''' +## ''' +## return key in self._store_data +## def iterkeys(self): +## ''' +## ''' +## return self._store_data.iterkeys() +## def itervalues(self): +## ''' +## ''' +## return self._store_data.itervalues() +## def iteritems(self): +## ''' +## ''' +## return self._store_data.iteritems() +## def keys(self): +## ''' +## ''' +## return self._store_data.keys() +## def values(self): +## ''' +## ''' +## return self._store_data.values() + # BaseStore specific methods... def add_object_type(self, otype): ''' ''' diff --git a/pli/pattern/store/storeproxy.py b/pli/pattern/store/storeproxy.py new file mode 100644 index 0000000..e346775 --- /dev/null +++ b/pli/pattern/store/storeproxy.py @@ -0,0 +1,64 @@ +#======================================================================= + +__version__ = '''0.0.01''' +__sub_version__ = '''20040821210101''' +__copyright__ = '''(c) Alex A. Naanou 2003''' + + +#----------------------------------------------------------------------- + +import pli.pattern.store as store + + +#----------------------------------------------------------------------- + +SAFE_TRNSFER=0 +FORCE_OVERWRITE=1 +# this stop the overwriting of data in the target backend... +IGNORE_OVERWRITE=2 + +class BaseStoreProxy(store.BaseStore): + ''' + ''' +## def __init__(self, name, backend=None): +## ''' +## ''' +## super(BaseStoreProxy, self).__init__(name) +## if backend != None: +## self._store_data = backend + def _setbackend(self, backend): + ''' + ''' + self._store_data = backend + + def changebackend(self, backend, flags=SAFE_TRNSFER): + ''' + this will transfer data from the current backend to the new. + ''' + # check for store intersections... + from_keys = self.keys() + to_keys = backend.keys() + if len(from_keys) + len(to_keys) != len(dict.fromkeys(from_keys + to_keys)): + if flags == 0: + ##!!! + raise '' + for k, v in self.iteritems(): + if k in backend: + # sanity check... + if flags & SAFE_TRNSFER: + ##!!! fatal... (data changed during transfer) + raise TypeError, 'data changed during transfer of store %s to %s.' % (self, backend) + if flags & FORCE_OVERWRITE: + pass + elif flags & IGNORE_OVERWRITE: + continue + backend[k] = v + self._setbackend(backend) + + + + + + +#======================================================================= +# vim:set ts=4 sw=4 nowrap : -- 2.11.4.GIT