replaycli-py/api/dataapi/cli.py

148 lines
5.2 KiB
Python
Raw Normal View History

2022-01-20 12:12:44 +00:00
from datetime import datetime
2022-01-19 15:53:42 +00:00
import json
2022-01-20 12:12:44 +00:00
from time import time
2022-01-19 15:53:42 +00:00
import requests
class DataAPI:
"""
## Data API
---
Esta classe permite a execução de comandos básicos SQL para o banco de dados remoto do Replay.
Para que a classe funcione corretamente, é necessário que o usuário tenha acesso à chave da API do BD remoto. Devendo passá-la como parâmetro ao instanciar a classe DataAPI. Por exemplo:
d_api = DataAPI ("ahsgcn21390-dsaf_dain2eq81288sad9")
"""
ep: str = ""
def __init__ (self, api_key: str):
self.ep = "https://dataapi.digitalcircle.com.br"
self.api_key = api_key
def __request_json_post__ (self, object: dict):
"""
## HTTP JSON POST
---
Este método é responsável por realizar requisições HTTP do tipo POST para objetos JSON.
Ele retorna o corpo de resposta da requisição, ou uma mensagem de erro, que indica qual foi a irregularidade ocorrida ao chamar a API.
"""
url = self.ep + "/"
print("Calling: " + url)
headers = {"X-API-KEY": self.api_key}
res = requests.post(url, json = object, headers = headers, verify = False)
if res.status_code >= 400:
raise Exception(f"HTTP ERROR: {str(res.status_code)} - {res.text}")
if res.headers.get("Content-Type") != None and res.headers.get("Content-Type").find("json") != -1:
return json.loads(res.text)
else:
return res.text
2022-01-20 12:12:44 +00:00
def do (self, dataAPI_request: dict):
2022-01-19 15:53:42 +00:00
"""
## DataAPI Do
Este método é responsável pela execução dos comandos SQL no Banco de Dados remoto.
---
2022-01-20 12:12:44 +00:00
#### Parâmetros de dataAPI_request:
- Col: Nome da tabela SQL em que se quer realizar a operação (OBRIGATÓRIO)
- Op: Operação que se quer desenvolver. São elas: "R", "C", "D", "U" (OBRIGATÓRIO)
2022-01-19 15:53:42 +00:00
- R: Retrieve (Busca informações da coluna da tabela)
- C: Create (Cria uma nova tabela)
- D: Delete (Deleta uma tabela ou as colunas de uma tabela)
- U: Update (Atualiza as informações de uma tabela)
2022-01-20 12:12:44 +00:00
- Q: Nome do atributo (coluna) que se quer consultar ou alterar na tabela SQL
- Id: Identificador da instância (linha) da tabela que se quer realizar a operação
- Data: Dados que se quer inserir na tabela
2022-01-19 15:53:42 +00:00
---
#### Retorna:
-> O retorno do comando feito, qualquer que seja ele.
"""
2022-01-20 12:12:44 +00:00
return self.__request_json_post__(dataAPI_request)
def registrar_exec (self, register_table: str, check: bool):
"""
## Registrar Execução
Esta função é utilizada para realizar um registro de execuções falhas e bem sucedidas de um robô. Tudo é feito diretamente na Base de Dados remota, eliminando a necessidade de planilhas Excel locais.
---
#### Parâmetros:
- register_table: Tabela utilizada para os registros de execução. Para começos de projeto, procure criar uma nova tabela, cheque se ela existe utilizando a operação de Retrieve pelo método Do.
- check: Assume dois valores dependendo do sucesso da execução do robô: True ou False.
- True: Execução obteve sucesso.
- False: Execução falhou em algum ponto.
---
#### Retorna:
---
"""
table_check = self.do({
"Col": register_table,
"Op": "R",
"Q": f"@[?date=='{datetime.now().isoformat()}']"
})
2022-01-19 15:53:42 +00:00
2022-01-20 12:12:44 +00:00
if len(table_check["data"]) > 0:
data = table_check["data"][0]
id = str(int(data["ID"]))
2022-01-19 15:53:42 +00:00
2022-01-20 12:12:44 +00:00
if check:
success = int(data["exec"]) + 1
2022-01-19 15:53:42 +00:00
2022-01-20 12:12:44 +00:00
try:
self.do({
"Col": register_table,
"Op": "U",
"Id": id,
"Data": {
"exec": success
}
})
except:
return "Algo falhou ao registrar a execução"
else:
fail = int(data["err"]) + 1
try:
self.do({
"Col": register_table,
"Op": "U",
"Id": id,
"Data": {
"err": fail
}
})
except:
return "Algo falhou ao registrar a execução"
else:
if check:
success = 1
fail = 0
else:
success = 0
fail = 1
try:
self.do({
"Col": register_table,
"Op": "C",
"Data": {
"date": datetime.now().isoformat(),
"exec": success,
"err": fail,
}
})
except:
return "Algo falhou ao registrar a execução"