This is an old revision of the document!
Semana 49 de 2024
Capacitação
- AWS
- Início do curso “AWS Cloud Technical Essentials”.
- Criação de conta no https://repost.aws. O re:Post é um fórum para perguntas sobre o AWS.
Pesquisa
- Correção automática de programas
- Um problema que tive recentemente foi quanto a redefinição de módulos e funções da biblioteca básica do Python.
- Normalmente, poderíamos usar dublês (mocks) para sobrepor o comportamento de alguma função ou método de uma classe. No entanto, isso não é tecnicamente possível (ao menos com as ferramentas atuais) para os módulos e funções da biblioteca básica/padrão do Python (builtin).
- Mais especificamente, eu precisava sobreescrever o comportamento da função
time
do módulotime
. - Existe mais um adendo de que, por ser para uma disciplina introdutório, eu não queria criar um objeto ou forçar uma abstração além daquilo que os estudantes, que estão aprendendo o básico da programação, precisam.
- Em tese, seria suficiente criar um arquivo
'time.py
' com a função em questão. Isso seria verdade se, no ambiente de avaliação automática que utilizo, o CodeRunner do Moodle, isso fosse permitido. - Assim, resolvi ser criativo e verificar como ocorre o carregamento dos módulos e se existia algo que eu pudesse trabalhar naquele nível. Eis que os problemas surgem
- A implementação padrão do Python, CPython, está disponível de forma aberta em https://github.com/python/cpython. Outro aspecto positivo é que, ao contrário da expectativa, o carregamento de módulos é realizado por código escrito em Python ao invés de código C. O módulo
importlib
possui tudo que é necessário: https://github.com/python/cpython/blob/main/Lib/importlib/. Não é um módulo bonito e fácil de ler, mas servirá como inspiração para uma solução. - Um desenvolvedor criou um módulo ''module-found'' que, usando o
importlib
, faz algo bem legal: ele utiliza uma aplicação de modelo de linguagem (LLM), mais precisamente um modelo da OpenAI, para gerar automaticamente o código em Python, considerando uma descrição informada como parâmetro, referente a uma função de um módulo que não existem em Python. Ou seja, ao invés de lançar uma exceção de que o módulo ou função não foi encontrado, ele cria automaticamente o módulo e a função necessários. No caso, eu não preciso gerar automaticamente código, dado que eu sei exatamente o que eu preciso. No entanto, o mecanismo é o mesmo (com a diferença que eu quero sobreescrever um módulo ou função existente).- Só para complementar, outro módulo Python que faz algo nessa linha, no caso instalando automaticamente (em tempo de execução) os módulos não encontrados é o ''pipimport''.
- Bom, nem tudo são flores. Por algum motivo muito estranho, alguns módulos builtins do Python não podem ser sobreescritos por esse mecanismo. Mais especificamente o módulo
time
não pode.