At 05:35 PM 6/12/03 +0200, Samuele Pedroni wrote: >Once I already sketched in a mail to the list a possible solution to this >problem. I have read a bit PyProtocols documentation and I think that my >idea is probably implementatble on top of PyProtocols. > >The idea is to allow for anonymous subsetting of protocols: > >subproto(IFile,'read'[,...]) > >there would be a cache to guarantee uniqueness of these things. >Given that in > >subproto(Protocol, method-names) > >len(method-names) would be small (<5), even if there exponatial many >subsets of method-names :) it should be tractable to automatically >register all the natural relationships: >subproto(IFile,'read','write') > subproto(IFile,'read') > >Obviously these anonymous sub-protocols would be instantiated on demand, >not when IFile is created. Hmmm... this is *very* interesting. You're right, it *could* be implemented on top of the existing PyProtocols. >The final point then is that there should be a [global?] flag to choose >between strict or loose checking for this protocols: > >ReadProto=subproto(IFile,'read') > >aobj = adapt(obj,ReadProto) > >in loose mode obj would directly adapt to ReadProto if it has a 'read' >attribute. >In strict mode some adaption path should have been registered explicitly: >e.g.: > >class MyObj: > > def read(): > ... > >declareImplementation(MyObj,[subproto(IFile,'read')]) I think this could be done by giving the 'subproto' a "loose" version. The strict version would imply the loose version, but not vice versa. There are some mechanics to work out for how the cache would work (from a reference retaining perspective). But this seems like a nice sample to add to the docs: a 'LooseSubset' Protocol subclass whose __adapt__ can do this kind of checking. Or maybe I should add a complete implementation to the next release. I've been similarly thinking about adding other demo protocol types like parameterized protocols (e.g. 'SequenceOf(otherProtocol)' or 'MappingOf(keys=keyKind,values=valueKind)'). Thank you very much for the idea!
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4