wandelbots-api-client 26.3.0.dev23__py3-none-any.whl → 26.3.0.dev24__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13,7 +13,7 @@
13
13
  Do not edit the class manually.
14
14
  """ # noqa: E501
15
15
 
16
- __version__ = "26.3.0.dev23"
16
+ __version__ = "26.3.0.dev24"
17
17
 
18
18
  from . import models
19
19
  from . import api
@@ -91,7 +91,7 @@ class ApiClient:
91
91
  self.default_headers[header_name] = header_value
92
92
  self.cookie = cookie
93
93
  # Set default User-Agent.
94
- self.user_agent = 'Wandelbots-Nova-API-Python-Client/26.3.0.dev23'
94
+ self.user_agent = 'Wandelbots-Nova-API-Python-Client/26.3.0.dev24'
95
95
  self.client_side_validation = configuration.client_side_validation
96
96
 
97
97
  async def __aenter__(self):
@@ -511,7 +511,7 @@ class Configuration:
511
511
  "OS: {env}\n"\
512
512
  "Python Version: {pyversion}\n"\
513
513
  "Version of the API: 1.3.0\n"\
514
- "SDK Package Version: 26.3.0.dev23".\
514
+ "SDK Package Version: 26.3.0.dev24".\
515
515
  format(env=sys.platform, pyversion=sys.version)
516
516
 
517
517
  def get_host_settings(self) -> List[HostSetting]:
@@ -13,7 +13,7 @@
13
13
  Do not edit the class manually.
14
14
  """ # noqa: E501
15
15
 
16
- __version__ = "26.3.0.dev23"
16
+ __version__ = "26.3.0.dev24"
17
17
 
18
18
  from . import models
19
19
  from . import api
@@ -3437,6 +3437,270 @@ class BUSInputsOutputsApi:
3437
3437
 
3438
3438
 
3439
3439
 
3440
+ @validate_call
3441
+ async def get_profinet_gsdml(
3442
+ self,
3443
+ cell: Annotated[StrictStr, Field(description="Unique identifier addressing a cell in all API calls. ")],
3444
+ _request_timeout: Union[
3445
+ None,
3446
+ Annotated[StrictFloat, Field(gt=0)],
3447
+ Tuple[
3448
+ Annotated[StrictFloat, Field(gt=0)],
3449
+ Annotated[StrictFloat, Field(gt=0)]
3450
+ ]
3451
+ ] = None,
3452
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
3453
+ _content_type: Optional[StrictStr] = None,
3454
+ _headers: Optional[Dict[StrictStr, Any]] = None,
3455
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
3456
+ ) -> str:
3457
+ """Get PROFINET GSDML File
3458
+
3459
+ Returns the Generic Station Description Markup Language (GSDML) file for the PROFINET device. The GSDML file describes the PROFINET device configuration and capabilities, and can be imported into PROFINET engineering tools, e.g., TIA Portal, or other PLC programming environments. The returned GSDML file matches the current slot configuration of the PROFINET device.
3460
+
3461
+ :param cell: Unique identifier addressing a cell in all API calls. (required)
3462
+ :type cell: str
3463
+ :param _request_timeout: timeout setting for this request. If one
3464
+ number provided, it will be total request
3465
+ timeout. It can also be a pair (tuple) of
3466
+ (connection, read) timeouts.
3467
+ :type _request_timeout: int, tuple(int, int), optional
3468
+ :param _request_auth: set to override the auth_settings for an a single
3469
+ request; this effectively ignores the
3470
+ authentication in the spec for a single request.
3471
+ :type _request_auth: dict, optional
3472
+ :param _content_type: force content-type for the request.
3473
+ :type _content_type: str, Optional
3474
+ :param _headers: set to override the headers for a single
3475
+ request; this effectively ignores the headers
3476
+ in the spec for a single request.
3477
+ :type _headers: dict, optional
3478
+ :param _host_index: set to override the host_index for a single
3479
+ request; this effectively ignores the host_index
3480
+ in the spec for a single request.
3481
+ :type _host_index: int, optional
3482
+ :return: Returns the result object.
3483
+ """ # noqa: E501
3484
+
3485
+ _param = self._get_profinet_gsdml_serialize(
3486
+ cell=cell,
3487
+ _request_auth=_request_auth,
3488
+ _content_type=_content_type,
3489
+ _headers=_headers,
3490
+ _host_index=_host_index
3491
+ )
3492
+
3493
+ _response_types_map: Dict[str, Optional[str]] = {
3494
+ '200': "str",
3495
+ '404': "Error",
3496
+ '412': "Error",
3497
+ }
3498
+ response_data = await self.api_client.call_api(
3499
+ *_param,
3500
+ _request_timeout=_request_timeout
3501
+ )
3502
+ await response_data.read()
3503
+ return self.api_client.response_deserialize(
3504
+ response_data=response_data,
3505
+ response_types_map=_response_types_map,
3506
+ ).data
3507
+
3508
+
3509
+ @validate_call
3510
+ async def get_profinet_gsdml_with_http_info(
3511
+ self,
3512
+ cell: Annotated[StrictStr, Field(description="Unique identifier addressing a cell in all API calls. ")],
3513
+ _request_timeout: Union[
3514
+ None,
3515
+ Annotated[StrictFloat, Field(gt=0)],
3516
+ Tuple[
3517
+ Annotated[StrictFloat, Field(gt=0)],
3518
+ Annotated[StrictFloat, Field(gt=0)]
3519
+ ]
3520
+ ] = None,
3521
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
3522
+ _content_type: Optional[StrictStr] = None,
3523
+ _headers: Optional[Dict[StrictStr, Any]] = None,
3524
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
3525
+ ) -> ApiResponse[str]:
3526
+ """Get PROFINET GSDML File
3527
+
3528
+ Returns the Generic Station Description Markup Language (GSDML) file for the PROFINET device. The GSDML file describes the PROFINET device configuration and capabilities, and can be imported into PROFINET engineering tools, e.g., TIA Portal, or other PLC programming environments. The returned GSDML file matches the current slot configuration of the PROFINET device.
3529
+
3530
+ :param cell: Unique identifier addressing a cell in all API calls. (required)
3531
+ :type cell: str
3532
+ :param _request_timeout: timeout setting for this request. If one
3533
+ number provided, it will be total request
3534
+ timeout. It can also be a pair (tuple) of
3535
+ (connection, read) timeouts.
3536
+ :type _request_timeout: int, tuple(int, int), optional
3537
+ :param _request_auth: set to override the auth_settings for an a single
3538
+ request; this effectively ignores the
3539
+ authentication in the spec for a single request.
3540
+ :type _request_auth: dict, optional
3541
+ :param _content_type: force content-type for the request.
3542
+ :type _content_type: str, Optional
3543
+ :param _headers: set to override the headers for a single
3544
+ request; this effectively ignores the headers
3545
+ in the spec for a single request.
3546
+ :type _headers: dict, optional
3547
+ :param _host_index: set to override the host_index for a single
3548
+ request; this effectively ignores the host_index
3549
+ in the spec for a single request.
3550
+ :type _host_index: int, optional
3551
+ :return: Returns the result object.
3552
+ """ # noqa: E501
3553
+
3554
+ _param = self._get_profinet_gsdml_serialize(
3555
+ cell=cell,
3556
+ _request_auth=_request_auth,
3557
+ _content_type=_content_type,
3558
+ _headers=_headers,
3559
+ _host_index=_host_index
3560
+ )
3561
+
3562
+ _response_types_map: Dict[str, Optional[str]] = {
3563
+ '200': "str",
3564
+ '404': "Error",
3565
+ '412': "Error",
3566
+ }
3567
+ response_data = await self.api_client.call_api(
3568
+ *_param,
3569
+ _request_timeout=_request_timeout
3570
+ )
3571
+ await response_data.read()
3572
+ return self.api_client.response_deserialize(
3573
+ response_data=response_data,
3574
+ response_types_map=_response_types_map,
3575
+ )
3576
+
3577
+
3578
+ @validate_call
3579
+ async def get_profinet_gsdml_without_preload_content(
3580
+ self,
3581
+ cell: Annotated[StrictStr, Field(description="Unique identifier addressing a cell in all API calls. ")],
3582
+ _request_timeout: Union[
3583
+ None,
3584
+ Annotated[StrictFloat, Field(gt=0)],
3585
+ Tuple[
3586
+ Annotated[StrictFloat, Field(gt=0)],
3587
+ Annotated[StrictFloat, Field(gt=0)]
3588
+ ]
3589
+ ] = None,
3590
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
3591
+ _content_type: Optional[StrictStr] = None,
3592
+ _headers: Optional[Dict[StrictStr, Any]] = None,
3593
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
3594
+ ) -> RESTResponseType:
3595
+ """Get PROFINET GSDML File
3596
+
3597
+ Returns the Generic Station Description Markup Language (GSDML) file for the PROFINET device. The GSDML file describes the PROFINET device configuration and capabilities, and can be imported into PROFINET engineering tools, e.g., TIA Portal, or other PLC programming environments. The returned GSDML file matches the current slot configuration of the PROFINET device.
3598
+
3599
+ :param cell: Unique identifier addressing a cell in all API calls. (required)
3600
+ :type cell: str
3601
+ :param _request_timeout: timeout setting for this request. If one
3602
+ number provided, it will be total request
3603
+ timeout. It can also be a pair (tuple) of
3604
+ (connection, read) timeouts.
3605
+ :type _request_timeout: int, tuple(int, int), optional
3606
+ :param _request_auth: set to override the auth_settings for an a single
3607
+ request; this effectively ignores the
3608
+ authentication in the spec for a single request.
3609
+ :type _request_auth: dict, optional
3610
+ :param _content_type: force content-type for the request.
3611
+ :type _content_type: str, Optional
3612
+ :param _headers: set to override the headers for a single
3613
+ request; this effectively ignores the headers
3614
+ in the spec for a single request.
3615
+ :type _headers: dict, optional
3616
+ :param _host_index: set to override the host_index for a single
3617
+ request; this effectively ignores the host_index
3618
+ in the spec for a single request.
3619
+ :type _host_index: int, optional
3620
+ :return: Returns the result object.
3621
+ """ # noqa: E501
3622
+
3623
+ _param = self._get_profinet_gsdml_serialize(
3624
+ cell=cell,
3625
+ _request_auth=_request_auth,
3626
+ _content_type=_content_type,
3627
+ _headers=_headers,
3628
+ _host_index=_host_index
3629
+ )
3630
+
3631
+ _response_types_map: Dict[str, Optional[str]] = {
3632
+ '200': "str",
3633
+ '404': "Error",
3634
+ '412': "Error",
3635
+ }
3636
+ response_data = await self.api_client.call_api(
3637
+ *_param,
3638
+ _request_timeout=_request_timeout
3639
+ )
3640
+ return response_data.response
3641
+
3642
+
3643
+ def _get_profinet_gsdml_serialize(
3644
+ self,
3645
+ cell,
3646
+ _request_auth,
3647
+ _content_type,
3648
+ _headers,
3649
+ _host_index,
3650
+ ) -> RequestSerialized:
3651
+
3652
+ _host = None
3653
+
3654
+ _collection_formats: Dict[str, str] = {
3655
+ }
3656
+
3657
+ _path_params: Dict[str, str] = {}
3658
+ _query_params: List[Tuple[str, str]] = []
3659
+ _header_params: Dict[str, Optional[str]] = _headers or {}
3660
+ _form_params: List[Tuple[str, str]] = []
3661
+ _files: Dict[str, Union[str, bytes]] = {}
3662
+ _body_params: Optional[bytes] = None
3663
+
3664
+ # process the path parameters
3665
+ if cell is not None:
3666
+ _path_params['cell'] = cell
3667
+ # process the query parameters
3668
+ # process the header parameters
3669
+ # process the form parameters
3670
+ # process the body parameter
3671
+
3672
+
3673
+ # set the HTTP header `Accept`
3674
+ _header_params['Accept'] = self.api_client.select_header_accept(
3675
+ [
3676
+ 'application/xml',
3677
+ 'application/json'
3678
+ ]
3679
+ )
3680
+
3681
+
3682
+ # authentication setting
3683
+ _auth_settings: List[str] = [
3684
+ 'BearerAuth'
3685
+ ]
3686
+
3687
+ return self.api_client.param_serialize(
3688
+ method='GET',
3689
+ resource_path='/cells/{cell}/bus-ios/profinet/gsdml',
3690
+ path_params=_path_params,
3691
+ query_params=_query_params,
3692
+ header_params=_header_params,
3693
+ body=_body_params,
3694
+ post_params=_form_params,
3695
+ files=_files,
3696
+ auth_settings=_auth_settings,
3697
+ collection_formats=_collection_formats,
3698
+ _host=_host,
3699
+ _request_auth=_request_auth
3700
+ )
3701
+
3702
+
3703
+
3440
3704
  @validate_call
3441
3705
  async def get_profinet_ios_from_file(
3442
3706
  self,
@@ -91,7 +91,7 @@ class ApiClient:
91
91
  self.default_headers[header_name] = header_value
92
92
  self.cookie = cookie
93
93
  # Set default User-Agent.
94
- self.user_agent = 'Wandelbots-Nova-API-Python-Client/26.3.0.dev23'
94
+ self.user_agent = 'Wandelbots-Nova-API-Python-Client/26.3.0.dev24'
95
95
  self.client_side_validation = configuration.client_side_validation
96
96
 
97
97
  async def __aenter__(self):
@@ -511,7 +511,7 @@ class Configuration:
511
511
  "OS: {env}\n"\
512
512
  "Python Version: {pyversion}\n"\
513
513
  "Version of the API: 2.3.0 dev\n"\
514
- "SDK Package Version: 26.3.0.dev23".\
514
+ "SDK Package Version: 26.3.0.dev24".\
515
515
  format(env=sys.platform, pyversion=sys.version)
516
516
 
517
517
  def get_host_settings(self) -> List[HostSetting]:
@@ -39,6 +39,7 @@ from .bus_io_profinet import BusIOProfinet
39
39
  from .bus_io_profinet_default_route import BusIOProfinetDefaultRoute
40
40
  from .bus_io_profinet_ip_config import BusIOProfinetIpConfig
41
41
  from .bus_io_profinet_network import BusIOProfinetNetwork
42
+ from .bus_io_profinet_slot import BusIOProfinetSlot
42
43
  from .bus_io_profinet_virtual import BusIOProfinetVirtual
43
44
  from .bus_io_type import BusIOType
44
45
  from .bus_ios_state import BusIOsState
@@ -334,6 +335,7 @@ __all__ = [
334
335
  "BusIOProfinetDefaultRoute",
335
336
  "BusIOProfinetIpConfig",
336
337
  "BusIOProfinetNetwork",
338
+ "BusIOProfinetSlot",
337
339
  "BusIOProfinetVirtual",
338
340
  "BusIOType",
339
341
  "BusIOsState",
@@ -19,8 +19,10 @@ import json
19
19
 
20
20
  from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator
21
21
  from typing import Any, ClassVar, Dict, List, Optional
22
+ from typing_extensions import Annotated
22
23
  from wandelbots_api_client.v2.models.bus_io_profinet_default_route import BusIOProfinetDefaultRoute
23
24
  from wandelbots_api_client.v2.models.bus_io_profinet_network import BusIOProfinetNetwork
25
+ from wandelbots_api_client.v2.models.bus_io_profinet_slot import BusIOProfinetSlot
24
26
  from typing import Optional, Set
25
27
  from typing_extensions import Self
26
28
 
@@ -32,8 +34,9 @@ class BusIOProfinet(BaseModel):
32
34
  network_config: Optional[BusIOProfinetNetwork] = Field(default=None, description="Used to enable IP communication through the same physical ethernet interface while PROFINET driver is active. ")
33
35
  plc_ip: StrictStr = Field(description="IP address of the PLC to establish PROFINET communication with. The IP address is used to configure the host machine's firewall. The firewall configuration is applied while the BUS input/output service is active. Without proper firewall configuration, PROFINET device discovery, configuration exchanges, and real-time cyclic data communication will fail. ")
34
36
  mac: StrictStr = Field(description="MAC address of the physical ethernet interface that you want to use for PROFINET communication. ")
37
+ slots: Optional[Annotated[List[BusIOProfinetSlot], Field(min_length=1)]] = Field(default=None, description="Optional PROFINET slot configuration. If not provided, the default configuration is used for backward compatibility: one slot with a size of 64 bytes. ")
35
38
  default_route: Optional[BusIOProfinetDefaultRoute] = None
36
- __properties: ClassVar[List[str]] = ["bus_type", "network_config", "plc_ip", "mac", "default_route"]
39
+ __properties: ClassVar[List[str]] = ["bus_type", "network_config", "plc_ip", "mac", "slots", "default_route"]
37
40
 
38
41
  @field_validator('bus_type')
39
42
  def bus_type_validate_enum(cls, value):
@@ -88,6 +91,16 @@ class BusIOProfinet(BaseModel):
88
91
  # override the default output from pydantic by calling `to_dict()` of network_config
89
92
  if self.network_config:
90
93
  _dict['network_config'] = self.network_config.to_dict()
94
+ # override the default output from pydantic by calling `to_dict()` of each item in slots (list)
95
+ _items = []
96
+ if self.slots:
97
+ for _item in self.slots:
98
+ # >>> Modified from https://github.com/OpenAPITools/openapi-generator/blob/v7.6.0/modules/openapi-generator/src/main/resources/python/model_generic.mustache
99
+ # to not drop empty elements in lists
100
+ if _item is not None:
101
+ _items.append(_item.to_dict())
102
+ # <<< End modification
103
+ _dict['slots'] = _items
91
104
  # override the default output from pydantic by calling `to_dict()` of default_route
92
105
  if self.default_route:
93
106
  _dict['default_route'] = self.default_route.to_dict()
@@ -107,6 +120,13 @@ class BusIOProfinet(BaseModel):
107
120
  "network_config": BusIOProfinetNetwork.from_dict(obj["network_config"]) if obj.get("network_config") is not None else None,
108
121
  "plc_ip": obj.get("plc_ip"),
109
122
  "mac": obj.get("mac"),
123
+ "slots": [
124
+ # >>> Modified from https://github.com/OpenAPITools/openapi-generator/blob/v7.6.0/modules/openapi-generator/src/main/resources/python/model_generic.mustache
125
+ # to allow dicts in lists
126
+ BusIOProfinetSlot.from_dict(_item) if hasattr(BusIOProfinetSlot, 'from_dict') else _item
127
+ # <<< End modification
128
+ for _item in obj["slots"]
129
+ ] if obj.get("slots") is not None else None,
110
130
  "default_route": BusIOProfinetDefaultRoute.from_dict(obj["default_route"]) if obj.get("default_route") is not None else None
111
131
  })
112
132
  return _obj
@@ -0,0 +1,96 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Wandelbots NOVA API
5
+
6
+ Interact with robots in an easy and intuitive way.
7
+
8
+ The version of the OpenAPI document: 2.3.0 dev
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, Field
21
+ from typing import Any, ClassVar, Dict, List
22
+ from typing_extensions import Annotated
23
+ from typing import Optional, Set
24
+ from typing_extensions import Self
25
+
26
+ class BusIOProfinetSlot(BaseModel):
27
+ """
28
+ Configuration for one PROFINET process data slot.
29
+ """ # noqa: E501
30
+ slot: Annotated[int, Field(strict=True, ge=1)] = Field(description="Slot identifier on the PROFINET device. ")
31
+ input_size_bytes: Annotated[int, Field(strict=True, ge=0)] = Field(description="Process data size in bytes for the input direction (device → controller). ")
32
+ output_size_bytes: Annotated[int, Field(strict=True, ge=0)] = Field(description="Process data size in bytes for the output direction (controller → device). ")
33
+ __properties: ClassVar[List[str]] = ["slot", "input_size_bytes", "output_size_bytes"]
34
+
35
+ model_config = ConfigDict(
36
+ populate_by_name=True,
37
+ validate_assignment=True,
38
+ protected_namespaces=(),
39
+ )
40
+
41
+
42
+ def to_str(self) -> str:
43
+ """Returns the string representation of the model using alias"""
44
+ return pprint.pformat(self.model_dump(by_alias=True, exclude_none=True))
45
+
46
+ def to_json(self) -> str:
47
+ """
48
+ Returns the JSON representation of the model using alias
49
+
50
+ Do not use pydantic v2 .model_dump_json(by_alias=True, exclude_unset=True) here!
51
+ It is unable to resolve nested types generated by openapi-generator.
52
+ """
53
+ return json.dumps(self.to_dict())
54
+
55
+ @classmethod
56
+ def from_json(cls, json_str: str) -> Optional[Self]:
57
+ """Create an instance of BusIOProfinetSlot from a JSON string"""
58
+ return cls.from_dict(json.loads(json_str))
59
+
60
+ def to_dict(self) -> Dict[str, Any]:
61
+ """Return the dictionary representation of the model using alias.
62
+
63
+ This has the following differences from calling pydantic's
64
+ `self.model_dump(by_alias=True)`:
65
+
66
+ * `None` is only added to the output dict for nullable fields that
67
+ were set at model initialization. Other fields with value `None`
68
+ are ignored.
69
+ """
70
+ excluded_fields: Set[str] = set([
71
+ ])
72
+
73
+ _dict = self.model_dump(
74
+ by_alias=True,
75
+ exclude=excluded_fields,
76
+ exclude_none=True,
77
+ )
78
+ return _dict
79
+
80
+ @classmethod
81
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
82
+ """Create an instance of BusIOProfinetSlot from a dict"""
83
+ if obj is None:
84
+ return None
85
+
86
+ if not isinstance(obj, dict):
87
+ return cls.model_validate(obj)
88
+
89
+ _obj = cls.model_validate({
90
+ "slot": obj.get("slot"),
91
+ "input_size_bytes": obj.get("input_size_bytes"),
92
+ "output_size_bytes": obj.get("output_size_bytes")
93
+ })
94
+ return _obj
95
+
96
+
@@ -32,8 +32,8 @@ class ProfinetIO(BaseModel):
32
32
  description: StrictStr = Field(description="Descriptive name or note for the input/output variable. ")
33
33
  type: ProfinetIOTypeEnum
34
34
  direction: ProfinetIODirection = Field(description="The direction of the input/output variable, indicating whether it is an input or output for the PROFINET device, e.g., NOVA's PROFINET service. ")
35
- byte_address: Annotated[int, Field(le=65535, strict=True, ge=0)] = Field(description="The byte address of the input/output variable in the PROFINET device, e.g., NOVA's PROFINET service. The byte address is used to locate the specific input/output variable within the device's memory or data structure. ")
36
- bit_address: Optional[Annotated[int, Field(le=7, strict=True, ge=0)]] = Field(default=None, description="The bit address of the input/output variable within the byte or word address. The bit address is used to specify the exact bit within the byte or word that corresponds to the input/output variable. ")
35
+ byte_address: Annotated[int, Field(le=65535, strict=True, ge=0)] = Field(description="The byte address in the PROFINET device's process image, with offset 0. The slot is automatically determined based on this address and the configured slot layout. For example, with two slots of 64 bytes each: - Bytes 0-63: Slot 1 - Bytes 64-127: Slot 2 When importing from a tag table, e.g., TIA Portal, use `input_offset`/`output_offset` to convert global PLC addresses to device-local addresses: `device_byte_address` = `plc_byte_address` - offset ")
36
+ bit_address: Optional[Annotated[int, Field(le=7, strict=True, ge=0)]] = Field(default=None, description="The bit offset within the byte specified by `byte_address`. Only relevant for boolean/bit-type variables. Valid values are 0-7 (8 bits per byte). For byte/word/dword types, this field is typically omitted or set to 0. ")
37
37
  io: StrictStr = Field(description="The unique identifier for the input/output value. This identifier is used to reference the specific input/output variable in the PROFINET device, e.g., NOVA's PROFINET service. ")
38
38
  __properties: ClassVar[List[str]] = ["description", "type", "direction", "byte_address", "bit_address", "io"]
39
39
 
@@ -32,8 +32,8 @@ class ProfinetIOData(BaseModel):
32
32
  description: StrictStr = Field(description="Descriptive name or note for the input/output variable. ")
33
33
  type: ProfinetIOTypeEnum
34
34
  direction: ProfinetIODirection = Field(description="The direction of the input/output variable, indicating whether it is an input or output for the PROFINET device, e.g., NOVA's PROFINET service. ")
35
- byte_address: Annotated[int, Field(le=65535, strict=True, ge=0)] = Field(description="The byte address of the input/output variable in the PROFINET device, e.g., NOVA's PROFINET service. The byte address is used to locate the specific input/output variable within the device's memory or data structure. ")
36
- bit_address: Optional[Annotated[int, Field(le=7, strict=True, ge=0)]] = Field(default=None, description="The bit address of the input/output variable within the byte or word address. The bit address is used to specify the exact bit within the byte or word that corresponds to the input/output variable. ")
35
+ byte_address: Annotated[int, Field(le=65535, strict=True, ge=0)] = Field(description="The byte address in the PROFINET device's process image, with offset 0. The slot is automatically determined based on this address and the configured slot layout. For example, with two slots of 64 bytes each: - Bytes 0-63: Slot 1 - Bytes 64-127: Slot 2 When importing from a tag table, e.g., TIA Portal, use `input_offset`/`output_offset` to convert global PLC addresses to device-local addresses: `device_byte_address` = `plc_byte_address` - offset ")
36
+ bit_address: Optional[Annotated[int, Field(le=7, strict=True, ge=0)]] = Field(default=None, description="The bit offset within the byte specified by `byte_address`. Only relevant for boolean/bit-type variables. Valid values are 0-7 (8 bits per byte). For byte/word/dword types, this field is typically omitted or set to 0. ")
37
37
  __properties: ClassVar[List[str]] = ["description", "type", "direction", "byte_address", "bit_address"]
38
38
 
39
39
  model_config = ConfigDict(
@@ -13,7 +13,7 @@
13
13
  Do not edit the class manually.
14
14
  """ # noqa: E501
15
15
 
16
- __version__ = "26.3.0.dev23"
16
+ __version__ = "26.3.0.dev24"
17
17
 
18
18
  from . import api
19
19
  from . import api_client
@@ -3473,6 +3473,273 @@ class BUSInputsOutputsApi:
3473
3473
 
3474
3474
 
3475
3475
 
3476
+ @validate_call
3477
+ async def get_profinet_gsdml(
3478
+ self,
3479
+ cell: Annotated[StrictStr, Field(description="Unique identifier addressing a cell in all API calls. ")],
3480
+ _request_timeout: Union[
3481
+ None,
3482
+ Annotated[StrictFloat, Field(gt=0)],
3483
+ Tuple[
3484
+ Annotated[StrictFloat, Field(gt=0)],
3485
+ Annotated[StrictFloat, Field(gt=0)]
3486
+ ]
3487
+ ] = None,
3488
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
3489
+ _content_type: Optional[StrictStr] = None,
3490
+ _headers: Optional[Dict[StrictStr, Any]] = None,
3491
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
3492
+ ) -> str:
3493
+ """Get PROFINET GSDML File
3494
+
3495
+ Returns the Generic Station Description Markup Language (GSDML) file for the PROFINET device. The GSDML file describes the PROFINET device configuration and capabilities, and can be imported into PROFINET engineering tools, e.g., TIA Portal, or other PLC programming environments. The returned GSDML file matches the current slot configuration of the PROFINET device.
3496
+
3497
+ :param cell: Unique identifier addressing a cell in all API calls. (required)
3498
+ :type cell: str
3499
+ :param _request_timeout: timeout setting for this request. If one
3500
+ number provided, it will be total request
3501
+ timeout. It can also be a pair (tuple) of
3502
+ (connection, read) timeouts.
3503
+ :type _request_timeout: int, tuple(int, int), optional
3504
+ :param _request_auth: set to override the auth_settings for an a single
3505
+ request; this effectively ignores the
3506
+ authentication in the spec for a single request.
3507
+ :type _request_auth: dict, optional
3508
+ :param _content_type: force content-type for the request.
3509
+ :type _content_type: str, Optional
3510
+ :param _headers: set to override the headers for a single
3511
+ request; this effectively ignores the headers
3512
+ in the spec for a single request.
3513
+ :type _headers: dict, optional
3514
+ :param _host_index: set to override the host_index for a single
3515
+ request; this effectively ignores the host_index
3516
+ in the spec for a single request.
3517
+ :type _host_index: int, optional
3518
+ :return: Returns the result object.
3519
+ """ # noqa: E501
3520
+
3521
+ _param = self._get_profinet_gsdml_serialize(
3522
+ cell=cell,
3523
+ _request_auth=_request_auth,
3524
+ _content_type=_content_type,
3525
+ _headers=_headers,
3526
+ _host_index=_host_index
3527
+ )
3528
+
3529
+ _response_types_map: Dict[str, Optional[str]] = {
3530
+ '200': "str",
3531
+ '404': "Error",
3532
+ '412': "Error",
3533
+ }
3534
+
3535
+ response_data = await self.api_client.call_api(
3536
+ *_param,
3537
+ _request_timeout=_request_timeout
3538
+ )
3539
+ await response_data.read()
3540
+ return self.api_client.response_deserialize(
3541
+ response_data=response_data,
3542
+ response_types_map=_response_types_map,
3543
+ ).data
3544
+
3545
+
3546
+ @validate_call
3547
+ async def get_profinet_gsdml_with_http_info(
3548
+ self,
3549
+ cell: Annotated[StrictStr, Field(description="Unique identifier addressing a cell in all API calls. ")],
3550
+ _request_timeout: Union[
3551
+ None,
3552
+ Annotated[StrictFloat, Field(gt=0)],
3553
+ Tuple[
3554
+ Annotated[StrictFloat, Field(gt=0)],
3555
+ Annotated[StrictFloat, Field(gt=0)]
3556
+ ]
3557
+ ] = None,
3558
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
3559
+ _content_type: Optional[StrictStr] = None,
3560
+ _headers: Optional[Dict[StrictStr, Any]] = None,
3561
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
3562
+ ) -> ApiResponse[str]:
3563
+ """Get PROFINET GSDML File
3564
+
3565
+ Returns the Generic Station Description Markup Language (GSDML) file for the PROFINET device. The GSDML file describes the PROFINET device configuration and capabilities, and can be imported into PROFINET engineering tools, e.g., TIA Portal, or other PLC programming environments. The returned GSDML file matches the current slot configuration of the PROFINET device.
3566
+
3567
+ :param cell: Unique identifier addressing a cell in all API calls. (required)
3568
+ :type cell: str
3569
+ :param _request_timeout: timeout setting for this request. If one
3570
+ number provided, it will be total request
3571
+ timeout. It can also be a pair (tuple) of
3572
+ (connection, read) timeouts.
3573
+ :type _request_timeout: int, tuple(int, int), optional
3574
+ :param _request_auth: set to override the auth_settings for an a single
3575
+ request; this effectively ignores the
3576
+ authentication in the spec for a single request.
3577
+ :type _request_auth: dict, optional
3578
+ :param _content_type: force content-type for the request.
3579
+ :type _content_type: str, Optional
3580
+ :param _headers: set to override the headers for a single
3581
+ request; this effectively ignores the headers
3582
+ in the spec for a single request.
3583
+ :type _headers: dict, optional
3584
+ :param _host_index: set to override the host_index for a single
3585
+ request; this effectively ignores the host_index
3586
+ in the spec for a single request.
3587
+ :type _host_index: int, optional
3588
+ :return: Returns the result object.
3589
+ """ # noqa: E501
3590
+
3591
+ _param = self._get_profinet_gsdml_serialize(
3592
+ cell=cell,
3593
+ _request_auth=_request_auth,
3594
+ _content_type=_content_type,
3595
+ _headers=_headers,
3596
+ _host_index=_host_index
3597
+ )
3598
+
3599
+ _response_types_map: Dict[str, Optional[str]] = {
3600
+ '200': "str",
3601
+ '404': "Error",
3602
+ '412': "Error",
3603
+ }
3604
+
3605
+ response_data = await self.api_client.call_api(
3606
+ *_param,
3607
+ _request_timeout=_request_timeout
3608
+ )
3609
+ await response_data.read()
3610
+ return self.api_client.response_deserialize(
3611
+ response_data=response_data,
3612
+ response_types_map=_response_types_map,
3613
+ )
3614
+
3615
+
3616
+ @validate_call
3617
+ async def get_profinet_gsdml_without_preload_content(
3618
+ self,
3619
+ cell: Annotated[StrictStr, Field(description="Unique identifier addressing a cell in all API calls. ")],
3620
+ _request_timeout: Union[
3621
+ None,
3622
+ Annotated[StrictFloat, Field(gt=0)],
3623
+ Tuple[
3624
+ Annotated[StrictFloat, Field(gt=0)],
3625
+ Annotated[StrictFloat, Field(gt=0)]
3626
+ ]
3627
+ ] = None,
3628
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
3629
+ _content_type: Optional[StrictStr] = None,
3630
+ _headers: Optional[Dict[StrictStr, Any]] = None,
3631
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
3632
+ ) -> RESTResponseType:
3633
+ """Get PROFINET GSDML File
3634
+
3635
+ Returns the Generic Station Description Markup Language (GSDML) file for the PROFINET device. The GSDML file describes the PROFINET device configuration and capabilities, and can be imported into PROFINET engineering tools, e.g., TIA Portal, or other PLC programming environments. The returned GSDML file matches the current slot configuration of the PROFINET device.
3636
+
3637
+ :param cell: Unique identifier addressing a cell in all API calls. (required)
3638
+ :type cell: str
3639
+ :param _request_timeout: timeout setting for this request. If one
3640
+ number provided, it will be total request
3641
+ timeout. It can also be a pair (tuple) of
3642
+ (connection, read) timeouts.
3643
+ :type _request_timeout: int, tuple(int, int), optional
3644
+ :param _request_auth: set to override the auth_settings for an a single
3645
+ request; this effectively ignores the
3646
+ authentication in the spec for a single request.
3647
+ :type _request_auth: dict, optional
3648
+ :param _content_type: force content-type for the request.
3649
+ :type _content_type: str, Optional
3650
+ :param _headers: set to override the headers for a single
3651
+ request; this effectively ignores the headers
3652
+ in the spec for a single request.
3653
+ :type _headers: dict, optional
3654
+ :param _host_index: set to override the host_index for a single
3655
+ request; this effectively ignores the host_index
3656
+ in the spec for a single request.
3657
+ :type _host_index: int, optional
3658
+ :return: Returns the result object.
3659
+ """ # noqa: E501
3660
+
3661
+ _param = self._get_profinet_gsdml_serialize(
3662
+ cell=cell,
3663
+ _request_auth=_request_auth,
3664
+ _content_type=_content_type,
3665
+ _headers=_headers,
3666
+ _host_index=_host_index
3667
+ )
3668
+
3669
+ _response_types_map: Dict[str, Optional[str]] = {
3670
+ '200': "str",
3671
+ '404': "Error",
3672
+ '412': "Error",
3673
+ }
3674
+
3675
+ response_data = await self.api_client.call_api(
3676
+ *_param,
3677
+ _request_timeout=_request_timeout
3678
+ )
3679
+ return response_data.response
3680
+
3681
+
3682
+ def _get_profinet_gsdml_serialize(
3683
+ self,
3684
+ cell,
3685
+ _request_auth,
3686
+ _content_type,
3687
+ _headers,
3688
+ _host_index,
3689
+ ) -> RequestSerialized:
3690
+
3691
+ _host = None
3692
+
3693
+ _collection_formats: Dict[str, str] = {
3694
+ }
3695
+
3696
+ _path_params: Dict[str, str] = {}
3697
+ _query_params: List[Tuple[str, str]] = []
3698
+ _header_params: Dict[str, Optional[str]] = _headers or {}
3699
+ _form_params: List[Tuple[str, str]] = []
3700
+ _files: Dict[str, Union[str, bytes]] = {}
3701
+ _body_params: Optional[bytes] = None
3702
+
3703
+ # process the path parameters
3704
+ if cell is not None:
3705
+ _path_params['cell'] = cell
3706
+ # process the query parameters
3707
+ # process the header parameters
3708
+ # process the form parameters
3709
+ # process the body parameter
3710
+
3711
+
3712
+ # set the HTTP header `Accept`
3713
+ _header_params['Accept'] = self.api_client.select_header_accept(
3714
+ [
3715
+ 'application/xml',
3716
+ 'application/json'
3717
+ ]
3718
+ )
3719
+
3720
+
3721
+ # authentication setting
3722
+ _auth_settings: List[str] = [
3723
+ 'BearerAuth'
3724
+ ]
3725
+
3726
+ return self.api_client.param_serialize(
3727
+ method='GET',
3728
+ resource_path='/cells/{cell}/bus-ios/profinet/gsdml',
3729
+ path_params=_path_params,
3730
+ query_params=_query_params,
3731
+ header_params=_header_params,
3732
+ body=_body_params,
3733
+ post_params=_form_params,
3734
+ files=_files,
3735
+ auth_settings=_auth_settings,
3736
+ collection_formats=_collection_formats,
3737
+ _host=_host,
3738
+ _request_auth=_request_auth
3739
+ )
3740
+
3741
+
3742
+
3476
3743
  @validate_call
3477
3744
  async def get_profinet_ios_from_file(
3478
3745
  self,
@@ -91,7 +91,7 @@ class ApiClient:
91
91
  self.default_headers[header_name] = header_value
92
92
  self.cookie = cookie
93
93
  # Set default User-Agent.
94
- self.user_agent = 'Wandelbots-Nova-API-Python-Client/26.3.0.dev23'
94
+ self.user_agent = 'Wandelbots-Nova-API-Python-Client/26.3.0.dev24'
95
95
  self.client_side_validation = configuration.client_side_validation
96
96
 
97
97
  async def __aenter__(self):
@@ -511,7 +511,7 @@ class Configuration:
511
511
  "OS: {env}\n"\
512
512
  "Python Version: {pyversion}\n"\
513
513
  "Version of the API: 2.3.0 dev\n"\
514
- "SDK Package Version: 26.3.0.dev23".\
514
+ "SDK Package Version: 26.3.0.dev24".\
515
515
  format(env=sys.platform, pyversion=sys.version)
516
516
 
517
517
  def get_host_settings(self) -> List[HostSetting]:
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: public.openapi.yaml
3
- # timestamp: 2026-03-13T14:40:45+00:00
3
+ # timestamp: 2026-03-14T07:11:40+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -593,6 +593,29 @@ class BusIOProfinetNetwork(BaseModel):
593
593
  """
594
594
 
595
595
 
596
+ class BusIOProfinetSlot(BaseModel):
597
+ """
598
+ Configuration for one PROFINET process data slot.
599
+
600
+ """
601
+
602
+ slot: Annotated[int, Field(examples=[1], ge=1)]
603
+ """
604
+ Slot identifier on the PROFINET device.
605
+
606
+ """
607
+ input_size_bytes: Annotated[int, Field(examples=[64], ge=0)]
608
+ """
609
+ Process data size in bytes for the input direction (device → controller).
610
+
611
+ """
612
+ output_size_bytes: Annotated[int, Field(examples=[64], ge=0)]
613
+ """
614
+ Process data size in bytes for the output direction (controller → device).
615
+
616
+ """
617
+
618
+
596
619
  class BusIOProfinetDefaultRoute(BaseModel):
597
620
  """
598
621
  Current default route configuration of your NOVA instance.
@@ -638,6 +661,14 @@ class BusIOProfinet(BaseModel):
638
661
  """
639
662
  MAC address of the physical ethernet interface that you want to use for PROFINET communication.
640
663
 
664
+ """
665
+ slots: Annotated[list[BusIOProfinetSlot] | None, Field(min_length=1)] = None
666
+ """
667
+ Optional PROFINET slot configuration.
668
+
669
+ If not provided, the default configuration is used for backward compatibility:
670
+ one slot with a size of 64 bytes.
671
+
641
672
  """
642
673
  default_route: Annotated[
643
674
  BusIOProfinetDefaultRoute | None, Field(deprecated=True)
@@ -4953,16 +4984,25 @@ class ProfinetIOData(BaseModel):
4953
4984
  The direction of the input/output variable, indicating whether it is an input or output for the PROFINET device, e.g., NOVA's PROFINET service.
4954
4985
 
4955
4986
  """
4956
- byte_address: Annotated[int, Field(ge=0, le=65535)]
4987
+ byte_address: Annotated[int, Field(examples=[68], ge=0, le=65535)]
4957
4988
  """
4958
- The byte address of the input/output variable in the PROFINET device, e.g., NOVA's PROFINET service.
4959
- The byte address is used to locate the specific input/output variable within the device's memory or data structure.
4989
+ The byte address in the PROFINET device's process image, with offset 0.
4990
+ The slot is automatically determined based on this address and the configured slot layout.
4991
+
4992
+ For example, with two slots of 64 bytes each:
4993
+ - Bytes 0-63: Slot 1
4994
+ - Bytes 64-127: Slot 2
4995
+
4996
+ When importing from a tag table, e.g., TIA Portal, use `input_offset`/`output_offset`
4997
+ to convert global PLC addresses to device-local addresses:
4998
+ `device_byte_address` = `plc_byte_address` - offset
4960
4999
 
4961
5000
  """
4962
5001
  bit_address: Annotated[int | None, Field(ge=0, le=7)] = None
4963
5002
  """
4964
- The bit address of the input/output variable within the byte or word address.
4965
- The bit address is used to specify the exact bit within the byte or word that corresponds to the input/output variable.
5003
+ The bit offset within the byte specified by `byte_address`.
5004
+ Only relevant for boolean/bit-type variables. Valid values are 0-7 (8 bits per byte).
5005
+ For byte/word/dword types, this field is typically omitted or set to 0.
4966
5006
 
4967
5007
  """
4968
5008
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wandelbots_api_client
3
- Version: 26.3.0.dev23
3
+ Version: 26.3.0.dev24
4
4
  Summary: Wandelbots Python Client: Interact with robots in an easy and intuitive way.
5
5
  Home-page:
6
6
  Author: Copyright (c) 2025 Wandelbots GmbH
@@ -41,7 +41,7 @@ Dynamic: license-file
41
41
  Interact with robots in an easy and intuitive way.
42
42
 
43
43
  - Compatible API version: 1.3.0 (can be found at the home screen of your instance -> API)
44
- - Package version: 26.3.0.dev23
44
+ - Package version: 26.3.0.dev24
45
45
 
46
46
  ## Requirements.
47
47
  Python >=3.11, Python < 4.0
@@ -1,8 +1,8 @@
1
- wandelbots_api_client/__init__.py,sha256=R9QCzncindQQtp3j4TzkSVdJHbhgb9-DcPAibd1a7ZA,1022
2
- wandelbots_api_client/api_client.py,sha256=TUKDe3SUrVREArfCgGWWUx7n0fS-vCpk4LY_PAOhyBw,27912
1
+ wandelbots_api_client/__init__.py,sha256=X6eOUK993kQ-9RRUhAghcmtYeoSWP81FPXZMEtC-T5s,1022
2
+ wandelbots_api_client/api_client.py,sha256=1dEiU3aIEO_XXrWIsjmFvRF2PWld65EjYrJ8g0GcZHU,27912
3
3
  wandelbots_api_client/api_response.py,sha256=eMxw1mpmJcoGZ3gs9z6jM4oYoZ10Gjk333s9sKxGv7s,652
4
4
  wandelbots_api_client/authorization.py,sha256=1ZKTpDU3t-7clI0hOqijkg-4Em0hKAbLQL6dyGO_r9w,7928
5
- wandelbots_api_client/configuration.py,sha256=j6MjqXxcLze6425CTOPDUu_pCuziacVzVxANYNgG208,18169
5
+ wandelbots_api_client/configuration.py,sha256=-jngP-mtt-hqxAegThBdgR7s1Nr-OGPEGF1PmfClVVQ,18169
6
6
  wandelbots_api_client/exceptions.py,sha256=m6jyxQAUv-S4sK3DBs-FWzUjCTidqJMbAvR_bABj6us,6428
7
7
  wandelbots_api_client/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  wandelbots_api_client/rest.py,sha256=5iQwBRGI0GwgTHUM9X5OWiXtSFLd9gWEUb1QXpK2ECE,7256
@@ -327,16 +327,16 @@ wandelbots_api_client/models/virtual_controller.py,sha256=lvuYnmpK_2B3wjrgJ49Qrj
327
327
  wandelbots_api_client/models/virtual_controller_types.py,sha256=IIcNSonSxyah0DlHiiW_bSol1P5m5wSY5_DTvU2nj0w,6571
328
328
  wandelbots_api_client/models/virtual_robot_configuration.py,sha256=YkWHoCzU4fmxNcJ-62gd-ZA3tiJH6KAXoy3Cg66EZ7U,2967
329
329
  wandelbots_api_client/models/yaskawa_controller.py,sha256=IsfWVcsqJ-bsbpfzhyInbcHq2oJ0-s9UQ3y2ADkzQd4,3188
330
- wandelbots_api_client/v2/__init__.py,sha256=bX4_PhkNS_r2vqUrBfsJlj9uNYDgc3wxw31s8qRCatA,1026
331
- wandelbots_api_client/v2/api_client.py,sha256=wfgdnUgJg2CEyNBEP1OShegHdl3FUtgiwDiuYo2CwB0,27934
330
+ wandelbots_api_client/v2/__init__.py,sha256=SD0BM85DaSEagOxx2f17a5Xu_YhL_OWKiVOFMvTN-MA,1026
331
+ wandelbots_api_client/v2/api_client.py,sha256=x0SPq8PlUAjaulDXxqagM7VGOmK_lXDZSpxSThr1XiQ,27934
332
332
  wandelbots_api_client/v2/api_response.py,sha256=eMxw1mpmJcoGZ3gs9z6jM4oYoZ10Gjk333s9sKxGv7s,652
333
- wandelbots_api_client/v2/configuration.py,sha256=03yhwsy_CJ7AnoZPWKvwcfVrzu44FWigEYERuHK4E6U,18180
333
+ wandelbots_api_client/v2/configuration.py,sha256=TxN39uoF9erptCmEH-iu88ltRUfy4kWbiInYi-TkGH0,18180
334
334
  wandelbots_api_client/v2/exceptions.py,sha256=Drsd9QsxdUX9okRXcWiYlF5itY9_7_OgNrKhPkBYMws,6432
335
335
  wandelbots_api_client/v2/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
336
336
  wandelbots_api_client/v2/rest.py,sha256=C4MNGHsRDniMosrRBG6RgbRwqrRXcKomt8cg8mkozvI,7263
337
337
  wandelbots_api_client/v2/api/__init__.py,sha256=Dkor2myY6ojJ5mtosKN8EyNlrg3dUlYBzS7NGpNK4Qo,1934
338
338
  wandelbots_api_client/v2/api/application_api.py,sha256=--yWGJegIMC1xD9tW4zedScXFAwP5IF69v8NuieZoJA,70959
339
- wandelbots_api_client/v2/api/bus_inputs_outputs_api.py,sha256=PJprAER-Ymd9h0prTWlBuB5Gwz7yuVZ312TXyoCVYuI,214966
339
+ wandelbots_api_client/v2/api/bus_inputs_outputs_api.py,sha256=o8yfa2wwJydH5JvpBpPasMoKnb0SPzeswrXi4xL2ol4,226201
340
340
  wandelbots_api_client/v2/api/cell_api.py,sha256=QhMNpuLNJzFNMvZsDRacxnRb7cQaaj9HBdPQQA0E1es,100698
341
341
  wandelbots_api_client/v2/api/controller_api.py,sha256=T_2B-w0_rH5TAB9VzW9e1Odwt87SEE3oe5WUf_LJP4E,164255
342
342
  wandelbots_api_client/v2/api/controller_inputs_outputs_api.py,sha256=YEHPAzc6ZCSDIb1j4_2XgCib1H0NJD5YgCtqXGu8Pr0,62153
@@ -359,7 +359,7 @@ wandelbots_api_client/v2/api/version_api.py,sha256=a8MMeRy380agPsnlxjLOWjjicYrwz
359
359
  wandelbots_api_client/v2/api/virtual_controller_api.py,sha256=I5xVrfycRymcmteylHAJAM_XRzte9gYD-ziFLsA-XXY,237788
360
360
  wandelbots_api_client/v2/api/virtual_controller_behavior_api.py,sha256=EiQBMZTLpoCcB3nalYopqYDaTJLFrZfFp3wRzi4Uw-Y,42162
361
361
  wandelbots_api_client/v2/api/virtual_controller_inputs_outputs_api.py,sha256=ROtwVeDw_bnMKrLGFg7-zDoO32wMJhwgyRDh5PGoDv4,42407
362
- wandelbots_api_client/v2/models/__init__.py,sha256=g5_XBSS7jki4AnstPexpIl73KUSmL482g9E-BOHc9-s,25425
362
+ wandelbots_api_client/v2/models/__init__.py,sha256=3QiUyFtyBehBmO8lyrkHE6DKvJj2T0Av7PHuMFa7CfE,25503
363
363
  wandelbots_api_client/v2/models/abb_controller.py,sha256=rxs_559J9gXBvJUNbdI8y9Bk-2p--xn6vnUlBB6Vvoo,3860
364
364
  wandelbots_api_client/v2/models/abb_controller_egm_server.py,sha256=topD0qfsgi6WXY9yWHXfyH_bPeYmpMvY5LXzyRQQnJ4,2776
365
365
  wandelbots_api_client/v2/models/activate_license_request.py,sha256=9DIJcpzpMM1XoDr8hM3Et8_OVwfkNGd8oY5IdXUReNY,2693
@@ -382,10 +382,11 @@ wandelbots_api_client/v2/models/bus_io_modbus_server.py,sha256=_wgcrqicj_I9iH5qa
382
382
  wandelbots_api_client/v2/models/bus_io_modbus_tcp_client.py,sha256=H_fCze7SfgOFUMP7-uGK0CAwGTjbziF_AoND9cNNTn4,3325
383
383
  wandelbots_api_client/v2/models/bus_io_modbus_tcp_server.py,sha256=QH2XK7eCTFkqYCxZEAe4U7xnWJ1bsG_eib9y9de-r7k,3178
384
384
  wandelbots_api_client/v2/models/bus_io_modbus_virtual.py,sha256=RycHF5A_23VSsj1E4uBsL_JZOYcwC8NeKV4b0voTshc,2908
385
- wandelbots_api_client/v2/models/bus_io_profinet.py,sha256=kUPl51301CE0OK0tqEEDcMS6GENCtHAuKABSe7LC9SY,4669
385
+ wandelbots_api_client/v2/models/bus_io_profinet.py,sha256=YpNq0vOag79aYfV1booni3Clx4IaMpElBfy4DwCizlQ,6133
386
386
  wandelbots_api_client/v2/models/bus_io_profinet_default_route.py,sha256=bdexfTo5QZiRcRffe44MSLQKyo6earfQv4rmPwsVroY,3210
387
387
  wandelbots_api_client/v2/models/bus_io_profinet_ip_config.py,sha256=VI53XatLaqp7adg8sAgBSiJrURXdFaqILhBZNcaukQI,3376
388
388
  wandelbots_api_client/v2/models/bus_io_profinet_network.py,sha256=wXeyfs8cbSSNeWe_2nMN4Uotv2kpy1AhxQngpOmHEEc,4097
389
+ wandelbots_api_client/v2/models/bus_io_profinet_slot.py,sha256=cJ7odDjI_qAqQg_UdirbTWju-ttHLs5CPVKg5UrmAk4,3224
389
390
  wandelbots_api_client/v2/models/bus_io_profinet_virtual.py,sha256=3QTxm21rlYlVDUwLg_ilaKWafYZ_A73OQP9_o6_jF7c,2926
390
391
  wandelbots_api_client/v2/models/bus_io_type.py,sha256=kkhb1Ass2pVPGlgvlW9zj8UZfZpYXVJ31eK2pvGnm3Q,9136
391
392
  wandelbots_api_client/v2/models/bus_ios_state.py,sha256=y08_fanLOKpZdJAFdysQ2kkRTJOUB9ht4qT5u130zVM,2947
@@ -585,8 +586,8 @@ wandelbots_api_client/v2/models/playback_speed_response.py,sha256=pxHcLjbHWNKRf7
585
586
  wandelbots_api_client/v2/models/pose.py,sha256=AMdlcf6nWTvaWDAlUonP7w2F5at-qDayMnXRNttPWZc,3319
586
587
  wandelbots_api_client/v2/models/profinet_description.py,sha256=-ktOK0CwjaSUZbOduGvXHjpNHzxOPXRmZyQy8zAWOes,5041
587
588
  wandelbots_api_client/v2/models/profinet_input_output_config.py,sha256=LG9lLLkVmAW_c-BSsmzarErQq0Bj8AxTV4tQVSqgvbk,3599
588
- wandelbots_api_client/v2/models/profinet_io.py,sha256=ygBBBeyQh-GByIdU5VDRw8toXE-QIkQpQFLF7jMJ6SM,4228
589
- wandelbots_api_client/v2/models/profinet_io_data.py,sha256=8YJVQEHQwLIdzdMfKPVoyohhVoXF3VCMvCvHTrAbOrQ,3985
589
+ wandelbots_api_client/v2/models/profinet_io.py,sha256=S7jO_IMFm-X99tfNa9F1UG4z9wJtvXpuBhGeTD6xvyY,4483
590
+ wandelbots_api_client/v2/models/profinet_io_data.py,sha256=i1Rmc3AbzyW1m9qZQ0em4cRFIlfGGkqW2UBX1_--4vY,4240
590
591
  wandelbots_api_client/v2/models/profinet_io_direction.py,sha256=t0inKliUb2wRhorMvPeW0JjFEFKX-N_9Ly1xrXO3rqk,1005
591
592
  wandelbots_api_client/v2/models/profinet_io_type_enum.py,sha256=sStDFfmu1B-5-CzY_KKpxgnBpjGDp-uBVzhnj42k7T0,1301
592
593
  wandelbots_api_client/v2/models/profinet_slot_description.py,sha256=EPXe8MJg7zNPM8kTIvYKOSUagTSyXg0iOY0Xc6qw3zk,5017
@@ -653,18 +654,18 @@ wandelbots_api_client/v2/models/zod_validation_error.py,sha256=1WPSECVx5_SqDDkx0
653
654
  wandelbots_api_client/v2/models/zod_validation_error_error.py,sha256=Uc0lXPdD-fIFhTEqnHxyRPhJi8SVtDK8lenbVhEDGJE,4416
654
655
  wandelbots_api_client/v2/models/zod_validation_error_error_details_inner.py,sha256=QTs1CXzMg6kKfhKyY0TYfSFNvXvrDqdPGSPXee1hKiI,4037
655
656
  wandelbots_api_client/v2/models/zod_validation_error_error_details_inner_path_inner.py,sha256=L9SPWClflYFOT9JQe5yTwOHKBOA8ShIgxiiZ4a2f4RI,5493
656
- wandelbots_api_client/v2_pydantic/__init__.py,sha256=ZkLudDsPPwVP2je5yzI0cxN5hClYlZQdJz8F1NMgFVg,1061
657
- wandelbots_api_client/v2_pydantic/api_client.py,sha256=DekbOcUy5itunCAXTKR8qL3fggDkvDeZi7-DeREkufw,28142
657
+ wandelbots_api_client/v2_pydantic/__init__.py,sha256=-Bt60GfYvJxZvM_0xYxn9pPJUuGG8lupMU1QDS44UiQ,1061
658
+ wandelbots_api_client/v2_pydantic/api_client.py,sha256=YdHAQVKqPV8YIU7pwq8jJowJvkrK_lMOnp5xsosQAGc,28142
658
659
  wandelbots_api_client/v2_pydantic/api_response.py,sha256=eMxw1mpmJcoGZ3gs9z6jM4oYoZ10Gjk333s9sKxGv7s,652
659
- wandelbots_api_client/v2_pydantic/configuration.py,sha256=PPWAm3AEJ4SQc2NmIxRNoZIofr3y7UBA9SpOaur2PYU,18189
660
+ wandelbots_api_client/v2_pydantic/configuration.py,sha256=BhY0R3K7H0JP7uffgkOSKK9HdIeUPvAvsOY8-Rvz8f8,18189
660
661
  wandelbots_api_client/v2_pydantic/exceptions.py,sha256=Drsd9QsxdUX9okRXcWiYlF5itY9_7_OgNrKhPkBYMws,6432
661
- wandelbots_api_client/v2_pydantic/models.py,sha256=KLp5nHOgwxUsma8gOLMgmQODwZF8UG8UqO2YWG_NYIc,151764
662
+ wandelbots_api_client/v2_pydantic/models.py,sha256=pCkSnMBmjH8y0RLoq_54icqxSC034hwHKHGmrC7nvmc,152873
662
663
  wandelbots_api_client/v2_pydantic/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
663
664
  wandelbots_api_client/v2_pydantic/rest.py,sha256=tPzuwEQCHmMxyGjMAjWhbm2P6od6k6j4bZJdziI_Ec0,7272
664
665
  wandelbots_api_client/v2_pydantic/virtual_controller_types.py,sha256=luk6nO5VP4f8NmaHVrgzWmcw4TaFyNXD3B9WoECdID8,5225
665
666
  wandelbots_api_client/v2_pydantic/api/__init__.py,sha256=Dkor2myY6ojJ5mtosKN8EyNlrg3dUlYBzS7NGpNK4Qo,1934
666
667
  wandelbots_api_client/v2_pydantic/api/application_api.py,sha256=Td1FOAoRK3dsvx41iYBDvP7YFqA5SaZYiFLPFzI28k8,71249
667
- wandelbots_api_client/v2_pydantic/api/bus_inputs_outputs_api.py,sha256=JpYIxnTV6XNTd6DQaA4Tu9lMwdT66nEex7DpsjwFYvw,215699
668
+ wandelbots_api_client/v2_pydantic/api/bus_inputs_outputs_api.py,sha256=NysDzAfmRNHX5aiMhyzGso44FK-AV15HBS7oCcoLYQw,226977
668
669
  wandelbots_api_client/v2_pydantic/api/cell_api.py,sha256=MvSbwt24WNazl4kXsKN-lGnNefBoA_hd0mru3NfV5KY,101068
669
670
  wandelbots_api_client/v2_pydantic/api/controller_api.py,sha256=F1iyfUjtbLme-2wd7ieMbeFDn71IfF8-l2VEJSQye_k,164718
670
671
  wandelbots_api_client/v2_pydantic/api/controller_inputs_outputs_api.py,sha256=KEa705tgBnwTi4O9o5gLPs4ZxCbLbQ82Az4c38WzgnU,62308
@@ -687,8 +688,8 @@ wandelbots_api_client/v2_pydantic/api/version_api.py,sha256=gQ8znJVJYxXjJFMBK4ef
687
688
  wandelbots_api_client/v2_pydantic/api/virtual_controller_api.py,sha256=fHvUVeWJx6DauzYz_kUCPVLij8WA1U_mmQIEG5JifLs,238460
688
689
  wandelbots_api_client/v2_pydantic/api/virtual_controller_behavior_api.py,sha256=uY8FyumT1bc6k2F-hZi6EYWbvgCqYARkqVuM3oXJ_Ao,42312
689
690
  wandelbots_api_client/v2_pydantic/api/virtual_controller_inputs_outputs_api.py,sha256=GHrdVGPMmyVcgpCmtGC_yWlk21gl4ZUh34r6UbSBZj0,42548
690
- wandelbots_api_client-26.3.0.dev23.dist-info/licenses/LICENSE,sha256=PJyUaZgTVC0_nJmhRpcbnOcXvmTqJGE6axeSifngIGY,11344
691
- wandelbots_api_client-26.3.0.dev23.dist-info/METADATA,sha256=jH1xfnQpxtK4ojwMIDq4Cqt1UEArIZb5K2EdRIaDtto,8022
692
- wandelbots_api_client-26.3.0.dev23.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
693
- wandelbots_api_client-26.3.0.dev23.dist-info/top_level.txt,sha256=eCDsV95XWqVBSMDe4MRzyOj53-TK-o5WU1Qv_yv493M,22
694
- wandelbots_api_client-26.3.0.dev23.dist-info/RECORD,,
691
+ wandelbots_api_client-26.3.0.dev24.dist-info/licenses/LICENSE,sha256=PJyUaZgTVC0_nJmhRpcbnOcXvmTqJGE6axeSifngIGY,11344
692
+ wandelbots_api_client-26.3.0.dev24.dist-info/METADATA,sha256=GtOZ0su6gUfBY7qsCWMwuxCUOhXoRBTeMrLECnu-rYM,8022
693
+ wandelbots_api_client-26.3.0.dev24.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
694
+ wandelbots_api_client-26.3.0.dev24.dist-info/top_level.txt,sha256=eCDsV95XWqVBSMDe4MRzyOj53-TK-o5WU1Qv_yv493M,22
695
+ wandelbots_api_client-26.3.0.dev24.dist-info/RECORD,,