fidi-common-libraries


Namefidi-common-libraries JSON
Version 1.3.19 PyPI version JSON
download
home_pageNone
SummaryBibliotecas compartilhadas entre os projetos da FIDI
upload_time2025-09-03 23:05:11
maintainerNone
docs_urlNone
authorVander Loto
requires_python<4.0,>=3.11
licenseMIT
keywords fidi aws utils database logger
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # FIDI Common Libraries

<div align="center">

**Bibliotecas compartilhadas para automação e integração nos projetos FIDI**

[![Build Status](https://img.shields.io/badge/build-passing-brightgreen)](https://github.com/exolyze/FIDI-common-libraries)
[![Coverage](https://img.shields.io/badge/coverage-85%25-brightgreen)](https://github.com/exolyze/FIDI-common-libraries)
[![License](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
[![Version](https://img.shields.io/badge/version-1.3.19-blue)](docs/releases/v1.3.19.md)
[![Python](https://img.shields.io/badge/python-3.9%2B-blue)](https://python.org)

[📖 Documentação](docs/) • [🐛 Reportar Bug](https://github.com/exolyze/FIDI-common-libraries/issues) • [💡 Solicitar Feature](https://github.com/exolyze/FIDI-common-libraries/issues/new)

</div>

---

## 📋 Índice

- [Sobre o Projeto](#-sobre-o-projeto)
- [Funcionalidades](#-funcionalidades)
- [Tecnologias](#-tecnologias)
- [Pré-requisitos](#-pré-requisitos)
- [Instalação](#-instalação)
- [Uso](#-uso)
- [Configuração](#-configuração)
- [Testes](#-testes)
- [Contribuição](#-contribuição)
- [Roadmap](#-roadmap)
- [Licença](#-licença)
- [Contato](#-contato)
- [Agradecimentos](#-agradecimentos)

---

## 🎯 Sobre o Projeto

### Visão Geral

O FIDI Common Libraries é um conjunto abrangente de bibliotecas Python reutilizáveis desenvolvidas para padronizar e acelerar o desenvolvimento de soluções de automação, integração com AWS e processamento de dados nos projetos da FIDI. O projeto segue rigorosamente as melhores práticas de desenvolvimento Python, incluindo Poetry para gerenciamento de dependências, Pywinauto para automação de UI e arquitetura modular para máxima reutilização.

### Objetivos

- **Objetivo Principal**: Fornecer bibliotecas padronizadas e reutilizáveis para automação e integração
- **Objetivos Específicos**:
  - Padronizar operações de banco de dados multi-SGBD
  - Simplificar integrações com serviços AWS
  - Automatizar interfaces gráficas do sistema TOTVS RM
  - Centralizar gerenciamento de configurações e parâmetros

### Benefícios

- ✅ **Reutilização**: Componentes padronizados reduzem duplicação de código
- ✅ **Qualidade**: Cobertura de testes superior a 85% garante confiabilidade
- ✅ **Produtividade**: Acelera desenvolvimento com componentes prontos
- ✅ **Manutenibilidade**: Arquitetura modular facilita manutenção e evolução

---

## ⚡ Funcionalidades

### Principais

- 🗄️ **Módulo Data**: Operações robustas de banco de dados multi-SGBD (Oracle, PostgreSQL, SQL Server)
- ☁️ **Módulo AWS**: Clientes padronizados para SQS, SNS, Lambda, S3 com configuração centralizada
- 🖥️ **Módulo UI**: Automação completa de interfaces gráficas TOTVS RM com Pywinauto
- ⚙️ **Módulo Config**: Gerenciamento inteligente de parâmetros com cache e conversão automática

### Funcionalidades Avançadas

<details>
<summary>Clique para expandir</summary>

- **Logging Estruturado**: Sistema de logs multi-SGBD com metadados enriquecidos
- **Constantes Padronizadas**: Sistema de status com conversão automática entre tipos
- **Inspetor de UI**: Ferramenta avançada para análise e mapeamento de elementos de interface
- **Navegação Adaptativa**: Sistema inteligente de navegação em interfaces com retry automático
- **Execução de Procedures**: Classes especializadas para execução robusta de procedures de banco

</details>

---

## 🛠️ Tecnologias

### Stack Principal

| Categoria | Tecnologia | Versão | Descrição |
|-----------|------------|--------|-----------|
| **Linguagem** | Python | 3.9+ | Linguagem principal do projeto |
| **Gerenciador** | Poetry | 1.4+ | Gerenciamento de dependências e empacotamento |
| **UI Automation** | Pywinauto | 0.6+ | Automação de interfaces gráficas Windows |
| **AWS SDK** | Boto3 | 1.26+ | Integração com serviços AWS |
| **Database** | Multiple | - | Oracle (oracledb), PostgreSQL (psycopg2), SQL Server (pyodbc) |

### Dependências Principais

```toml
[tool.poetry.dependencies]
python = "^3.9"
pywinauto = "^0.6.8"
boto3 = "^1.26.0"
oracledb = "^1.4.0"
psycopg2-binary = "^2.9.0"
pyodbc = "^4.0.39"
pyyaml = "^6.0"
requests = "^2.28.0"
```

### Arquitetura

```mermaid
graph TB
    A[Aplicação Cliente] --> B[FIDI Common Libraries]
    B --> C[Módulo Data]
    B --> D[Módulo AWS]
    B --> E[Módulo UI]
    B --> F[Módulo Config]
    C --> G[Oracle/PostgreSQL/SQL Server]
    D --> H[SQS/SNS/Lambda/S3]
    E --> I[TOTVS RM]
    F --> J[Banco de Parâmetros]
```

---

## 📋 Pré-requisitos

### Requisitos do Sistema

- **Sistema Operacional**: Windows 10/11 (para automação UI)
- **Memória RAM**: 4 GB mínimo, 8 GB recomendado
- **Espaço em Disco**: 2 GB disponível
- **Rede**: Conexão com internet para dependências e AWS

### Software Necessário

- **Python**: 3.9 ou superior - [Download](https://python.org/downloads/)
- **Poetry**: 1.4 ou superior - [Instalação](https://python-poetry.org/docs/#installation)
- **Git**: Para clonagem do repositório - [Download](https://git-scm.com/)

### Verificação de Pré-requisitos

```bash
# Verificar versões instaladas
python --version
poetry --version
git --version
```

---

## 🚀 Instalação

### Instalação Rápida

```bash
# Clone o repositório
git clone https://github.com/exolyze/FIDI-common-libraries.git
cd FIDI-common-libraries

# Instale as dependências
poetry install

# Ative o ambiente virtual
poetry shell
```

### Instalação como Dependência

```bash
# Instalar via Poetry (recomendado)
poetry add git+https://github.com/exolyze/FIDI-common-libraries.git

# Ou via pip
pip install git+https://github.com/exolyze/FIDI-common-libraries.git
```

### Instalação Detalhada

<details>
<summary>Clique para ver instruções detalhadas</summary>

#### 1. Clone o Repositório

```bash
git clone https://github.com/exolyze/FIDI-common-libraries.git
cd FIDI-common-libraries
```

#### 2. Configure o Ambiente

```bash
# Instale o Poetry se não tiver
curl -sSL https://install.python-poetry.org | python3 -

# Configure o Poetry para criar venv no projeto
poetry config virtualenvs.in-project true
```

#### 3. Instale as Dependências

```bash
# Instale dependências de produção e desenvolvimento
poetry install

# Apenas dependências de produção
poetry install --no-dev
```

#### 4. Configure Variáveis de Ambiente

```bash
# Copie o arquivo de exemplo
cp .env.example .env

# Edite as configurações
nano .env
```

#### 5. Configure Hooks de Desenvolvimento

```bash
# Instale pre-commit hooks
poetry run pre-commit install

# Execute verificações
poetry run pre-commit run --all-files
```

</details>

### Verificação da Instalação

```bash
# Teste a importação
poetry run python -c "import fidi_common_libraries; print('Instalação OK!')"

# Execute os testes
poetry run pytest
```

---

## 💻 Uso

### Início Rápido

1. **Instale a biblioteca**: Siga as instruções de [instalação](#-instalação)
2. **Configure variáveis**: Defina as variáveis de ambiente necessárias
3. **Importe módulos**: Use os módulos conforme sua necessidade
4. **Explore exemplos**: Veja os casos de uso abaixo

### Guia do Usuário

### Módulo Data - Operações de Banco

```python
from fidi_common_libraries.data.db_data import (
    DatabaseConfig, DatabaseQuery, ProcessosRpaInserter, ProcessosRpaUpdater,
    ProcedureExecutor, ProcedureHelpers
)
from datetime import datetime

# Configuração do banco
db_config = DatabaseConfig.from_env('RPA_')  # Usa variáveis RPA_DB_SERVER, etc.

# Inserir registro
inserter = ProcessosRpaInserter(db_config)
registro_id = inserter.insert(
    ambiente="PRD",
    produto="FIDI-ferias",
    versao="1.0.0",
    chapa="123456",
    statusexecucao="NOVO"
)

# Consulta segura
query = DatabaseQuery(db_config)
results = query.execute_query(
    "SELECT * FROM processosrpa WHERE statusexecucao = :status",
    {"status": "NOVO"}
)

# Execução de procedures
executor = ProcedureExecutor(db_config)

# Procedure sem retorno
success = executor.execute_procedure_no_result("sp_update_status", ["ATIVO", 123])

# Procedure que retorna valor único
next_id = executor.execute_procedure_single_value("sp_get_next_id", ["processosrpa"])

# Procedure que retorna boolean
is_valid = executor.execute_procedure_boolean_result("sp_validate_record", [123])

# Procedure que retorna múltiplas linhas
reports = executor.execute_procedure_multiple_rows("sp_get_daily_reports", ["2024-01-01"])

# Helpers para procedures comuns
helpers = ProcedureHelpers(db_config)
cleanup_count = helpers.cleanup_old_data("temp_table", 30)
system_status = helpers.get_system_status()
```

### Módulo Config - Gerenciamento de Parâmetros

```python
from fidi_common_libraries.config.parametros import Parametros

# Inicializar o gerenciador de parâmetros
params = Parametros(ambiente="HML", produto="FIDI-ferias")

# Obter um parâmetro
url_api = params.get_parametro("URL_API", default="https://api.exemplo.com")

# Obter parâmetros por grupo
config_email = params.get_parametros_por_grupo("Email")

# Obter parâmetros por categorias específicas
config_ti = params.get_parametros_por_grupo("TI")  # Configurações técnicas
config_negocio = params.get_parametros_por_grupo("Negocio")  # Configurações de negócio
config_produto = params.get_parametros_por_grupo("Produto")  # Configurações do produto

# Atualizar um parâmetro
params.atualizar_parametro("TIMEOUT_API", 30)
```

### Módulo Utils - Logging e Status

```python
from fidi_common_libraries.utils.logger import registrar_log_banco
from fidi_common_libraries.constants.status import HubStatus, DBStatus, LogStatus, convert_status
import pyodbc

# Conexão com banco
conn = pyodbc.connect(connection_string)

# Registrar log (detecta automaticamente o tipo de banco)
registrar_log_banco(
    conn=conn,
    ambiente="PRD",
    produto="FIDI-ferias",
    versao="1.0.0",
    nivel="INFO",
    modulo="main",
    processo="processamento",
    acao="inicio",
    lote="LOTE001",
    mensagem="Processo iniciado",
    usuario="sistema",
    status_execucao=LogStatus.SUCESSO,
    hostname="server01",
    ip_origem="192.168.1.100"
)

# Usar constantes de status
status_db = DBStatus.NOVO
status_log = convert_status(status_db, 'db', 'log')
```

### Módulo AWS - Clientes Padronizados

```python
from fidi_common_libraries.aws.common_aws import AWSClientFactory, AWSConfig, create_message_with_metadata

# Configuração AWS
config = AWSConfig.from_env()  # Usa variáveis AWS_REGION, AWS_ACCESS_KEY_ID, etc.
factory = AWSClientFactory(config)

# Cliente SQS
sqs = factory.get_sqs_client()
message_id = sqs.send_message(
    queue_url="https://sqs.sa-east-1.amazonaws.com/123456789/my-queue",
    message={"data": "test"},
    message_attributes={"Type": {"StringValue": "ProcessData", "DataType": "String"}}
)
```

### Módulo UI - Automação de Interfaces Gráficas

```python
from fidi_common_libraries.ui import RMApplication, ElementFinder, UIInteractions, UIWaits, LocatorService

# Conectar ou iniciar aplicação RM
app = RMApplication()
app.connect_or_start()  # Conecta se existir ou inicia nova instância

# Aguardar aplicação ficar pronta
app.wait_for_application_ready(timeout=60)

# Obter janela principal ou TOTVS
main_window = app.get_main_window()
totvs_window = app.get_totvs_window()

# Navegação automática no sistema RM
from fidi_common_libraries.ui import RMNavigator, LocatorMode
navigator = RMNavigator(app.app, main_window)
success, button_text = navigator.navigate_to_element(
    {"title": "Encargos", "control_type": "TabItem"},
    {"title": "Contabilização", "control_type": "Pane"},
    {"title": "Geração dos Encargos", "control_type": "Button"}
)

# Login automatizado no sistema RM
from fidi_common_libraries.ui import RMStartLogin, LocatorService
locator_service = LocatorService("locators.yaml")
login_manager = RMStartLogin(locator_service)
success, rm_app = login_manager.start_and_login("HML", "FIDI-ferias")

# Seleção de ambiente no login
from fidi_common_libraries.ui import RMLoginEnvSelector
env_selector = RMLoginEnvSelector(login_window, locator_service)
success, alias = env_selector.select_environment("HML", "FIDI-ferias")

# Conexão dupla (win32 + uia) para análise
from fidi_common_libraries.ui import RMDualConnect
connector = RMDualConnect(output_dir="locators_output")
success, info = connector.connect_dual()

# Monitoramento de progresso de processos RM
from fidi_common_libraries.ui import RMProgressMonitor
monitor = RMProgressMonitor(parent_element, "timer_auto_id")
result = monitor.monitor_until_stable(max_timeout=300)

# Navegação adaptativa com retry automático
from fidi_common_libraries.ui import RMAdaptNavigator
navigator = RMAdaptNavigator(parent_element)
element = navigator.navigate_to_element(title="Salvar", control_type="Button")

# Fechamento de janelas e aplicação RM
from fidi_common_libraries.ui import RMClose
closer = RMClose(main_window)

# Fechar janela atual
success = closer.close_window()

# Fechar aplicação completa
success = closer.close_application()

# Navegação e seleção da Planilha Net
from fidi_common_libraries.ui import RMPlanilhaNet

# Opção 1: Processo completo automático (recomendado)
planilha_net = RMPlanilhaNet(main_window, app, "PLAN001")  # Executa automaticamente

# Opção 2: Execução manual passo a passo
planilha_net = RMPlanilhaNet(main_window)
success = planilha_net.navigate_filters(app, timeout=60)
success = planilha_net.select_planilha("PLAN001")

# Opção 3: Processo completo via método
planilha_net = RMPlanilhaNet(main_window)
success = planilha_net.execute_full_process(app, "PLAN001")

# Usar serviço de locators para elementos
locator_service = LocatorService("locators.yaml", mode=LocatorMode.PYWINAUTO)
login_criteria = locator_service.get_non_null_attributes("login_button")

# Encontrar elemento com critérios robustos
finder = ElementFinder()
button = finder.find_element(
    parent=main_window,
    primary_criteria=login_criteria,
    fallback_criteria=[{"auto_id": "btnSave"}]
)

# Interagir com elementos de forma segura
interactions = UIInteractions()
interactions.safe_click(button)

# Aguardar elementos ou condições
waits = UIWaits()
waits.wait_for_element_ready(button, timeout=10)

# Inspeção de elementos UI (ferramenta de desenvolvimento)
from fidi_common_libraries.ui.utils.inspector import UIElementInspectorAdvanced
inspector = UIElementInspectorAdvanced()
inspector.connect_to_application(window_title="TOTVS")
inspector.start_assisted_navigation()  # Navegação assistida com overlay visual

# Fechar aplicação quando terminar
app.close_application()  # Fecha apenas se foi iniciada por nós

# Configuração AWS
config = AWSConfig.from_env()  # Usa variáveis AWS_REGION, AWS_ACCESS_KEY_ID, etc.
factory = AWSClientFactory(config)

# Cliente SQS
sqs = factory.get_sqs_client()
message_id = sqs.send_message(
    queue_url="https://sqs.sa-east-1.amazonaws.com/123456789/my-queue",
    message={"data": "test"},
    message_attributes={"Type": {"StringValue": "ProcessData", "DataType": "String"}}
)

# Cliente SNS
sns = factory.get_sns_client()
sns.publish_message(
    topic_arn="arn:aws:sns:sa-east-1:123456789:my-topic",
    message=create_message_with_metadata({"event": "process_completed"}),
    subject="Processo Finalizado"
)

# Cliente Lambda
lambda_client = factory.get_lambda_client()
result = lambda_client.invoke_function(
    function_name="my-function",
    payload={"action": "process", "data": "test"}
)

# Cliente S3
s3 = factory.get_s3_client()
s3.upload_file("/path/to/file.txt", "my-bucket", "uploads/file.txt")
```

---

## ⚙️ Configuração

### Variáveis de Ambiente

```bash
# Configurações de banco de dados
RPA_DB_SERVER=servidor-banco
RPA_DB_DATABASE=nome-banco
RPA_DB_USERNAME=usuario
RPA_DB_PASSWORD=senha
RPA_DB_DRIVER=ODBC Driver 17 for SQL Server

# Configurações AWS
AWS_REGION=sa-east-1
AWS_ACCESS_KEY_ID=sua-access-key
AWS_SECRET_ACCESS_KEY=sua-secret-key

# Configurações de aplicação
APP_ENVIRONMENT=PRD
APP_PRODUTO=FIDI-comum
APP_VERSAO=1.3.13

# Configurações de UI
UI_TIMEOUT_DEFAULT=30
UI_SCREENSHOT_ON_ERROR=true
UI_LOG_LEVEL=INFO
```

### Arquivo de Configuração

```yaml
# config/ui_config.yaml
ui:
  timeouts:
    default: 30
    long: 60
    short: 10
  
  screenshots:
    enabled: true
    path: "screenshots/"
    format: "png"
  
  locators:
    mode: "pywinauto"
    file: "locators.yaml"
```

---

## 🧪 Testes

### Executar Testes

```bash
# Todos os testes
poetry run pytest

# Testes unitários
poetry run pytest tests/unit/

# Testes de integração
poetry run pytest tests/integration/

# Testes e2e
poetry run pytest tests/e2e/

# Cobertura de testes
poetry run pytest --cov=src --cov-report=html
```

### Estrutura de Testes

```
tests/
├── unit/           # Testes unitários
│   ├── test_data/
│   ├── test_aws/
│   ├── test_ui/
│   └── test_config/
├── integration/    # Testes de integração
│   ├── test_database/
│   ├── test_aws_services/
│   └── test_ui_automation/
├── e2e/           # Testes end-to-end
│   └── test_full_workflows/
├── fixtures/      # Dados de teste
└── conftest.py    # Configurações pytest
```

### Métricas de Qualidade

- **Cobertura de Testes**: ![Coverage](https://img.shields.io/badge/coverage-85%25-brightgreen)
- **Qualidade do Código**: ![Quality](https://img.shields.io/badge/quality-A-green)
- **Vulnerabilidades**: ![Security](https://img.shields.io/badge/vulnerabilities-0-green)

---

## 🤝 Contribuição

Contribuições são sempre bem-vindas! Veja como você pode ajudar:

### Como Contribuir

1. **Fork** o projeto
2. **Crie** uma branch para sua feature (`git checkout -b feature/AmazingFeature`)
3. **Commit** suas mudanças (`git commit -m 'Add some AmazingFeature'`)
4. **Push** para a branch (`git push origin feature/AmazingFeature`)
5. **Abra** um Pull Request

### Diretrizes

- Siga as diretrizes estabelecidas em `.amazonq/rules/`
- Mantenha a cobertura de testes acima de 85%
- Execute os pre-commit hooks antes de fazer commit
- Atualize a documentação conforme necessário
- Use mensagens de commit descritivas

### Tipos de Contribuição

- 🐛 **Bug Reports**: Reporte bugs usando [GitHub Issues](https://github.com/exolyze/FIDI-common-libraries/issues)
- 💡 **Feature Requests**: Sugira novas funcionalidades
- 📖 **Documentação**: Melhore a documentação
- 🧪 **Testes**: Adicione ou melhore testes
- 🎨 **Refatoração**: Melhore a qualidade do código

### Qualidade de Código

```bash
# Formatação automática
poetry run black src/ tests/

# Linting
poetry run flake8 src/ tests/

# Verificação de tipos
poetry run mypy src/

# Análise de segurança
poetry run bandit -r src/
```

---

## 🗺️ Roadmap

### Versão Atual: 1.3.19

- ✅ Módulo Data com suporte multi-SGBD
- ✅ Módulo AWS com clientes padronizados
- ✅ Módulo UI com automação TOTVS RM completa
- ✅ Sistema de configuração e parâmetros
- ✅ Documentação padronizada com templates
- ✅ RM Single Connect para conexões robustas

### Próximas Versões

#### v1.4.0 - Q2 2024
- 🔄 Suporte a MongoDB no módulo Data
- 🔄 Integração com Azure Services
- 📋 Módulo de relatórios automatizados
- 📋 Dashboard de monitoramento

#### v1.5.0 - Q3 2024
- 📋 Suporte a automação web (Selenium)
- 📋 Integração com APIs REST genéricas
- 💡 Sistema de cache distribuído
- 💡 Métricas e observabilidade

### Backlog

- 💡 Suporte a containers Docker
- 💡 Integração com Kubernetes
- 🔬 Machine Learning para automação inteligente
- 🔬 Análise preditiva de falhas

Veja o [Product Backlog](docs/PRODUCT_BACKLOG.md) para mais detalhes.

---

## 📊 Status do Projeto

### Métricas

| Métrica | Valor |
|---------|-------|
| **Linhas de Código** | ~15.000 |
| **Módulos** | 5 principais |
| **Classes** | 25+ |
| **Cobertura de Testes** | 85%+ |
| **Versão Atual** | 1.3.19 |

### Atividade Recente

- 📅 **Último Release**: 03/09/2025 - v1.3.19
- 🔄 **Último Commit**: 03/09/2025
- 🐛 **Issues Resolvidas**: 2 esta semana
- 🚀 **Features Adicionadas**: 0 este mês

---

## 📄 Licença

Este projeto está licenciado sob a Licença MIT - veja o arquivo [LICENSE](LICENSE) para detalhes.

### Resumo da Licença

- ✅ **Uso Comercial**: Permitido
- ✅ **Modificação**: Permitida
- ✅ **Distribuição**: Permitida
- ✅ **Uso Privado**: Permitido
- ❌ **Responsabilidade**: Não assumida
- ❌ **Garantia**: Não fornecida

---

## 📞 Contato

### Equipe de Desenvolvimento

- **Tech Lead & Maintainer**: Vander Loto - [vander.loto@datametria.io]
- **Development Team**: DATAMETRIA Engineering - [dev@datametria.io]
- **Product Owner**: DATAMETRIA - [produto@datametria.io]

### Canais de Suporte

- 📧 **Email**: [vander.loto@datametria.io]
- 🐛 **Issues**: [GitHub Issues](https://github.com/exolyze/FIDI-common-libraries/issues)
- 📖 **Documentação**: [docs/](docs/)

### Links do Projeto

- 🏠 **Homepage**: [https://datametria.io]
- 📖 **Documentação**: [docs/](docs/)
- 🐛 **Issues**: [GitHub Issues](https://github.com/exolyze/FIDI-common-libraries/issues)
- 🚀 **Releases**: [GitHub Releases](https://github.com/exolyze/FIDI-common-libraries/releases)

---

## 🙏 Agradecimentos

### Contribuidores

Obrigado a todas as pessoas que contribuíram para este projeto:

- DATAMETRIA Engineering
- DATAMETRIA Engineering
- Usuários que reportaram bugs e sugeriram melhorias

### Inspirações e Referências

- **Pywinauto**: Biblioteca fundamental para automação de UI Windows
- **Poetry**: Gerenciador moderno de dependências Python
- **AWS SDK**: Integração robusta com serviços AWS
- **TOTVS RM**: Sistema ERP que motivou o desenvolvimento do módulo UI

### Tecnologias e Bibliotecas

Agradecemos às comunidades open source das tecnologias utilizadas:

- [Python](https://python.org) - Linguagem de programação
- [Poetry](https://python-poetry.org) - Gerenciamento de dependências
- [Pywinauto](https://pywinauto.readthedocs.io) - Automação de UI
- [Boto3](https://boto3.amazonaws.com) - AWS SDK para Python
- [Pytest](https://pytest.org) - Framework de testes

---

<div align="center">

**Feito com ❤️ pela equipe DATAMETRIA**

⭐ **Se este projeto te ajudou, considere dar uma estrela!** ⭐

### 📚 Documentação Completa

| Categoria | Documentos |
|-----------|------------|
| **Guias Principais** | [INSTALL.md](INSTALL.md) • [CHANGELOG.md](CHANGELOG.md) • [STATUS_ATUAL.md](STATUS_ATUAL.md) |
| **Release Notes** | [Índice de Releases](docs/releases/README.md) • [Última Release](docs/releases/v1.3.14.md) |
| **Deployment** | [DEPLOYMENT_GUIDE.md](docs/DEPLOYMENT_GUIDE.md) |
| **Módulos** | [DATA_MODULE_GUIDE.md](docs/DATA_MODULE_GUIDE.md) • [UI_MODULE_GUIDE.md](docs/UI_MODULE_GUIDE.md) • [RM_AUTOMATION_GUIDE.md](docs/RM_AUTOMATION_GUIDE.md) |
| **Funcionalidades** | [RM_NAVIGATOR_GUIDE.md](docs/RM_NAVIGATOR_GUIDE.md) • [UI_INSPECTOR_GUIDE.md](docs/UI_INSPECTOR_GUIDE.md) • [LOCATOR_SERVICE_GUIDE.md](docs/LOCATOR_SERVICE_GUIDE.md) |
| **Referências** | [RM_ADAPT_NAVIGATOR_CLASS_REFERENCE.md](docs/RM_ADAPT_NAVIGATOR_CLASS_REFERENCE.md) |
| **ADRs** | [ADR-0001-use-pywinauto-for-ui-automation.md](docs/ADR-0001-use-pywinauto-for-ui-automation.md) |
| **Gestão** | [PRODUCT_BACKLOG.md](docs/PRODUCT_BACKLOG.md) |

</div>
            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "fidi-common-libraries",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.11",
    "maintainer_email": null,
    "keywords": "fidi, aws, utils, database, logger",
    "author": "Vander Loto",
    "author_email": "vander.loto@datametria.io",
    "download_url": "https://files.pythonhosted.org/packages/64/65/0698528df6a3152961b53f079bc4efc0e3b694b5103e435ca7eaa12f1bb6/fidi_common_libraries-1.3.19.tar.gz",
    "platform": null,
    "description": "# FIDI Common Libraries\n\n<div align=\"center\">\n\n**Bibliotecas compartilhadas para automa\u00e7\u00e3o e integra\u00e7\u00e3o nos projetos FIDI**\n\n[![Build Status](https://img.shields.io/badge/build-passing-brightgreen)](https://github.com/exolyze/FIDI-common-libraries)\n[![Coverage](https://img.shields.io/badge/coverage-85%25-brightgreen)](https://github.com/exolyze/FIDI-common-libraries)\n[![License](https://img.shields.io/badge/license-MIT-blue)](LICENSE)\n[![Version](https://img.shields.io/badge/version-1.3.19-blue)](docs/releases/v1.3.19.md)\n[![Python](https://img.shields.io/badge/python-3.9%2B-blue)](https://python.org)\n\n[\ud83d\udcd6 Documenta\u00e7\u00e3o](docs/) \u2022 [\ud83d\udc1b Reportar Bug](https://github.com/exolyze/FIDI-common-libraries/issues) \u2022 [\ud83d\udca1 Solicitar Feature](https://github.com/exolyze/FIDI-common-libraries/issues/new)\n\n</div>\n\n---\n\n## \ud83d\udccb \u00cdndice\n\n- [Sobre o Projeto](#-sobre-o-projeto)\n- [Funcionalidades](#-funcionalidades)\n- [Tecnologias](#-tecnologias)\n- [Pr\u00e9-requisitos](#-pr\u00e9-requisitos)\n- [Instala\u00e7\u00e3o](#-instala\u00e7\u00e3o)\n- [Uso](#-uso)\n- [Configura\u00e7\u00e3o](#-configura\u00e7\u00e3o)\n- [Testes](#-testes)\n- [Contribui\u00e7\u00e3o](#-contribui\u00e7\u00e3o)\n- [Roadmap](#-roadmap)\n- [Licen\u00e7a](#-licen\u00e7a)\n- [Contato](#-contato)\n- [Agradecimentos](#-agradecimentos)\n\n---\n\n## \ud83c\udfaf Sobre o Projeto\n\n### Vis\u00e3o Geral\n\nO FIDI Common Libraries \u00e9 um conjunto abrangente de bibliotecas Python reutiliz\u00e1veis desenvolvidas para padronizar e acelerar o desenvolvimento de solu\u00e7\u00f5es de automa\u00e7\u00e3o, integra\u00e7\u00e3o com AWS e processamento de dados nos projetos da FIDI. O projeto segue rigorosamente as melhores pr\u00e1ticas de desenvolvimento Python, incluindo Poetry para gerenciamento de depend\u00eancias, Pywinauto para automa\u00e7\u00e3o de UI e arquitetura modular para m\u00e1xima reutiliza\u00e7\u00e3o.\n\n### Objetivos\n\n- **Objetivo Principal**: Fornecer bibliotecas padronizadas e reutiliz\u00e1veis para automa\u00e7\u00e3o e integra\u00e7\u00e3o\n- **Objetivos Espec\u00edficos**:\n  - Padronizar opera\u00e7\u00f5es de banco de dados multi-SGBD\n  - Simplificar integra\u00e7\u00f5es com servi\u00e7os AWS\n  - Automatizar interfaces gr\u00e1ficas do sistema TOTVS RM\n  - Centralizar gerenciamento de configura\u00e7\u00f5es e par\u00e2metros\n\n### Benef\u00edcios\n\n- \u2705 **Reutiliza\u00e7\u00e3o**: Componentes padronizados reduzem duplica\u00e7\u00e3o de c\u00f3digo\n- \u2705 **Qualidade**: Cobertura de testes superior a 85% garante confiabilidade\n- \u2705 **Produtividade**: Acelera desenvolvimento com componentes prontos\n- \u2705 **Manutenibilidade**: Arquitetura modular facilita manuten\u00e7\u00e3o e evolu\u00e7\u00e3o\n\n---\n\n## \u26a1 Funcionalidades\n\n### Principais\n\n- \ud83d\uddc4\ufe0f **M\u00f3dulo Data**: Opera\u00e7\u00f5es robustas de banco de dados multi-SGBD (Oracle, PostgreSQL, SQL Server)\n- \u2601\ufe0f **M\u00f3dulo AWS**: Clientes padronizados para SQS, SNS, Lambda, S3 com configura\u00e7\u00e3o centralizada\n- \ud83d\udda5\ufe0f **M\u00f3dulo UI**: Automa\u00e7\u00e3o completa de interfaces gr\u00e1ficas TOTVS RM com Pywinauto\n- \u2699\ufe0f **M\u00f3dulo Config**: Gerenciamento inteligente de par\u00e2metros com cache e convers\u00e3o autom\u00e1tica\n\n### Funcionalidades Avan\u00e7adas\n\n<details>\n<summary>Clique para expandir</summary>\n\n- **Logging Estruturado**: Sistema de logs multi-SGBD com metadados enriquecidos\n- **Constantes Padronizadas**: Sistema de status com convers\u00e3o autom\u00e1tica entre tipos\n- **Inspetor de UI**: Ferramenta avan\u00e7ada para an\u00e1lise e mapeamento de elementos de interface\n- **Navega\u00e7\u00e3o Adaptativa**: Sistema inteligente de navega\u00e7\u00e3o em interfaces com retry autom\u00e1tico\n- **Execu\u00e7\u00e3o de Procedures**: Classes especializadas para execu\u00e7\u00e3o robusta de procedures de banco\n\n</details>\n\n---\n\n## \ud83d\udee0\ufe0f Tecnologias\n\n### Stack Principal\n\n| Categoria | Tecnologia | Vers\u00e3o | Descri\u00e7\u00e3o |\n|-----------|------------|--------|-----------|\n| **Linguagem** | Python | 3.9+ | Linguagem principal do projeto |\n| **Gerenciador** | Poetry | 1.4+ | Gerenciamento de depend\u00eancias e empacotamento |\n| **UI Automation** | Pywinauto | 0.6+ | Automa\u00e7\u00e3o de interfaces gr\u00e1ficas Windows |\n| **AWS SDK** | Boto3 | 1.26+ | Integra\u00e7\u00e3o com servi\u00e7os AWS |\n| **Database** | Multiple | - | Oracle (oracledb), PostgreSQL (psycopg2), SQL Server (pyodbc) |\n\n### Depend\u00eancias Principais\n\n```toml\n[tool.poetry.dependencies]\npython = \"^3.9\"\npywinauto = \"^0.6.8\"\nboto3 = \"^1.26.0\"\noracledb = \"^1.4.0\"\npsycopg2-binary = \"^2.9.0\"\npyodbc = \"^4.0.39\"\npyyaml = \"^6.0\"\nrequests = \"^2.28.0\"\n```\n\n### Arquitetura\n\n```mermaid\ngraph TB\n    A[Aplica\u00e7\u00e3o Cliente] --> B[FIDI Common Libraries]\n    B --> C[M\u00f3dulo Data]\n    B --> D[M\u00f3dulo AWS]\n    B --> E[M\u00f3dulo UI]\n    B --> F[M\u00f3dulo Config]\n    C --> G[Oracle/PostgreSQL/SQL Server]\n    D --> H[SQS/SNS/Lambda/S3]\n    E --> I[TOTVS RM]\n    F --> J[Banco de Par\u00e2metros]\n```\n\n---\n\n## \ud83d\udccb Pr\u00e9-requisitos\n\n### Requisitos do Sistema\n\n- **Sistema Operacional**: Windows 10/11 (para automa\u00e7\u00e3o UI)\n- **Mem\u00f3ria RAM**: 4 GB m\u00ednimo, 8 GB recomendado\n- **Espa\u00e7o em Disco**: 2 GB dispon\u00edvel\n- **Rede**: Conex\u00e3o com internet para depend\u00eancias e AWS\n\n### Software Necess\u00e1rio\n\n- **Python**: 3.9 ou superior - [Download](https://python.org/downloads/)\n- **Poetry**: 1.4 ou superior - [Instala\u00e7\u00e3o](https://python-poetry.org/docs/#installation)\n- **Git**: Para clonagem do reposit\u00f3rio - [Download](https://git-scm.com/)\n\n### Verifica\u00e7\u00e3o de Pr\u00e9-requisitos\n\n```bash\n# Verificar vers\u00f5es instaladas\npython --version\npoetry --version\ngit --version\n```\n\n---\n\n## \ud83d\ude80 Instala\u00e7\u00e3o\n\n### Instala\u00e7\u00e3o R\u00e1pida\n\n```bash\n# Clone o reposit\u00f3rio\ngit clone https://github.com/exolyze/FIDI-common-libraries.git\ncd FIDI-common-libraries\n\n# Instale as depend\u00eancias\npoetry install\n\n# Ative o ambiente virtual\npoetry shell\n```\n\n### Instala\u00e7\u00e3o como Depend\u00eancia\n\n```bash\n# Instalar via Poetry (recomendado)\npoetry add git+https://github.com/exolyze/FIDI-common-libraries.git\n\n# Ou via pip\npip install git+https://github.com/exolyze/FIDI-common-libraries.git\n```\n\n### Instala\u00e7\u00e3o Detalhada\n\n<details>\n<summary>Clique para ver instru\u00e7\u00f5es detalhadas</summary>\n\n#### 1. Clone o Reposit\u00f3rio\n\n```bash\ngit clone https://github.com/exolyze/FIDI-common-libraries.git\ncd FIDI-common-libraries\n```\n\n#### 2. Configure o Ambiente\n\n```bash\n# Instale o Poetry se n\u00e3o tiver\ncurl -sSL https://install.python-poetry.org | python3 -\n\n# Configure o Poetry para criar venv no projeto\npoetry config virtualenvs.in-project true\n```\n\n#### 3. Instale as Depend\u00eancias\n\n```bash\n# Instale depend\u00eancias de produ\u00e7\u00e3o e desenvolvimento\npoetry install\n\n# Apenas depend\u00eancias de produ\u00e7\u00e3o\npoetry install --no-dev\n```\n\n#### 4. Configure Vari\u00e1veis de Ambiente\n\n```bash\n# Copie o arquivo de exemplo\ncp .env.example .env\n\n# Edite as configura\u00e7\u00f5es\nnano .env\n```\n\n#### 5. Configure Hooks de Desenvolvimento\n\n```bash\n# Instale pre-commit hooks\npoetry run pre-commit install\n\n# Execute verifica\u00e7\u00f5es\npoetry run pre-commit run --all-files\n```\n\n</details>\n\n### Verifica\u00e7\u00e3o da Instala\u00e7\u00e3o\n\n```bash\n# Teste a importa\u00e7\u00e3o\npoetry run python -c \"import fidi_common_libraries; print('Instala\u00e7\u00e3o OK!')\"\n\n# Execute os testes\npoetry run pytest\n```\n\n---\n\n## \ud83d\udcbb Uso\n\n### In\u00edcio R\u00e1pido\n\n1. **Instale a biblioteca**: Siga as instru\u00e7\u00f5es de [instala\u00e7\u00e3o](#-instala\u00e7\u00e3o)\n2. **Configure vari\u00e1veis**: Defina as vari\u00e1veis de ambiente necess\u00e1rias\n3. **Importe m\u00f3dulos**: Use os m\u00f3dulos conforme sua necessidade\n4. **Explore exemplos**: Veja os casos de uso abaixo\n\n### Guia do Usu\u00e1rio\n\n### M\u00f3dulo Data - Opera\u00e7\u00f5es de Banco\n\n```python\nfrom fidi_common_libraries.data.db_data import (\n    DatabaseConfig, DatabaseQuery, ProcessosRpaInserter, ProcessosRpaUpdater,\n    ProcedureExecutor, ProcedureHelpers\n)\nfrom datetime import datetime\n\n# Configura\u00e7\u00e3o do banco\ndb_config = DatabaseConfig.from_env('RPA_')  # Usa vari\u00e1veis RPA_DB_SERVER, etc.\n\n# Inserir registro\ninserter = ProcessosRpaInserter(db_config)\nregistro_id = inserter.insert(\n    ambiente=\"PRD\",\n    produto=\"FIDI-ferias\",\n    versao=\"1.0.0\",\n    chapa=\"123456\",\n    statusexecucao=\"NOVO\"\n)\n\n# Consulta segura\nquery = DatabaseQuery(db_config)\nresults = query.execute_query(\n    \"SELECT * FROM processosrpa WHERE statusexecucao = :status\",\n    {\"status\": \"NOVO\"}\n)\n\n# Execu\u00e7\u00e3o de procedures\nexecutor = ProcedureExecutor(db_config)\n\n# Procedure sem retorno\nsuccess = executor.execute_procedure_no_result(\"sp_update_status\", [\"ATIVO\", 123])\n\n# Procedure que retorna valor \u00fanico\nnext_id = executor.execute_procedure_single_value(\"sp_get_next_id\", [\"processosrpa\"])\n\n# Procedure que retorna boolean\nis_valid = executor.execute_procedure_boolean_result(\"sp_validate_record\", [123])\n\n# Procedure que retorna m\u00faltiplas linhas\nreports = executor.execute_procedure_multiple_rows(\"sp_get_daily_reports\", [\"2024-01-01\"])\n\n# Helpers para procedures comuns\nhelpers = ProcedureHelpers(db_config)\ncleanup_count = helpers.cleanup_old_data(\"temp_table\", 30)\nsystem_status = helpers.get_system_status()\n```\n\n### M\u00f3dulo Config - Gerenciamento de Par\u00e2metros\n\n```python\nfrom fidi_common_libraries.config.parametros import Parametros\n\n# Inicializar o gerenciador de par\u00e2metros\nparams = Parametros(ambiente=\"HML\", produto=\"FIDI-ferias\")\n\n# Obter um par\u00e2metro\nurl_api = params.get_parametro(\"URL_API\", default=\"https://api.exemplo.com\")\n\n# Obter par\u00e2metros por grupo\nconfig_email = params.get_parametros_por_grupo(\"Email\")\n\n# Obter par\u00e2metros por categorias espec\u00edficas\nconfig_ti = params.get_parametros_por_grupo(\"TI\")  # Configura\u00e7\u00f5es t\u00e9cnicas\nconfig_negocio = params.get_parametros_por_grupo(\"Negocio\")  # Configura\u00e7\u00f5es de neg\u00f3cio\nconfig_produto = params.get_parametros_por_grupo(\"Produto\")  # Configura\u00e7\u00f5es do produto\n\n# Atualizar um par\u00e2metro\nparams.atualizar_parametro(\"TIMEOUT_API\", 30)\n```\n\n### M\u00f3dulo Utils - Logging e Status\n\n```python\nfrom fidi_common_libraries.utils.logger import registrar_log_banco\nfrom fidi_common_libraries.constants.status import HubStatus, DBStatus, LogStatus, convert_status\nimport pyodbc\n\n# Conex\u00e3o com banco\nconn = pyodbc.connect(connection_string)\n\n# Registrar log (detecta automaticamente o tipo de banco)\nregistrar_log_banco(\n    conn=conn,\n    ambiente=\"PRD\",\n    produto=\"FIDI-ferias\",\n    versao=\"1.0.0\",\n    nivel=\"INFO\",\n    modulo=\"main\",\n    processo=\"processamento\",\n    acao=\"inicio\",\n    lote=\"LOTE001\",\n    mensagem=\"Processo iniciado\",\n    usuario=\"sistema\",\n    status_execucao=LogStatus.SUCESSO,\n    hostname=\"server01\",\n    ip_origem=\"192.168.1.100\"\n)\n\n# Usar constantes de status\nstatus_db = DBStatus.NOVO\nstatus_log = convert_status(status_db, 'db', 'log')\n```\n\n### M\u00f3dulo AWS - Clientes Padronizados\n\n```python\nfrom fidi_common_libraries.aws.common_aws import AWSClientFactory, AWSConfig, create_message_with_metadata\n\n# Configura\u00e7\u00e3o AWS\nconfig = AWSConfig.from_env()  # Usa vari\u00e1veis AWS_REGION, AWS_ACCESS_KEY_ID, etc.\nfactory = AWSClientFactory(config)\n\n# Cliente SQS\nsqs = factory.get_sqs_client()\nmessage_id = sqs.send_message(\n    queue_url=\"https://sqs.sa-east-1.amazonaws.com/123456789/my-queue\",\n    message={\"data\": \"test\"},\n    message_attributes={\"Type\": {\"StringValue\": \"ProcessData\", \"DataType\": \"String\"}}\n)\n```\n\n### M\u00f3dulo UI - Automa\u00e7\u00e3o de Interfaces Gr\u00e1ficas\n\n```python\nfrom fidi_common_libraries.ui import RMApplication, ElementFinder, UIInteractions, UIWaits, LocatorService\n\n# Conectar ou iniciar aplica\u00e7\u00e3o RM\napp = RMApplication()\napp.connect_or_start()  # Conecta se existir ou inicia nova inst\u00e2ncia\n\n# Aguardar aplica\u00e7\u00e3o ficar pronta\napp.wait_for_application_ready(timeout=60)\n\n# Obter janela principal ou TOTVS\nmain_window = app.get_main_window()\ntotvs_window = app.get_totvs_window()\n\n# Navega\u00e7\u00e3o autom\u00e1tica no sistema RM\nfrom fidi_common_libraries.ui import RMNavigator, LocatorMode\nnavigator = RMNavigator(app.app, main_window)\nsuccess, button_text = navigator.navigate_to_element(\n    {\"title\": \"Encargos\", \"control_type\": \"TabItem\"},\n    {\"title\": \"Contabiliza\u00e7\u00e3o\", \"control_type\": \"Pane\"},\n    {\"title\": \"Gera\u00e7\u00e3o dos Encargos\", \"control_type\": \"Button\"}\n)\n\n# Login automatizado no sistema RM\nfrom fidi_common_libraries.ui import RMStartLogin, LocatorService\nlocator_service = LocatorService(\"locators.yaml\")\nlogin_manager = RMStartLogin(locator_service)\nsuccess, rm_app = login_manager.start_and_login(\"HML\", \"FIDI-ferias\")\n\n# Sele\u00e7\u00e3o de ambiente no login\nfrom fidi_common_libraries.ui import RMLoginEnvSelector\nenv_selector = RMLoginEnvSelector(login_window, locator_service)\nsuccess, alias = env_selector.select_environment(\"HML\", \"FIDI-ferias\")\n\n# Conex\u00e3o dupla (win32 + uia) para an\u00e1lise\nfrom fidi_common_libraries.ui import RMDualConnect\nconnector = RMDualConnect(output_dir=\"locators_output\")\nsuccess, info = connector.connect_dual()\n\n# Monitoramento de progresso de processos RM\nfrom fidi_common_libraries.ui import RMProgressMonitor\nmonitor = RMProgressMonitor(parent_element, \"timer_auto_id\")\nresult = monitor.monitor_until_stable(max_timeout=300)\n\n# Navega\u00e7\u00e3o adaptativa com retry autom\u00e1tico\nfrom fidi_common_libraries.ui import RMAdaptNavigator\nnavigator = RMAdaptNavigator(parent_element)\nelement = navigator.navigate_to_element(title=\"Salvar\", control_type=\"Button\")\n\n# Fechamento de janelas e aplica\u00e7\u00e3o RM\nfrom fidi_common_libraries.ui import RMClose\ncloser = RMClose(main_window)\n\n# Fechar janela atual\nsuccess = closer.close_window()\n\n# Fechar aplica\u00e7\u00e3o completa\nsuccess = closer.close_application()\n\n# Navega\u00e7\u00e3o e sele\u00e7\u00e3o da Planilha Net\nfrom fidi_common_libraries.ui import RMPlanilhaNet\n\n# Op\u00e7\u00e3o 1: Processo completo autom\u00e1tico (recomendado)\nplanilha_net = RMPlanilhaNet(main_window, app, \"PLAN001\")  # Executa automaticamente\n\n# Op\u00e7\u00e3o 2: Execu\u00e7\u00e3o manual passo a passo\nplanilha_net = RMPlanilhaNet(main_window)\nsuccess = planilha_net.navigate_filters(app, timeout=60)\nsuccess = planilha_net.select_planilha(\"PLAN001\")\n\n# Op\u00e7\u00e3o 3: Processo completo via m\u00e9todo\nplanilha_net = RMPlanilhaNet(main_window)\nsuccess = planilha_net.execute_full_process(app, \"PLAN001\")\n\n# Usar servi\u00e7o de locators para elementos\nlocator_service = LocatorService(\"locators.yaml\", mode=LocatorMode.PYWINAUTO)\nlogin_criteria = locator_service.get_non_null_attributes(\"login_button\")\n\n# Encontrar elemento com crit\u00e9rios robustos\nfinder = ElementFinder()\nbutton = finder.find_element(\n    parent=main_window,\n    primary_criteria=login_criteria,\n    fallback_criteria=[{\"auto_id\": \"btnSave\"}]\n)\n\n# Interagir com elementos de forma segura\ninteractions = UIInteractions()\ninteractions.safe_click(button)\n\n# Aguardar elementos ou condi\u00e7\u00f5es\nwaits = UIWaits()\nwaits.wait_for_element_ready(button, timeout=10)\n\n# Inspe\u00e7\u00e3o de elementos UI (ferramenta de desenvolvimento)\nfrom fidi_common_libraries.ui.utils.inspector import UIElementInspectorAdvanced\ninspector = UIElementInspectorAdvanced()\ninspector.connect_to_application(window_title=\"TOTVS\")\ninspector.start_assisted_navigation()  # Navega\u00e7\u00e3o assistida com overlay visual\n\n# Fechar aplica\u00e7\u00e3o quando terminar\napp.close_application()  # Fecha apenas se foi iniciada por n\u00f3s\n\n# Configura\u00e7\u00e3o AWS\nconfig = AWSConfig.from_env()  # Usa vari\u00e1veis AWS_REGION, AWS_ACCESS_KEY_ID, etc.\nfactory = AWSClientFactory(config)\n\n# Cliente SQS\nsqs = factory.get_sqs_client()\nmessage_id = sqs.send_message(\n    queue_url=\"https://sqs.sa-east-1.amazonaws.com/123456789/my-queue\",\n    message={\"data\": \"test\"},\n    message_attributes={\"Type\": {\"StringValue\": \"ProcessData\", \"DataType\": \"String\"}}\n)\n\n# Cliente SNS\nsns = factory.get_sns_client()\nsns.publish_message(\n    topic_arn=\"arn:aws:sns:sa-east-1:123456789:my-topic\",\n    message=create_message_with_metadata({\"event\": \"process_completed\"}),\n    subject=\"Processo Finalizado\"\n)\n\n# Cliente Lambda\nlambda_client = factory.get_lambda_client()\nresult = lambda_client.invoke_function(\n    function_name=\"my-function\",\n    payload={\"action\": \"process\", \"data\": \"test\"}\n)\n\n# Cliente S3\ns3 = factory.get_s3_client()\ns3.upload_file(\"/path/to/file.txt\", \"my-bucket\", \"uploads/file.txt\")\n```\n\n---\n\n## \u2699\ufe0f Configura\u00e7\u00e3o\n\n### Vari\u00e1veis de Ambiente\n\n```bash\n# Configura\u00e7\u00f5es de banco de dados\nRPA_DB_SERVER=servidor-banco\nRPA_DB_DATABASE=nome-banco\nRPA_DB_USERNAME=usuario\nRPA_DB_PASSWORD=senha\nRPA_DB_DRIVER=ODBC Driver 17 for SQL Server\n\n# Configura\u00e7\u00f5es AWS\nAWS_REGION=sa-east-1\nAWS_ACCESS_KEY_ID=sua-access-key\nAWS_SECRET_ACCESS_KEY=sua-secret-key\n\n# Configura\u00e7\u00f5es de aplica\u00e7\u00e3o\nAPP_ENVIRONMENT=PRD\nAPP_PRODUTO=FIDI-comum\nAPP_VERSAO=1.3.13\n\n# Configura\u00e7\u00f5es de UI\nUI_TIMEOUT_DEFAULT=30\nUI_SCREENSHOT_ON_ERROR=true\nUI_LOG_LEVEL=INFO\n```\n\n### Arquivo de Configura\u00e7\u00e3o\n\n```yaml\n# config/ui_config.yaml\nui:\n  timeouts:\n    default: 30\n    long: 60\n    short: 10\n  \n  screenshots:\n    enabled: true\n    path: \"screenshots/\"\n    format: \"png\"\n  \n  locators:\n    mode: \"pywinauto\"\n    file: \"locators.yaml\"\n```\n\n---\n\n## \ud83e\uddea Testes\n\n### Executar Testes\n\n```bash\n# Todos os testes\npoetry run pytest\n\n# Testes unit\u00e1rios\npoetry run pytest tests/unit/\n\n# Testes de integra\u00e7\u00e3o\npoetry run pytest tests/integration/\n\n# Testes e2e\npoetry run pytest tests/e2e/\n\n# Cobertura de testes\npoetry run pytest --cov=src --cov-report=html\n```\n\n### Estrutura de Testes\n\n```\ntests/\n\u251c\u2500\u2500 unit/           # Testes unit\u00e1rios\n\u2502   \u251c\u2500\u2500 test_data/\n\u2502   \u251c\u2500\u2500 test_aws/\n\u2502   \u251c\u2500\u2500 test_ui/\n\u2502   \u2514\u2500\u2500 test_config/\n\u251c\u2500\u2500 integration/    # Testes de integra\u00e7\u00e3o\n\u2502   \u251c\u2500\u2500 test_database/\n\u2502   \u251c\u2500\u2500 test_aws_services/\n\u2502   \u2514\u2500\u2500 test_ui_automation/\n\u251c\u2500\u2500 e2e/           # Testes end-to-end\n\u2502   \u2514\u2500\u2500 test_full_workflows/\n\u251c\u2500\u2500 fixtures/      # Dados de teste\n\u2514\u2500\u2500 conftest.py    # Configura\u00e7\u00f5es pytest\n```\n\n### M\u00e9tricas de Qualidade\n\n- **Cobertura de Testes**: ![Coverage](https://img.shields.io/badge/coverage-85%25-brightgreen)\n- **Qualidade do C\u00f3digo**: ![Quality](https://img.shields.io/badge/quality-A-green)\n- **Vulnerabilidades**: ![Security](https://img.shields.io/badge/vulnerabilities-0-green)\n\n---\n\n## \ud83e\udd1d Contribui\u00e7\u00e3o\n\nContribui\u00e7\u00f5es s\u00e3o sempre bem-vindas! Veja como voc\u00ea pode ajudar:\n\n### Como Contribuir\n\n1. **Fork** o projeto\n2. **Crie** uma branch para sua feature (`git checkout -b feature/AmazingFeature`)\n3. **Commit** suas mudan\u00e7as (`git commit -m 'Add some AmazingFeature'`)\n4. **Push** para a branch (`git push origin feature/AmazingFeature`)\n5. **Abra** um Pull Request\n\n### Diretrizes\n\n- Siga as diretrizes estabelecidas em `.amazonq/rules/`\n- Mantenha a cobertura de testes acima de 85%\n- Execute os pre-commit hooks antes de fazer commit\n- Atualize a documenta\u00e7\u00e3o conforme necess\u00e1rio\n- Use mensagens de commit descritivas\n\n### Tipos de Contribui\u00e7\u00e3o\n\n- \ud83d\udc1b **Bug Reports**: Reporte bugs usando [GitHub Issues](https://github.com/exolyze/FIDI-common-libraries/issues)\n- \ud83d\udca1 **Feature Requests**: Sugira novas funcionalidades\n- \ud83d\udcd6 **Documenta\u00e7\u00e3o**: Melhore a documenta\u00e7\u00e3o\n- \ud83e\uddea **Testes**: Adicione ou melhore testes\n- \ud83c\udfa8 **Refatora\u00e7\u00e3o**: Melhore a qualidade do c\u00f3digo\n\n### Qualidade de C\u00f3digo\n\n```bash\n# Formata\u00e7\u00e3o autom\u00e1tica\npoetry run black src/ tests/\n\n# Linting\npoetry run flake8 src/ tests/\n\n# Verifica\u00e7\u00e3o de tipos\npoetry run mypy src/\n\n# An\u00e1lise de seguran\u00e7a\npoetry run bandit -r src/\n```\n\n---\n\n## \ud83d\uddfa\ufe0f Roadmap\n\n### Vers\u00e3o Atual: 1.3.19\n\n- \u2705 M\u00f3dulo Data com suporte multi-SGBD\n- \u2705 M\u00f3dulo AWS com clientes padronizados\n- \u2705 M\u00f3dulo UI com automa\u00e7\u00e3o TOTVS RM completa\n- \u2705 Sistema de configura\u00e7\u00e3o e par\u00e2metros\n- \u2705 Documenta\u00e7\u00e3o padronizada com templates\n- \u2705 RM Single Connect para conex\u00f5es robustas\n\n### Pr\u00f3ximas Vers\u00f5es\n\n#### v1.4.0 - Q2 2024\n- \ud83d\udd04 Suporte a MongoDB no m\u00f3dulo Data\n- \ud83d\udd04 Integra\u00e7\u00e3o com Azure Services\n- \ud83d\udccb M\u00f3dulo de relat\u00f3rios automatizados\n- \ud83d\udccb Dashboard de monitoramento\n\n#### v1.5.0 - Q3 2024\n- \ud83d\udccb Suporte a automa\u00e7\u00e3o web (Selenium)\n- \ud83d\udccb Integra\u00e7\u00e3o com APIs REST gen\u00e9ricas\n- \ud83d\udca1 Sistema de cache distribu\u00eddo\n- \ud83d\udca1 M\u00e9tricas e observabilidade\n\n### Backlog\n\n- \ud83d\udca1 Suporte a containers Docker\n- \ud83d\udca1 Integra\u00e7\u00e3o com Kubernetes\n- \ud83d\udd2c Machine Learning para automa\u00e7\u00e3o inteligente\n- \ud83d\udd2c An\u00e1lise preditiva de falhas\n\nVeja o [Product Backlog](docs/PRODUCT_BACKLOG.md) para mais detalhes.\n\n---\n\n## \ud83d\udcca Status do Projeto\n\n### M\u00e9tricas\n\n| M\u00e9trica | Valor |\n|---------|-------|\n| **Linhas de C\u00f3digo** | ~15.000 |\n| **M\u00f3dulos** | 5 principais |\n| **Classes** | 25+ |\n| **Cobertura de Testes** | 85%+ |\n| **Vers\u00e3o Atual** | 1.3.19 |\n\n### Atividade Recente\n\n- \ud83d\udcc5 **\u00daltimo Release**: 03/09/2025 - v1.3.19\n- \ud83d\udd04 **\u00daltimo Commit**: 03/09/2025\n- \ud83d\udc1b **Issues Resolvidas**: 2 esta semana\n- \ud83d\ude80 **Features Adicionadas**: 0 este m\u00eas\n\n---\n\n## \ud83d\udcc4 Licen\u00e7a\n\nEste projeto est\u00e1 licenciado sob a Licen\u00e7a MIT - veja o arquivo [LICENSE](LICENSE) para detalhes.\n\n### Resumo da Licen\u00e7a\n\n- \u2705 **Uso Comercial**: Permitido\n- \u2705 **Modifica\u00e7\u00e3o**: Permitida\n- \u2705 **Distribui\u00e7\u00e3o**: Permitida\n- \u2705 **Uso Privado**: Permitido\n- \u274c **Responsabilidade**: N\u00e3o assumida\n- \u274c **Garantia**: N\u00e3o fornecida\n\n---\n\n## \ud83d\udcde Contato\n\n### Equipe de Desenvolvimento\n\n- **Tech Lead & Maintainer**: Vander Loto - [vander.loto@datametria.io]\n- **Development Team**: DATAMETRIA Engineering - [dev@datametria.io]\n- **Product Owner**: DATAMETRIA - [produto@datametria.io]\n\n### Canais de Suporte\n\n- \ud83d\udce7 **Email**: [vander.loto@datametria.io]\n- \ud83d\udc1b **Issues**: [GitHub Issues](https://github.com/exolyze/FIDI-common-libraries/issues)\n- \ud83d\udcd6 **Documenta\u00e7\u00e3o**: [docs/](docs/)\n\n### Links do Projeto\n\n- \ud83c\udfe0 **Homepage**: [https://datametria.io]\n- \ud83d\udcd6 **Documenta\u00e7\u00e3o**: [docs/](docs/)\n- \ud83d\udc1b **Issues**: [GitHub Issues](https://github.com/exolyze/FIDI-common-libraries/issues)\n- \ud83d\ude80 **Releases**: [GitHub Releases](https://github.com/exolyze/FIDI-common-libraries/releases)\n\n---\n\n## \ud83d\ude4f Agradecimentos\n\n### Contribuidores\n\nObrigado a todas as pessoas que contribu\u00edram para este projeto:\n\n- DATAMETRIA Engineering\n- DATAMETRIA Engineering\n- Usu\u00e1rios que reportaram bugs e sugeriram melhorias\n\n### Inspira\u00e7\u00f5es e Refer\u00eancias\n\n- **Pywinauto**: Biblioteca fundamental para automa\u00e7\u00e3o de UI Windows\n- **Poetry**: Gerenciador moderno de depend\u00eancias Python\n- **AWS SDK**: Integra\u00e7\u00e3o robusta com servi\u00e7os AWS\n- **TOTVS RM**: Sistema ERP que motivou o desenvolvimento do m\u00f3dulo UI\n\n### Tecnologias e Bibliotecas\n\nAgradecemos \u00e0s comunidades open source das tecnologias utilizadas:\n\n- [Python](https://python.org) - Linguagem de programa\u00e7\u00e3o\n- [Poetry](https://python-poetry.org) - Gerenciamento de depend\u00eancias\n- [Pywinauto](https://pywinauto.readthedocs.io) - Automa\u00e7\u00e3o de UI\n- [Boto3](https://boto3.amazonaws.com) - AWS SDK para Python\n- [Pytest](https://pytest.org) - Framework de testes\n\n---\n\n<div align=\"center\">\n\n**Feito com \u2764\ufe0f pela equipe DATAMETRIA**\n\n\u2b50 **Se este projeto te ajudou, considere dar uma estrela!** \u2b50\n\n### \ud83d\udcda Documenta\u00e7\u00e3o Completa\n\n| Categoria | Documentos |\n|-----------|------------|\n| **Guias Principais** | [INSTALL.md](INSTALL.md) \u2022 [CHANGELOG.md](CHANGELOG.md) \u2022 [STATUS_ATUAL.md](STATUS_ATUAL.md) |\n| **Release Notes** | [\u00cdndice de Releases](docs/releases/README.md) \u2022 [\u00daltima Release](docs/releases/v1.3.14.md) |\n| **Deployment** | [DEPLOYMENT_GUIDE.md](docs/DEPLOYMENT_GUIDE.md) |\n| **M\u00f3dulos** | [DATA_MODULE_GUIDE.md](docs/DATA_MODULE_GUIDE.md) \u2022 [UI_MODULE_GUIDE.md](docs/UI_MODULE_GUIDE.md) \u2022 [RM_AUTOMATION_GUIDE.md](docs/RM_AUTOMATION_GUIDE.md) |\n| **Funcionalidades** | [RM_NAVIGATOR_GUIDE.md](docs/RM_NAVIGATOR_GUIDE.md) \u2022 [UI_INSPECTOR_GUIDE.md](docs/UI_INSPECTOR_GUIDE.md) \u2022 [LOCATOR_SERVICE_GUIDE.md](docs/LOCATOR_SERVICE_GUIDE.md) |\n| **Refer\u00eancias** | [RM_ADAPT_NAVIGATOR_CLASS_REFERENCE.md](docs/RM_ADAPT_NAVIGATOR_CLASS_REFERENCE.md) |\n| **ADRs** | [ADR-0001-use-pywinauto-for-ui-automation.md](docs/ADR-0001-use-pywinauto-for-ui-automation.md) |\n| **Gest\u00e3o** | [PRODUCT_BACKLOG.md](docs/PRODUCT_BACKLOG.md) |\n\n</div>",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Bibliotecas compartilhadas entre os projetos da FIDI",
    "version": "1.3.19",
    "project_urls": {
        "Changelog": "https://github.com/exolyze/FIDI-common-libraries/releases",
        "Documentation": "https://github.com/exolyze/FIDI-common-libraries/README.md",
        "Homepage": "https://github.com/exolyze/FIDI-common-libraries",
        "Repository": "https://github.com/exolyze/FIDI-common-libraries"
    },
    "split_keywords": [
        "fidi",
        " aws",
        " utils",
        " database",
        " logger"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e304edebea6070302c6affb0872786d1308860d124812595b01a042b23ba651b",
                "md5": "f3609ad928906d9ed2874d8792dcb67a",
                "sha256": "878f710150a9143b77a936ed6f910df961467f762d8641cbc267b99ce6d28ac3"
            },
            "downloads": -1,
            "filename": "fidi_common_libraries-1.3.19-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "f3609ad928906d9ed2874d8792dcb67a",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.11",
            "size": 143976,
            "upload_time": "2025-09-03T23:05:09",
            "upload_time_iso_8601": "2025-09-03T23:05:09.464537Z",
            "url": "https://files.pythonhosted.org/packages/e3/04/edebea6070302c6affb0872786d1308860d124812595b01a042b23ba651b/fidi_common_libraries-1.3.19-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "64650698528df6a3152961b53f079bc4efc0e3b694b5103e435ca7eaa12f1bb6",
                "md5": "0679a9bfdc039f7a8bf84d50b2913c67",
                "sha256": "4d4e3324247bca5bfb1adf8a2df48a4c91f266b72628d2a22092379b74c36c52"
            },
            "downloads": -1,
            "filename": "fidi_common_libraries-1.3.19.tar.gz",
            "has_sig": false,
            "md5_digest": "0679a9bfdc039f7a8bf84d50b2913c67",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.11",
            "size": 124888,
            "upload_time": "2025-09-03T23:05:11",
            "upload_time_iso_8601": "2025-09-03T23:05:11.116461Z",
            "url": "https://files.pythonhosted.org/packages/64/65/0698528df6a3152961b53f079bc4efc0e3b694b5103e435ca7eaa12f1bb6/fidi_common_libraries-1.3.19.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-03 23:05:11",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "exolyze",
    "github_project": "FIDI-common-libraries",
    "github_not_found": true,
    "lcname": "fidi-common-libraries"
}
        
Elapsed time: 3.79710s