#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
"""Ce module est prévu pour héberger des factories, stockant toute
instance d'un fichier Python déjà compilé."""

class PythonFileFactory(object):
    """Cette Factory stocke l'ensemble des fichiers Python déjà instanciés.
    Elle garantit entre autre leur unicité dans le fonctionnement du plugin"""

    #: Stocke la liste des instances avec leur chemin absolu.
    files = {}

    @classmethod
    def get(cls, path):
        """Récupère l'instance si elle existe, ou renvoit None"""
        return cls.files.get(path, None)

    @classmethod
    def record(cls, path, instance):
        """Enregistre l'instance dans la Factory"""
        cls.files[path] = instance

    @classmethod
    def flush_one(cls, path):
        """Vire une instance du dico"""
        instance_to_delete = cls.files.pop(path, None)
        del instance_to_delete

    @classmethod
    def flush(cls):
        """Vire toutes les instances du dico"""
        for path in cls.files.keys():
            cls.flush_one(path)
