î
æ^Q\b  ã               @   sL   d  d l  m Z d  d l Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z d S)é    )Úabsolute_importNc                   s:   e  Z d  Z d Z ‡  f d d †  Z ‡  f d d †  Z ‡  S)Ú	Singletonz›
    Singleton metaclass
    Based on Python Cookbook 3rd Edition Recipe 9.13
    Only one instance of a class can exist. Does not work with __slots__
    c                s&   t  t |  ƒ j | | Ž  d  |  _ d  S)N)Úsuperr   Ú__init__Ú_Singleton__instance)ÚselfÚargsÚkw)Ú	__class__© úN/var/www/dbchiro/venv/lib/python3.4/site-packages/openpyxl/compat/singleton.pyr      s    zSingleton.__init__c                s7   |  j  d  k r0 t t |  ƒ j | | Ž  |  _  n  |  j  S)N)r   r   r   Ú__call__)r   r   r	   )r
   r   r   r      s    !zSingleton.__call__)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   )r
   r   r      s   r   c                   s:   e  Z d  Z d Z ‡  f d d †  Z ‡  f d d †  Z ‡  S)ÚCachedz™
    Caching metaclass
    Child classes will only create new instances of themselves if
    one doesn't already exist. Does not work with __slots__
    c                s,   t  t |  ƒ j | | Ž  t j ƒ  |  _ d  S)N)r   r   r   ÚweakrefÚWeakValueDictionaryÚ_Cached__cache)r   r   r	   )r
   r   r   r      s    zCached.__init__c                sC   | |  j  k r |  j  | St t |  ƒ j | Œ  } | |  j  | <| S)N)r   r   r   r   )r   r   Úobj)r
   r   r   r   #   s
    zCached.__call__)r   r   r   r   r   r   r   r   )r
   r   r      s   r   )Ú
__future__r   r   Útyper   r   r   r   r   r   Ú<module>   s   