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.4.0.tar.gz (121.1 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.4.0-py3-none-any.whl (89.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: wally_dev-0.4.0.tar.gz
  • Upload date:
  • Size: 121.1 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.4.0.tar.gz
Algorithm Hash digest
SHA256 8b7e04aae8c36b1fd32be8021ad5ef4f13a6fb588e34b6cd7dff1f6c0602d271
MD5 592de80c186c980b83a562471380032c
BLAKE2b-256 072c6990335f9b77ab052e908c912f8ef36f55f6a04914ff627552e3f60a55b6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: wally_dev-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 89.0 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.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d3993de1ca187d1c1c403707c86dbdc96f7f23c2c108fcdee62f3a7694cb50f6
MD5 f2dee1047c9e71457b7ab3b2e3aeab65
BLAKE2b-256 a85ef1ac7494d63449db60a358fd53779f231cbdb1358a56d7ed249d5b1da9b3

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