Skip to main content

Bibliotecas compartilhadas entre os projetos da FIDI

Project description

FIDI Common Libraries

Bibliotecas compartilhadas entre os projetos da FIDI, desenvolvidas seguindo as melhores práticas de desenvolvimento Python.

📋 Visão Geral

Este projeto fornece um conjunto de bibliotecas reutilizáveis para automação, integração AWS, processamento de dados e utilitários comuns utilizados nos projetos da FIDI.

🚀 Funcionalidades Principais

  • Data: Operações de banco de dados multi-SGBD (Oracle via oracledb, PostgreSQL, SQL Server)
  • Utils: Sistema de logging estruturado para múltiplos SGBDs
  • Constants: Constantes de status padronizadas e funções de conversão entre diferentes tipos de status
  • AWS: Clientes padronizados para SQS, SNS, Lambda, S3 com configuração centralizada
  • Config: Gerenciamento de parâmetros com cache e conversão automática de tipos
  • UI: Componentes para automação de interfaces gráficas com Pywinauto

📦 Instalação e Configuração

Pré-requisitos

  • Python 3.9+
  • Poetry

Instalação como Biblioteca

# Instalar via Poetry (recomendado)
poetry add git+https://github.com/your-org/fidi-common-libraries.git

# Ou via pip
pip install git+https://github.com/your-org/fidi-common-libraries.git

Desenvolvimento Local

# Clone o repositório
git clone <repository-url>
cd fidi-common-libraries

# Instale as dependências
poetry install

# Ative o ambiente virtual
poetry shell

Configuração de Desenvolvimento

# Instale os hooks de pre-commit
poetry run pre-commit install

# Execute os testes
poetry run pytest

# Verifique a cobertura de testes
poetry run pytest --cov=src --cov-report=html

🔧 Como Usar

Módulo Data - Operações de Banco

from fidi_common_libraries.data.db_data import DatabaseConfig, DatabaseQuery, ProcessosRpaInserter, ProcessosRpaUpdater
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"}
)

Módulo Config - Gerenciamento de Parâmetros

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

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

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

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()

# Usar serviço de locators para elementos
locator_service = LocatorService("locators.yaml")
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)

# 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")

🏗️ Estrutura do Projeto

fidi-common-libraries/
├── src/
│   └── fidi_common_libraries/
│       ├── aws/          # Utilitários AWS
│       ├── config/       # Gerenciamento de configurações e parâmetros
│       ├── constants/    # Constantes e enums compartilhados
│       ├── data/         # Processamento de dados e acesso a banco
│       ├── ui/           # Automação de UI
│       └── utils/        # Utilitários gerais e logging
├── tests/
│   ├── unit/            # Testes unitários
│   ├── integration/     # Testes de integração
│   └── e2e/            # Testes end-to-end
├── docs/               # Documentação
├── scripts/            # Scripts auxiliares
└── resources/          # Recursos estáticos

🧪 Testes

O projeto mantém uma cobertura de testes superior a 85%:

# Executar todos os testes
poetry run pytest

# Executar com cobertura
poetry run pytest --cov=src --cov-report=term-missing

# Executar apenas testes unitários
poetry run pytest tests/unit/

📊 Qualidade de Código

Ferramentas utilizadas:

  • Black: Formatação automática
  • Flake8: Linting
  • MyPy: Verificação de tipos
  • Bandit: Análise de segurança
# Formatação
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/

📚 Documentação

Nota: A partir da versão 1.2.0, este projeto utiliza apenas a biblioteca oracledb para conexões Oracle, removendo a dependência do cx_Oracle.

Nota: A versão 1.3.0 introduz o módulo ui para automação de interfaces gráficas com Pywinauto.

Nota: A versão 1.3.1 adiciona funcionalidades avançadas de inicialização e gerenciamento da aplicação RM.

Nota: A versão 1.3.2 introduz o LocatorService para gerenciamento de locators via arquivos YAML.

🤝 Contribuição

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

📄 Licença

Este projeto está licenciado sob os termos definidos no arquivo LICENSE.

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

fidi_common_libraries-1.3.2.tar.gz (48.0 kB view details)

Uploaded Source

Built Distribution

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

fidi_common_libraries-1.3.2-py3-none-any.whl (62.0 kB view details)

Uploaded Python 3

File details

Details for the file fidi_common_libraries-1.3.2.tar.gz.

File metadata

  • Download URL: fidi_common_libraries-1.3.2.tar.gz
  • Upload date:
  • Size: 48.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.2 CPython/3.13.3 Windows/11

File hashes

Hashes for fidi_common_libraries-1.3.2.tar.gz
Algorithm Hash digest
SHA256 f33a0b3c6ef917aecca0e8b18933910165c7437b3c382dd19a34fcac50e53cec
MD5 1957406d2127ee9d524fbbc1ca6f2f68
BLAKE2b-256 656b9f5a1df7c825312d4000edb6375da0ece1d286253567f1aee8e91805a16b

See more details on using hashes here.

File details

Details for the file fidi_common_libraries-1.3.2-py3-none-any.whl.

File metadata

File hashes

Hashes for fidi_common_libraries-1.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ef140c258c8b91f5504fea4445068d1a0dc86e86960bf0279d2183812115690a
MD5 9eb878b197bab863b6623184c3b57247
BLAKE2b-256 6f135a6dbbd41bb3524f0b3f1fefd6bb9be7e2394adf01a4fa95ab1c11e62ff2

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