zsynctech-studio-sdk 0.1.0__tar.gz
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.
- zsynctech_studio_sdk-0.1.0/.github/workflows/deploy.yml +61 -0
- zsynctech_studio_sdk-0.1.0/.gitignore +10 -0
- zsynctech_studio_sdk-0.1.0/.python-version +1 -0
- zsynctech_studio_sdk-0.1.0/PKG-INFO +289 -0
- zsynctech_studio_sdk-0.1.0/README.md +276 -0
- zsynctech_studio_sdk-0.1.0/log.log +0 -0
- zsynctech_studio_sdk-0.1.0/pyproject.toml +28 -0
- zsynctech_studio_sdk-0.1.0/src/zsynctech_studio_sdk/__init__.py +21 -0
- zsynctech_studio_sdk-0.1.0/src/zsynctech_studio_sdk/client.py +39 -0
- zsynctech_studio_sdk-0.1.0/src/zsynctech_studio_sdk/enums/__init__.py +10 -0
- zsynctech_studio_sdk-0.1.0/src/zsynctech_studio_sdk/enums/execution.py +11 -0
- zsynctech_studio_sdk-0.1.0/src/zsynctech_studio_sdk/enums/step.py +8 -0
- zsynctech_studio_sdk-0.1.0/src/zsynctech_studio_sdk/enums/task.py +9 -0
- zsynctech_studio_sdk-0.1.0/src/zsynctech_studio_sdk/execution.py +156 -0
- zsynctech_studio_sdk-0.1.0/src/zsynctech_studio_sdk/models/__init__.py +12 -0
- zsynctech_studio_sdk-0.1.0/src/zsynctech_studio_sdk/models/base.py +47 -0
- zsynctech_studio_sdk-0.1.0/src/zsynctech_studio_sdk/models/config.py +32 -0
- zsynctech_studio_sdk-0.1.0/src/zsynctech_studio_sdk/models/execution.py +18 -0
- zsynctech_studio_sdk-0.1.0/src/zsynctech_studio_sdk/models/step.py +28 -0
- zsynctech_studio_sdk-0.1.0/src/zsynctech_studio_sdk/models/task.py +29 -0
- zsynctech_studio_sdk-0.1.0/src/zsynctech_studio_sdk/start.py +88 -0
- zsynctech_studio_sdk-0.1.0/src/zsynctech_studio_sdk/step.py +90 -0
- zsynctech_studio_sdk-0.1.0/src/zsynctech_studio_sdk/task.py +103 -0
- zsynctech_studio_sdk-0.1.0/src/zsynctech_studio_sdk/utils.py +21 -0
- zsynctech_studio_sdk-0.1.0/uv.lock +264 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
name: Deploy
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ master ]
|
|
6
|
+
workflow_dispatch: # permite rodar manualmente
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
publish:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
|
|
12
|
+
steps:
|
|
13
|
+
- name: Checkout repository
|
|
14
|
+
uses: actions/checkout@v4
|
|
15
|
+
with:
|
|
16
|
+
fetch-depth: 0
|
|
17
|
+
|
|
18
|
+
- name: Set up Python
|
|
19
|
+
uses: actions/setup-python@v5
|
|
20
|
+
with:
|
|
21
|
+
python-version: "3.11"
|
|
22
|
+
|
|
23
|
+
- name: Install uv
|
|
24
|
+
run: pip install uv
|
|
25
|
+
|
|
26
|
+
- name: Install dependencies
|
|
27
|
+
run: uv sync --all-extras --dev
|
|
28
|
+
|
|
29
|
+
- name: Build package
|
|
30
|
+
run: uv build
|
|
31
|
+
|
|
32
|
+
- name: Get project version
|
|
33
|
+
id: version
|
|
34
|
+
run: |
|
|
35
|
+
VERSION=$(uv run python -c "import tomllib; print(tomllib.load(open('pyproject.toml','rb'))['project']['version'])")
|
|
36
|
+
echo "VERSION=$VERSION" >> $GITHUB_ENV
|
|
37
|
+
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
38
|
+
|
|
39
|
+
- name: Create git tag if not exists
|
|
40
|
+
run: |
|
|
41
|
+
if git ls-remote --tags origin | grep -q "refs/tags/v${{ env.VERSION }}"; then
|
|
42
|
+
echo "Tag v${{ env.VERSION }} already exists, skipping tag creation."
|
|
43
|
+
else
|
|
44
|
+
git config user.name "github-actions[bot]"
|
|
45
|
+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
46
|
+
git tag v${{ env.VERSION }}
|
|
47
|
+
git push origin v${{ env.VERSION }}
|
|
48
|
+
fi
|
|
49
|
+
|
|
50
|
+
- name: Publish package
|
|
51
|
+
env:
|
|
52
|
+
UV_PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
|
|
53
|
+
UV_TEST_PYPI_TOKEN: ${{ secrets.TEST_PYPI_TOKEN }}
|
|
54
|
+
run: |
|
|
55
|
+
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
|
56
|
+
echo "Publishing to TestPyPI..."
|
|
57
|
+
uv publish --username __token__ --password $UV_TEST_PYPI_TOKEN --index-url https://test.pypi.org/legacy/
|
|
58
|
+
else
|
|
59
|
+
echo "Publishing to PyPI..."
|
|
60
|
+
uv publish --username __token__ --password $UV_PYPI_TOKEN
|
|
61
|
+
fi
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.13
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: zsynctech-studio-sdk
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Lib
|
|
5
|
+
Author-email: ZSync Tech LTDA <contato@zsynctech.com>
|
|
6
|
+
Requires-Python: >=3.13
|
|
7
|
+
Requires-Dist: httpx>=0.28.1
|
|
8
|
+
Requires-Dist: pika>=1.3.2
|
|
9
|
+
Requires-Dist: pydantic>=2.11.7
|
|
10
|
+
Requires-Dist: rich>=14.1.0
|
|
11
|
+
Requires-Dist: uuid7>=0.1.0
|
|
12
|
+
Description-Content-Type: text/markdown
|
|
13
|
+
|
|
14
|
+
# ZSync Tech Studio SDK
|
|
15
|
+
|
|
16
|
+
SDK oficial da ZSync Tech para integração com o ZSync Tech Studio, uma plataforma de automação de processos. Este SDK permite que você desenvolva robôs de automação que se integram perfeitamente com o ecossistema ZSync Tech.
|
|
17
|
+
|
|
18
|
+

|
|
19
|
+
|
|
20
|
+
## 📋 Índice
|
|
21
|
+
|
|
22
|
+
- [Instalação](#instalação)
|
|
23
|
+
- [Configuração Inicial](#configuração-inicial)
|
|
24
|
+
- [Conceitos Básicos](#conceitos-básicos)
|
|
25
|
+
- [Guia de Uso](#guia-de-uso)
|
|
26
|
+
- [StartService - Recebendo Configurações](#startservice---recebendo-configurações)
|
|
27
|
+
- [Execution - Gerenciando Execuções](#execution---gerenciando-execuções)
|
|
28
|
+
- [Task - Gerenciando Tarefas](#task---gerenciando-tarefas)
|
|
29
|
+
- [Step - Gerenciando Passos](#step---gerenciando-passos)
|
|
30
|
+
- [Exemplo Completo](#exemplo-completo)
|
|
31
|
+
- [API Reference](#api-reference)
|
|
32
|
+
- [Dependências](#dependências)
|
|
33
|
+
- [Suporte](#suporte)
|
|
34
|
+
|
|
35
|
+
## 🚀 Instalação via pip
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
pip install zsynctech-studio-sdk
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## 🚀 Instalação via uv
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
uv add zsynctech-studio-sdk
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## ⚙️ Configuração Inicial
|
|
48
|
+
|
|
49
|
+
Antes de usar o SDK, você precisa configurar suas credenciais:
|
|
50
|
+
|
|
51
|
+
```python
|
|
52
|
+
from zsynctech_studio_sdk import set_credentials
|
|
53
|
+
|
|
54
|
+
# Configure suas credenciais
|
|
55
|
+
set_credentials(
|
|
56
|
+
secret_key="sua_secret_key",
|
|
57
|
+
instance_id="seu_instance_id",
|
|
58
|
+
server="https://seu-servidor.com"
|
|
59
|
+
)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 🧠 Conceitos Básicos
|
|
63
|
+
|
|
64
|
+
O ZSync Tech Studio SDK trabalha com uma hierarquia de conceitos:
|
|
65
|
+
|
|
66
|
+
1. **Execution (Execução)**: Representa uma execução completa de um robô
|
|
67
|
+
2. **Task (Tarefa)**: Uma tarefa específica dentro de uma execução
|
|
68
|
+
3. **Step (Passo)**: Um passo individual dentro de uma tarefa
|
|
69
|
+
|
|
70
|
+
Cada nível pode ter diferentes status e observações para rastreamento detalhado.
|
|
71
|
+
|
|
72
|
+
## 📖 Guia de Uso
|
|
73
|
+
|
|
74
|
+
### StartService - Recebendo Configurações
|
|
75
|
+
|
|
76
|
+
O `StartService` permite que seu robô receba configurações via RabbitMQ:
|
|
77
|
+
|
|
78
|
+
```python
|
|
79
|
+
from zsynctech_studio_sdk import StartService
|
|
80
|
+
|
|
81
|
+
# Configure o serviço
|
|
82
|
+
start_service = StartService(
|
|
83
|
+
rabbitmq_url="amqp://usuario:senha@servidor:5672/",
|
|
84
|
+
heartbeat=5400
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
# Verificar se há configurações disponíveis
|
|
88
|
+
config = start_service.get_start_config()
|
|
89
|
+
if config:
|
|
90
|
+
print(f"Execução recebida: {config.executionId}")
|
|
91
|
+
# Processar a configuração...
|
|
92
|
+
|
|
93
|
+
# Ou usar um listener contínuo
|
|
94
|
+
def process_config(config):
|
|
95
|
+
print(f"Processando execução: {config.executionId}")
|
|
96
|
+
# Sua lógica aqui...
|
|
97
|
+
|
|
98
|
+
start_service.start_listener(process_config)
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Execution - Gerenciando Execuções
|
|
102
|
+
|
|
103
|
+
A classe `Execution` gerencia o ciclo de vida de uma execução:
|
|
104
|
+
|
|
105
|
+
```python
|
|
106
|
+
from zsynctech_studio_sdk import Execution, ExecutionStatus
|
|
107
|
+
|
|
108
|
+
# Criar uma execução
|
|
109
|
+
execution = Execution(config.executionId)
|
|
110
|
+
|
|
111
|
+
# Iniciar a execução
|
|
112
|
+
execution.start("Iniciando processamento...")
|
|
113
|
+
|
|
114
|
+
# Atualizar progresso
|
|
115
|
+
execution.set_total_task_count(100)
|
|
116
|
+
execution.update_current_task_count(50)
|
|
117
|
+
|
|
118
|
+
# Atualizar observação
|
|
119
|
+
execution.update_observation("Processando dados...")
|
|
120
|
+
|
|
121
|
+
# Finalizar com sucesso
|
|
122
|
+
execution.finished("Processamento concluído com sucesso!")
|
|
123
|
+
|
|
124
|
+
# Ou em caso de erro
|
|
125
|
+
execution.error("Erro ao processar dados")
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Task - Gerenciando Tarefas
|
|
129
|
+
|
|
130
|
+
A classe `Task` gerencia tarefas individuais:
|
|
131
|
+
|
|
132
|
+
```python
|
|
133
|
+
from zsynctech_studio_sdk import Task
|
|
134
|
+
|
|
135
|
+
# Criar uma tarefa
|
|
136
|
+
task = Task(
|
|
137
|
+
execution_id=execution.execution_id,
|
|
138
|
+
code="TASK_001",
|
|
139
|
+
description="Processar arquivo de dados"
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
# Usar como context manager (recomendado)
|
|
143
|
+
with task:
|
|
144
|
+
# Sua lógica aqui
|
|
145
|
+
process_file()
|
|
146
|
+
# Status será automaticamente SUCCESS ou FAIL
|
|
147
|
+
|
|
148
|
+
# Ou gerenciar manualmente
|
|
149
|
+
task.start("Iniciando processamento do arquivo")
|
|
150
|
+
try:
|
|
151
|
+
process_file()
|
|
152
|
+
task.success("Arquivo processado com sucesso")
|
|
153
|
+
except Exception as e:
|
|
154
|
+
task.fail(f"Erro ao processar arquivo: {str(e)}")
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Step - Gerenciando Passos
|
|
158
|
+
|
|
159
|
+
A classe `Step` gerencia passos individuais dentro de uma tarefa:
|
|
160
|
+
|
|
161
|
+
```python
|
|
162
|
+
from zsynctech_studio_sdk import Step
|
|
163
|
+
|
|
164
|
+
# Criar um passo
|
|
165
|
+
step = Step(
|
|
166
|
+
task_id=task.task_id,
|
|
167
|
+
code="STEP_001",
|
|
168
|
+
observation="Validando dados"
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
# Usar como context manager (recomendado)
|
|
172
|
+
with step:
|
|
173
|
+
# Sua lógica aqui
|
|
174
|
+
validate_data()
|
|
175
|
+
# Status será automaticamente SUCCESS ou FAIL
|
|
176
|
+
|
|
177
|
+
# Ou gerenciar manualmente
|
|
178
|
+
step._start("Iniciando validação")
|
|
179
|
+
try:
|
|
180
|
+
validate_data()
|
|
181
|
+
step.success("Dados validados com sucesso")
|
|
182
|
+
except Exception as e:
|
|
183
|
+
step.fail(f"Erro na validação: {str(e)}")
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## 💡 Exemplo Completo
|
|
187
|
+
|
|
188
|
+
```python
|
|
189
|
+
from zsynctech_studio_sdk import (
|
|
190
|
+
set_credentials, StartService, Execution, Task, Step
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
# 1. Configurar credenciais
|
|
194
|
+
set_credentials(
|
|
195
|
+
secret_key="sua_secret_key",
|
|
196
|
+
instance_id="seu_instance_id",
|
|
197
|
+
server="https://seu-servidor.com"
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
# 2. Configurar StartService
|
|
201
|
+
start_service = StartService("amqp://usuario:senha@servidor:5672/")
|
|
202
|
+
|
|
203
|
+
def process_automation(config):
|
|
204
|
+
"""Função principal de processamento"""
|
|
205
|
+
|
|
206
|
+
# 3. Criar execução
|
|
207
|
+
execution = Execution(config.executionId)
|
|
208
|
+
execution.start("Iniciando automação")
|
|
209
|
+
|
|
210
|
+
try:
|
|
211
|
+
# 4. Definir total de tarefas
|
|
212
|
+
execution.set_total_task_count(3)
|
|
213
|
+
|
|
214
|
+
# 5. Processar cada tarefa
|
|
215
|
+
for i, data in enumerate(data_to_process):
|
|
216
|
+
with Task(execution.execution_id, f"TASK_{i:03d}", f"Processar {data}") as task:
|
|
217
|
+
|
|
218
|
+
# 6. Processar passos da tarefa
|
|
219
|
+
with Step(task.task_id, "VALIDATE", "Validando arquivo") as step:
|
|
220
|
+
validate_file(data)
|
|
221
|
+
|
|
222
|
+
with Step(task.task_id, "PROCESS", "Processando dados") as step:
|
|
223
|
+
process_file(data)
|
|
224
|
+
|
|
225
|
+
with Step(task.task_id, "SAVE", "Salvando resultado") as step:
|
|
226
|
+
save_result(data)
|
|
227
|
+
|
|
228
|
+
# 7. Atualizar progresso
|
|
229
|
+
execution.update_current_task_count(i)
|
|
230
|
+
|
|
231
|
+
# 8. Finalizar com sucesso
|
|
232
|
+
execution.finished("Automação concluída com sucesso!")
|
|
233
|
+
|
|
234
|
+
except Exception as e:
|
|
235
|
+
execution.error(f"Erro na automação: {str(e)}")
|
|
236
|
+
|
|
237
|
+
# 9. Iniciar listener
|
|
238
|
+
start_service.start_listener(process_automation)
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
## 📚 API Reference
|
|
242
|
+
|
|
243
|
+
### StartService
|
|
244
|
+
|
|
245
|
+
- `__init__(rabbitmq_url: str, heartbeat: int = 5400)`: Inicializa o serviço
|
|
246
|
+
- `get_start_config() -> Optional[Config]`: Obtém configuração disponível
|
|
247
|
+
- `start_listener(callback: Callable)`: Inicia listener contínuo
|
|
248
|
+
- `close()`: Fecha conexão
|
|
249
|
+
|
|
250
|
+
### Execution
|
|
251
|
+
|
|
252
|
+
- `start(observation: Optional[str] = None)`: Inicia execução
|
|
253
|
+
- `finished(observation: Optional[str] = None)`: Finaliza com sucesso
|
|
254
|
+
- `error(observation: Optional[str] = None)`: Marca como erro
|
|
255
|
+
- `waiting(observation: Optional[str] = None)`: Marca como aguardando
|
|
256
|
+
- `set_total_task_count(count: int)`: Define total de tarefas
|
|
257
|
+
- `update_current_task_count(count: int)`: Atualiza progresso
|
|
258
|
+
- `update_observation(observation: str)`: Atualiza observação
|
|
259
|
+
|
|
260
|
+
### Task
|
|
261
|
+
|
|
262
|
+
- `start(observation: Optional[str] = None)`: Inicia tarefa
|
|
263
|
+
- `success(observation: Optional[str] = None)`: Marca como sucesso
|
|
264
|
+
- `fail(observation: Optional[str] = None)`: Marca como falha
|
|
265
|
+
- Suporte a context manager (`with`)
|
|
266
|
+
|
|
267
|
+
### Step
|
|
268
|
+
|
|
269
|
+
- `_start(observation: Optional[str] = None)`: Inicia passo
|
|
270
|
+
- `success(observation: Optional[str] = None)`: Marca como sucesso
|
|
271
|
+
- `fail(observation: Optional[str] = None)`: Marca como falha
|
|
272
|
+
- Suporte a context manager (`with`)
|
|
273
|
+
|
|
274
|
+
## 📦 Dependências
|
|
275
|
+
|
|
276
|
+
- `httpx>=0.28.1` - Cliente HTTP
|
|
277
|
+
- `pika>=1.3.2` - Cliente RabbitMQ
|
|
278
|
+
- `pydantic>=2.11.7` - Validação de dados
|
|
279
|
+
- `rich>=14.1.0` - Interface rica
|
|
280
|
+
- `uuid7>=0.1.0` - Geração de UUIDs
|
|
281
|
+
|
|
282
|
+
## 🆘 Suporte
|
|
283
|
+
|
|
284
|
+
Para suporte técnico, entre em contato:
|
|
285
|
+
|
|
286
|
+
- **Email**: contato@zsynctech.com
|
|
287
|
+
- **Empresa**: ZSync Tech LTDA
|
|
288
|
+
|
|
289
|
+
---
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
# ZSync Tech Studio SDK
|
|
2
|
+
|
|
3
|
+
SDK oficial da ZSync Tech para integração com o ZSync Tech Studio, uma plataforma de automação de processos. Este SDK permite que você desenvolva robôs de automação que se integram perfeitamente com o ecossistema ZSync Tech.
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
## 📋 Índice
|
|
8
|
+
|
|
9
|
+
- [Instalação](#instalação)
|
|
10
|
+
- [Configuração Inicial](#configuração-inicial)
|
|
11
|
+
- [Conceitos Básicos](#conceitos-básicos)
|
|
12
|
+
- [Guia de Uso](#guia-de-uso)
|
|
13
|
+
- [StartService - Recebendo Configurações](#startservice---recebendo-configurações)
|
|
14
|
+
- [Execution - Gerenciando Execuções](#execution---gerenciando-execuções)
|
|
15
|
+
- [Task - Gerenciando Tarefas](#task---gerenciando-tarefas)
|
|
16
|
+
- [Step - Gerenciando Passos](#step---gerenciando-passos)
|
|
17
|
+
- [Exemplo Completo](#exemplo-completo)
|
|
18
|
+
- [API Reference](#api-reference)
|
|
19
|
+
- [Dependências](#dependências)
|
|
20
|
+
- [Suporte](#suporte)
|
|
21
|
+
|
|
22
|
+
## 🚀 Instalação via pip
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
pip install zsynctech-studio-sdk
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## 🚀 Instalação via uv
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
uv add zsynctech-studio-sdk
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## ⚙️ Configuração Inicial
|
|
35
|
+
|
|
36
|
+
Antes de usar o SDK, você precisa configurar suas credenciais:
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
from zsynctech_studio_sdk import set_credentials
|
|
40
|
+
|
|
41
|
+
# Configure suas credenciais
|
|
42
|
+
set_credentials(
|
|
43
|
+
secret_key="sua_secret_key",
|
|
44
|
+
instance_id="seu_instance_id",
|
|
45
|
+
server="https://seu-servidor.com"
|
|
46
|
+
)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## 🧠 Conceitos Básicos
|
|
50
|
+
|
|
51
|
+
O ZSync Tech Studio SDK trabalha com uma hierarquia de conceitos:
|
|
52
|
+
|
|
53
|
+
1. **Execution (Execução)**: Representa uma execução completa de um robô
|
|
54
|
+
2. **Task (Tarefa)**: Uma tarefa específica dentro de uma execução
|
|
55
|
+
3. **Step (Passo)**: Um passo individual dentro de uma tarefa
|
|
56
|
+
|
|
57
|
+
Cada nível pode ter diferentes status e observações para rastreamento detalhado.
|
|
58
|
+
|
|
59
|
+
## 📖 Guia de Uso
|
|
60
|
+
|
|
61
|
+
### StartService - Recebendo Configurações
|
|
62
|
+
|
|
63
|
+
O `StartService` permite que seu robô receba configurações via RabbitMQ:
|
|
64
|
+
|
|
65
|
+
```python
|
|
66
|
+
from zsynctech_studio_sdk import StartService
|
|
67
|
+
|
|
68
|
+
# Configure o serviço
|
|
69
|
+
start_service = StartService(
|
|
70
|
+
rabbitmq_url="amqp://usuario:senha@servidor:5672/",
|
|
71
|
+
heartbeat=5400
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
# Verificar se há configurações disponíveis
|
|
75
|
+
config = start_service.get_start_config()
|
|
76
|
+
if config:
|
|
77
|
+
print(f"Execução recebida: {config.executionId}")
|
|
78
|
+
# Processar a configuração...
|
|
79
|
+
|
|
80
|
+
# Ou usar um listener contínuo
|
|
81
|
+
def process_config(config):
|
|
82
|
+
print(f"Processando execução: {config.executionId}")
|
|
83
|
+
# Sua lógica aqui...
|
|
84
|
+
|
|
85
|
+
start_service.start_listener(process_config)
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Execution - Gerenciando Execuções
|
|
89
|
+
|
|
90
|
+
A classe `Execution` gerencia o ciclo de vida de uma execução:
|
|
91
|
+
|
|
92
|
+
```python
|
|
93
|
+
from zsynctech_studio_sdk import Execution, ExecutionStatus
|
|
94
|
+
|
|
95
|
+
# Criar uma execução
|
|
96
|
+
execution = Execution(config.executionId)
|
|
97
|
+
|
|
98
|
+
# Iniciar a execução
|
|
99
|
+
execution.start("Iniciando processamento...")
|
|
100
|
+
|
|
101
|
+
# Atualizar progresso
|
|
102
|
+
execution.set_total_task_count(100)
|
|
103
|
+
execution.update_current_task_count(50)
|
|
104
|
+
|
|
105
|
+
# Atualizar observação
|
|
106
|
+
execution.update_observation("Processando dados...")
|
|
107
|
+
|
|
108
|
+
# Finalizar com sucesso
|
|
109
|
+
execution.finished("Processamento concluído com sucesso!")
|
|
110
|
+
|
|
111
|
+
# Ou em caso de erro
|
|
112
|
+
execution.error("Erro ao processar dados")
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Task - Gerenciando Tarefas
|
|
116
|
+
|
|
117
|
+
A classe `Task` gerencia tarefas individuais:
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
from zsynctech_studio_sdk import Task
|
|
121
|
+
|
|
122
|
+
# Criar uma tarefa
|
|
123
|
+
task = Task(
|
|
124
|
+
execution_id=execution.execution_id,
|
|
125
|
+
code="TASK_001",
|
|
126
|
+
description="Processar arquivo de dados"
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
# Usar como context manager (recomendado)
|
|
130
|
+
with task:
|
|
131
|
+
# Sua lógica aqui
|
|
132
|
+
process_file()
|
|
133
|
+
# Status será automaticamente SUCCESS ou FAIL
|
|
134
|
+
|
|
135
|
+
# Ou gerenciar manualmente
|
|
136
|
+
task.start("Iniciando processamento do arquivo")
|
|
137
|
+
try:
|
|
138
|
+
process_file()
|
|
139
|
+
task.success("Arquivo processado com sucesso")
|
|
140
|
+
except Exception as e:
|
|
141
|
+
task.fail(f"Erro ao processar arquivo: {str(e)}")
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Step - Gerenciando Passos
|
|
145
|
+
|
|
146
|
+
A classe `Step` gerencia passos individuais dentro de uma tarefa:
|
|
147
|
+
|
|
148
|
+
```python
|
|
149
|
+
from zsynctech_studio_sdk import Step
|
|
150
|
+
|
|
151
|
+
# Criar um passo
|
|
152
|
+
step = Step(
|
|
153
|
+
task_id=task.task_id,
|
|
154
|
+
code="STEP_001",
|
|
155
|
+
observation="Validando dados"
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
# Usar como context manager (recomendado)
|
|
159
|
+
with step:
|
|
160
|
+
# Sua lógica aqui
|
|
161
|
+
validate_data()
|
|
162
|
+
# Status será automaticamente SUCCESS ou FAIL
|
|
163
|
+
|
|
164
|
+
# Ou gerenciar manualmente
|
|
165
|
+
step._start("Iniciando validação")
|
|
166
|
+
try:
|
|
167
|
+
validate_data()
|
|
168
|
+
step.success("Dados validados com sucesso")
|
|
169
|
+
except Exception as e:
|
|
170
|
+
step.fail(f"Erro na validação: {str(e)}")
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## 💡 Exemplo Completo
|
|
174
|
+
|
|
175
|
+
```python
|
|
176
|
+
from zsynctech_studio_sdk import (
|
|
177
|
+
set_credentials, StartService, Execution, Task, Step
|
|
178
|
+
)
|
|
179
|
+
|
|
180
|
+
# 1. Configurar credenciais
|
|
181
|
+
set_credentials(
|
|
182
|
+
secret_key="sua_secret_key",
|
|
183
|
+
instance_id="seu_instance_id",
|
|
184
|
+
server="https://seu-servidor.com"
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
# 2. Configurar StartService
|
|
188
|
+
start_service = StartService("amqp://usuario:senha@servidor:5672/")
|
|
189
|
+
|
|
190
|
+
def process_automation(config):
|
|
191
|
+
"""Função principal de processamento"""
|
|
192
|
+
|
|
193
|
+
# 3. Criar execução
|
|
194
|
+
execution = Execution(config.executionId)
|
|
195
|
+
execution.start("Iniciando automação")
|
|
196
|
+
|
|
197
|
+
try:
|
|
198
|
+
# 4. Definir total de tarefas
|
|
199
|
+
execution.set_total_task_count(3)
|
|
200
|
+
|
|
201
|
+
# 5. Processar cada tarefa
|
|
202
|
+
for i, data in enumerate(data_to_process):
|
|
203
|
+
with Task(execution.execution_id, f"TASK_{i:03d}", f"Processar {data}") as task:
|
|
204
|
+
|
|
205
|
+
# 6. Processar passos da tarefa
|
|
206
|
+
with Step(task.task_id, "VALIDATE", "Validando arquivo") as step:
|
|
207
|
+
validate_file(data)
|
|
208
|
+
|
|
209
|
+
with Step(task.task_id, "PROCESS", "Processando dados") as step:
|
|
210
|
+
process_file(data)
|
|
211
|
+
|
|
212
|
+
with Step(task.task_id, "SAVE", "Salvando resultado") as step:
|
|
213
|
+
save_result(data)
|
|
214
|
+
|
|
215
|
+
# 7. Atualizar progresso
|
|
216
|
+
execution.update_current_task_count(i)
|
|
217
|
+
|
|
218
|
+
# 8. Finalizar com sucesso
|
|
219
|
+
execution.finished("Automação concluída com sucesso!")
|
|
220
|
+
|
|
221
|
+
except Exception as e:
|
|
222
|
+
execution.error(f"Erro na automação: {str(e)}")
|
|
223
|
+
|
|
224
|
+
# 9. Iniciar listener
|
|
225
|
+
start_service.start_listener(process_automation)
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
## 📚 API Reference
|
|
229
|
+
|
|
230
|
+
### StartService
|
|
231
|
+
|
|
232
|
+
- `__init__(rabbitmq_url: str, heartbeat: int = 5400)`: Inicializa o serviço
|
|
233
|
+
- `get_start_config() -> Optional[Config]`: Obtém configuração disponível
|
|
234
|
+
- `start_listener(callback: Callable)`: Inicia listener contínuo
|
|
235
|
+
- `close()`: Fecha conexão
|
|
236
|
+
|
|
237
|
+
### Execution
|
|
238
|
+
|
|
239
|
+
- `start(observation: Optional[str] = None)`: Inicia execução
|
|
240
|
+
- `finished(observation: Optional[str] = None)`: Finaliza com sucesso
|
|
241
|
+
- `error(observation: Optional[str] = None)`: Marca como erro
|
|
242
|
+
- `waiting(observation: Optional[str] = None)`: Marca como aguardando
|
|
243
|
+
- `set_total_task_count(count: int)`: Define total de tarefas
|
|
244
|
+
- `update_current_task_count(count: int)`: Atualiza progresso
|
|
245
|
+
- `update_observation(observation: str)`: Atualiza observação
|
|
246
|
+
|
|
247
|
+
### Task
|
|
248
|
+
|
|
249
|
+
- `start(observation: Optional[str] = None)`: Inicia tarefa
|
|
250
|
+
- `success(observation: Optional[str] = None)`: Marca como sucesso
|
|
251
|
+
- `fail(observation: Optional[str] = None)`: Marca como falha
|
|
252
|
+
- Suporte a context manager (`with`)
|
|
253
|
+
|
|
254
|
+
### Step
|
|
255
|
+
|
|
256
|
+
- `_start(observation: Optional[str] = None)`: Inicia passo
|
|
257
|
+
- `success(observation: Optional[str] = None)`: Marca como sucesso
|
|
258
|
+
- `fail(observation: Optional[str] = None)`: Marca como falha
|
|
259
|
+
- Suporte a context manager (`with`)
|
|
260
|
+
|
|
261
|
+
## 📦 Dependências
|
|
262
|
+
|
|
263
|
+
- `httpx>=0.28.1` - Cliente HTTP
|
|
264
|
+
- `pika>=1.3.2` - Cliente RabbitMQ
|
|
265
|
+
- `pydantic>=2.11.7` - Validação de dados
|
|
266
|
+
- `rich>=14.1.0` - Interface rica
|
|
267
|
+
- `uuid7>=0.1.0` - Geração de UUIDs
|
|
268
|
+
|
|
269
|
+
## 🆘 Suporte
|
|
270
|
+
|
|
271
|
+
Para suporte técnico, entre em contato:
|
|
272
|
+
|
|
273
|
+
- **Email**: contato@zsynctech.com
|
|
274
|
+
- **Empresa**: ZSync Tech LTDA
|
|
275
|
+
|
|
276
|
+
---
|
|
File without changes
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "zsynctech-studio-sdk"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "Lib"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
authors = [
|
|
7
|
+
{ name = "ZSync Tech LTDA", email = "contato@zsynctech.com" }
|
|
8
|
+
]
|
|
9
|
+
requires-python = ">=3.13"
|
|
10
|
+
dependencies = [
|
|
11
|
+
"httpx>=0.28.1",
|
|
12
|
+
"pika>=1.3.2",
|
|
13
|
+
"pydantic>=2.11.7",
|
|
14
|
+
"rich>=14.1.0",
|
|
15
|
+
"uuid7>=0.1.0",
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
[project.scripts]
|
|
19
|
+
zsynctech-studio-sdk = "zsynctech_studio_sdk:master"
|
|
20
|
+
|
|
21
|
+
[build-system]
|
|
22
|
+
requires = ["hatchling"]
|
|
23
|
+
build-backend = "hatchling.build"
|
|
24
|
+
|
|
25
|
+
[dependency-groups]
|
|
26
|
+
dev = [
|
|
27
|
+
"bumpversion>=0.6.0",
|
|
28
|
+
]
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from zsynctech_studio_sdk.client import set_credentials
|
|
2
|
+
from zsynctech_studio_sdk.models.config import Config
|
|
3
|
+
from zsynctech_studio_sdk.start import StartService
|
|
4
|
+
from zsynctech_studio_sdk.execution import Execution
|
|
5
|
+
from zsynctech_studio_sdk.task import Task
|
|
6
|
+
from zsynctech_studio_sdk.step import Step
|
|
7
|
+
import tomllib
|
|
8
|
+
|
|
9
|
+
with open("pyproject.toml", "rb") as f:
|
|
10
|
+
config = tomllib.load(f)
|
|
11
|
+
|
|
12
|
+
__version__ = config.get("project").get("version")
|
|
13
|
+
|
|
14
|
+
__all__ = [
|
|
15
|
+
"set_credentials",
|
|
16
|
+
"StartService",
|
|
17
|
+
"Execution",
|
|
18
|
+
"Task",
|
|
19
|
+
"Step",
|
|
20
|
+
"Config"
|
|
21
|
+
]
|