# 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, incluindo inspetor de elementos
## 📦 Instalação e Configuração
### Pré-requisitos
- Python 3.9+
- Poetry
### Instalação como Biblioteca
```bash
# 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
```bash
# 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
```bash
# 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
```python
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
```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"}
)
# 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")
```
## 🏗️ 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
│ │ ├── core/ # Componentes principais
│ │ ├── utils/ # Utilitários (inspector, screenshot)
│ │ └── locators/ # Serviços de locators
│ └── 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%:
```bash
# 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
```bash
# 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
- [INSTALL.md](INSTALL.md) - Guia completo de instalação e uso
- [CHANGELOG.md](CHANGELOG.md) - Histórico de mudanças
- [STATUS_ATUAL.md](STATUS_ATUAL.md) - Estado atual do projeto
- [docs/UI_MODULE_GUIDE.md](docs/UI_MODULE_GUIDE.md) - Guia completo do mĂłdulo UI
- [docs/UI_INSPECTOR_GUIDE.md](docs/UI_INSPECTOR_GUIDE.md) - Guia do inspetor de elementos UI
- [docs/RM_NAVIGATOR_GUIDE.md](docs/RM_NAVIGATOR_GUIDE.md) - Guia do navegador RM
- [docs/LOCATOR_SERVICE_GUIDE.md](docs/LOCATOR_SERVICE_GUIDE.md) - Guia do serviço de locators
> **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.
>
> **Nota**: A versão 1.3.3 aprimora o LocatorService com validação robusta e tratamento de valores vazios.
>
> **Nota**: A versão 1.3.4 adiciona modos de retorno parametrizáveis (STD e PYWINAUTO) ao LocatorService.
>
> **Nota**: A versão 1.3.5 expande o LocatorService com suporte a dimensões e cálculo de centro dos elementos.
>
> **Nota**: A versão 1.3.6 introduz o RMNavigator para navegação automática no sistema TOTVS RM.
## 🤝 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](LICENSE).
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/eb/70/69f3f39d5a031022e361844606852efaf545e71fba30793964ba731f99f0/fidi_common_libraries-1.3.6.tar.gz",
"platform": null,
"description": "# FIDI Common Libraries\n\nBibliotecas compartilhadas entre os projetos da FIDI, desenvolvidas seguindo as melhores pr\u00e1ticas de desenvolvimento Python.\n\n## \ud83d\udccb Vis\u00e3o Geral\n\nEste projeto fornece um conjunto de bibliotecas reutiliz\u00e1veis para automa\u00e7\u00e3o, integra\u00e7\u00e3o AWS, processamento de dados e utilit\u00e1rios comuns utilizados nos projetos da FIDI.\n\n## \ud83d\ude80 Funcionalidades Principais\n\n- **Data**: Opera\u00e7\u00f5es de banco de dados multi-SGBD (Oracle via oracledb, PostgreSQL, SQL Server)\n- **Utils**: Sistema de logging estruturado para m\u00faltiplos SGBDs\n- **Constants**: Constantes de status padronizadas e fun\u00e7\u00f5es de convers\u00e3o entre diferentes tipos de status\n- **AWS**: Clientes padronizados para SQS, SNS, Lambda, S3 com configura\u00e7\u00e3o centralizada\n- **Config**: Gerenciamento de par\u00e2metros com cache e convers\u00e3o autom\u00e1tica de tipos\n- **UI**: Componentes para automa\u00e7\u00e3o de interfaces gr\u00e1ficas com Pywinauto, incluindo inspetor de elementos\n\n## \ud83d\udce6 Instala\u00e7\u00e3o e Configura\u00e7\u00e3o\n\n### Pr\u00e9-requisitos\n- Python 3.9+\n- Poetry\n\n### Instala\u00e7\u00e3o como Biblioteca\n```bash\n# Instalar via Poetry (recomendado)\npoetry add git+https://github.com/your-org/fidi-common-libraries.git\n\n# Ou via pip\npip install git+https://github.com/your-org/fidi-common-libraries.git\n```\n\n### Desenvolvimento Local\n```bash\n# Clone o reposit\u00f3rio\ngit clone <repository-url>\ncd fidi-common-libraries\n\n# Instale as depend\u00eancias\npoetry install\n\n# Ative o ambiente virtual\npoetry shell\n```\n\n### Configura\u00e7\u00e3o de Desenvolvimento\n```bash\n# Instale os hooks de pre-commit\npoetry run pre-commit install\n\n# Execute os testes\npoetry run pytest\n\n# Verifique a cobertura de testes\npoetry run pytest --cov=src --cov-report=html\n```\n\n## \ud83d\udd27 Como Usar\n\n### M\u00f3dulo Data - Opera\u00e7\u00f5es de Banco\n\n```python\nfrom fidi_common_libraries.data.db_data import DatabaseConfig, DatabaseQuery, ProcessosRpaInserter, ProcessosRpaUpdater\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\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# 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## \ud83c\udfd7\ufe0f Estrutura do Projeto\n\n```\nfidi-common-libraries/\n\u251c\u2500\u2500 src/\n\u2502 \u2514\u2500\u2500 fidi_common_libraries/\n\u2502 \u251c\u2500\u2500 aws/ # Utilit\u00e1rios AWS\n\u2502 \u251c\u2500\u2500 config/ # Gerenciamento de configura\u00e7\u00f5es e par\u00e2metros\n\u2502 \u251c\u2500\u2500 constants/ # Constantes e enums compartilhados\n\u2502 \u251c\u2500\u2500 data/ # Processamento de dados e acesso a banco\n\u2502 \u251c\u2500\u2500 ui/ # Automa\u00e7\u00e3o de UI\n\u2502 \u2502 \u251c\u2500\u2500 core/ # Componentes principais\n\u2502 \u2502 \u251c\u2500\u2500 utils/ # Utilit\u00e1rios (inspector, screenshot)\n\u2502 \u2502 \u2514\u2500\u2500 locators/ # Servi\u00e7os de locators\n\u2502 \u2514\u2500\u2500 utils/ # Utilit\u00e1rios gerais e logging\n\u251c\u2500\u2500 tests/\n\u2502 \u251c\u2500\u2500 unit/ # Testes unit\u00e1rios\n\u2502 \u251c\u2500\u2500 integration/ # Testes de integra\u00e7\u00e3o\n\u2502 \u2514\u2500\u2500 e2e/ # Testes end-to-end\n\u251c\u2500\u2500 docs/ # Documenta\u00e7\u00e3o\n\u251c\u2500\u2500 scripts/ # Scripts auxiliares\n\u2514\u2500\u2500 resources/ # Recursos est\u00e1ticos\n```\n\n## \ud83e\uddea Testes\n\nO projeto mant\u00e9m uma cobertura de testes superior a 85%:\n\n```bash\n# Executar todos os testes\npoetry run pytest\n\n# Executar com cobertura\npoetry run pytest --cov=src --cov-report=term-missing\n\n# Executar apenas testes unit\u00e1rios\npoetry run pytest tests/unit/\n```\n\n## \ud83d\udcca Qualidade de C\u00f3digo\n\nFerramentas utilizadas:\n- **Black**: Formata\u00e7\u00e3o autom\u00e1tica\n- **Flake8**: Linting\n- **MyPy**: Verifica\u00e7\u00e3o de tipos\n- **Bandit**: An\u00e1lise de seguran\u00e7a\n\n```bash\n# Formata\u00e7\u00e3o\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## \ud83d\udcda Documenta\u00e7\u00e3o\n\n- [INSTALL.md](INSTALL.md) - Guia completo de instala\u00e7\u00e3o e uso\n- [CHANGELOG.md](CHANGELOG.md) - Hist\u00f3rico de mudan\u00e7as\n- [STATUS_ATUAL.md](STATUS_ATUAL.md) - Estado atual do projeto\n- [docs/UI_MODULE_GUIDE.md](docs/UI_MODULE_GUIDE.md) - Guia completo do m\u00f3dulo UI\n- [docs/UI_INSPECTOR_GUIDE.md](docs/UI_INSPECTOR_GUIDE.md) - Guia do inspetor de elementos UI\n- [docs/RM_NAVIGATOR_GUIDE.md](docs/RM_NAVIGATOR_GUIDE.md) - Guia do navegador RM\n- [docs/LOCATOR_SERVICE_GUIDE.md](docs/LOCATOR_SERVICE_GUIDE.md) - Guia do servi\u00e7o de locators\n\n> **Nota**: A partir da vers\u00e3o 1.2.0, este projeto utiliza apenas a biblioteca `oracledb` para conex\u00f5es Oracle, removendo a depend\u00eancia do `cx_Oracle`.\n>\n> **Nota**: A vers\u00e3o 1.3.0 introduz o m\u00f3dulo `ui` para automa\u00e7\u00e3o de interfaces gr\u00e1ficas com Pywinauto.\n>\n> **Nota**: A vers\u00e3o 1.3.1 adiciona funcionalidades avan\u00e7adas de inicializa\u00e7\u00e3o e gerenciamento da aplica\u00e7\u00e3o RM.\n>\n> **Nota**: A vers\u00e3o 1.3.2 introduz o LocatorService para gerenciamento de locators via arquivos YAML.\n>\n> **Nota**: A vers\u00e3o 1.3.3 aprimora o LocatorService com valida\u00e7\u00e3o robusta e tratamento de valores vazios.\n>\n> **Nota**: A vers\u00e3o 1.3.4 adiciona modos de retorno parametriz\u00e1veis (STD e PYWINAUTO) ao LocatorService.\n>\n> **Nota**: A vers\u00e3o 1.3.5 expande o LocatorService com suporte a dimens\u00f5es e c\u00e1lculo de centro dos elementos.\n>\n> **Nota**: A vers\u00e3o 1.3.6 introduz o RMNavigator para navega\u00e7\u00e3o autom\u00e1tica no sistema TOTVS RM.\n\n## \ud83e\udd1d Contribui\u00e7\u00e3o\n\n1. Siga as diretrizes estabelecidas em `.amazonq/rules/`\n2. Mantenha a cobertura de testes acima de 85%\n3. Execute os pre-commit hooks antes de fazer commit\n4. Atualize a documenta\u00e7\u00e3o conforme necess\u00e1rio\n\n## \ud83d\udcc4 Licen\u00e7a\n\nEste projeto est\u00e1 licenciado sob os termos definidos no arquivo [LICENSE](LICENSE).",
"bugtrack_url": null,
"license": "MIT",
"summary": "Bibliotecas compartilhadas entre os projetos da FIDI",
"version": "1.3.6",
"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": "018ef3d24c38b4980c82b50d34c39e54fbef7ece8e94f09de7c1a9c85e74fd2b",
"md5": "3a3ff618b19dce41c9598a46d4718b6c",
"sha256": "1658208864e17eadaf49bed20c4d5f39a6b7b26204f640f849c530e58154a4d9"
},
"downloads": -1,
"filename": "fidi_common_libraries-1.3.6-py3-none-any.whl",
"has_sig": false,
"md5_digest": "3a3ff618b19dce41c9598a46d4718b6c",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.11",
"size": 77619,
"upload_time": "2025-07-27T03:15:44",
"upload_time_iso_8601": "2025-07-27T03:15:44.138678Z",
"url": "https://files.pythonhosted.org/packages/01/8e/f3d24c38b4980c82b50d34c39e54fbef7ece8e94f09de7c1a9c85e74fd2b/fidi_common_libraries-1.3.6-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "eb7069f3f39d5a031022e361844606852efaf545e71fba30793964ba731f99f0",
"md5": "a2bf958e09e79a4312b6a3634ececbdd",
"sha256": "022ed21babd6898a126e891eda8820b0f9312e035042edb52bc30e4adacdd80b"
},
"downloads": -1,
"filename": "fidi_common_libraries-1.3.6.tar.gz",
"has_sig": false,
"md5_digest": "a2bf958e09e79a4312b6a3634ececbdd",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.11",
"size": 62901,
"upload_time": "2025-07-27T03:15:45",
"upload_time_iso_8601": "2025-07-27T03:15:45.676011Z",
"url": "https://files.pythonhosted.org/packages/eb/70/69f3f39d5a031022e361844606852efaf545e71fba30793964ba731f99f0/fidi_common_libraries-1.3.6.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-27 03:15:45",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "exolyze",
"github_project": "FIDI-common-libraries",
"github_not_found": true,
"lcname": "fidi-common-libraries"
}