Skip to main content

CLI para desenvolvimento local de casos de teste de acessibilidade da plataforma Wally

Project description

Wally Dev CLI

PyPI version Python versions Pipeline

Wally Dev é uma ferramenta de linha de comando (CLI) para desenvolvimento local de casos de teste de acessibilidade da plataforma Wally.

🚀 Instalação

Opção 1: pipx (Recomendado)

# Instalar pipx (se necessário)
sudo apt install pipx
pipx ensurepath

# Instalar wally-dev
pipx install wally-dev

Opção 2: pip com virtual environment

# Criar e ativar virtual environment
python3 -m venv ~/.venvs/wally-dev
source ~/.venvs/wally-dev/bin/activate

# Instalar
pip install wally-dev

Opção 3: pip direto (sistemas sem proteção PEP 668)

pip install wally-dev

Requisitos

  • Python 3.9 ou superior
  • Conta ativa na plataforma Wally

📋 Comandos Disponíveis

Comando Descrição
wally-dev login Autenticar na plataforma Wally
wally-dev logout Remover credenciais e desbloquear normas
wally-dev status Mostrar status do workspace local
wally-dev norms list Listar normas disponíveis
wally-dev rules list Listar regras de uma norma
wally-dev checkout Baixar casos de teste para desenvolvimento
wally-dev run Executar casos de teste localmente
wally-dev push Enviar alterações para o servidor
wally-dev upgrade Verificar e instalar atualizações

🔐 Autenticação

# Login interativo
wally-dev login

# Com parâmetros
wally-dev login --username user@example.com --org-id <organization-id>

🔄 Atualizações

O comando upgrade verifica e instala a versão mais recente do wally-dev automaticamente.

# Atualizar interativamente (pergunta antes de instalar)
wally-dev upgrade

# Verificar se há nova versão (exit code 1 = upgrade disponível)
wally-dev upgrade --check

# Atualizar automaticamente sem confirmação (ideal para CI/CD)
wally-dev upgrade --yes

# Atualizar para versão específica
wally-dev upgrade --version 0.2.0

Detecção automática: O comando detecta se você instalou via pipx ou pip e usa o método correto para atualizar.

Exit Codes:

Código Significado
0 Sucesso (atualizado ou já está na última versão)
1 Upgrade disponível (com --check)
7 Erro durante o upgrade

📦 Workflow de Desenvolvimento

1. Listar normas disponíveis

wally-dev norms list

Saída:

╭────────────────── 📋 Normas (3) ──────────────────╮
│ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ │
│ ┃ ID                       ┃ Nome              ┃ │
│ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ │
│ │ 6954434ffdd23615c0e5d85d │ NBR 17225         │ │
│ │ 695c46a91dd6a5bae0e4863b │ Community         │ │
│ └──────────────────────────┴───────────────────┘ │
╰───────────────────────────────────────────────────╯

2. Fazer checkout de uma norma

wally-dev checkout --norm-id <norm-id>

Isso irá:

  • Bloquear a norma no servidor (impede edições simultâneas)
  • Baixar todos os casos de teste e exemplos para ./workspace/

3. Estrutura do Workspace

./workspace/
  <norm-id>/
    testCases/
      <testcase-id>/
        testcase.json     # Metadados do caso de teste
        code/
          finder.py       # Função que encontra elementos
          validator.py    # Função que valida elementos
        examples/
          compliant/
            example.html  # HTML que deve passar
          non-compliant/
            example.html  # HTML que deve falhar

4. Desenvolver o caso de teste

finder.py

from bs4 import BeautifulSoup

def find(html_content: str):
    """
    Encontra elementos HTML para validação.
    
    Args:
        html_content: String com o HTML a ser analisado
        
    Yields:
        Elementos encontrados para validação
    """
    soup = BeautifulSoup(html_content, "html.parser")
    for img in soup.find_all("img"):
        yield img

validator.py

def validate(element) -> bool:
    """
    Valida se um elemento está em conformidade.
    
    Args:
        element: Elemento HTML encontrado pelo finder
        
    Returns:
        True se o elemento está em conformidade, False caso contrário
    """
    alt = element.get("alt", "")
    return bool(alt and alt.strip())

5. Executar testes localmente

# Executar todos os exemplos de um caso de teste
wally-dev run --testcase <testcase-id>

# Executar um exemplo específico
wally-dev run --testcase <testcase-id> --example compliant/example.html

# Modo debug (mostra elementos encontrados e validações)
wally-dev run --testcase <testcase-id> --debug

Saída com --debug:

╭───────────────────── 🔍 Debug Output ─────────────────────╮
│ Execução bem sucedida                                     │
│                                                           │
│ Elementos encontrados: 2                                  │
│ Tempo finder: 0.35ms                                      │
│ Tempo total: 0.40ms                                       │
╰───────────────────────────────────────────────────────────╯

📋 Elementos e Validações:
┏━━━┳━━━━━━━┳━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ # ┃ Linha ┃ Tag ┃ validate() ┃ Snippet                     ┃
┡━━━╇━━━━━━━╇━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ 0 │    10 │ img │   ✓ True   │ <img alt="" src="img.jpg"/> │
│ 1 │    12 │ img │   ✓ True   │ <img aria-hidden="true"/>   │
└───┴───────┴─────┴────────────┴─────────────────────────────┘

6. Enviar alterações

wally-dev push --norm-id <norm-id>

🧪 Lógica de Validação

Os casos de teste seguem a convenção:

  • Exemplos compliant/: Todos os elementos encontrados pelo finder devem retornar True no validator
  • Exemplos non-compliant/: Pelo menos um elemento deve retornar False no validator

⚙️ Configuração

A CLI armazena configurações em ~/.config/wally-dev/.wally-dev.json:

{
  "access_token": "...",
  "refresh_token": "...",
  "user_email": "user@example.com",
  "organization_id": "...",
  "backend_url": "https://api.wally.equallyze.com/backend/services/v0.0.1"
}

Variáveis de Ambiente

Variável Descrição Default
WALLY_DEV_BACKEND_URL URL da API backend https://api.wally.equallyze.com/...
WALLY_DEV_CONFIG_DIR Diretório de configuração ~/.config/wally-dev

🛠️ Desenvolvimento

Instalação para desenvolvimento

git clone https://gitlab.com/AcessibilidadeParaTodos/wally/wally-dev.git
cd wally-dev

# Criar virtual environment
python3 -m venv .venv
source .venv/bin/activate

# Instalar em modo editável com dependências de dev
pip install -e ".[dev]"

Executar testes

pytest
pytest --cov=wally_dev --cov-report=html

Formatação e linting

black wally_dev tests
isort wally_dev tests
ruff check wally_dev tests
mypy wally_dev

📄 Licença

Este software é propriedade da Equallyze Tecnologia LTDA. Todos os direitos reservados. Consulte o arquivo LICENSE para mais detalhes.

🔗 Links

🤝 Suporte

Para suporte, abra uma issue no GitLab ou entre em contato através de contato@equallyze.com.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wally_dev-0.2.0.tar.gz (106.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wally_dev-0.2.0-py3-none-any.whl (85.8 kB view details)

Uploaded Python 3

File details

Details for the file wally_dev-0.2.0.tar.gz.

File metadata

  • Download URL: wally_dev-0.2.0.tar.gz
  • Upload date:
  • Size: 106.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for wally_dev-0.2.0.tar.gz
Algorithm Hash digest
SHA256 c5c0d40e99bbfab74fe93aacf3890a8498ab47e692ac82630c56ae7e5c9c4489
MD5 18992261b3a5110e1865d31b44816774
BLAKE2b-256 a5a57321bdc4db54cf40ffedd9bc11e6c04bc19195f2bc3d7e40ee770f60f5e3

See more details on using hashes here.

File details

Details for the file wally_dev-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: wally_dev-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 85.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for wally_dev-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 be6ba1f773e450be66ee8d125393053b55ce052496bca783d22b46c2744ea991
MD5 b6a5511810357d3ebca62d2253fa5f58
BLAKE2b-256 b659a8df69be6882589965d6bfb042b76a9c8dc1a8a7576980863217a3dc15fc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page