Executando verificação de segurança...
1

Library para tracing de objetos em python3 🐍

Fala, galera, tudo bem?

Ao longo da minha jornada no mundo do desenvolvimento, tive que lidar com muito código mal escrito de outras pessoas, principalmente códigos em Python, que, sendo uma linguagem muito popular, até mesmo em grandes empresas, geram códigos difíceis de decifrar.

Para tentar resolver um pouco desse problema, decidi criar minha primeira biblioteca, que foi publicada no PyPI, chamada Outliner.

O Outliner é uma biblioteca de tracing de código cuja proposta é simples: mostrar ao usuário o fluxo de invocação de objetos em Python.

Vamos utilizar o seguinte código de exemplo:

`
class test:

 def __init__(self) -> None:
      self.func1()

 def func2(self):
      print("Hello, world.")
      return

 def func1(self):
      self.func3()
      return

 def func3(self):
      self.func5()
      return

 def func4(self):
      self.func2()
      return

 def func5(self):
      self.func4()
      return

`

O outliner irá trazer o output:

(

Hello, world.
init

│──1. func1

│──2. func3

│──3. func5

│──4. func4

│──5. func2

Ou podera mostrar os dados de forma mais detalhada:

Hello, world.
('init', {'call': 1, 'return': 1, 'line': 1})
('func1', {'call': 1, 'return': 1, 'line': 2})
('func3', {'call': 1, 'return': 1, 'line': 2})
('func5', {'call': 1, 'return': 1, 'line': 2})
('func4', {'call': 1, 'return': 1, 'line': 2})
('func2', {'call': 1, 'return': 1, 'line': 2})

*Note que, mesmo que já tenha sido lançado no pypi, ainda existe trabalho a fazer nele (principalmente no tracing em si). *

Venho aqui para divulgar o projeto e achar pessoas que queiram contribuir nele.

Github: https://github.com/LucasAndradeDias/outliner

Feedback é sempre bem-vindo.

Carregando publicação patrocinada...
2

E aí Lucas! 😄

Cara, que ideia massa essa do Outliner! Sabe quantas vezes eu me peguei tentando entender o fluxo de um código Python e pensei "poxa, bem que podia ter uma ferramenta pra me ajudar nisso"? Muitas vezes, meu chapa!

O output que você mostrou é bem intuitivo e vai ajudar pra caramba, principalmente pra galera que tá pegando projetos legados ou tentando entender um código que não foi bem documentado. E o fato de ter uma opção mais detalhada é um plus bem legal!

Já dei uma olhada rápida no seu repo no GitHub e vou dar uma fuçada mais a fundo depois. Quem sabe não rola uma contribuição? 😉

Só uma coisinha: dá uma revisada no código de exemplo que você postou, parece que teve uns probleminhas de formatação ali. E, claro, como você mesmo disse, ainda tem trabalho a fazer, mas a ideia principal tá bem sólida.

Vou ficar de olho no projeto e, quem sabe, a gente não troca uma ideia sobre melhorias e features futuras. Parabéns pela iniciativa e continue assim, meu! 🚀🐍

Abração!

class Test:
    def __init__(self) -> None:
        self.func1()

    def func2(self):
        print("Hello, world.")
        return

    def func1(self):
        self.func3()
        return

    def func3(self):
        self.func5()
        return

    def func4(self):
        self.func2()
        return

    def func5(self):
        self.func4()
        return