nodebpy 0.1.1__py3-none-any.whl → 0.2.1__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.
nodebpy/types.py ADDED
@@ -0,0 +1,445 @@
1
+ from __future__ import annotations
2
+
3
+ import typing
4
+ from typing import Literal
5
+
6
+ from bpy.types import (
7
+ NodeSocket,
8
+ NodeSocketBool,
9
+ NodeSocketBundle,
10
+ NodeSocketClosure,
11
+ NodeSocketCollection,
12
+ NodeSocketColor,
13
+ NodeSocketFloat,
14
+ NodeSocketGeometry,
15
+ NodeSocketImage,
16
+ NodeSocketInt,
17
+ NodeSocketMaterial,
18
+ NodeSocketMatrix,
19
+ NodeSocketMenu,
20
+ NodeSocketObject,
21
+ NodeSocketString,
22
+ NodeSocketVector,
23
+ )
24
+ from mathutils import Euler
25
+
26
+ if typing.TYPE_CHECKING:
27
+ from .builder import NodeBuilder, SocketLinker
28
+
29
+
30
+ def _is_default_value(value: TYPE_INPUT_ALL):
31
+ return isinstance(value, (int, float, str, bool, tuple, list, Euler))
32
+
33
+
34
+ # Type aliases for node inputs using typing.Union for runtime compatibility
35
+ LINKABLE = typing.Union["NodeBuilder", "SocketLinker", NodeSocket, None]
36
+ TYPE_INPUT_ROTATION = typing.Union[
37
+ tuple[float, float, float], float, int, Euler, LINKABLE
38
+ ]
39
+ TYPE_INPUT_BOOLEAN = typing.Union[
40
+ bool, LINKABLE, NodeSocketBool, NodeSocketInt, NodeSocketFloat, NodeSocketVector
41
+ ]
42
+ TYPE_INPUT_VALUE = typing.Union[float, int, LINKABLE, NodeSocketInt, NodeSocketFloat]
43
+ TYPE_INPUT_INT = typing.Union[
44
+ int, LINKABLE, NodeSocketInt, NodeSocketInt, NodeSocketInt
45
+ ]
46
+ TYPE_INPUT_VECTOR = typing.Union[
47
+ typing.Tuple[float, float, float],
48
+ LINKABLE,
49
+ TYPE_INPUT_INT,
50
+ TYPE_INPUT_VALUE,
51
+ TYPE_INPUT_BOOLEAN,
52
+ NodeSocketVector,
53
+ NodeSocketColor,
54
+ TYPE_INPUT_ROTATION,
55
+ ]
56
+
57
+
58
+ TYPE_INPUT_COLOR = typing.Union[
59
+ LINKABLE, tuple[float, float, float, float], NodeSocketColor
60
+ ]
61
+ TYPE_INPUT_STRING = typing.Union[str, LINKABLE, NodeSocketString]
62
+ TYPE_INPUT_GEOMETRY = typing.Union[LINKABLE, NodeSocketGeometry]
63
+ TYPE_INPUT_OBJECT = typing.Union[LINKABLE, NodeSocketObject]
64
+ TYPE_INPUT_MATERIAL = typing.Union[LINKABLE, NodeSocketMaterial]
65
+ TYPE_INPUT_IMAGE = typing.Union[LINKABLE, NodeSocketImage]
66
+ TYPE_INPUT_COLLECTION = typing.Union[LINKABLE, NodeSocketCollection]
67
+ TYPE_INPUT_MATRIX = typing.Union[LINKABLE, NodeSocketMatrix]
68
+ TYPE_INPUT_GRID = typing.Union[
69
+ TYPE_INPUT_VALUE, TYPE_INPUT_VECTOR, TYPE_INPUT_BOOLEAN, TYPE_INPUT_INT
70
+ ]
71
+ TYPE_INPUT_MENU = typing.Union[LINKABLE, NodeSocketMenu]
72
+ TYPE_INPUT_BUNDLE = typing.Union[LINKABLE, NodeSocketBundle]
73
+ TYPE_INPUT_CLOSURE = typing.Union[LINKABLE, NodeSocketClosure]
74
+
75
+ TYPE_INPUT_DATA = typing.Union[
76
+ TYPE_INPUT_VALUE,
77
+ TYPE_INPUT_INT,
78
+ TYPE_INPUT_BOOLEAN,
79
+ TYPE_INPUT_VECTOR,
80
+ TYPE_INPUT_ROTATION,
81
+ TYPE_INPUT_MATRIX,
82
+ ]
83
+
84
+ TYPE_INPUT_ALL = typing.Union[
85
+ TYPE_INPUT_VALUE,
86
+ TYPE_INPUT_INT,
87
+ TYPE_INPUT_STRING,
88
+ TYPE_INPUT_COLOR,
89
+ TYPE_INPUT_GEOMETRY,
90
+ TYPE_INPUT_OBJECT,
91
+ TYPE_INPUT_MATERIAL,
92
+ TYPE_INPUT_IMAGE,
93
+ TYPE_INPUT_COLLECTION,
94
+ TYPE_INPUT_MATRIX,
95
+ TYPE_INPUT_VECTOR,
96
+ TYPE_INPUT_BOOLEAN,
97
+ TYPE_INPUT_MENU,
98
+ TYPE_INPUT_ROTATION,
99
+ ]
100
+
101
+ _AccumulateFieldDataTypes = Literal["FLOAT", "INT", "FLOAT_VECTOR", "TRANSFORM"]
102
+
103
+ _AttributeDomains = typing.Literal[
104
+ "POINT", "EDGE", "FACE", "CORNER", "CURVE", "INSTANCE", "LAYER"
105
+ ]
106
+ _DeleteGeometryDomains = typing.Literal[
107
+ "POINT", "EDGE", "FACE", "CURVE", "INSTANCE", "LAYER"
108
+ ]
109
+ _BakedDataTypeValues = (
110
+ "FLOAT",
111
+ "INT",
112
+ "BOOLEAN",
113
+ "VECTOR",
114
+ "RGBA",
115
+ "ROTATION",
116
+ "MATRIX",
117
+ "STRING",
118
+ "GEOMETRY",
119
+ "BUNDLE",
120
+ )
121
+ _IntegerMathOperations = Literal[
122
+ "ADD",
123
+ "SUBTRACT",
124
+ "MULTIPLY",
125
+ "DIVIDE",
126
+ "MULTIPLY_ADD",
127
+ "ABSOLUTE",
128
+ "NEGATE",
129
+ "POWER",
130
+ "MINIMUM",
131
+ "MAXIMUM",
132
+ "SIGN",
133
+ "DIVIDE_ROUND",
134
+ "DIVIDE_FLOOR",
135
+ "DIVIDE_CEIL",
136
+ "FLOORED_MODULO",
137
+ "MODULO",
138
+ "GCD",
139
+ "LCM",
140
+ ]
141
+ _BakeDataTypes = Literal[
142
+ "FLOAT",
143
+ "INT",
144
+ "BOOLEAN",
145
+ "VECTOR",
146
+ "RGBA",
147
+ "ROTATION",
148
+ "MATRIX",
149
+ "STRING",
150
+ "GEOMETRY",
151
+ "BUNDLE",
152
+ ]
153
+
154
+ _GridDataTypes = Literal[
155
+ "FLOAT",
156
+ "INT",
157
+ "BOOLEAN",
158
+ "VECTOR",
159
+ ]
160
+ _AdvectGridIntegration = Literal[
161
+ "Semi-Lagrangian",
162
+ "Midpoint",
163
+ "Runge-Kutta 3",
164
+ "Runge-Kutta 4",
165
+ "MacCormack",
166
+ "BFECC",
167
+ ]
168
+
169
+ _DeleteGeoemtryModes = Literal["ALL", "EDGE_FACE", "ONLY_FACE"]
170
+ _RandomValueDataTypes = Literal["FLOAT", "INT", "BOOLEAN", "FLOAT_VECTOR"]
171
+ _EvaluateAtIndexDataTypes = Literal[
172
+ "FLOAT", "INT", "BOOLEAN", "FLOAT_VECTOR", "FLOAT_COLOR", "QUATERNION", "FLOAT4X4"
173
+ ]
174
+ _DuplicateElementsDomains = Literal[
175
+ "POINT", "EDGE", "FACE", "SPLINE", "LAYER", "INSTANCE"
176
+ ]
177
+
178
+ _AttributeDataTypes = Literal[
179
+ "FLOAT", "INT", "BOOLEAN", "VECTOR", "RGBA", "ROTATION", "MATRIX"
180
+ ]
181
+ _MixDataTypes = Literal["FLOAT", "VECTOR", "COLOR", "ROTATION"]
182
+
183
+
184
+ _MixColorBlendTypes = Literal[
185
+ "MIX",
186
+ "DARKEN",
187
+ "MULTIPLY",
188
+ "BURN",
189
+ "LIGHTEN",
190
+ "SCREEN",
191
+ "DODGE",
192
+ "ADD",
193
+ "OVERLAY",
194
+ "SOFT_LIGHT",
195
+ "LINEAR_LIGHT",
196
+ "DIFFERENCE",
197
+ "EXCLUSION",
198
+ "SUBTRACT",
199
+ "DIVIDE",
200
+ "HUE",
201
+ "SATURATION",
202
+ "COLOR",
203
+ "VALUE",
204
+ ]
205
+
206
+ _RaycaseDataTypes = Literal[
207
+ "FLOAT", "INT", "BOOLEAN", "FLOAT_VECTOR", "FLOAT_COLOR", "QUATERNION", "FLOAT4X4"
208
+ ]
209
+ _SampleIndexDataTypes = Literal[
210
+ "FLOAT", "INT", "BOOLEAN", "FLOAT_VECTOR", "FLOAT_COLOR", "QUATERNION", "FLOAT4X4"
211
+ ]
212
+
213
+ _EvaluateCurveModes = Literal["EVALUATED", "COUNT", "LENGTH"]
214
+
215
+ _StoreNamedAttributeTypes = Literal[
216
+ "FLOAT",
217
+ "INT",
218
+ "BOOLEAN",
219
+ "FLOAT_VECTOR",
220
+ "FLOAT_COLOR",
221
+ "QUATERNION",
222
+ "FLOAT4X4",
223
+ "STRING",
224
+ "INT8",
225
+ "FLOAT2",
226
+ "BYTE_COLOR",
227
+ ]
228
+
229
+ _SocketShapeStructureType = Literal["AUTO", "DYNAMIC", "FIELD", "GRID", "SINGLE"]
230
+
231
+ _VectorMathOperations = Literal[
232
+ "ADD",
233
+ "SUBTRACT",
234
+ "MULTIPLY",
235
+ "DIVIDE",
236
+ "MULTIPLY_ADD",
237
+ "CROSS_PRODUCT",
238
+ "PROJECT",
239
+ "REFLECT",
240
+ "REFRACT",
241
+ "FACEFORWARD",
242
+ "DOT_PRODUCT",
243
+ "DISTANCE",
244
+ "LENGTH",
245
+ "SCALE",
246
+ "NORMALIZE",
247
+ "ABSOLUTE",
248
+ "POWER",
249
+ "SIGN",
250
+ "MINIMUM",
251
+ "MAXIMUM",
252
+ "FLOOR",
253
+ "CEIL",
254
+ "FRACTION",
255
+ "MODULO",
256
+ "WRAP",
257
+ "SNAP",
258
+ "SINE",
259
+ "COSINE",
260
+ "TANGENT",
261
+ ]
262
+
263
+
264
+ SOCKET_TYPES = Literal[
265
+ "FLOAT",
266
+ "INT",
267
+ "BOOLEAN",
268
+ "VECTOR",
269
+ "RGBA",
270
+ "ROTATION",
271
+ "MATRIX",
272
+ "STRING",
273
+ "MENU",
274
+ "OBJECT",
275
+ "GEOMETRY",
276
+ "COLLECTION",
277
+ "IMAGE",
278
+ "MATERIAL",
279
+ "BUNDLE",
280
+ "CLOSURE",
281
+ ]
282
+
283
+ SOCKET_COMPATIBILITY = {
284
+ "VALUE": (
285
+ "VALUE",
286
+ "VECTOR",
287
+ "INT",
288
+ "BOOLEAN",
289
+ "RGBA",
290
+ "ROTATION",
291
+ ),
292
+ "INT": (
293
+ "INT",
294
+ "VALUE",
295
+ "BOOLEAN",
296
+ "VECTOR",
297
+ "RGBA",
298
+ ),
299
+ "BOOLEAN": (
300
+ "BOOLEAN",
301
+ "INT",
302
+ "VALUE",
303
+ "VECTOR",
304
+ "RGBA",
305
+ ),
306
+ "VECTOR": (
307
+ "VECTOR",
308
+ "RGBA",
309
+ "ROTATION",
310
+ "VALUE",
311
+ "INT",
312
+ "BOOLEAN",
313
+ ),
314
+ "RGBA": (
315
+ "RGBA",
316
+ "VECTOR",
317
+ "VALUE",
318
+ "INT",
319
+ "BOOLEAN",
320
+ ),
321
+ "ROTATION": (
322
+ "ROTATION",
323
+ "MATRIX",
324
+ "VECTOR",
325
+ ),
326
+ "MATRIX": (
327
+ "MATRIX",
328
+ "ROTATION",
329
+ ),
330
+ "STRING": ("STRING",),
331
+ "MENU": ("MENU",),
332
+ "OBJECT": ("OBJECT",),
333
+ "GEOMETRY": ("GEOMETRY",),
334
+ "COLLECTION": ("COLLECTION",),
335
+ "IMAGE": ("IMAGE",),
336
+ "MATERIAL": ("MATERIAL",),
337
+ "BUNDLE": ("BUNDLE",),
338
+ "CLOSURE": ("CLOSURE",),
339
+ }
340
+
341
+
342
+ class DataTypes:
343
+ FLOAT = "FLOAT"
344
+ INT = "INT"
345
+ BOOL = "BOOL"
346
+ VECTOR = "VECTOR"
347
+ ROTATION = "ROTATION"
348
+ COLOR = "COLOR"
349
+ RGBA = "RGBA"
350
+
351
+
352
+ class AttributeTypes:
353
+ FLOAT = "FLOAT_VECTOR"
354
+ INT = "INT"
355
+ BOOL = "BOOL"
356
+ VECTOR = "VECTOR"
357
+ ROTATION = "ROTATION"
358
+ COLOR = "RGBA"
359
+ RGBA = "RGBA"
360
+
361
+
362
+ FloatInterfaceSubtypes = typing.Literal[
363
+ "NONE",
364
+ "PERCENTAGE",
365
+ "FACTOR",
366
+ "ANGLE",
367
+ "TIME",
368
+ "TIME_ABSOLUTE",
369
+ "DISTANCE",
370
+ "WAVELENGTH",
371
+ "COLOR_TEMPERATURE",
372
+ "FREQUENCY",
373
+ ]
374
+ VectorInterfaceSubtypes = typing.Literal[
375
+ "NONE",
376
+ "PERCENTAGE",
377
+ "FACTOR",
378
+ "ANGLE",
379
+ "TIME",
380
+ "TIME_ABSOLUTE",
381
+ "DISTANCE",
382
+ "WAVELENGTH",
383
+ "COLOR_TEMPERATURE",
384
+ "FREQUENCY",
385
+ ]
386
+
387
+ IntegerInterfaceSubtypes = typing.Literal["NONE", "PERCENTAGE", "FACTOR"]
388
+
389
+ StringInterfaceSubtypes = typing.Literal["NONE", "FILE_PATH"]
390
+
391
+
392
+ NodeMathItems = typing.Literal[
393
+ "ADD", # Add.A + B.
394
+ "SUBTRACT", # Subtract.A - B.
395
+ "MULTIPLY", # Multiply.A * B.
396
+ "DIVIDE", # Divide.A / B.
397
+ "MULTIPLY_ADD", # Multiply Add.A * B + C.
398
+ "POWER", # Power.A power B.
399
+ "LOGARITHM", # Logarithm.Logarithm A base B.
400
+ "SQRT", # Square Root.Square root of A.
401
+ "INVERSE_SQRT", # Inverse Square Root.1 / Square root of A.
402
+ "ABSOLUTE", # Absolute.Magnitude of A.
403
+ "EXPONENT", # Exponent.exp(A).
404
+ "MINIMUM", # Minimum.The minimum from A and B.
405
+ "MAXIMUM", # Maximum.The maximum from A and B.
406
+ "LESS_THAN", # Less Than.1 if A < B else 0.
407
+ "GREATER_THAN", # Greater Than.1 if A > B else 0.
408
+ "SIGN", # Sign.Returns the sign of A.
409
+ "COMPARE", # Compare.1 if (A == B) within tolerance C else 0.
410
+ "SMOOTH_MIN", # Smooth Minimum.The minimum from A and B with smoothing C.
411
+ "SMOOTH_MAX", # Smooth Maximum.The maximum from A and B with smoothing C.
412
+ "ROUND", # Round.Round A to the nearest integer. Round upward if the fraction part is 0.5.
413
+ "FLOOR", # Floor.The largest integer smaller than or equal A.
414
+ "CEIL", # Ceil.The smallest integer greater than or equal A.
415
+ "TRUNC", # Truncate.The integer part of A, removing fractional digits.
416
+ "FRACT", # Fraction.The fraction part of A.
417
+ "MODULO", # Truncated Modulo.The remainder of truncated division using fmod(A,B).
418
+ "FLOORED_MODULO", # Floored Modulo.The remainder of floored division.
419
+ "WRAP", # Wrap.Wrap value to range, wrap(A,B).
420
+ "SNAP", # Snap.Snap to increment, snap(A,B).
421
+ "PINGPONG", # Ping-Pong.Wraps a value and reverses every other cycle (A,B).
422
+ "SINE", # Sine.sin(A).
423
+ "COSINE", # Cosine.cos(A).
424
+ "TANGENT", # Tangent.tan(A).
425
+ "ARCSINE", # Arcsine.arcsin(A).
426
+ "ARCCOSINE", # Arccosine.arccos(A).
427
+ "ARCTANGENT", # Arctangent.arctan(A).
428
+ "ARCTAN2", # Arctan2.The signed angle arctan(A / B).
429
+ "SINH", # Hyperbolic Sine.sinh(A).
430
+ "COSH", # Hyperbolic Cosine.cosh(A).
431
+ "TANH", # Hyperbolic Tangent.tanh(A).
432
+ "RADIANS", # To Radians.Convert from degrees to radians.
433
+ "DEGREES", # To Degrees.Convert from radians to degrees.
434
+ ]
435
+ NodeBooleanMathItems = typing.Literal[
436
+ "AND", # And.True when both inputs are true.
437
+ "OR", # Or.True when at least one input is true.
438
+ "NOT", # Not.Opposite of the input.
439
+ "NAND", # Not And.True when at least one input is false.
440
+ "NOR", # Nor.True when both inputs are false.
441
+ "XNOR", # Equal.True when both inputs are equal (exclusive nor).
442
+ "XOR", # Not Equal.True when both inputs are different (exclusive or).
443
+ "IMPLY", # Imply.True unless the first input is true and the second is false.
444
+ "NIMPLY", # Subtract.True when the first input is true and the second is false (not imply).
445
+ ]
@@ -1,20 +1,20 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: nodebpy
3
- Version: 0.1.1
3
+ Version: 0.2.1
4
4
  Summary: Build nodes in Blender with code
5
5
  Author: Brady Johnston
6
6
  Author-email: Brady Johnston <brady.johnston@me.com>
7
7
  Requires-Dist: arrangebpy>=0.1.0
8
- Requires-Dist: jsondiff>=2.2.1
9
- Requires-Dist: syrupy>=5.0.0
10
- Requires-Dist: tree-clipper>=0.1.1
11
8
  Requires-Dist: bpy>=5.0.0 ; extra == 'bpy'
12
9
  Requires-Dist: fake-bpy-module>=20260113 ; extra == 'dev'
10
+ Requires-Dist: jsondiff>=2.2.1 ; extra == 'dev'
13
11
  Requires-Dist: pytest>=9.0.2 ; extra == 'dev'
14
12
  Requires-Dist: pytest-cov>=7.0.0 ; extra == 'dev'
15
13
  Requires-Dist: quarto-cli>=1.8.26 ; extra == 'dev'
16
14
  Requires-Dist: quartodoc>=0.11.1 ; extra == 'dev'
17
15
  Requires-Dist: ruff>=0.14.11 ; extra == 'dev'
16
+ Requires-Dist: syrupy>=5.0.0 ; extra == 'dev'
17
+ Requires-Dist: tree-clipper>=0.1.1 ; extra == 'dev'
18
18
  Requires-Dist: ipython>=8.0.0 ; extra == 'jupyter'
19
19
  Requires-Python: >=3.11
20
20
  Provides-Extra: bpy
@@ -76,7 +76,7 @@ with TreeBuilder("AnotherTree") as tree:
76
76
 
77
77
  _ = (
78
78
  count
79
- >> n.Points(position=n.RandomValue.vector(min=(-1, -1, -1)))
79
+ >> n.Points(position=n.RandomValue.vector(min=-1))
80
80
  >> n.InstanceOnPoints(instance=n.Cube(), rotation=rotation)
81
81
  >> n.SetPosition(
82
82
  position=n.Position() * 2.0 + (0, 0.2, 0.3),
@@ -0,0 +1,26 @@
1
+ nodebpy/__init__.py,sha256=AcXaVEPnvX1BlraPSSQ-0NR-Ip6cI0WNRqz84xvrTok,285
2
+ nodebpy/arrange.py,sha256=xBHf-lYlvr-BCdI0gHhEn1ETWjEQyYmzgmhIZ1RYal8,11020
3
+ nodebpy/builder.py,sha256=n4Qje1UAWUvOVCFv7KRaF6jDw6kEZPaVcWNLrqNHKlU,52460
4
+ nodebpy/nodes/__init__.py,sha256=OKVeUcCUjhmqsEsGKhgkCVe0iq2dWEqJCgcogx9RShM,12528
5
+ nodebpy/nodes/attribute.py,sha256=hme17msRejaqGHKDwvauHdCKMq7OLZhhi1Ax9Oxb7Wo,15043
6
+ nodebpy/nodes/color.py,sha256=ye1LkcJuebjMlJ8OUlKepSOe8-dhImgoL1uXFG1NamE,1652
7
+ nodebpy/nodes/converter.py,sha256=rzp3LmQ8uiDW1sDZg9x-LWkphBFzUn9dCgzETPI5Cdc,99014
8
+ nodebpy/nodes/experimental.py,sha256=Gxd2lKD5Hr4ClSmFojeZpZQr5AapQebDgTeO9R6EqxE,9561
9
+ nodebpy/nodes/geometry.py,sha256=C1H9JIGtzmzbJY7rsEf8c9PkX6Ja0JUKRcAI6uLS-l4,177510
10
+ nodebpy/nodes/grid.py,sha256=Px92tPr9w-_IWdAzaMMaIbVeRAHWFTQF3QJ1FYPMqGc,50345
11
+ nodebpy/nodes/group.py,sha256=PzQ20PrzgtqgQ2XRU7K1pqA9mW5wyt54bUIaqHjdqD0,289
12
+ nodebpy/nodes/input.py,sha256=i4CmSe4mBxlIru-BnzwUH1C_95Op5JpIMd-QiZY-FWE,60082
13
+ nodebpy/nodes/interface.py,sha256=jobDdF_DpioS25-RfnyPLiKcA40ZfwNhOjdLATBHdDk,14947
14
+ nodebpy/nodes/manual.py,sha256=zhfcbWJxB-lMB6q_fvmPjnYCRbS52gY-BI1171rIu9U,59625
15
+ nodebpy/nodes/output.py,sha256=py1SgNLQfwTG31KQCHFZn6lC5qg8NixMAoJ1KhnT7XQ,2138
16
+ nodebpy/nodes/texture.py,sha256=JyjsE8WrVJ4wpx3xO6uaJ5A8ll7N6FtWBQs0comAD7s,25526
17
+ nodebpy/nodes/vector.py,sha256=ULEOGx71OCD1Rz2egzkz5RhaKc5huC-LUjghovrnPbQ,15283
18
+ nodebpy/nodes/zone.py,sha256=Rc97fUW1PmteAzxODCEpGJbVbfl9PTgnnBHSoBa8188,13543
19
+ nodebpy/screenshot.py,sha256=gXAwGfeK05YL9XIpghv5nQ5cXVgtR35wnLnTVDAh08g,18885
20
+ nodebpy/screenshot_subprocess.py,sha256=bmuyjedROCasEDI-JdjXWVsYoEX5I-asE3KxMVR30qM,15364
21
+ nodebpy/sockets.py,sha256=eU3p0IdCkYQeVRp8XkkDuOR38JTIzniTXKhsXQgx29Q,1011
22
+ nodebpy/types.py,sha256=4IGYzFquYFPNj_h-yKz-VycdodozdaaHSJ9gX6MchTs,10848
23
+ nodebpy-0.2.1.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
24
+ nodebpy-0.2.1.dist-info/entry_points.txt,sha256=XvODbWiwSnneYWIYjxFJZmXdntQnapg59Ye2LtCKEN4,42
25
+ nodebpy-0.2.1.dist-info/METADATA,sha256=sHU0fV0C_fUtJaPVR8-xkwxX_6FQ-TieLoT7IZRBdkA,6289
26
+ nodebpy-0.2.1.dist-info/RECORD,,