Dieser Artikel enthält ein Beispiel für ein Python-Skript mit Kommentaren, das die Funktionen von Cintoo Connect CLI nutzt, um terrestrische Scandaten zu importieren.
Ein Beispiel für ein Skript finden Sie im Anhang.
Dieses Skript ist ein Beispiel dafür, wie sich der Import eines Scans in eine bestimmte Arbeitszone automatisieren lässt. Es benötigt keine URI, aber einige IDs müssen angegeben werden.
Es ruft den Befehl import-static in der Funktion „import_file“ auf, die bei Bedarf beliebig angepasst werden kann.
Nachfolgend finden Sie das Skript mit Kommentaren zu jedem Abschnitt.
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}"}Import der Bibliotheken. Abrufen von Token und Headern. Weitere Details: Leitfaden zu API-Aufrufen von Cintoo Connect CLI.
<WORKZONE_ID>/data
ACCOUNT_ID: Final[str] = ""
PROJECT_ID: Final[str] = ""
WORKZONE_ID: Final[str] = ""- Konto-ID des Kontos, das das Zielprojekt hostet
- Projekt-ID des Zielprojekts, in dem sich die Ziel-Arbeitszone befindet
- Arbeitszonen-ID der Ziel-Arbeitszone
Sie lassen sich über HTTPS-Anfragen oder aus der URL der Webanwendung innerhalb einer Arbeitszone ermitteln.
https://aec.cintoo.com/accounts/<ACCOUNT_ID>/projects/<PROJECT_ID>/workzones/
Ausführlichere Hinweise: Leitfaden zu API-Aufrufen von Cintoo Connect CLI.
DEFAULT_URL: Final[str] = "https://aec.cintoo.com"Je nach Konfiguration kann die Standard-URL aec.cintoo.com oder us.cintoo.com lauten oder [company].cintoo.com, wenn die Organisation über eine eigene Domain verfügt.
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("Could not find Cintoo Connect's installation."
"\nIf you did not installed it in the default path,"
" please set this path variable to the right path")
cli = path / "cintooconnect-cli.exe"
if not cli.exists():
raise RuntimeError("Could not find cintooconnect-cli.exe."
" Please install the latest version of Cintoo Connect: "
"https://aec.cintoo.com/download/cintooconnect-setup-latest.exe")
return cli.as_posix()
CINTOO_CLI_EXE: Final[str] = get_cintoo_cli_exe()Auffinden und Ausführen der ausführbaren Datei von Cintoo Connect CLI. Die ausführbare Datei befindet sich im selben Verzeichnis, in dem Cintoo Connect installiert ist. Standardmäßig sollte sie sich hier befinden:
- Users/"YourUserName"/AppData/Local /Programs/Cintoo
- ProgramFiles/Cintoo, wenn mit Administratorrechten installiert
def post_and_check_request(url: str,
headers: dict) -> dict:
logging.info(f"Query: 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"Exception during decoding json when using token: {exception}"
except requests.exceptions.RequestException as exception:
message = f"Exception during validation of token: {exception}"
except Exception as exception:
message = f"Exception: {exception}"
logging.error(message)
raise RuntimeError(message)Senden von Informationen an einen Server und Überprüfung der Antwort des Servers.
def validate_login():
url = f"{DEFAULT_URL}/api/isLogged"
response = post_and_check_request(url, GLOBAL_HEADERS)
if not response.get("success"):
raise ValueError("Login required: unable to verify your login status.\n"
f"Details: {response}.\n"
"Please log in by following the instructions here:\n"
"https://aec.cintoo.com/api/#section/API-Specification/Authentication")Validierung der Anmeldung.
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"Could not find url in response: {response}")
return cintoo_uriAbleiten der Cintoo-URI aus den zuvor definierten Komponenten Konto, Projekt und Arbeitszone.
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}"])Ausführung des Importvorgangs mit der ausführbaren Datei von 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)Importieren aller Dateien im definierten Verzeichnis.
def main(path: str):
assert TOKEN, "Token must be specified"
assert ACCOUNT_ID and PROJECT_ID and WORKZONE_ID, "IDs must be specified"
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("You need to pass the path to directory or file to import")
main(arguments[1])Ausführung der Hauptfunktion.
War dieser Artikel hilfreich?
Das ist großartig!
Vielen Dank für das Feedback
Leider konnten wir nicht helfen
Vielen Dank für das Feedback
Feedback gesendet
Wir wissen Ihre Bemühungen zu schätzen und werden versuchen, den Artikel zu korrigieren