Este artículo contiene un ejemplo de un script de Python con comentarios que permite aprovechar la funcionalidad de Cintoo Connect CLI para importar datos de escaneo terrestre.
Se proporciona un ejemplo de script en el archivo adjunto.
Este script es un ejemplo de cómo automatizar la importación de un escaneo a una zona de trabajo específica. No necesita una URI, pero se deben especificar algunos IDs.
Llama al comando import-static en la función "import_file", abierta a cualquier modificación si es necesario.
A continuación, encontrará el script con comentarios en cada parte.
from pathlib import Path
from typing import Final
import json
import logging
import os
import sys
import subprocess
import requests
TIMEOUT: Final[int] = 10
TOKEN: Final[str] = ""
GLOBAL_HEADERS: Final[dict] = {"Authorization": f"Bearer {TOKEN}"}Importación de bibliotecas. Obtención de token y encabezados. Para más detalles: Guía de API de Cintoo Connect CLI.
<WORKZONE_ID>/data
ACCOUNT_ID: Final[str] = ""
PROJECT_ID: Final[str] = ""
WORKZONE_ID: Final[str] = ""- ID de Cuenta para la cuenta que aloja el proyecto objetivo
- ID de Proyecto correspondiente al proyecto objetivo donde está la zona de trabajo objetivo
- ID de Zona de Trabajo correspondiente a la zona de trabajo objetivo
Se pueden obtener mediante solicitudes HTTPS o desde la URL de la aplicación web dentro de una zona de trabajo.
https://aec.cintoo.com/accounts/<ACCOUNT_ID>/projects/<PROJECT_ID>/workzones/
Guía más detallada: Guía de API de Cintoo Connect CLI.
DEFAULT_URL: Final[str] = "https://aec.cintoo.com"La URL predeterminada podría ser aec.cintoo.com o us.cintoo.com o [company].cintoo.com si la organización tiene un dominio dedicado dependiendo de la configuración.
def get_cintoo_cli_exe() -> str:
path = Path(os.environ['LOCALAPPDATA']) / "Programs" / "Cintoo"
if not path.exists():
path = Path(os.environ['ProgramFiles']) / "Cintoo"
if not path.exists():
raise RuntimeError("No se pudo encontrar la instalación de Cintoo Connect."
"\nSi no lo instaló en la ruta predeterminada,"
" por favor establezca esta variable de ruta a la ruta correcta")
cli = path / "cintooconnect-cli.exe"
if not cli.exists():
raise RuntimeError("No se pudo encontrar cintooconnect-cli.exe."
" Por favor instale la última versión de Cintoo Connect: "
"https://aec.cintoo.com/download/cintooconnect-setup-latest.exe")
return cli.as_posix()
CINTOO_CLI_EXE: Final[str] = get_cintoo_cli_exe()Encontrar y ejecutar el ejecutable de Cintoo Connect CLI. El ejecutable está en el mismo lugar donde Cintoo Connect está instalado. Por defecto, debería estar en:
- Users/"SuNombreDeUsuario"/AppData/Local /Programs/Cintoo
- ProgramFiles/Cintoo si se instala con derechos de administrador
def post_and_check_request(url: str,
headers: dict) -> dict:
logging.info(f"Consulta: url={url}, headers={headers}")
try:
reply = requests.post(url, headers=headers, timeout=TIMEOUT)
reply.raise_for_status()
return reply.json()
except json.JSONDecodeError as exception:
message = f"Excepción durante la decodificación de json al usar el token: {exception}"
except requests.exceptions.RequestException as exception:
message = f"Excepción durante la validación del token: {exception}"
except Exception as exception:
message = f"Excepción: {exception}"
logging.error(message)
raise RuntimeError(message)Enviando información a un servidor y obteniendo una verificación de la respuesta del servidor.
def validate_login():
url = f"{DEFAULT_URL}/api/isLogged"
response = post_and_check_request(url, GLOBAL_HEADERS)
if not response.get("success"):
raise ValueError("Inicio de sesión requerido: no se puede verificar su estado de inicio de sesión.\n"
f"Detalles: {response}.\n"
"Por favor inicie sesión siguiendo las instrucciones aquí:\n"
"https://aec.cintoo.com/api/#section/API-Specification/Authentication")Validación de inicio de sesión.
def get_cintoo_uri(account_id: str,
project_id: str,
workzone_id: str):
url =
'{DEFAULT_URL}/api/accounts/{account_id}/projects/{project_id}/workzones/{workzone_id}/imports'
response = post_and_check_request(url, GLOBAL_HEADERS)
cintoo_uri = response.get("url")
if not cintoo_uri:
raise KeyError(f"No se pudo encontrar la url en la respuesta: {response}")
return cintoo_uriObteniendo URI de Cintoo a partir de componentes de cuenta, proyecto y zona de trabajo definidos anteriormente.
def import_file(cintoo_uri: str,
file_path: str):
return subprocess.call([CINTOO_CLI_EXE, "import-static",
f"--cintoo-uri={cintoo_uri}",
f"--file-ref={file_path}"])Ejecución del proceso de importación con el ejecutable de Cintoo Connect CLI.
def import_files_in_dir(cintoo_uri: str,
root_dir_path: str):
for (dirpath, _, filenames) in os.walk(root_dir_path):
for filename in filenames:
file_path = os.path.join(dirpath, filename)
import_file(cintoo_uri, file_path)Importando todos los archivos en el directorio definido.
def main(path: str):
assert TOKEN, "El token debe ser especificado"
assert ACCOUNT_ID and PROJECT_ID and WORKZONE_ID, "Las IDs deben ser especificadas"
validate_login()
cintoo_uri = get_cintoo_uri(ACCOUNT_ID, PROJECT_ID, WORKZONE_ID)
if os.path.isfile(path):
import_file(cintoo_uri, path)
elif os.path.isdir(path):
import_files_in_dir(cintoo_uri, path)
if __name__ == "__main__":
arguments = sys.argv
if len(arguments) != 2:
raise RuntimeError("Necesita pasar la ruta al directorio o archivo a importar")
main(arguments[1])Ejecución de la función principal.
¿Le fue útil este artículo?
¡Qué bueno!
Gracias por sus comentarios
¡Sentimos mucho no haber sido de ayuda!
Gracias por sus comentarios
Comentarios enviados
Agradecemos su iniciativa, e intentaremos corregir el artículo