Package platecom :: Package utils :: Package content :: Module multilingual :: Class ContentTypesMultilingualPatcher
[hide private]
[frames] | no frames]

Class ContentTypesMultilingualPatcher

source code

object --+
         |
        ContentTypesMultilingualPatcher

Utility para aplicar los parches de soporte multilenguaje
a un ContentType en particular

Instance Methods [hide private]
 
patch(self, klass, replace_accessors=False)
Incorpora los metodos con fallback multi-lenguaje
source code
 
unpatch(self, klass)
Remueve los metodos con fallback multi-lenguaje
source code

Inherited from object: __delattr__, __getattribute__, __hash__, __init__, __new__, __reduce__, __reduce_ex__, __repr__, __setattr__, __str__

Properties [hide private]

Inherited from object: __class__

Method Details [hide private]

patch(self, klass, replace_accessors=False)

source code 
Incorpora los metodos con fallback multi-lenguaje

    >>> import string
    >>> from Products.Archetypes.atapi import *
    >>> from Products.ATContentTypes.content.base import ATCTContent
    >>> from icsemantic.core.content.multilingual import ContentTypesMultilingualPatcher
    >>> from icsemantic.core.interfaces import IMultilingualContentMarker, IMultilingualGettersMarker

    >>> class MyContent(ATCTContent):
    ...     portal_type = meta_type = 'MyContent'
    ...     schema = Schema((
    ...         StringField('some_field', storage=AnnotationStorage()),
    ...         StringField('_other_field'),
    ...         ))

    >>> registerType(MyContent, 'Archetypes')

    >>> hasattr(MyContent, 'getSome_field')
    True
    >>> hasattr(MyContent, 'getMultilingualSome_field')
    False

    >>> original_getter = getattr(MyContent, 'getSome_field')
    >>> ccpatcher = ContentTypesMultilingualPatcher()
    >>> ccpatcher.patch(MyContent)

    >>> IMultilingualContentMarker.implementedBy(MyContent)
    True
    >>> IMultilingualGettersMarker.implementedBy(MyContent)
    False
    >>> hasattr(MyContent, 'getSome_field')
    True
    >>> hasattr(MyContent, 'getMultilingualSome_field')
    True
    >>> original_getter == getattr(MyContent, 'getSome_field')
    True

    >>> ccpatcher.unpatch(MyContent)
    >>> IMultilingualContentMarker.implementedBy(MyContent)
    False
    >>> IMultilingualGettersMarker.implementedBy(MyContent)
    False
    >>> ccpatcher.patch(MyContent, replace_accessors=True)

    >>> IMultilingualContentMarker.implementedBy(MyContent)
    True
    >>> IMultilingualGettersMarker.implementedBy(MyContent)
    True
    >>> hasattr(MyContent, 'getSome_field')
    True
    >>> hasattr(MyContent, 'getMultilingualSome_field')
    True
    >>> original_getter == getattr(MyContent, 'getSome_field')
    False
    >>> getattr(MyContent, 'getSome_field') == getattr(MyContent, 'getMultilingualSome_field')
    True
    >>> original_getter == getattr(MyContent, '_old_getSome_field')
    True

Y ahora pruebo con basura...
    >>> ccpatcher.patch('pepe')
    Traceback (most recent call last):
    ...
    AttributeError...

unpatch(self, klass)

source code 
Remueve los metodos con fallback multi-lenguaje

>>> import string
>>> from Products.Archetypes.atapi import *
>>> from Products.ATContentTypes.content.base import ATCTContent
>>> from icsemantic.core.content.multilingual import ContentTypesMultilingualPatcher

>>> class MyContent(ATCTContent):
...     portal_type = meta_type = 'MyContent'
...     schema = Schema((
...         StringField('some_field', storage=AnnotationStorage()),
...         StringField('_other_field'),
...         ))

>>> registerType(MyContent, 'Archetypes')

>>> hasattr(MyContent, 'getSome_field')
True
>>> hasattr(MyContent, 'getMultilingualSome_field')
False

>>> ccpatcher = ContentTypesMultilingualPatcher()
>>> ccpatcher.patch(MyContent)

>>> hasattr(MyContent, 'getSome_field')
True
>>> hasattr(MyContent, 'getMultilingualSome_field')
True

>>> ccpatcher = ContentTypesMultilingualPatcher()
>>> ccpatcher.unpatch(MyContent)

>>> hasattr(MyContent, 'getSome_field')
True
>>> hasattr(MyContent, 'getMultilingualSome_field')
False