Пример #1
0
 def __init__(self, titulo, src, modulos, usuario=None, restringirPrivados=True):
     self._caminho = src
     self._titulo = titulo
     self._sequencia = PicSequencia(titulo)
     self._filtrar = Filtro(modulos=modulos, restringirPrivados=restringirPrivados)
     self._contextoInitical = self._contexto = ActorContext(titulo)
     self._traceAntigo = None
Пример #2
0
class DiagramaDeSequencia(object):
    """
    DiagramaDeSequencia: Criar um diagrama de sequencia apartir da execução de um código
    Exemplo:
        >>> with DiagramaDeSequencia(titulo="Diagrama de sequencia", src="caminho.svg", modulos=['Teste'])
        ...     t = Teste(actor=Gustavo)                                \ código  do
        ...     t.testando()                                            /  diagrama

Diagrama de sequencia                                 :Exemplo
         :                                                :
         :   Teste(actor=Gustavo)                         :
        | |--------------------->:                        :
        | |      «create»       | |                       :
        | |                     | |___inicializeTest()    :
        | |                     | |   |                   :
        | |                     || |<-Ꞌ                   :
        | |                     || |     getExample()     :
        | |                     || |--------------------->:
        | |     testando()       :                        :
        | |-------------------->| |                       :

    """

    def __init__(self, titulo, src, modulos, usuario=None, restringirPrivados=True):
        self._caminho = src
        self._titulo = titulo
        self._sequencia = PicSequencia(titulo)
        self._filtrar = Filtro(modulos=modulos, restringirPrivados=restringirPrivados)
        self._contextoInitical = self._contexto = ActorContext(titulo)
        self._traceAntigo = None

    def trace(self, frame, tipoDeChamada, retorno):
            if self._traceAntigo:
                self._traceAntigo(frame, tipoDeChamada, _)

            sinal = Sinal(frame)
            if self._filtrar(sinal):

                if tipoDeChamada == 'call':
                    self._contexto = self._contexto.menssagem(sinal)
                elif tipoDeChamada == "return" and retorno is not None:
                    self._contexto.feedback(retorno)

    def gravar(self):
        self._traceAntigo = sys.getprofile()
        sys.setprofile(self.trace)
        return self

    def __enter__(self):
        self.gravar()

    def __exit__(self, type, traceback, msg):
        self.parar()

    def parar(self):
        sys.setprofile(self._traceAntigo)
        self._contextoInitical.rederizar(self._sequencia)
        self._criarGrafico()

    def __repr__(self):
        return '<Diagrama de Sequencia: %s src(%s)>' %(self._titulo, self._caminho)

    def _criarGrafico(self):
        pic = self._sequencia.picDiagrama()
        pic2plot(pic, self._caminho)