Changeset 19 for trunk

Show
Ignore:
Timestamp:
08/10/05 15:20:03 (7 years ago)
Author:
mj
Message:

Refactor: the namechooser adapter is more universally applicable so move it out to a 'common' module in the root.

Location:
trunk/src/chronolog
Files:
1 added
2 modified
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/src/chronolog/keys/configure.zcml

    r16 r19  
    2020    for=".domainscollection.ILocalTimeLogKeyDomainsCollection" 
    2121    provides="zope.app.container.interfaces.INameChooser" 
    22     factory=".domainscollection.DomainNameChooser" 
     22    factory="..common.IdAttributeNameChooser" 
    2323    /> 
    2424     
  • trunk/src/chronolog/keys/domainscollection.py

    r17 r19  
    1212# 
    1313############################################################################## 
    14 """A local utility domains collection """ 
     14"""A local utility domains collection""" 
    1515__docformat__ = "reStructuredText" 
    1616 
    1717from zope.interface import implements 
    18 from zope.i18nmessageid import MessageFactory 
    1918 
    2019from zope.app.container.interfaces import IContainer 
    2120from zope.app.container.btree import BTreeContainer 
    2221from zope.app.container.constraints import contains 
    23 from zope.app.container.contained import NameChooser 
    24 from zope.app.exception.interfaces import UserError 
    2522from zope.app.component.interfaces.registration import IRegisterable 
    2623 
     
    2825from chronolog.interfaces import ITimeLogKeyDomain 
    2926 
    30 _ = MessageFactory('chronolog') 
    3127 
    3228class ILocalTimeLogKeyDomainsCollection(ITimeLogKeyDomainsCollection,  
     
    4137     
    4238    implements(ILocalTimeLogKeyDomainsCollection) 
    43  
    44  
    45 class DomainNameChooser(NameChooser): 
    46     """INameChooser adapter for ILocalTimeLogKeyDomainsCollections 
    47  
    48     This NameChooser uses the id of the domain objects passed in as the name 
    49     to be used. We'll use a mockup object to demonstrate this with: 
    50      
    51      >>> class DummyDomain: 
    52      ...     def __init__(self, id='foo'): 
    53      ...         self.id = id 
    54      ... 
    55  
    56     It'll refuse any name that is not the id of the domain object 
    57     outright: 
    58  
    59      >>> from chronolog.keys.domainscollection import DomainNameChooser 
    60      >>> chooser = DomainNameChooser({}) 
    61      >>> chooser.checkName('foo', DummyDomain()) 
    62      True 
    63      >>> chooser.checkName('bar', DummyDomain()) 
    64      Traceback (most recent call last): 
    65      ... 
    66      UserError: Given name and domain id do not match! 
    67       
    68     As stated, the choosen name will be taken from the domain object itself, 
    69     and the passed in name is ignored: 
    70      
    71      >>> chooser.chooseName('bar', DummyDomain()) 
    72      'foo' 
    73       
    74     """ 
    75  
    76     def checkName(self, name, object): 
    77         if name != object.id: 
    78             raise UserError(_(u'Given name and domain id do not match!')) 
    79         return super(DomainNameChooser, self).checkName(name, object) 
    80      
    81     def chooseName(self, name, object): 
    82         name = object.id 
    83         self.checkName(name, object) 
    84         return name 
  • trunk/src/chronolog/tests.py

    r17 r19  
    1212# 
    1313############################################################################## 
    14 """Tests for timelog keys functionality""" 
     14"""Tests for chronolog functionality""" 
    1515__docformat__ = "reStructuredText" 
    1616 
     
    2121def test_suite(): 
    2222    return unittest.TestSuite(( 
    23         DocTestSuite('chronolog.keys.domainscollection'), 
     23        DocTestSuite('chronolog.common'), 
    2424    )) 
    2525