Skip to main content

This Python API provides a high-level interface to interact with the NDTkit desktop application. It allows developers to script and automate NDTkit features remotely, leveraging the full power of the underlying Java application through a simple and pythonic library.

Project description

NDTkit Python API

Python API for NDTkit License

This Python API provides a high-level interface to interact with the NDTkit desktop application. It allows developers to script and automate NDTkit features remotely, leveraging the full power of the underlying Java application through a simple and pythonic library.

How it Works ⚙️

The API acts as a client that communicates with a dedicated socket server running within the NDTkit Java application or that uses directly py4j for basic Java API call.

Prerequisites

Before using this API, you must have:

  1. Python 3.9+ installed.
  2. The NDTkit desktop application installed.
  3. The Java socket server for the API must be running. The Python API can automatically launch it if configured correctly.

🚀 Installation & Configuration

  1. Install the library
pip install ndtkit-api
  1. Configure the connection: NDTkit and this API are sey with a socket server and a Py4j server that runs on the same IP:PORT, so no change are needed only if this information needs to be expressly changed. If the NDTkit software needs to be launched from an external Python code that embeds this library, it's possible to set the NDTKIT_FILEPATH and this API will launch the software automatically if no socket server is detected. Here is an example on how to configure these different variables:

    from ndtkit_api.config import config
    
    config.NDTKIT_FILEPATH = "C:/Users/admin/NDTkit/NDTkit.vbs"
    config.SERVER_HOST = "127.0.0.1"          # default value
    config.SERVER_PORT = 32146              # default value
    config.SERVER_CONNECTION_TIMEOUT = 120  # default value
    
    • NDTKIT_FILEPATH: This is the most critical setting. It's the command used to launch the Java socket server. The Python API will execute this command if it cannot connect to the server.
    • SERVER_HOST: The IP address of the machine running NDTkit. Use 127.0.0.1 if it's on the same machine.
    • SERVER_PORT: The port for the socket communication. This must match the port the NDTkit server is listening on.
    • SERVER_CONNECTION_TIMEOUT: After this timing (in seconds) this API will stop attempting to connect to NDTkit's socket server

Usage Example

Here is a simple example showing how to open a C-Scan, modify a pixel, and save it to a new file.

# examples.py

from ndtkit_api import NDTKitCScanInterface, ndtkit_socket_connection
from ndtkit_api.model.frame.NICartographyFrameCScan import NICartographyFrameCScan


def change_pixel_value(input_file: str, output_file: str):
    """
    Opens a C-Scan, modifies the value of the first pixel, saves it,
    and re-opens it for display.
    """
    print(f"Opening C-Scan: {input_file}")
    # The server is launched automatically if not running
    cscan: NICartographyFrameCScan = NDTKitCScanInterface.open_cscan(input_file)

    if not cscan:
        print("Failed to open C-Scan.")
        return

    print(f"C-Scan opened successfully with UUID: {cscan.get_uuid()}")

    print("Retrieving data matrix...")
    data: list[list[float]] = cscan.get_data()
    print(f"Original value at [0][0]: {data[0][0]}")

    # Modify the data
    data[0][0] = 12.0
    print(f"Setting new value at [0][0] to 12.0")
    cscan.set_data(data)

    print(f"Saving modified C-Scan to: {output_file}")
    NDTKitCScanInterface.save_cscan(cscan, output_file)

    print("Re-opening the saved C-Scan to verify.")
    NDTKitCScanInterface.open_cscan(output_file, displayResult=True)
    print("Done.")


if __name__ == "__main__":
    ndtkit_socket_connection.launch_ndtkit() # Launch NDTkit if it is not already done
    # Make sure to use paths that are valid on your system
    input_cscan_path = "C:/Users/admin/Documents/Data/dd_carto.nkc"
    output_cscan_path = "C:/Users/admin/Documents/Data/result.nkc"
    change_pixel_value(input_cscan_path, output_cscan_path)

A class/method is available in the Java API but it is not appearing in this Python API

It can be reachable anyway, it's just the auto-completion of your IDE that is not working. Actually this Python API is using py4j that allows to access any Java API function. Here's an example on how to access to agi.ndtkit.api.NDTKitCScanInterface.openCScan(String) without using directly the API:

from ndtkit_api.ndtkit_socket_connection import gateway

gateway.jvm.agi.ndtkit.api.NDTKitCScanInterface.openCScan("path/to/my/cscan") # type: ignore

So please refer to the NDTkit Javadoc to have an exhaustive look at all the available actions and call them using this solution if they are not available directly in this Python API.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ndtkit_api-0.0.8.tar.gz (12.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ndtkit_api-0.0.8-py3-none-any.whl (14.3 kB view details)

Uploaded Python 3

File details

Details for the file ndtkit_api-0.0.8.tar.gz.

File metadata

  • Download URL: ndtkit_api-0.0.8.tar.gz
  • Upload date:
  • Size: 12.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for ndtkit_api-0.0.8.tar.gz
Algorithm Hash digest
SHA256 83de83eaacb8d58396fa4a49ce6b4f25e8ca72287a3171c4d0e334a6fd4c3daa
MD5 a6f345825e8d03ba7c7264f2320ad50d
BLAKE2b-256 014123baa4a2cf2e177093f90b7b252ee1e88eb7d59536726d7945d438f8d5d3

See more details on using hashes here.

File details

Details for the file ndtkit_api-0.0.8-py3-none-any.whl.

File metadata

  • Download URL: ndtkit_api-0.0.8-py3-none-any.whl
  • Upload date:
  • Size: 14.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for ndtkit_api-0.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 8e81004f4bfc4b4b173ef59188f1b91441906ff3cd31631b46fb0140f5f9f58c
MD5 a3177e62b684a9cb7f53a64b9d0e1442
BLAKE2b-256 93dd2ecf1ba93efd97283ef9e4449bdf9522822943e2444940353025988215d8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page