Rest API sync with the EXACT Server https://github.com/ChristianMarzahl/Exact
In the folder examples
pip install EXACT-Sync
with a lot of implementation examples /exact_sync/v1/test
configuration = Configuration()
configuration.username = 'exact'
configuration.password = 'exact'
configuration.host = "http://127.0.0.1:8000"
client = ApiClient(configuration)
image_sets_api = ImageSetsApi(client)
annotations_api = AnnotationsApi(client)
annotation_types_api = AnnotationTypesApi(client)
images_api = ImagesApi(client)
product_api = ProductsApi(client)
team_api = TeamsApi(client)Authentication by token:
configuration = Configuration()
configuration.token = 'pat_....<your token here>'
configuration.host = "http://127.0.0.1:8000"
client = ApiClient(configuration)
image_sets_api = ImageSetsApi(client)image_sets = image_sets_api.list_image_sets(name="cluster_asthma_imageset")
image_setsimage_type = int(Image.ImageSourceTypes.DEFAULT)
image = images_api.create_image(file_path=target_file, image_type=image_type, image_set=image_set.id).results[0]images_api.download_image(id=image_id, target_path=image_path, original_image=True)annotations_api.list_annotations(pagination=False, async_req=True, image=image.id)snapshot = images_api.get_snapshot(image_source=image.id, x=1000, y=1000, size_x=512, size_y=512)
snapshot.save('snapshot.png')Moves the image with its files and annotations, like "Move image" in the web UI. The target
image set must offer all annotation types used on the image, otherwise the server refuses the
move and an ApiException with the reason is raised.
targets = images_api.list_move_targets() # [{'id': 3, 'name': 'Set B', 'team': 'Team'}, ...]
result = images_api.move_image(id=image.id, target_imageset_id=targets[0]['id'])
# {'id': image.id, 'image_set': targets[0]['id']}All API objects retry requests that fail with a transient gateway error (HTTP 502, 503 or 504)
using exponential backoff (0.5s, 1s, 2s, ... up to 5 attempts). Retrying is enabled by default
and works for synchronous and async_req=True calls.
images_api = ImagesApi(client) # retries enabled (default)
images_api = ImagesApi(client, retry=False) # retries disabled
images_api.retry = False # or toggle later
# optional tuning, per instance or per class
images_api.retry_max_attempts = 3
images_api.retry_backoff = 1.0
images_api.retry_statuses = (502,)Note: non-idempotent requests (e.g. create_*) are retried as well, so in rare cases a
request that the server already processed could be executed twice.