Skip to content

Python API (Cable Design API)

Dariusz Jarosz edited this page Feb 27, 2025 · 9 revisions

Cable Design API

Getting the API

factory = CdbApiFactory(cdb_url)
cable_design_api = factory.getCableDesignItemApi()

Fetch all cables (Optionally with connections)

Fetching all cables can be achieved by running cable_design_api.get_cable_design_item_list(). An optional argument include_connections can also be specified.

cables = cable_design_api.get_cable_design_item_list(include_connections=True)

# Print connection list of last cable. 
print(cables[-1].connection_list)

Sample Output

[{'item_connector_name': '1',
 'md_connector_name': 'LB61_TO_A',
 'md_item_id': 177276,
 'md_item_name': 'S04-DIAG:RR00:PP1'}, 
 {'item_connector_name': '2',
 'md_connector_name': 'TO_A',
 'md_item_id': 184709,
 'md_item_name': 'S05A:P2:BPP'}]

Add or update cable design with endpoints

Inteface and all arguments.

cable_design_api.add_or_update_cable_design(**kwargs)

Arguments

  • id (int): DB ID of the cable. When none specified, item will be created.
  • name (str): Cable design name.
  • alternate_name (str): Cable design alternate name.
  • description (str): Description of the cable design.
  • item_project_ids (list[int]): Project IDs.
  • technical_system_ids (list[int]): Technical System IDs.
  • cable_type_id (int): Cable Type ID (-1 to clear).
  • end1_machine_design_id (int): Endpoint 1 machine design ID. (Must be specified to make any changes to endpoint 1)
  • end1_device_port_name (str): Endpoint 1 device port name.
  • end1_connector_name (str): Endpoint 1 connector name.
  • end2_machine_design_id (int): Endpoint 2 machine design ID. (Must be specified to make any changes to endpoint 2)
  • end2_device_port_name (str): Endpoint 2 device port name.
  • end2_connector_name (str): Endpoint 2 connector name.

Create a cable design

To create a cable design no id should be specified. All the required aruments must be provided such as name, technical system, project, and endpoints.

All commented out arguments are optional.

cable_design = cable_design_api.add_or_update_cable_design(        
    name="API TEST Cable",    
    #description="A cable created from API for test",
    item_project_ids=[3],
    technical_system_ids=[44],    
    # Clear cable type with -1
    # cable_type_id=-1,
    # cable_type_id=305012,
    end1_machine_design_id=177276,    
    #end1_device_port_name="LB61_TO_A",
    #end1_connector_name="e1-1",         
    end2_machine_design_id=184709,
    #end2_device_port_name="TO_A", 
    #end2_connector_name="e1-1"
    )

Update cable design

To update a cable an ID must be provided. When updating only the provided variables will be used for update. With exception of endpoints, if new endpoint is provided new connector and port names must also be provided.

cable_design = cable_design_api.add_or_update_cable_design(        
    id=1234
    name="API TEST Cable New Name")

Update cable design metadata

Cable design metadata could be updated using an object ItemDomainCableDesignMetadata.

This object includes cable design metadata fields.

ItemDomainCableDesignMetadata Fields

  • cable_design_id: int - ID of the cable design to update.

Metadata fields:

  • external_cable_name: str
  • import_cable_id: str
  • alternate_cable_id: str
  • laying: str
  • voltage: str
  • routed_length: str
  • route: str
  • total_req_length: str
  • notes: str
  • endpoint1_description: str
  • endpoint1_route: str
  • endpoint1_end_length: str
  • endpoint1_termination: str
  • endpoint1_pinlist: str
  • endpoint1_notes: str
  • endpoint1_drawing: str
  • endpoint2_description: str
  • endpoint2_route: str
  • endpoint2_end_length: str
  • endpoint2_termination: str
  • endpoint2_pinlist: str
  • endpoint2_notes: str
  • endpoint2_drawing: str

Usage

from cdbApi import ItemDomainCableDesignMetadata

# Only update the external cable name metadata field. The other fields will be ignored. 
metadata_to_update = ItemDomainCableDesignMetadata(cable_design_id=347891,
                                                   external_cable_name="TEST")
updated_metadata = cable_design_api.update_cable_design_metadata(metadata_to_update)

Full metadata can also be fetched and passed into the update function:

fetched_metadata = cable_design_api.get_cable_design_metadata(347891)
fetched_metadata.voltage = "120V"
updated_metadata = cable_design_api.update_cable_design_metadata(fetched_metadata)

Example with all of the fields:

metadata_to_update = ItemDomainCableDesignMetadata(
    cable_design_id=347891,
    external_cable_name="HighVoltage-123",
    import_cable_id="IMP-456",
    alternate_cable_id="ALT-789",
    laying="Underground",
    voltage="11kV",
    routed_length="150m",
    route="Substation A to Transformer B",
    total_req_length="160m",
    notes="Ensure compliance with safety standards. Check for potential interference with existing utilities.",

    endpoint1_description="Substation A - Main Panel",
    endpoint1_route="Cable Tray 1",
    endpoint1_end_length="5m",
    endpoint1_termination="Ring Terminal",
    endpoint1_pinlist="Pin A1, Pin A2",
    endpoint1_notes="Verify connection integrity and insulation.",
    endpoint1_drawing="Drawing-SubA-Panel.pdf",

    endpoint2_description="Transformer B - Input Terminal",
    endpoint2_route="Cable Duct 3",
    endpoint2_end_length="4m",
    endpoint2_termination="Lug Terminal",
    endpoint2_pinlist="Pin B1, Pin B2",
    endpoint2_notes="Ensure proper grounding and secure connections.",
    endpoint2_drawing="Drawing-TransB-Terminal.pdf"
)
updated_metadata = cable_design_api.update_cable_design_metadata(metadata_to_update)

Clone this wiki locally