run-script

Nesta seção, você encontra a referência de um Hook Declarativo do tipo run-script.

Os Hooks Declarativos do tipo run-script servem para executar scripts Python, dentro de um arquivo plugin.yaml ou template.taml. Confira abaixo um exemplo de um Hook Declarativo do tipo run-script:

hooks:
  - type: run-script
    trigger: before-render
    script: path/to/script.py

O atributo script define o caminho onde o script a ser executado está na estrutura de arquivos do Template/Plugin.

É comum esperar que neste script, uma função com o nome run esteja definida. Essa função recebe como parâmetro um objeto da classe Metadata (class Metadata) do template framework e que devolve em seu retorno um Metadata, podendo ser o mesmo recebido ou outro criado pela função.

Metadata

Quando o run-script for executado e exportado usando uma classe Metadata, você pode visualizar uma estrutura como a do exemplo abaixo:

import shutil
import os
from templateframework.metadata import Metadata

def run(metadata: Metadata = None):
    inputs = metadata.all_inputs()
    inputs_local = metadata.inputs
    inputs_global = metadata.global_inputs
    inputs_computed_global = metadata.global_computed_inputs
    target_path = metadata.target_path
    component_path = metadata.component_path
    stack_path = metadata.stack_path

Confira a descrição de cada item da classe:

  • inputs = metadata.all_inputs(): Retorna todos os inputs processados do Plugin/Template;
  • inputs_local = metadata.inputs: É o dicionário dos inputs;
  • inputs_global = metadata.global_inputs: Dicionário de global inputs;
  • inputs_computed_global = metadata.global_computed_inputs: Dicionário de global conputed inputs;
  • target_path = metadata.target_path: É o path onde o Plugin/Template está sendo executado.
  • component_path = metadata.component_path: É o path do Plugin/Template (~/.stk/stacks//).
  • stack_path = metadata.stack_path: É o path da stack (~/.stk/stacks/).

Confira abaixo um exemplo simples de definição de um script, que pode ser executado como um Hook Declarativo:

from templateframework.metadata import Metadata
def run(metadata: Metadata = None):
    print("Hello from script.py!")
    return metadata

No script você pode usar a biblioteca padrão do Python 3.8 e as bibliotecas extra que são dependências do STK CLI. Confira abaixo algumas que são incluídas:

Ações Disponíveis

trigger:

Campo para definir gatilhos que informam o momento em que a execução de um script Python deve ocorrer.

before-input:
Executa o script antes de receber os parâmetros de entrada da pessoa usuária.

trigger: before-input

before-render:
Executa o script antes do Template gerar arquivos no projeto.

trigger: before-render

after-render:
Executa o script após o Template gerar arquivos no projeto.

trigger: after-render

script:

Define o caminho do script Python que será executado.

script: path/to/script.py

Para que o run-script execute um script Python, o script precisa estar definido com:

  • Uma função com o nome run.
  • A função run deve receber como parâmetro um objeto da classe Metadata do templateframework.
  • No retorno, a função deve devolver um metadata. Pode ser o mesmo metadata recebido ou outro criado pela função.

Exemplo de função run no script Python

from templateframework.metadata import Metadata
def run(metadata: Metadata = None):
    print("Hello from script.py!")
    return metadata

No script está disponível para uso a biblioteca padrão do Python 3.8 e as bibliotecas Requests e Questionary disponíveis como dependências no STK CLI.

Leia também