ó
( È\c           @   sC   d  d l  m Z d  d l m Z d „  Z d e f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   ABCMeta(   t   gettextc         C   s=   t  t ƒ d } t  |  ƒ | k r9 |  j t ƒ r9 |  | S|  S(   Ni   (   t   lent   __package__t
   startswith(   t   module_namet   length(    (    s8   /usr/share/pgadmin4/web/pgadmin/utils/driver/registry.pyt   _decorate_cls_name   s    !t   DriverRegistryc           B   sD   e  Z d  Z d Z e ƒ  Z d „  Z e d „  ƒ Z	 e d „  ƒ Z
 RS(   së  
    class DriverRegistry(object)
        Every Driver will be registered automatically by its module name.

        This uses factory pattern to genreate driver object based on its name
        automatically.

    Class-level Methods:
    ----------- -------
    * __init__(...)
      - It will be used to register type of drivers. You don't need to call
        this function explicitly. This will be automatically executed, whenever
        we create class and inherit from BaseDriver, it will register it as
        available driver in DriverRegistry. Because - the __metaclass__ for
        BaseDriver is set it to DriverRegistry, and it will create new instance
        of this DriverRegistry per class.

    * create(type, *args, **kwargs)
      - Create type of driver object for this server, from the available
        driver list (if available, or raise exception).

    * load_drivers():
      - Use this function from init_app(...) to load all available drivers in
        the registry.
    c         C   s@   | d k r& |  t  j t | d ƒ <n  t j |  | | | ƒ d  S(   Nt
   BaseDrivert
   __module__(   R   t   registryR   R    t   __init__(   t   clst   namet   basest   d(    (    s8   /usr/share/pgadmin4/web/pgadmin/utils/driver/registry.pyR   5   s    c         K   sm   | t  j k r t  j | S| t  j k rN t  j | |   t  j | <t  j | St t d ƒ j | ƒ ƒ ‚ d  S(   Ns&   Driver '{0}' has not been implemented.(   R   t   driversR   t   NotImplementedErrorR   t   format(   R   R   t   kwargs(    (    s8   /usr/share/pgadmin4/web/pgadmin/utils/driver/registry.pyt   create?   s    c         C   sh   t  j d  k r t ƒ  t  _ n  d d l m } d d l m } x# | t t	 ƒ D] } | | ƒ } qN Wd  S(   Niÿÿÿÿ(   t   import_module(   t   find_modules(
   R   R   t   Nonet   dictt	   importlibR   t   werkzeug.utilsR   R   t   True(   R   R   R   R   t   module(    (    s8   /usr/share/pgadmin4/web/pgadmin/utils/driver/registry.pyt   load_driversN   s    N(   t   __name__R
   t   __doc__R   R   R   R   R   t   classmethodR   R   (    (    (    s8   /usr/share/pgadmin4/web/pgadmin/utils/driver/registry.pyR      s   		
N(   t   abcR    t   flask_babelexR   R   R   (    (    (    s8   /usr/share/pgadmin4/web/pgadmin/utils/driver/registry.pyt   <module>
   s   		