worker-automate-hub 0.5.8__py3-none-any.whl → 0.5.10__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,38 @@
1
+ import asyncio
2
+ import aiohttp
3
+ from rich.console import Console
4
+ from worker_automate_hub.config.settings import load_env_config
5
+ from worker_automate_hub.utils.logger import logger
6
+
7
+ console = Console()
8
+
9
+ async def send_rdp_action(uuid_robo: str, action: str):
10
+ env_config, _ = load_env_config()
11
+
12
+ body = {
13
+ "uuidRobo": uuid_robo,
14
+ "action": action
15
+ }
16
+
17
+ headers_basic = {"Authorization": f"Basic {env_config['API_AUTHORIZATION']}"}
18
+ url = f"{env_config['API_BASE_URL']}/robo/api/manage"
19
+
20
+ try:
21
+ async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(verify_ssl=True)) as session:
22
+ async with session.post(url, json=body, headers=headers_basic) as response:
23
+ if response.status == 200:
24
+ data = await response.json()
25
+ logger.info(f"Ação '{action}' enviada com sucesso: {data}")
26
+ console.print(f"Ação '{action}' enviada com sucesso.", style="bold green")
27
+ return data
28
+ else:
29
+ err_msg = f"Erro ao enviar ação '{action}': {response.status} - {await response.text()}"
30
+ logger.error(err_msg)
31
+ console.print(err_msg, style="bold red")
32
+ return {"error": err_msg}
33
+
34
+ except Exception as e:
35
+ err_msg = f"Erro ao comunicar com o endpoint RDP: {e}"
36
+ logger.error(err_msg)
37
+ console.print(err_msg, style="bold red")
38
+ return {"error": str(e)}
@@ -24,7 +24,7 @@ class RDPConnection:
24
24
  self.user = task.configEntrada.get("user")
25
25
  self.password = task.configEntrada.get("password")
26
26
  self.processo = task.configEntrada.get("processo")
27
- self.uuid_robo = task.configEntrada.get("uuid_robo")
27
+ self.uuid_robo = task.configEntrada.get("uuidRobo")
28
28
 
29
29
  async def verificar_conexao(self) -> bool:
30
30
  sistema_operacional = platform.system().lower()
@@ -206,7 +206,7 @@ async def conexao_rdp(task: RpaProcessoRdpDTO) -> RpaRetornoProcessoDTO:
206
206
  if sucesso_conexao:
207
207
  console.print("Processo de conexão RDP executado com sucesso.")
208
208
 
209
- await rdp.clicar_no_titulo()
209
+ #await rdp.clicar_no_titulo()
210
210
 
211
211
  #Altera coluna ativo para true or false
212
212
  await change_robot_status_true(rdp.uuid_robo)
@@ -0,0 +1,131 @@
1
+ import asyncio
2
+ import platform
3
+ import subprocess
4
+ import socket
5
+ import pyautogui
6
+ import pygetwindow as gw
7
+ from rich.console import Console
8
+ from pywinauto import Application
9
+ from worker_automate_hub.api.rdp_service import send_rdp_action
10
+ from worker_automate_hub.models.dto.rpa_historico_request_dto import RpaHistoricoStatusEnum, RpaRetornoProcessoDTO
11
+ from worker_automate_hub.models.dto.rpa_processo_rdp_dto import RpaProcessoRdpDTO
12
+ from worker_automate_hub.utils.logger import logger
13
+ from worker_automate_hub.utils.util import worker_sleep
14
+
15
+ console = Console()
16
+
17
+ class RDPConnection:
18
+ def __init__(self, task: RpaProcessoRdpDTO):
19
+ self.task = task
20
+ self.ip = task.configEntrada.get("ip")
21
+ self.user = task.configEntrada.get("user")
22
+ self.password = task.configEntrada.get("password")
23
+ self.processo = task.configEntrada.get("processo")
24
+ self.uuid_robo = task.configEntrada.get("uuid_robo")
25
+
26
+ async def verificar_conexao(self) -> bool:
27
+ """
28
+ Verifica a conectividade com o host remoto via ping e verificação da porta RDP (3389).
29
+ """
30
+ sistema_operacional = platform.system().lower()
31
+ console.print(f"Sistema operacional detectado: {sistema_operacional}")
32
+
33
+ comando_ping = (
34
+ ["ping", "-n", "1", "-w", "1000", self.ip] if sistema_operacional == "windows" else ["ping", "-c", "1", "-W", "1", self.ip]
35
+ )
36
+ console.print(f"Executando comando de ping: {' '.join(comando_ping)}")
37
+
38
+ try:
39
+ resposta_ping = subprocess.run(comando_ping, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
40
+ ping_alcancado = resposta_ping.returncode == 0
41
+ console.print(f"Ping {'sucesso' if ping_alcancado else 'falhou'}")
42
+ except Exception as e:
43
+ console.print(f"Erro ao executar ping: {e}")
44
+ ping_alcancado = False
45
+
46
+ porta_aberta = False
47
+ try:
48
+ with socket.create_connection((self.ip, 3389), timeout=10):
49
+ console.print(f"Porta 3389 aberta em {self.ip}")
50
+ porta_aberta = True
51
+ except (socket.timeout, OSError) as e:
52
+ console.print(f"Erro ao verificar a porta RDP: {e}")
53
+
54
+ return ping_alcancado and porta_aberta
55
+
56
+ async def desligar(self):
57
+ """
58
+ Fecha a conexão RDP interagindo com a janela do cliente RDP.
59
+ """
60
+ janelas_rdp = [
61
+ win
62
+ for win in gw.getAllTitles()
63
+ if self.ip in win
64
+ ]
65
+
66
+ if not janelas_rdp:
67
+ console.print(f"Nenhuma janela RDP encontrada para o IP: {self.ip}")
68
+ return
69
+
70
+ for titulo in janelas_rdp:
71
+ janela = gw.getWindowsWithTitle(titulo)[0]
72
+ if not janela:
73
+ console.print(f"Erro ao localizar a janela: {titulo}")
74
+ continue
75
+
76
+ try:
77
+ janela = gw.getWindowsWithTitle(titulo)[0]
78
+ console.print(f"Processando janela: {titulo}")
79
+
80
+ app = Application(backend="uia").connect(title=titulo)
81
+ app_window = app.window(title=titulo)
82
+ console.print(f"Janela encontrada: {titulo}")
83
+
84
+ if not app or not app_window:
85
+ raise Exception("Nenhuma janela com título correspondente foi encontrada.")
86
+
87
+ app_window.set_focus()
88
+ console.print("Janela RDP ativada.")
89
+
90
+ x, y = janela.left, janela.top
91
+
92
+ pyautogui.moveTo(x + 2, y + 2)
93
+ pyautogui.hotkey("alt", "space")
94
+ await worker_sleep(2)
95
+ pyautogui.press("down", presses=10, interval=0.1)
96
+ await worker_sleep(2)
97
+ pyautogui.press("enter")
98
+ await worker_sleep(2)
99
+ pyautogui.press("enter")
100
+ break
101
+
102
+ except Exception as e:
103
+ console.print(f"Erro ao interagir com a janela {titulo}: {e}")
104
+ raise(e)
105
+
106
+ async def fechar_conexao_rdp(task: RpaProcessoRdpDTO) -> RpaRetornoProcessoDTO:
107
+ """
108
+ Gerencia o processo de fechamento da conexão RDP e retorna um status do processo.
109
+ """
110
+ try:
111
+ rdp_connection = RDPConnection(task)
112
+ console.print("Iniciando o fechamento da conexão RDP.")
113
+ conectado = await rdp_connection.verificar_conexao()
114
+
115
+ if not conectado:
116
+ msg = f"A máquina informada não está ligada. Verifique o IP: {rdp_connection.ip} e a disponibilidade da porta."
117
+ logger.warning(msg)
118
+ return RpaRetornoProcessoDTO(sucesso=False, retorno=msg, status=RpaHistoricoStatusEnum.Falha)
119
+
120
+ await rdp_connection.desligar()
121
+ await send_rdp_action(rdp_connection.uuid_robo, "stop")
122
+
123
+ return RpaRetornoProcessoDTO(
124
+ sucesso=True,
125
+ retorno="Conexão RDP encerrada com sucesso.",
126
+ status=RpaHistoricoStatusEnum.Sucesso,
127
+ )
128
+ except Exception as ex:
129
+ err_msg = f"Erro ao executar o fechamento da conexão RDP para a máquina {rdp_connection.ip}: {ex}"
130
+ console.print(err_msg)
131
+ return RpaRetornoProcessoDTO(sucesso=False, retorno=err_msg, status=RpaHistoricoStatusEnum.Falha)
@@ -4,6 +4,7 @@ from worker_automate_hub.tasks.jobs.coleta_dje_process import (
4
4
  coleta_dje_start_update,
5
5
  )
6
6
  from worker_automate_hub.tasks.jobs.conexao_rdp import conexao_rdp
7
+ from worker_automate_hub.tasks.jobs.fechar_conexao_rdp import fechar_conexao_rdp
7
8
  from worker_automate_hub.tasks.jobs.descartes import descartes
8
9
  from worker_automate_hub.tasks.jobs.ecac_estadual_main import (
9
10
  ecac_estadual_main,
@@ -61,6 +62,7 @@ task_definitions = {
61
62
  "abcfa1ba-d580-465a-aefb-c15ac4514407": descartes,
62
63
  "2c8ee738-7447-4517-aee7-ce2c9d25cea9": transferencias,
63
64
  "855f9e0f-e972-4f52-bc1a-60d1fc244e79": conexao_rdp,
65
+ "d36b0c83-9cc3-465f-ac80-934099a0e661": fechar_conexao_rdp,
64
66
  "81785803-0594-4bba-9aa0-7f220c200296": coleta_dje_start_update,
65
67
  "3907c8d4-d05b-4d92-b19a-2c4e934f1d78": ecac_estadual_main,
66
68
  "81d2d6e6-e9eb-414d-a939-d220476d2bab": ecac_federal,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: worker-automate-hub
3
- Version: 0.5.8
3
+ Version: 0.5.10
4
4
  Summary: Worker Automate HUB é uma aplicação para automatizar rotinas de RPA nos ambientes Argenta.
5
5
  Author: Joel Paim
6
6
  Requires-Python: >=3.12,<4.0
@@ -4,6 +4,7 @@ worker_automate_hub/api/ahead_service.py,sha256=0tX-i1ACRg3_yOI-_AfFEZ6FNU3L8Zb3
4
4
  worker_automate_hub/api/client.py,sha256=tFrIr4mpjvUJ1uU--BCiWa3NT2Ru_yliBsWmfiGt1LA,19720
5
5
  worker_automate_hub/api/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  worker_automate_hub/api/helpers/api_helpers.py,sha256=SkheO2fXexeh-a4shr8Qzsz_kZhuSG0DJ7kbODctRbM,3696
7
+ worker_automate_hub/api/rdp_service.py,sha256=cDG3RP59U1m2rRX51IMqqKwkQ2-Rgl0PRJ8e4cXyhjs,1547
7
8
  worker_automate_hub/api/rpa_fila_service.py,sha256=K_8EL5P6Y_CHs-f9ZGTsuUUjMd2fu4wN4NieHvMijKs,2100
8
9
  worker_automate_hub/api/rpa_historico_service.py,sha256=GZ3umxvSGNecQsffIRwgfmgpXHDFWq8EiBuAYqtrMNQ,4761
9
10
  worker_automate_hub/api/webhook_service.py,sha256=9KvTv1U02CSYpf_vLnqs4RZqZzR7Mn0v1OVOI451yOM,1762
@@ -32,7 +33,7 @@ worker_automate_hub/models/dto/rpa_sistema_dto.py,sha256=sLkmJei8x6sl-1-IXUKDmYQ
32
33
  worker_automate_hub/tasks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
34
  worker_automate_hub/tasks/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
35
  worker_automate_hub/tasks/jobs/coleta_dje_process.py,sha256=rf4fW-FaHUl1MS7b03z4cwI3zHfNw8FWxvjvNY3Xn20,28773
35
- worker_automate_hub/tasks/jobs/conexao_rdp.py,sha256=l0lF8v1xMQSHX3506TFQJd5eZX2dLEo2jDzZG8jyeDc,9421
36
+ worker_automate_hub/tasks/jobs/conexao_rdp.py,sha256=fUjTQ1mcU-whoN23tCdny4CVF2SNN_g1vk2WpIxg5e8,9421
36
37
  worker_automate_hub/tasks/jobs/descartes.py,sha256=RIjrZIzkW77NiKeXbxFN9k872cz3fl9cG1m5TJpjmmY,40134
37
38
  worker_automate_hub/tasks/jobs/ecac_estadual_go.py,sha256=aPckQRlRozFS_OK3C9wNdMCmqO6AM4djwqY2uSSaPmo,20687
38
39
  worker_automate_hub/tasks/jobs/ecac_estadual_main.py,sha256=FFpAdtZLO4uelWZooCVpm4JePv_iDt5nwVKrk1ipZJQ,1599
@@ -53,13 +54,14 @@ worker_automate_hub/tasks/jobs/entrada_de_notas_505.py,sha256=jIml8gjXPdI6_x7S9V
53
54
  worker_automate_hub/tasks/jobs/entrada_de_notas_7139.py,sha256=oxH2CUJj3UyhYoSxEY2hUr_6wFgZPLcHswEbApIu8VY,15558
54
55
  worker_automate_hub/tasks/jobs/entrada_de_notas_9.py,sha256=Urt_7dZNuyUkSyG9fYb2ArBXzEONXlrqWIesoXeL1EI,50984
55
56
  worker_automate_hub/tasks/jobs/exemplo_processo.py,sha256=3-zxbb-9YHPmSA_K1Qgxp_FwSqg2QDjGBRCLxDZ8QoQ,3451
57
+ worker_automate_hub/tasks/jobs/fechar_conexao_rdp.py,sha256=zdr988qpz0RSY88yjxLOCwhSIvAUW83qGAgvqK8jZN0,5446
56
58
  worker_automate_hub/tasks/jobs/fidc_gerar_nosso_numero.py,sha256=mZ6mCaz1lYmyFxwC8MVLXPsgynE1VkNKlEzYGsciDiY,10179
57
59
  worker_automate_hub/tasks/jobs/fidc_remessa_cobranca_cnab240.py,sha256=QBGm6eS5JghgNWNqZlk1g2a2iV8LnBLiOTBBL3Giet0,4181
58
60
  worker_automate_hub/tasks/jobs/login_emsys.py,sha256=IoGCIvO4UwmuxOZEn3cvYJlKyhsWvtHvbFk8vwjTroQ,5620
59
61
  worker_automate_hub/tasks/jobs/playground.py,sha256=bdnXv3C7WLQUxt4edGZDfAbRJJ2-q4zuIQaK3GLnaUc,1765
60
62
  worker_automate_hub/tasks/jobs/sped_fiscal.py,sha256=_byvD7i_N3pgPjQd1lc0XNKCFONIPbmvX3_jq5AnbKY,26707
61
63
  worker_automate_hub/tasks/jobs/transferencias.py,sha256=zwCbVTwX15SCeLtvYgAyENeUSIuETx4Z9Cysr1Es8Jo,38013
62
- worker_automate_hub/tasks/task_definitions.py,sha256=2Jp1H4_qJZqqGyaP6MA87KLt4QNrtWBYWbXu-2gymFo,4459
64
+ worker_automate_hub/tasks/task_definitions.py,sha256=KG84tDaTlCpthdYmdR1193BOudELGcoglmIpQpd2PLQ,4606
63
65
  worker_automate_hub/tasks/task_executor.py,sha256=3haqLIb5ZPOpr1g20SED0b6sm_pGFinmZMpE4AJRrlo,9582
64
66
  worker_automate_hub/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
67
  worker_automate_hub/utils/env.py,sha256=TacQjGRO7PUNpttrhTAc5Gnegaiysl2Knsv1P8qfkfs,57
@@ -70,7 +72,7 @@ worker_automate_hub/utils/updater.py,sha256=en2FCGhI8aZ-JNP3LQm64NJDc4awCNW7UhbV
70
72
  worker_automate_hub/utils/util.py,sha256=3XNBaYVbJ-KgWyHDKY2jIFuQzgBQs-w1d5iEQZv1D4U,125867
71
73
  worker_automate_hub/utils/utils_nfe_entrada.py,sha256=p5r_L5k7gqCBvV8v6dbLFM6INKiSpGc4Gegid0_YAh4,29017
72
74
  worker_automate_hub/worker.py,sha256=tftQpX8liC-_0_bOUf1YYzXSCvloMQBvjmQ6lzfEE-c,4816
73
- worker_automate_hub-0.5.8.dist-info/entry_points.txt,sha256=sddyhjx57I08RY8X7UxcTpdoOsWULAWNKN9Xr6pp_Kw,54
74
- worker_automate_hub-0.5.8.dist-info/METADATA,sha256=J08lr7fCd3ifeDcKcXZDLSQcADVFUIvJsQfz5guQr1I,2893
75
- worker_automate_hub-0.5.8.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
76
- worker_automate_hub-0.5.8.dist-info/RECORD,,
75
+ worker_automate_hub-0.5.10.dist-info/entry_points.txt,sha256=sddyhjx57I08RY8X7UxcTpdoOsWULAWNKN9Xr6pp_Kw,54
76
+ worker_automate_hub-0.5.10.dist-info/METADATA,sha256=wuiX3o9vZLo-k3Gz67TSZL3DpBjM9H2zhOUyGHsKKFI,2894
77
+ worker_automate_hub-0.5.10.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
78
+ worker_automate_hub-0.5.10.dist-info/RECORD,,