kicad-python 0.1.0a1__tar.gz → 0.1.1__tar.gz

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.
Files changed (93) hide show
  1. {kicad_python-0.1.0a1 → kicad_python-0.1.1}/PKG-INFO +42 -9
  2. kicad_python-0.1.1/README.md +65 -0
  3. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/kicad.py +39 -2
  4. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/board/board_commands_pb2.py +4 -2
  5. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/board/board_commands_pb2.pyi +61 -57
  6. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/board/board_pb2.py +4 -2
  7. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/board/board_pb2.pyi +31 -31
  8. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/board/board_types_pb2.py +4 -2
  9. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/board/board_types_pb2.pyi +175 -175
  10. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/common/commands/base_commands_pb2.py +4 -2
  11. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/common/commands/base_commands_pb2.pyi +24 -20
  12. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/common/commands/editor_commands_pb2.py +4 -2
  13. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/common/commands/editor_commands_pb2.pyi +97 -97
  14. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/common/commands/project_commands_pb2.py +4 -2
  15. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/common/commands/project_commands_pb2.pyi +13 -9
  16. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/common/envelope_pb2.py +4 -2
  17. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/common/envelope_pb2.pyi +12 -12
  18. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/common/types/base_types_pb2.py +4 -2
  19. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/common/types/base_types_pb2.pyi +110 -110
  20. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/common/types/enums_pb2.py +4 -2
  21. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/common/types/project_settings_pb2.py +4 -2
  22. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/common/types/project_settings_pb2.pyi +7 -3
  23. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/schematic/schematic_commands_pb2.py +4 -2
  24. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/schematic/schematic_types_pb2.py +4 -2
  25. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/schematic/schematic_types_pb2.pyi +20 -20
  26. kicad_python-0.1.1/build.py +50 -0
  27. kicad_python-0.1.1/kipy/__init__.py +20 -0
  28. kicad_python-0.1.1/kipy/board.py +467 -0
  29. kicad_python-0.1.1/kipy/board_types.py +1800 -0
  30. kicad_python-0.1.1/kipy/client.py +88 -0
  31. kicad_python-0.1.1/kipy/common_types.py +842 -0
  32. kicad_python-0.1.1/kipy/errors.py +37 -0
  33. kicad_python-0.1.1/kipy/geometry.py +604 -0
  34. kicad_python-0.1.1/kipy/kicad.py +176 -0
  35. kicad_python-0.1.1/kipy/project.py +71 -0
  36. kicad_python-0.1.0a1/build.py → kicad_python-0.1.1/kipy/project_types.py +8 -7
  37. kicad_python-0.1.1/kipy/proto/__init__.py +20 -0
  38. kicad_python-0.1.1/kipy/proto/board/__init__.py +20 -0
  39. kicad_python-0.1.1/kipy/proto/board/board_commands_pb2.py +56 -0
  40. kicad_python-0.1.1/kipy/proto/board/board_commands_pb2.pyi +491 -0
  41. kicad_python-0.1.1/kipy/proto/board/board_pb2.py +44 -0
  42. kicad_python-0.1.1/kipy/proto/board/board_pb2.pyi +294 -0
  43. kicad_python-0.1.1/kipy/proto/board/board_types_pb2.py +150 -0
  44. kicad_python-0.1.1/kipy/proto/board/board_types_pb2.pyi +2101 -0
  45. kicad_python-0.1.1/kipy/proto/common/__init__.py +23 -0
  46. kicad_python-0.1.1/kipy/proto/common/commands/__init__.py +21 -0
  47. kicad_python-0.1.1/kipy/proto/common/commands/base_commands_pb2.py +31 -0
  48. kicad_python-0.1.1/kipy/proto/common/commands/base_commands_pb2.pyi +176 -0
  49. kicad_python-0.1.1/kipy/proto/common/commands/editor_commands_pb2.py +91 -0
  50. kicad_python-0.1.1/kipy/proto/common/commands/editor_commands_pb2.pyi +814 -0
  51. kicad_python-0.1.1/kipy/proto/common/commands/project_commands_pb2.py +24 -0
  52. kicad_python-0.1.1/kipy/proto/common/commands/project_commands_pb2.pyi +97 -0
  53. kicad_python-0.1.1/kipy/proto/common/envelope_pb2.py +27 -0
  54. kicad_python-0.1.1/kipy/proto/common/envelope_pb2.pyi +188 -0
  55. kicad_python-0.1.1/kipy/proto/common/types/__init__.py +22 -0
  56. kicad_python-0.1.1/kipy/proto/common/types/base_types_pb2.py +100 -0
  57. kicad_python-0.1.1/kipy/proto/common/types/base_types_pb2.pyi +1058 -0
  58. kicad_python-0.1.1/kipy/proto/common/types/enums_pb2.py +22 -0
  59. kicad_python-0.1.1/kipy/proto/common/types/enums_pb2.pyi +189 -0
  60. kicad_python-0.1.1/kipy/proto/common/types/project_settings_pb2.py +16 -0
  61. kicad_python-0.1.1/kipy/proto/common/types/project_settings_pb2.pyi +30 -0
  62. kicad_python-0.1.1/kipy/proto/schematic/schematic_commands_pb2.py +14 -0
  63. kicad_python-0.1.1/kipy/proto/schematic/schematic_commands_pb2.pyi +23 -0
  64. kicad_python-0.1.1/kipy/proto/schematic/schematic_types_pb2.py +29 -0
  65. kicad_python-0.1.1/kipy/proto/schematic/schematic_types_pb2.pyi +214 -0
  66. kicad_python-0.1.1/kipy/util/__init__.py +21 -0
  67. kicad_python-0.1.1/kipy/util/proto.py +61 -0
  68. kicad_python-0.1.1/kipy/util/units.py +31 -0
  69. kicad_python-0.1.1/kipy/wrapper.py +35 -0
  70. {kicad_python-0.1.0a1 → kicad_python-0.1.1}/pyproject.toml +16 -12
  71. kicad_python-0.1.1/setup.py +41 -0
  72. kicad_python-0.1.0a1/README.md +0 -33
  73. {kicad_python-0.1.0a1 → kicad_python-0.1.1}/LICENSE +0 -0
  74. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/__init__.py +0 -0
  75. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/board.py +0 -0
  76. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/board_types.py +0 -0
  77. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/client.py +0 -0
  78. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/common_types.py +0 -0
  79. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/errors.py +0 -0
  80. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/geometry.py +0 -0
  81. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/project.py +0 -0
  82. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/project_types.py +0 -0
  83. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/__init__.py +0 -0
  84. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/board/__init__.py +0 -0
  85. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/common/__init__.py +0 -0
  86. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/common/commands/__init__.py +0 -0
  87. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/common/types/__init__.py +0 -0
  88. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/common/types/enums_pb2.pyi +0 -0
  89. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/proto/schematic/schematic_commands_pb2.pyi +0 -0
  90. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/util/__init__.py +0 -0
  91. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/util/proto.py +0 -0
  92. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/util/units.py +0 -0
  93. {kicad_python-0.1.0a1 → kicad_python-0.1.1/build/lib}/kipy/wrapper.py +0 -0
@@ -1,24 +1,25 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kicad-python
3
- Version: 0.1.0a1
3
+ Version: 0.1.1
4
4
  Summary: KiCad API Python Bindings
5
5
  Home-page: https://kicad.org/
6
6
  License: GPL-3
7
7
  Author: The KiCad Development Team
8
- Requires-Python: >=3.8,<4.0
8
+ Requires-Python: >=3.9,<3.13
9
9
  Classifier: Development Status :: 3 - Alpha
10
10
  Classifier: Intended Audience :: Developers
11
11
  Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
12
12
  Classifier: License :: Other/Proprietary License
13
13
  Classifier: Programming Language :: Python :: 3
14
- Classifier: Programming Language :: Python :: 3.8
15
14
  Classifier: Programming Language :: Python :: 3.9
16
15
  Classifier: Programming Language :: Python :: 3.10
17
16
  Classifier: Programming Language :: Python :: 3.11
18
17
  Classifier: Programming Language :: Python :: 3.12
19
18
  Classifier: Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)
20
- Requires-Dist: protobuf (>=4.21.12,<5.0.0)
21
- Requires-Dist: pynng (>=0.7.2,<0.8.0)
19
+ Requires-Dist: furo (>=2024.8.6,<2025.0.0)
20
+ Requires-Dist: protobuf (>=5.29,<6.0)
21
+ Requires-Dist: pynng (>=0.8.0,<0.9.0)
22
+ Requires-Dist: sphinx (==7.4)
22
23
  Project-URL: Repository, https://gitlab.com/kicad/code/kicad-python
23
24
  Description-Content-Type: text/markdown
24
25
 
@@ -27,10 +28,24 @@ Description-Content-Type: text/markdown
27
28
  `kicad-python` is the official Python bindings for the [KiCad](https://kicad.org) IPC API. This
28
29
  library makes it possible to develop scripts and tools that interact with a running KiCad session.
29
30
 
31
+ The KiCad IPC API can be considered in "public beta" state with the release of KiCad 9 (currently
32
+ planned for on or around February 1, 2025). The existing SWIG-based Python bindings for KiCad's
33
+ PCB editor still exist in KiCad 9, but are in maintenance mode and will not be expanded.
34
+
30
35
  For more information about the IPC API, please see the [KiCad developer documentation](https://dev-docs.kicad.org).
31
36
 
32
- Note: Version 0.0.2 and prior of this package are an obsolete earlier effort and are unrelated to
33
- this codebase.
37
+ > Note: Version 0.0.2 and prior of this package are an obsolete earlier effort and are unrelated to
38
+ > this codebase.
39
+
40
+ ## Requirements
41
+
42
+ Using the IPC API requires a suitable version of KiCad (9.0 or higher) and requires that KiCad be
43
+ running with the API server enabled in Preferences > Plugins. This package also depends on the
44
+ `protobuf` and `pynng` packages for communication with KiCad.
45
+
46
+ > Note: Unlike the SWIG-based Python bindings, the IPC API requires communication with a running
47
+ > instance of KiCad. It is not possible to use `kicad-python` to manipulate KiCad design files
48
+ > without KiCad running.
34
49
 
35
50
  ## Contributing
36
51
 
@@ -49,10 +64,28 @@ See COMPILING.md
49
64
 
50
65
  ## API Documentation
51
66
 
52
- There is no documentation yet, sorry. We expect things to be stable enough to begin documentation
53
- for general use in late 2024.
67
+ There is no documentation separate from the code comments and examples yet, sorry! This will be
68
+ more of a priority once the KiCad 9 release is stable.
54
69
 
55
70
  ## Examples
56
71
 
57
72
  Check out the repository for some example scripts that may serve as a starting point.
58
73
 
74
+ ## Release History
75
+
76
+ ### 0.1.1 (December 24, 2024)
77
+
78
+ - Bump dependency versions to fix compilation with newer protoc
79
+
80
+ ### 0.1.0 (December 21, 2024)
81
+
82
+ *Corresponding KiCad version: 9.0.0-rc1*
83
+
84
+ First formal release of the new IPC-API version of this package. Contains support for most of the
85
+ KiCad API functionality that is currently exposed, which is focused around the PCB editor to enable
86
+ a transition path from existing SWIG-based plugins.
87
+
88
+ Caveats / Known Issues:
89
+
90
+ - Compatibility limited to Python 3.9 ~ 3.12 due to `pynng` not yet being updated for 3.13
91
+
@@ -0,0 +1,65 @@
1
+ # KiCad API Python Bindings
2
+
3
+ `kicad-python` is the official Python bindings for the [KiCad](https://kicad.org) IPC API. This
4
+ library makes it possible to develop scripts and tools that interact with a running KiCad session.
5
+
6
+ The KiCad IPC API can be considered in "public beta" state with the release of KiCad 9 (currently
7
+ planned for on or around February 1, 2025). The existing SWIG-based Python bindings for KiCad's
8
+ PCB editor still exist in KiCad 9, but are in maintenance mode and will not be expanded.
9
+
10
+ For more information about the IPC API, please see the [KiCad developer documentation](https://dev-docs.kicad.org).
11
+
12
+ > Note: Version 0.0.2 and prior of this package are an obsolete earlier effort and are unrelated to
13
+ > this codebase.
14
+
15
+ ## Requirements
16
+
17
+ Using the IPC API requires a suitable version of KiCad (9.0 or higher) and requires that KiCad be
18
+ running with the API server enabled in Preferences > Plugins. This package also depends on the
19
+ `protobuf` and `pynng` packages for communication with KiCad.
20
+
21
+ > Note: Unlike the SWIG-based Python bindings, the IPC API requires communication with a running
22
+ > instance of KiCad. It is not possible to use `kicad-python` to manipulate KiCad design files
23
+ > without KiCad running.
24
+
25
+ ## Contributing
26
+
27
+ At the moment, these bindings are being developed in parallel with the IPC API itself, and
28
+ development is being coordinated by the KiCad team (main point of contact: Jon Evans / @craftyjon).
29
+ Expect rapid change and instability during this development period, and please do not send merge
30
+ requests without discussing your idea for changes with the team ahead of time.
31
+
32
+ Once the initial stable API is released (planned for KiCad 9.0 in February 2025), this Python
33
+ library will also have its first stable release and be considered fully supported. Until that
34
+ time, please consider this a development preview.
35
+
36
+ ## Building
37
+
38
+ See COMPILING.md
39
+
40
+ ## API Documentation
41
+
42
+ There is no documentation separate from the code comments and examples yet, sorry! This will be
43
+ more of a priority once the KiCad 9 release is stable.
44
+
45
+ ## Examples
46
+
47
+ Check out the repository for some example scripts that may serve as a starting point.
48
+
49
+ ## Release History
50
+
51
+ ### 0.1.1 (December 24, 2024)
52
+
53
+ - Bump dependency versions to fix compilation with newer protoc
54
+
55
+ ### 0.1.0 (December 21, 2024)
56
+
57
+ *Corresponding KiCad version: 9.0.0-rc1*
58
+
59
+ First formal release of the new IPC-API version of this package. Contains support for most of the
60
+ KiCad API functionality that is currently exposed, which is focused around the PCB editor to enable
61
+ a transition path from existing SWIG-based plugins.
62
+
63
+ Caveats / Known Issues:
64
+
65
+ - Compatibility limited to Python 3.9 ~ 3.12 due to `pynng` not yet being updated for 3.13
@@ -48,6 +48,43 @@ def default_kicad_token() -> str:
48
48
  return token
49
49
  return ""
50
50
 
51
+ class KiCadVersion:
52
+ def __init__(self, major: int, minor: int, patch: int, full_version: str):
53
+ self.major = major
54
+ self.minor = minor
55
+ self.patch = patch
56
+ self.full_version = full_version
57
+
58
+ @staticmethod
59
+ def from_proto(proto: base_types_pb2.KiCadVersion) -> 'KiCadVersion':
60
+ return KiCadVersion(proto.major, proto.minor, proto.patch, proto.full_version)
61
+
62
+ def __str__(self):
63
+ return self.full_version
64
+
65
+ def __eq__(self, other):
66
+ if not isinstance(other, KiCadVersion):
67
+ return NotImplemented
68
+
69
+ return (
70
+ (self.major, self.minor, self.patch) == (other.major, other.minor, other.patch)
71
+ and (self.full_version == other.full_version)
72
+ )
73
+
74
+ def __lt__(self, other):
75
+ if not isinstance(other, KiCadVersion):
76
+ return NotImplemented
77
+ return (self.major, self.minor, self.patch) < (other.major, other.minor, other.patch)
78
+
79
+ def __le__(self, other):
80
+ return self == other or self < other
81
+
82
+ def __gt__(self, other):
83
+ return not self <= other
84
+
85
+ def __ge__(self, other):
86
+ return not self < other
87
+
51
88
  class KiCad:
52
89
  def __init__(self, socket_path: str=default_socket_path(),
53
90
  client_name: str=random_client_name(),
@@ -74,10 +111,10 @@ class KiCad:
74
111
  k._client = client
75
112
  return k
76
113
 
77
- def get_version(self):
114
+ def get_version(self) -> KiCadVersion:
78
115
  """Returns the KiCad version as a string, including any package-specific info"""
79
116
  response = self._client.send(commands.GetVersion(), commands.GetVersionResponse)
80
- return response.version.full_version
117
+ return KiCadVersion.from_proto(response.version)
81
118
 
82
119
  def ping(self):
83
120
  self._client.send(commands.Ping(), Empty)
@@ -1,8 +1,10 @@
1
1
  """Generated protocol buffer code."""
2
2
  from google.protobuf import descriptor as _descriptor
3
3
  from google.protobuf import descriptor_pool as _descriptor_pool
4
+ from google.protobuf import runtime_version as _runtime_version
4
5
  from google.protobuf import symbol_database as _symbol_database
5
6
  from google.protobuf.internal import builder as _builder
7
+ _runtime_version.ValidateProtobufRuntimeVersion(_runtime_version.Domain.PUBLIC, 5, 29, 1, '', 'board/board_commands.proto')
6
8
  _sym_db = _symbol_database.Default()
7
9
  from ..common.types import base_types_pb2 as common_dot_types_dot_base__types__pb2
8
10
  from ..common.types import enums_pb2 as common_dot_types_dot_enums__pb2
@@ -12,8 +14,8 @@ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1aboard/board_co
12
14
  _globals = globals()
13
15
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
14
16
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'board.board_commands_pb2', _globals)
15
- if _descriptor._USE_C_DESCRIPTORS == False:
16
- DESCRIPTOR._options = None
17
+ if not _descriptor._USE_C_DESCRIPTORS:
18
+ DESCRIPTOR._loaded_options = None
17
19
  _globals['_GETBOARDSTACKUP']._serialized_start = 153
18
20
  _globals['_GETBOARDSTACKUP']._serialized_end = 224
19
21
  _globals['_BOARDSTACKUPRESPONSE']._serialized_start = 226
@@ -27,10 +27,14 @@ from .. import common
27
27
  import google.protobuf.descriptor
28
28
  import google.protobuf.internal.containers
29
29
  import google.protobuf.message
30
- import typing
30
+ import sys
31
+ if sys.version_info >= (3, 8):
32
+ import typing as typing_extensions
33
+ else:
34
+ import typing_extensions
31
35
  DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
32
36
 
33
- @typing.final
37
+ @typing_extensions.final
34
38
  class GetBoardStackup(google.protobuf.message.Message):
35
39
  """
36
40
  Board stackup and properties
@@ -45,14 +49,14 @@ class GetBoardStackup(google.protobuf.message.Message):
45
49
  def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
46
50
  ...
47
51
 
48
- def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
52
+ def HasField(self, field_name: typing_extensions.Literal['board', b'board']) -> builtins.bool:
49
53
  ...
50
54
 
51
- def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
55
+ def ClearField(self, field_name: typing_extensions.Literal['board', b'board']) -> None:
52
56
  ...
53
57
  global___GetBoardStackup = GetBoardStackup
54
58
 
55
- @typing.final
59
+ @typing_extensions.final
56
60
  class BoardStackupResponse(google.protobuf.message.Message):
57
61
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
58
62
  STACKUP_FIELD_NUMBER: builtins.int
@@ -64,14 +68,14 @@ class BoardStackupResponse(google.protobuf.message.Message):
64
68
  def __init__(self, *, stackup: board.board_pb2.BoardStackup | None=...) -> None:
65
69
  ...
66
70
 
67
- def HasField(self, field_name: typing.Literal['stackup', b'stackup']) -> builtins.bool:
71
+ def HasField(self, field_name: typing_extensions.Literal['stackup', b'stackup']) -> builtins.bool:
68
72
  ...
69
73
 
70
- def ClearField(self, field_name: typing.Literal['stackup', b'stackup']) -> None:
74
+ def ClearField(self, field_name: typing_extensions.Literal['stackup', b'stackup']) -> None:
71
75
  ...
72
76
  global___BoardStackupResponse = BoardStackupResponse
73
77
 
74
- @typing.final
78
+ @typing_extensions.final
75
79
  class UpdateBoardStackup(google.protobuf.message.Message):
76
80
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
77
81
  BOARD_FIELD_NUMBER: builtins.int
@@ -88,14 +92,14 @@ class UpdateBoardStackup(google.protobuf.message.Message):
88
92
  def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., stackup: board.board_pb2.BoardStackup | None=...) -> None:
89
93
  ...
90
94
 
91
- def HasField(self, field_name: typing.Literal['board', b'board', 'stackup', b'stackup']) -> builtins.bool:
95
+ def HasField(self, field_name: typing_extensions.Literal['board', b'board', 'stackup', b'stackup']) -> builtins.bool:
92
96
  ...
93
97
 
94
- def ClearField(self, field_name: typing.Literal['board', b'board', 'stackup', b'stackup']) -> None:
98
+ def ClearField(self, field_name: typing_extensions.Literal['board', b'board', 'stackup', b'stackup']) -> None:
95
99
  ...
96
100
  global___UpdateBoardStackup = UpdateBoardStackup
97
101
 
98
- @typing.final
102
+ @typing_extensions.final
99
103
  class GetGraphicsDefaults(google.protobuf.message.Message):
100
104
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
101
105
  BOARD_FIELD_NUMBER: builtins.int
@@ -107,14 +111,14 @@ class GetGraphicsDefaults(google.protobuf.message.Message):
107
111
  def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
108
112
  ...
109
113
 
110
- def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
114
+ def HasField(self, field_name: typing_extensions.Literal['board', b'board']) -> builtins.bool:
111
115
  ...
112
116
 
113
- def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
117
+ def ClearField(self, field_name: typing_extensions.Literal['board', b'board']) -> None:
114
118
  ...
115
119
  global___GetGraphicsDefaults = GetGraphicsDefaults
116
120
 
117
- @typing.final
121
+ @typing_extensions.final
118
122
  class GraphicsDefaultsResponse(google.protobuf.message.Message):
119
123
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
120
124
  DEFAULTS_FIELD_NUMBER: builtins.int
@@ -126,14 +130,14 @@ class GraphicsDefaultsResponse(google.protobuf.message.Message):
126
130
  def __init__(self, *, defaults: board.board_pb2.GraphicsDefaults | None=...) -> None:
127
131
  ...
128
132
 
129
- def HasField(self, field_name: typing.Literal['defaults', b'defaults']) -> builtins.bool:
133
+ def HasField(self, field_name: typing_extensions.Literal['defaults', b'defaults']) -> builtins.bool:
130
134
  ...
131
135
 
132
- def ClearField(self, field_name: typing.Literal['defaults', b'defaults']) -> None:
136
+ def ClearField(self, field_name: typing_extensions.Literal['defaults', b'defaults']) -> None:
133
137
  ...
134
138
  global___GraphicsDefaultsResponse = GraphicsDefaultsResponse
135
139
 
136
- @typing.final
140
+ @typing_extensions.final
137
141
  class GetNets(google.protobuf.message.Message):
138
142
  """
139
143
  Net management
@@ -156,14 +160,14 @@ class GetNets(google.protobuf.message.Message):
156
160
  def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., netclass_filter: collections.abc.Iterable[builtins.str] | None=...) -> None:
157
161
  ...
158
162
 
159
- def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
163
+ def HasField(self, field_name: typing_extensions.Literal['board', b'board']) -> builtins.bool:
160
164
  ...
161
165
 
162
- def ClearField(self, field_name: typing.Literal['board', b'board', 'netclass_filter', b'netclass_filter']) -> None:
166
+ def ClearField(self, field_name: typing_extensions.Literal['board', b'board', 'netclass_filter', b'netclass_filter']) -> None:
163
167
  ...
164
168
  global___GetNets = GetNets
165
169
 
166
- @typing.final
170
+ @typing_extensions.final
167
171
  class NetsResponse(google.protobuf.message.Message):
168
172
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
169
173
  NETS_FIELD_NUMBER: builtins.int
@@ -175,11 +179,11 @@ class NetsResponse(google.protobuf.message.Message):
175
179
  def __init__(self, *, nets: collections.abc.Iterable[board.board_types_pb2.Net] | None=...) -> None:
176
180
  ...
177
181
 
178
- def ClearField(self, field_name: typing.Literal['nets', b'nets']) -> None:
182
+ def ClearField(self, field_name: typing_extensions.Literal['nets', b'nets']) -> None:
179
183
  ...
180
184
  global___NetsResponse = NetsResponse
181
185
 
182
- @typing.final
186
+ @typing_extensions.final
183
187
  class GetItemsByNet(google.protobuf.message.Message):
184
188
  """Retrieve all the copper items belonging to a certain net or set of nets
185
189
  returns kiapi.common.commands.GetItemsResponse
@@ -204,14 +208,14 @@ class GetItemsByNet(google.protobuf.message.Message):
204
208
  def __init__(self, *, header: common.types.base_types_pb2.ItemHeader | None=..., types: collections.abc.Iterable[common.types.enums_pb2.KiCadObjectType.ValueType] | None=..., net_codes: collections.abc.Iterable[board.board_types_pb2.NetCode] | None=...) -> None:
205
209
  ...
206
210
 
207
- def HasField(self, field_name: typing.Literal['header', b'header']) -> builtins.bool:
211
+ def HasField(self, field_name: typing_extensions.Literal['header', b'header']) -> builtins.bool:
208
212
  ...
209
213
 
210
- def ClearField(self, field_name: typing.Literal['header', b'header', 'net_codes', b'net_codes', 'types', b'types']) -> None:
214
+ def ClearField(self, field_name: typing_extensions.Literal['header', b'header', 'net_codes', b'net_codes', 'types', b'types']) -> None:
211
215
  ...
212
216
  global___GetItemsByNet = GetItemsByNet
213
217
 
214
- @typing.final
218
+ @typing_extensions.final
215
219
  class GetItemsByNetClass(google.protobuf.message.Message):
216
220
  """Retrieve all the copper items belonging to a certain net class or set of net classes
217
221
  returns kiapi.common.commands.GetItemsResponse
@@ -236,14 +240,14 @@ class GetItemsByNetClass(google.protobuf.message.Message):
236
240
  def __init__(self, *, header: common.types.base_types_pb2.ItemHeader | None=..., types: collections.abc.Iterable[common.types.enums_pb2.KiCadObjectType.ValueType] | None=..., net_classes: collections.abc.Iterable[builtins.str] | None=...) -> None:
237
241
  ...
238
242
 
239
- def HasField(self, field_name: typing.Literal['header', b'header']) -> builtins.bool:
243
+ def HasField(self, field_name: typing_extensions.Literal['header', b'header']) -> builtins.bool:
240
244
  ...
241
245
 
242
- def ClearField(self, field_name: typing.Literal['header', b'header', 'net_classes', b'net_classes', 'types', b'types']) -> None:
246
+ def ClearField(self, field_name: typing_extensions.Literal['header', b'header', 'net_classes', b'net_classes', 'types', b'types']) -> None:
243
247
  ...
244
248
  global___GetItemsByNetClass = GetItemsByNetClass
245
249
 
246
- @typing.final
250
+ @typing_extensions.final
247
251
  class RefillZones(google.protobuf.message.Message):
248
252
  """
249
253
  Blocking operations
@@ -267,14 +271,14 @@ class RefillZones(google.protobuf.message.Message):
267
271
  def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., zones: collections.abc.Iterable[common.types.base_types_pb2.KIID] | None=...) -> None:
268
272
  ...
269
273
 
270
- def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
274
+ def HasField(self, field_name: typing_extensions.Literal['board', b'board']) -> builtins.bool:
271
275
  ...
272
276
 
273
- def ClearField(self, field_name: typing.Literal['board', b'board', 'zones', b'zones']) -> None:
277
+ def ClearField(self, field_name: typing_extensions.Literal['board', b'board', 'zones', b'zones']) -> None:
274
278
  ...
275
279
  global___RefillZones = RefillZones
276
280
 
277
- @typing.final
281
+ @typing_extensions.final
278
282
  class GetPadShapeAsPolygon(google.protobuf.message.Message):
279
283
  """
280
284
  Utilities
@@ -286,8 +290,6 @@ class GetPadShapeAsPolygon(google.protobuf.message.Message):
286
290
  BOARD_FIELD_NUMBER: builtins.int
287
291
  PADS_FIELD_NUMBER: builtins.int
288
292
  LAYER_FIELD_NUMBER: builtins.int
289
- layer: board.board_types_pb2.BoardLayer.ValueType
290
- 'The layer to process'
291
293
 
292
294
  @property
293
295
  def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
@@ -296,18 +298,20 @@ class GetPadShapeAsPolygon(google.protobuf.message.Message):
296
298
  @property
297
299
  def pads(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[common.types.base_types_pb2.KIID]:
298
300
  """A list of one or more pads to process"""
301
+ layer: board.board_types_pb2.BoardLayer.ValueType
302
+ 'The layer to process'
299
303
 
300
304
  def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., pads: collections.abc.Iterable[common.types.base_types_pb2.KIID] | None=..., layer: board.board_types_pb2.BoardLayer.ValueType=...) -> None:
301
305
  ...
302
306
 
303
- def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
307
+ def HasField(self, field_name: typing_extensions.Literal['board', b'board']) -> builtins.bool:
304
308
  ...
305
309
 
306
- def ClearField(self, field_name: typing.Literal['board', b'board', 'layer', b'layer', 'pads', b'pads']) -> None:
310
+ def ClearField(self, field_name: typing_extensions.Literal['board', b'board', 'layer', b'layer', 'pads', b'pads']) -> None:
307
311
  ...
308
312
  global___GetPadShapeAsPolygon = GetPadShapeAsPolygon
309
313
 
310
- @typing.final
314
+ @typing_extensions.final
311
315
  class PadShapeAsPolygonResponse(google.protobuf.message.Message):
312
316
  """Returned from GetPadShapeAsPolygon. The pads and polygons repeated fields will have the same length
313
317
  and can be treated as a list of tuples.
@@ -327,11 +331,11 @@ class PadShapeAsPolygonResponse(google.protobuf.message.Message):
327
331
  def __init__(self, *, pads: collections.abc.Iterable[common.types.base_types_pb2.KIID] | None=..., polygons: collections.abc.Iterable[common.types.base_types_pb2.PolygonWithHoles] | None=...) -> None:
328
332
  ...
329
333
 
330
- def ClearField(self, field_name: typing.Literal['pads', b'pads', 'polygons', b'polygons']) -> None:
334
+ def ClearField(self, field_name: typing_extensions.Literal['pads', b'pads', 'polygons', b'polygons']) -> None:
331
335
  ...
332
336
  global___PadShapeAsPolygonResponse = PadShapeAsPolygonResponse
333
337
 
334
- @typing.final
338
+ @typing_extensions.final
335
339
  class GetVisibleLayers(google.protobuf.message.Message):
336
340
  """PCB editor commands
337
341
 
@@ -347,14 +351,14 @@ class GetVisibleLayers(google.protobuf.message.Message):
347
351
  def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
348
352
  ...
349
353
 
350
- def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
354
+ def HasField(self, field_name: typing_extensions.Literal['board', b'board']) -> builtins.bool:
351
355
  ...
352
356
 
353
- def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
357
+ def ClearField(self, field_name: typing_extensions.Literal['board', b'board']) -> None:
354
358
  ...
355
359
  global___GetVisibleLayers = GetVisibleLayers
356
360
 
357
- @typing.final
361
+ @typing_extensions.final
358
362
  class BoardLayerResponse(google.protobuf.message.Message):
359
363
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
360
364
  LAYER_FIELD_NUMBER: builtins.int
@@ -363,11 +367,11 @@ class BoardLayerResponse(google.protobuf.message.Message):
363
367
  def __init__(self, *, layer: board.board_types_pb2.BoardLayer.ValueType=...) -> None:
364
368
  ...
365
369
 
366
- def ClearField(self, field_name: typing.Literal['layer', b'layer']) -> None:
370
+ def ClearField(self, field_name: typing_extensions.Literal['layer', b'layer']) -> None:
367
371
  ...
368
372
  global___BoardLayerResponse = BoardLayerResponse
369
373
 
370
- @typing.final
374
+ @typing_extensions.final
371
375
  class BoardLayers(google.protobuf.message.Message):
372
376
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
373
377
  LAYERS_FIELD_NUMBER: builtins.int
@@ -379,11 +383,11 @@ class BoardLayers(google.protobuf.message.Message):
379
383
  def __init__(self, *, layers: collections.abc.Iterable[board.board_types_pb2.BoardLayer.ValueType] | None=...) -> None:
380
384
  ...
381
385
 
382
- def ClearField(self, field_name: typing.Literal['layers', b'layers']) -> None:
386
+ def ClearField(self, field_name: typing_extensions.Literal['layers', b'layers']) -> None:
383
387
  ...
384
388
  global___BoardLayers = BoardLayers
385
389
 
386
- @typing.final
390
+ @typing_extensions.final
387
391
  class SetVisibleLayers(google.protobuf.message.Message):
388
392
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
389
393
  BOARD_FIELD_NUMBER: builtins.int
@@ -400,14 +404,14 @@ class SetVisibleLayers(google.protobuf.message.Message):
400
404
  def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., layers: collections.abc.Iterable[board.board_types_pb2.BoardLayer.ValueType] | None=...) -> None:
401
405
  ...
402
406
 
403
- def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
407
+ def HasField(self, field_name: typing_extensions.Literal['board', b'board']) -> builtins.bool:
404
408
  ...
405
409
 
406
- def ClearField(self, field_name: typing.Literal['board', b'board', 'layers', b'layers']) -> None:
410
+ def ClearField(self, field_name: typing_extensions.Literal['board', b'board', 'layers', b'layers']) -> None:
407
411
  ...
408
412
  global___SetVisibleLayers = SetVisibleLayers
409
413
 
410
- @typing.final
414
+ @typing_extensions.final
411
415
  class GetActiveLayer(google.protobuf.message.Message):
412
416
  """returns BoardLayerResponse"""
413
417
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
@@ -420,35 +424,35 @@ class GetActiveLayer(google.protobuf.message.Message):
420
424
  def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=...) -> None:
421
425
  ...
422
426
 
423
- def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
427
+ def HasField(self, field_name: typing_extensions.Literal['board', b'board']) -> builtins.bool:
424
428
  ...
425
429
 
426
- def ClearField(self, field_name: typing.Literal['board', b'board']) -> None:
430
+ def ClearField(self, field_name: typing_extensions.Literal['board', b'board']) -> None:
427
431
  ...
428
432
  global___GetActiveLayer = GetActiveLayer
429
433
 
430
- @typing.final
434
+ @typing_extensions.final
431
435
  class SetActiveLayer(google.protobuf.message.Message):
432
436
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
433
437
  BOARD_FIELD_NUMBER: builtins.int
434
438
  LAYER_FIELD_NUMBER: builtins.int
435
- layer: board.board_types_pb2.BoardLayer.ValueType
436
439
 
437
440
  @property
438
441
  def board(self) -> common.types.base_types_pb2.DocumentSpecifier:
439
442
  ...
443
+ layer: board.board_types_pb2.BoardLayer.ValueType
440
444
 
441
445
  def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., layer: board.board_types_pb2.BoardLayer.ValueType=...) -> None:
442
446
  ...
443
447
 
444
- def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
448
+ def HasField(self, field_name: typing_extensions.Literal['board', b'board']) -> builtins.bool:
445
449
  ...
446
450
 
447
- def ClearField(self, field_name: typing.Literal['board', b'board', 'layer', b'layer']) -> None:
451
+ def ClearField(self, field_name: typing_extensions.Literal['board', b'board', 'layer', b'layer']) -> None:
448
452
  ...
449
453
  global___SetActiveLayer = SetActiveLayer
450
454
 
451
- @typing.final
455
+ @typing_extensions.final
452
456
  class InteractiveMoveItems(google.protobuf.message.Message):
453
457
  """// Interactive commands ////
454
458
  These commands begin an interactive operation in the editor.
@@ -479,9 +483,9 @@ class InteractiveMoveItems(google.protobuf.message.Message):
479
483
  def __init__(self, *, board: common.types.base_types_pb2.DocumentSpecifier | None=..., items: collections.abc.Iterable[common.types.base_types_pb2.KIID] | None=...) -> None:
480
484
  ...
481
485
 
482
- def HasField(self, field_name: typing.Literal['board', b'board']) -> builtins.bool:
486
+ def HasField(self, field_name: typing_extensions.Literal['board', b'board']) -> builtins.bool:
483
487
  ...
484
488
 
485
- def ClearField(self, field_name: typing.Literal['board', b'board', 'items', b'items']) -> None:
489
+ def ClearField(self, field_name: typing_extensions.Literal['board', b'board', 'items', b'items']) -> None:
486
490
  ...
487
491
  global___InteractiveMoveItems = InteractiveMoveItems
@@ -1,8 +1,10 @@
1
1
  """Generated protocol buffer code."""
2
2
  from google.protobuf import descriptor as _descriptor
3
3
  from google.protobuf import descriptor_pool as _descriptor_pool
4
+ from google.protobuf import runtime_version as _runtime_version
4
5
  from google.protobuf import symbol_database as _symbol_database
5
6
  from google.protobuf.internal import builder as _builder
7
+ _runtime_version.ValidateProtobufRuntimeVersion(_runtime_version.Domain.PUBLIC, 5, 29, 1, '', 'board/board.proto')
6
8
  _sym_db = _symbol_database.Default()
7
9
  from ..common.types import base_types_pb2 as common_dot_types_dot_base__types__pb2
8
10
  from ..board import board_types_pb2 as board_dot_board__types__pb2
@@ -10,8 +12,8 @@ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11board/board.pr
10
12
  _globals = globals()
11
13
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
12
14
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'board.board_pb2', _globals)
13
- if _descriptor._USE_C_DESCRIPTORS == False:
14
- DESCRIPTOR._options = None
15
+ if not _descriptor._USE_C_DESCRIPTORS:
16
+ DESCRIPTOR._loaded_options = None
15
17
  _globals['_BOARDLAYERCLASS']._serialized_start = 1233
16
18
  _globals['_BOARDLAYERCLASS']._serialized_end = 1373
17
19
  _globals['_BOARDFINISH']._serialized_start = 90