1
resposta

Qual é a função do parâmetro "context" no método "execute" da classe "TwitterOperator"?

Enquanto fazia a atividade, percebi que o parâmetro "context" não é utilizado no método, embora no exemplo ao invocar o "execute" passamos um contexto via "ti.get_template_context()". No GitHub, onde há o código final do projeto, o parâmetro também não é utilizado.

Durante o vídeo é mencionado que é um parâmetro padrão do método "execute" nos operators, mas não entendi o porquê de passarmos o contexto da TaskInstance se não é utilizado para nada no exemplo. Fiz um teste de execução sem ele e obtive o mesmo resultado.

1 resposta

Oii Randell, como você está?

Peço desculpas pela demora em obter um retorno.

Ao fazer a herança da classe BaseOperator, por padrão adquirimos o método execute e outros métodos, como o pre_execute e post_execute.

O método execute é responsável por executar o código quando o operador é chamado. Esse método, possui o parâmetro context, que é responsável por adquirir valores de configuração do operador, ou seja, quando passamos como parâmetro o método get_template_context(), da classe TaskInstance, para o método execute, o que estamos fazendo é enviando as configurações daquela DAG.

A título de curiosidade, a chamada de get_template_context() retornará algo similar ao mostrado abaixo:

{'conf': <airflow.configuration.AirflowConfigParser object at 0x1065a03d0>, 'dag': <DAG: TwitterTest>, 'ds': '2021-12-22', 'next_ds': '2021-12-23', 'next_ds_nodash': '20211223', 'prev_ds': '2021-12-21', 'prev_ds_nodash': '20211221'}

Essas informações podem ser utilizadas dentro do método context para algum fim específico, ou até mesmo para monitoramento dos dados.

A título de curiosidade, caso queira explorar o código fonte da classe BaseOperator ou sobre a criação dos Operadores, deixo abaixo algumas referências:

Observação: Os links estão em inglês, mas utilizando o recurso de tradução de páginas do próprio navegador é possível compreender.

Qualquer dúvida fico à disposição.

Abraços e bons estudos!