a
    i‚j£	  ã                   @   sR   d Z ddlZe e¡ZG dd„ deƒZdd„ ZG dd„ deƒZG d	d
„ d
eƒZ	dS )zFSimple plug-in mechanism to provide replacement for setuptools pluginsé    Nc                   @   sJ   e Zd ZdZdZddd„Zdd„ Zedd	„ ƒZed
d„ ƒZ	edd„ ƒZ
dS )ÚPluginz#Base class for plugins to be loadedFNc                 K   s.   || _ || _|| _| j | ¡ | j |¡ dS )zRegister the plug-inN)ÚnameÚimport_pathÚcheckÚregistryÚappendÚ__dict__Úupdate)Úselfr   r   r   Únamed© r   úL/home/ghrups/robot-bench/.venv/lib/python3.9/site-packages/OpenGL/plugins.pyÚ__init__   s
    zPlugin.__init__c              
   C   sH   zt | jƒW S  tyB } zt d| j|¡ W Y d}~dS d}~0 0 dS )z*Attempt to load and return our entry pointzUnable to import %s: %sN)ÚimportByNamer   ÚImportErrorÚlogÚwarning)r
   Úerrr   r   r   Úload   s    ýzPlugin.loadc                 G   s   dS )z7Match to return the plugin which is appropriate to loadNr   )ÚclsÚargsr   r   r   Úmatch   s    zPlugin.matchc                 C   s   | j dd… S )z#Iterate over all registered pluginsN)r   )r   r   r   r   Úall   s    z
Plugin.allc                 C   s$   |   ¡ D ]}|j|kr|  S qd S )N)r   r   )r   r   Úinstancer   r   r   Úby_name!   s    

zPlugin.by_name)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Zloadedr   r   Úclassmethodr   r   r   r   r   r   r   r      s   


r   c                 C   s<   |   d¡}|dd… }|d }td |¡i i |ƒ}t||ƒS )zImport a class by nameÚ.Néÿÿÿÿ)ÚsplitÚ
__import__ÚjoinÚgetattr)ZfullNamer   Z
moduleNameZ	classNameÚmoduler   r   r   r   (   s
    
r   c                   @   s    e Zd ZdZg Zedd„ ƒZdS )ÚPlatformPluginz"Platform-level plugin registrationc                 C   s>   |D ]&}| j D ]}|j|kr|    S qqtd|f ƒ‚dS )zkDetermine what platform module to load
        
        key -- (sys.platform,os.name) key to load 
        z$No platform plugin registered for %sN)r   r   ÚKeyError)r   ÚkeyÚpossibleÚpluginr   r   r   r   4   s
    

zPlatformPlugin.matchN©r   r   r   r   r   r   r   r   r   r   r   r'   1   s   r'   c                   @   s    e Zd ZdZg Zedd„ ƒZdS )ÚFormatHandlerz Data-type storage-format handlerc                 C   s@   d|j |jf }| jD ]$}t|ddƒ}|r||v r|  S qdS )z2Lookup appropriate handler based on value (a type)z%s.%sr   r   N)r   r   r   r%   )r   Úvaluer)   r+   Úsetr   r   r   r   D   s    

zFormatHandler.matchNr,   r   r   r   r   r-   A   s   r-   )
r   ÚloggingÚ	getLoggerr   r   Úobjectr   r   r'   r-   r   r   r   r   Ú<module>   s   
#	