buildzr 0.0.5__py3-none-any.whl → 0.0.7__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.
- buildzr/__about__.py +1 -1
- buildzr/dsl/dsl.py +65 -38
- buildzr/dsl/interfaces/__init__.py +2 -0
- buildzr/dsl/interfaces/interfaces.py +37 -0
- buildzr/dsl/relations.py +25 -16
- buildzr/sinks/__init__.py +0 -0
- buildzr/sinks/interfaces.py +18 -0
- buildzr/sinks/json_sink.py +24 -0
- {buildzr-0.0.5.dist-info → buildzr-0.0.7.dist-info}/METADATA +5 -6
- {buildzr-0.0.5.dist-info → buildzr-0.0.7.dist-info}/RECORD +12 -9
- {buildzr-0.0.5.dist-info → buildzr-0.0.7.dist-info}/WHEEL +1 -1
- {buildzr-0.0.5.dist-info → buildzr-0.0.7.dist-info}/licenses/LICENSE.md +0 -0
buildzr/__about__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
VERSION = "0.0.
|
1
|
+
VERSION = "0.0.7"
|
buildzr/dsl/dsl.py
CHANGED
@@ -26,10 +26,14 @@ from typing import (
|
|
26
26
|
Type,
|
27
27
|
)
|
28
28
|
|
29
|
+
from buildzr.sinks.interfaces import Sink
|
30
|
+
|
29
31
|
from buildzr.dsl.interfaces import (
|
30
32
|
DslWorkspaceElement,
|
31
33
|
DslElement,
|
34
|
+
DslViewElement,
|
32
35
|
DslViewsElement,
|
36
|
+
DslFluentSink,
|
33
37
|
TSrc, TDst,
|
34
38
|
TParent, TChild,
|
35
39
|
)
|
@@ -45,20 +49,6 @@ from buildzr.dsl.relations import (
|
|
45
49
|
def _child_name_transform(name: str) -> str:
|
46
50
|
return name.lower().replace(' ', '_')
|
47
51
|
|
48
|
-
# TODO: Remove, not used.
|
49
|
-
# def _create_linked_relationship_from(
|
50
|
-
# relationship: '_Relationship[TSrc, TDst]') -> buildzr.models.Relationship:
|
51
|
-
|
52
|
-
# src = relationship.source
|
53
|
-
# dst = relationship.destination
|
54
|
-
|
55
|
-
# return buildzr.models.Relationship(
|
56
|
-
# id=GenerateId.for_relationship(),
|
57
|
-
# sourceId=str(src.model.id),
|
58
|
-
# destinationId=str(dst.parent.model.id),
|
59
|
-
# linkedRelationshipId=relationship.model.id,
|
60
|
-
# )
|
61
|
-
|
62
52
|
TypedModel = TypeVar('TypedModel')
|
63
53
|
class TypedDynamicAttribute(Generic[TypedModel]):
|
64
54
|
|
@@ -197,7 +187,7 @@ class Workspace(DslWorkspaceElement):
|
|
197
187
|
'ContainerView',
|
198
188
|
'ComponentView',
|
199
189
|
]
|
200
|
-
) -> '
|
190
|
+
) -> '_FluentSink':
|
201
191
|
return Views(self).contains(*views)
|
202
192
|
|
203
193
|
def __getattr__(self, name: str) -> Union['Person', 'SoftwareSystem']:
|
@@ -209,7 +199,15 @@ class Workspace(DslWorkspaceElement):
|
|
209
199
|
def __dir__(self) -> Iterable[str]:
|
210
200
|
return list(super().__dir__()) + list(self._dynamic_attrs.keys())
|
211
201
|
|
212
|
-
class SoftwareSystem(DslElementRelationOverrides
|
202
|
+
class SoftwareSystem(DslElementRelationOverrides[
|
203
|
+
'SoftwareSystem',
|
204
|
+
Union[
|
205
|
+
'Person',
|
206
|
+
'SoftwareSystem',
|
207
|
+
'Container',
|
208
|
+
'Component'
|
209
|
+
]
|
210
|
+
]):
|
213
211
|
"""
|
214
212
|
A software system.
|
215
213
|
"""
|
@@ -294,7 +292,15 @@ class SoftwareSystem(DslElementRelationOverrides):
|
|
294
292
|
def __dir__(self) -> Iterable[str]:
|
295
293
|
return list(super().__dir__()) + list(self._dynamic_attrs.keys())
|
296
294
|
|
297
|
-
class Person(DslElementRelationOverrides
|
295
|
+
class Person(DslElementRelationOverrides[
|
296
|
+
'Person',
|
297
|
+
Union[
|
298
|
+
'Person',
|
299
|
+
'SoftwareSystem',
|
300
|
+
'Container',
|
301
|
+
'Component'
|
302
|
+
]
|
303
|
+
]):
|
298
304
|
"""
|
299
305
|
A person who uses a software system.
|
300
306
|
"""
|
@@ -345,7 +351,15 @@ class Person(DslElementRelationOverrides):
|
|
345
351
|
self._label = label
|
346
352
|
return self
|
347
353
|
|
348
|
-
class Container(DslElementRelationOverrides
|
354
|
+
class Container(DslElementRelationOverrides[
|
355
|
+
'Container',
|
356
|
+
Union[
|
357
|
+
'Person',
|
358
|
+
'SoftwareSystem',
|
359
|
+
'Container',
|
360
|
+
'Component'
|
361
|
+
]
|
362
|
+
]):
|
349
363
|
"""
|
350
364
|
A container (something that can execute code or host data).
|
351
365
|
"""
|
@@ -425,7 +439,15 @@ class Container(DslElementRelationOverrides):
|
|
425
439
|
def __dir__(self) -> Iterable[str]:
|
426
440
|
return list(super().__dir__()) + list(self._dynamic_attrs.keys())
|
427
441
|
|
428
|
-
class Component(DslElementRelationOverrides
|
442
|
+
class Component(DslElementRelationOverrides[
|
443
|
+
'Component',
|
444
|
+
Union[
|
445
|
+
'Person',
|
446
|
+
'SoftwareSystem',
|
447
|
+
'Container',
|
448
|
+
'Component'
|
449
|
+
]
|
450
|
+
]):
|
429
451
|
"""
|
430
452
|
A component (a grouping of related functionality behind an interface that runs inside a container).
|
431
453
|
"""
|
@@ -487,6 +509,19 @@ class Group:
|
|
487
509
|
self._name = name
|
488
510
|
self._elements = elements
|
489
511
|
|
512
|
+
class _FluentSink(DslFluentSink):
|
513
|
+
|
514
|
+
def __init__(self, workspace: Workspace) -> None:
|
515
|
+
self._workspace = workspace
|
516
|
+
|
517
|
+
def to_json(self, path: str) -> None:
|
518
|
+
from buildzr.sinks.json_sink import JsonSink, JsonSinkConfig
|
519
|
+
sink = JsonSink()
|
520
|
+
sink.write(workspace=self._workspace.model, config=JsonSinkConfig(path=path))
|
521
|
+
|
522
|
+
def get_workspace(self) -> Workspace:
|
523
|
+
return self._workspace
|
524
|
+
|
490
525
|
_RankDirection = Literal['tb', 'bt', 'lr', 'rl']
|
491
526
|
|
492
527
|
_AutoLayout = Optional[
|
@@ -554,7 +589,7 @@ def _auto_layout_to_model(auto_layout: _AutoLayout) -> buildzr.models.AutomaticL
|
|
554
589
|
|
555
590
|
return model
|
556
591
|
|
557
|
-
class SystemLandscapeView:
|
592
|
+
class SystemLandscapeView(DslViewElement):
|
558
593
|
|
559
594
|
from buildzr.dsl.expression import Expression, Element, Relationship
|
560
595
|
|
@@ -649,7 +684,7 @@ class SystemLandscapeView:
|
|
649
684
|
for relationship_id in relationship_ids:
|
650
685
|
self._m.relationships.append(RelationshipView(id=relationship_id))
|
651
686
|
|
652
|
-
class SystemContextView:
|
687
|
+
class SystemContextView(DslViewElement):
|
653
688
|
|
654
689
|
"""
|
655
690
|
If no filter is applied, this view includes all elements that have a direct
|
@@ -700,9 +735,6 @@ class SystemContextView:
|
|
700
735
|
from buildzr.dsl.expression import Expression, Element, Relationship
|
701
736
|
from buildzr.models import ElementView, RelationshipView
|
702
737
|
|
703
|
-
# TODO: Refactor below codes. Similar patterns may exists for other views.
|
704
|
-
# Maybe make the views a subclass of some abstract `BaseView` class?
|
705
|
-
|
706
738
|
software_system = self._selector(self._parent._parent)
|
707
739
|
self._m.softwareSystemId = software_system.model.id
|
708
740
|
view_elements_filter: List[Callable[[Workspace, Element], bool]] = [
|
@@ -711,10 +743,6 @@ class SystemContextView:
|
|
711
743
|
lambda w, e: software_system.model.id in e.destinations.ids,
|
712
744
|
]
|
713
745
|
|
714
|
-
# TODO: (Or, TOTHINK?) The code below includes all sources and all
|
715
|
-
# destinations of the subject software system. What if we want to
|
716
|
-
# exclude a source? Maybe the predicates in `elements` and
|
717
|
-
# `relationships` should be ANDed together afterall?
|
718
746
|
view_relationships_filter: List[Callable[[Workspace, Relationship], bool]] = [
|
719
747
|
lambda w, r: software_system == r.source,
|
720
748
|
lambda w, r: software_system == r.destination,
|
@@ -747,7 +775,7 @@ class SystemContextView:
|
|
747
775
|
for relationship_id in relationship_ids:
|
748
776
|
self._m.relationships.append(RelationshipView(id=relationship_id))
|
749
777
|
|
750
|
-
class ContainerView:
|
778
|
+
class ContainerView(DslViewElement):
|
751
779
|
|
752
780
|
from buildzr.dsl.expression import Expression, Element, Relationship
|
753
781
|
|
@@ -836,7 +864,7 @@ class ContainerView:
|
|
836
864
|
for relationship_id in relationship_ids:
|
837
865
|
self._m.relationships.append(RelationshipView(id=relationship_id))
|
838
866
|
|
839
|
-
class ComponentView:
|
867
|
+
class ComponentView(DslViewElement):
|
840
868
|
|
841
869
|
from buildzr.dsl.expression import Expression, Element, Relationship
|
842
870
|
|
@@ -945,34 +973,33 @@ class Views(DslViewsElement):
|
|
945
973
|
|
946
974
|
def contains(
|
947
975
|
self,
|
948
|
-
*views:
|
949
|
-
|
950
|
-
SystemContextView,
|
951
|
-
ContainerView,
|
952
|
-
ComponentView,
|
953
|
-
]) -> Self:
|
976
|
+
*views: DslViewElement
|
977
|
+
) -> _FluentSink:
|
954
978
|
|
955
979
|
for view in views:
|
956
|
-
view._parent = self
|
957
980
|
if isinstance(view, SystemLandscapeView):
|
981
|
+
view._parent = self
|
958
982
|
view._on_added()
|
959
983
|
if self._m.systemLandscapeViews:
|
960
984
|
self._m.systemLandscapeViews.append(view.model)
|
961
985
|
else:
|
962
986
|
self._m.systemLandscapeViews = [view.model]
|
963
987
|
elif isinstance(view, SystemContextView):
|
988
|
+
view._parent = self
|
964
989
|
view._on_added()
|
965
990
|
if self._m.systemContextViews:
|
966
991
|
self._m.systemContextViews.append(view.model)
|
967
992
|
else:
|
968
993
|
self._m.systemContextViews = [view.model]
|
969
994
|
elif isinstance(view, ContainerView):
|
995
|
+
view._parent = self
|
970
996
|
view._on_added()
|
971
997
|
if self._m.containerViews:
|
972
998
|
self._m.containerViews.append(view.model)
|
973
999
|
else:
|
974
1000
|
self._m.containerViews = [view.model]
|
975
1001
|
elif isinstance(view, ComponentView):
|
1002
|
+
view._parent = self
|
976
1003
|
view._on_added()
|
977
1004
|
if self._m.componentViews:
|
978
1005
|
self._m.componentViews.append(view.model)
|
@@ -981,7 +1008,7 @@ class Views(DslViewsElement):
|
|
981
1008
|
else:
|
982
1009
|
raise NotImplementedError("The view {0} is currently not supported", type(view))
|
983
1010
|
|
984
|
-
return self
|
1011
|
+
return _FluentSink(self._parent)
|
985
1012
|
|
986
1013
|
def get_workspace(self) -> Workspace:
|
987
1014
|
"""
|
@@ -199,6 +199,36 @@ class DslFluentRelationship(ABC, Generic[TParent]):
|
|
199
199
|
def get(self) -> TParent:
|
200
200
|
pass
|
201
201
|
|
202
|
+
class DslFluentSink(ABC):
|
203
|
+
|
204
|
+
@abstractmethod
|
205
|
+
def to_json(self, path: str) -> None:
|
206
|
+
pass
|
207
|
+
|
208
|
+
class DslViewElement(ABC):
|
209
|
+
|
210
|
+
ViewModel = Union[
|
211
|
+
buildzr.models.SystemLandscapeView,
|
212
|
+
buildzr.models.SystemContextView,
|
213
|
+
buildzr.models.ContainerView,
|
214
|
+
buildzr.models.ComponentView,
|
215
|
+
buildzr.models.DynamicView,
|
216
|
+
buildzr.models.DeploymentView,
|
217
|
+
]
|
218
|
+
|
219
|
+
@property
|
220
|
+
@abstractmethod
|
221
|
+
def model(self) -> ViewModel:
|
222
|
+
pass
|
223
|
+
|
224
|
+
@property
|
225
|
+
@abstractmethod
|
226
|
+
def parent(self) -> 'DslViewsElement':
|
227
|
+
pass
|
228
|
+
|
229
|
+
def _on_added(self) -> None:
|
230
|
+
pass
|
231
|
+
|
202
232
|
class DslViewsElement(ABC):
|
203
233
|
|
204
234
|
@property
|
@@ -209,4 +239,11 @@ class DslViewsElement(ABC):
|
|
209
239
|
@property
|
210
240
|
@abstractmethod
|
211
241
|
def parent(self) -> DslWorkspaceElement:
|
242
|
+
pass
|
243
|
+
|
244
|
+
@abstractmethod
|
245
|
+
def contains(
|
246
|
+
self,
|
247
|
+
*views: Union[DslViewElement],
|
248
|
+
) -> DslFluentSink:
|
212
249
|
pass
|
buildzr/dsl/relations.py
CHANGED
@@ -204,6 +204,8 @@ class _FluentRelationship(DslFluentRelationship[TParent]):
|
|
204
204
|
|
205
205
|
return self._parent
|
206
206
|
|
207
|
+
# TODO: Remove this and replace with something better.
|
208
|
+
# Doesn't feel "fluent."
|
207
209
|
def get(self) -> TParent:
|
208
210
|
return self._parent
|
209
211
|
|
@@ -224,7 +226,7 @@ class _RelationshipDescription(Generic[TDst]):
|
|
224
226
|
destination=destination,
|
225
227
|
)
|
226
228
|
|
227
|
-
class _UsesFromLate(BindLeftLate[TDst]):
|
229
|
+
class _UsesFromLate(Generic[TDst], BindLeftLate[TDst]):
|
228
230
|
"""
|
229
231
|
This method is used to create a relationship between one source element with
|
230
232
|
multiple destination elements, like so:
|
@@ -306,7 +308,7 @@ class _UsesFromLate(BindLeftLate[TDst]):
|
|
306
308
|
|
307
309
|
return self
|
308
310
|
|
309
|
-
class DslElementRelationOverrides(DslElement):
|
311
|
+
class DslElementRelationOverrides(Generic[TSrc, TDst], DslElement[TSrc, TDst]):
|
310
312
|
|
311
313
|
"""
|
312
314
|
Base class meant to be derived from to override the `__rshift__` method to
|
@@ -316,7 +318,7 @@ class DslElementRelationOverrides(DslElement):
|
|
316
318
|
|
317
319
|
# TODO: Check why need to ignore the override error here.
|
318
320
|
@overload # type: ignore[override]
|
319
|
-
def __rshift__(self, other:
|
321
|
+
def __rshift__(self, other: TDst) -> _Relationship[Self, TDst]:
|
320
322
|
"""
|
321
323
|
Create a relationship between the source element and the destination
|
322
324
|
without specifying description or technology.
|
@@ -326,30 +328,30 @@ class DslElementRelationOverrides(DslElement):
|
|
326
328
|
...
|
327
329
|
|
328
330
|
@overload
|
329
|
-
def __rshift__(self, description_and_technology: Tuple[str, str]) -> _UsesFrom[Self,
|
331
|
+
def __rshift__(self, description_and_technology: Tuple[str, str]) -> _UsesFrom[Self, TDst]:
|
330
332
|
...
|
331
333
|
|
332
334
|
@overload
|
333
|
-
def __rshift__(self, description: str) -> _UsesFrom[Self,
|
335
|
+
def __rshift__(self, description: str) -> _UsesFrom[Self, TDst]:
|
334
336
|
...
|
335
337
|
|
336
338
|
@overload
|
337
|
-
def __rshift__(self, _RelationshipDescription: _RelationshipDescription[
|
339
|
+
def __rshift__(self, _RelationshipDescription: _RelationshipDescription[TDst]) -> _UsesFrom[Self, TDst]:
|
338
340
|
...
|
339
341
|
|
340
342
|
@overload
|
341
|
-
def __rshift__(self, multiple_destinations: List[Union[
|
343
|
+
def __rshift__(self, multiple_destinations: List[Union[TDst, _UsesFromLate[TDst]]]) -> List[_Relationship[Self, TDst]]:
|
342
344
|
...
|
343
345
|
|
344
346
|
def __rshift__(
|
345
347
|
self,
|
346
348
|
other: Union[
|
347
|
-
|
349
|
+
TDst,
|
348
350
|
str,
|
349
351
|
Tuple[str, str],
|
350
|
-
_RelationshipDescription[
|
351
|
-
List[Union[
|
352
|
-
]) -> Union[_UsesFrom[Self,
|
352
|
+
_RelationshipDescription[TDst],
|
353
|
+
List[Union[TDst, _UsesFromLate[TDst]]]
|
354
|
+
]) -> Union[_UsesFrom[Self, TDst], _Relationship[Self, TDst], List[_Relationship[Self, TDst]]]:
|
353
355
|
if isinstance(other, DslElement):
|
354
356
|
return cast(
|
355
357
|
_Relationship[Self, DslElement],
|
@@ -364,8 +366,8 @@ class DslElementRelationOverrides(DslElement):
|
|
364
366
|
return _UsesFrom(self, description=other[0], technology=other[1])
|
365
367
|
elif isinstance(other, _RelationshipDescription):
|
366
368
|
return _UsesFrom(self, description=other._description, technology=other._technology)
|
367
|
-
elif
|
368
|
-
relationships: List[_Relationship[Self,
|
369
|
+
elif isinstance(other, list):
|
370
|
+
relationships: List[_Relationship[Self, TDst]] = []
|
369
371
|
for dest in other:
|
370
372
|
if isinstance(dest, _UsesFromLate):
|
371
373
|
dest.set_source(self)
|
@@ -373,14 +375,21 @@ class DslElementRelationOverrides(DslElement):
|
|
373
375
|
elif isinstance(dest, DslElement):
|
374
376
|
relationships.append(
|
375
377
|
cast(
|
376
|
-
_Relationship[Self, DslElement],
|
378
|
+
_Relationship[Self, DslElement[Self, TDst]],
|
377
379
|
cast(
|
378
|
-
_UsesFrom[Self, DslElement],
|
380
|
+
_UsesFrom[Self, DslElement[Self, TDst]],
|
379
381
|
_UsesFrom(self)
|
380
382
|
) >> dest
|
381
383
|
)
|
382
384
|
)
|
383
|
-
return
|
385
|
+
return cast(
|
386
|
+
Union[
|
387
|
+
List[_Relationship[Self, TDst]],
|
388
|
+
_UsesFrom[Self, TDst],
|
389
|
+
_Relationship[Self, TDst],
|
390
|
+
],
|
391
|
+
relationships
|
392
|
+
)
|
384
393
|
else:
|
385
394
|
raise TypeError(f"Unsupported operand type for >>: '{type(self).__name__}' and {type(other).__name__}")
|
386
395
|
|
File without changes
|
@@ -0,0 +1,18 @@
|
|
1
|
+
from typing import (
|
2
|
+
Optional,
|
3
|
+
Any,
|
4
|
+
TypedDict,
|
5
|
+
TypeVar,
|
6
|
+
Generic,
|
7
|
+
)
|
8
|
+
from dataclasses import dataclass
|
9
|
+
from abc import ABC, abstractmethod
|
10
|
+
from buildzr.models.models import Workspace
|
11
|
+
|
12
|
+
TConfig = TypeVar('TConfig')
|
13
|
+
|
14
|
+
class Sink(ABC, Generic[TConfig]):
|
15
|
+
|
16
|
+
@abstractmethod
|
17
|
+
def write(self, workspace: Workspace, config: Optional[TConfig]=None) -> None:
|
18
|
+
pass
|
@@ -0,0 +1,24 @@
|
|
1
|
+
from typing import (
|
2
|
+
Optional,
|
3
|
+
)
|
4
|
+
from dataclasses import dataclass
|
5
|
+
from buildzr.models.models import Workspace
|
6
|
+
from buildzr.encoders.encoder import JsonEncoder
|
7
|
+
from buildzr.sinks.interfaces import Sink
|
8
|
+
|
9
|
+
@dataclass
|
10
|
+
class JsonSinkConfig:
|
11
|
+
path: str
|
12
|
+
|
13
|
+
class JsonSink(Sink[JsonSinkConfig]):
|
14
|
+
|
15
|
+
def write(self, workspace: Workspace, config: Optional[JsonSinkConfig]=None) -> None:
|
16
|
+
if config is not None:
|
17
|
+
with open(config.path, 'w') as file:
|
18
|
+
file.write(JsonEncoder().encode(workspace))
|
19
|
+
else:
|
20
|
+
import os
|
21
|
+
workspace_name = workspace.name.replace(' ', '_').lower()
|
22
|
+
|
23
|
+
with open(os.path.join(os.curdir, f'{workspace_name}.json'), 'w') as file:
|
24
|
+
file.write(JsonEncoder().encode(workspace))
|
@@ -1,11 +1,10 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: buildzr
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.7
|
4
4
|
Summary: Structurizr for the `buildzr`s 🧱⚒️
|
5
5
|
Project-URL: homepage, https://github.com/amirulmenjeni/buildzr
|
6
6
|
Project-URL: issues, https://github.com/amirulmenjeni/buildzr/issues
|
7
7
|
Author-email: Amirul Menjeni <amirulmenjeni@pm.me>
|
8
|
-
License-File: LICENSE.md
|
9
8
|
Keywords: architecture,buildzr,c4model,design,diagram,structurizr
|
10
9
|
Classifier: Development Status :: 3 - Alpha
|
11
10
|
Classifier: License :: OSI Approved :: MIT License
|
@@ -118,15 +117,15 @@ w = Workspace('w')\
|
|
118
117
|
)\
|
119
118
|
.get_workspace()
|
120
119
|
|
121
|
-
#
|
122
|
-
|
123
|
-
json.dump(w.model, f, ensure_ascii=False, indent=4, cls=JsonEncoder)
|
120
|
+
# Save workspace to a JSON file following the Structurizr JSON schema.
|
121
|
+
w.to_json('workspace.json')
|
124
122
|
```
|
125
123
|
|
126
124
|
Here's a short breakdown on what's happening:
|
127
125
|
- In `Workspace(...).contains(...)` method, we define the _static_ C4 models (i.e., `Person`, `SoftwareSystem`, and the `Container`s in the software system).
|
128
126
|
- In the `Workspace(...).contains(...).where(...)`, we define the relationships between the C4 models in the workspace. We access the models via the `w` parameter in the `lambda` function, and create the relationships using the `>>` operators.
|
129
|
-
-
|
127
|
+
- Once we have all the models and their relationships defined, we use (and re-use!) the static models to create multiple views to tell different stories and show various narrative to help document your software architecture.
|
128
|
+
- Finally, we write the workspace definitions into a JSON file, which can be consumed by rendering tools, or used for further processing.
|
130
129
|
|
131
130
|
The JSON output can be found [here](examples/system_context_and_container_view.json). You can also try out https://structurizr.com/json to see how this workspace will be rendered.
|
132
131
|
|
@@ -1,20 +1,23 @@
|
|
1
|
-
buildzr/__about__.py,sha256=
|
1
|
+
buildzr/__about__.py,sha256=mxN_6Jqd8AWInKb6pHwebAtbTNsZmgF0Jj4L8NNGU5I,17
|
2
2
|
buildzr/__init__.py,sha256=hY-cOdjBQcz0v2m8cBF1oEJFIbcR3sWI-xww--0RKSo,99
|
3
3
|
buildzr/dsl/__init__.py,sha256=paxuMCCDuOs1eSvBPyuW5pv5j1UZD6TxRZcCzC2iKss,307
|
4
|
-
buildzr/dsl/dsl.py,sha256=
|
4
|
+
buildzr/dsl/dsl.py,sha256=7KUe_YLSjOKG5D5MDJkJddt2evYM_Q1JeSkBMsu-83w,34782
|
5
5
|
buildzr/dsl/explorer.py,sha256=numMPqD3RYJ1oeMgX5wYnT6aHRHmBN2EsFZFYRuFffA,2523
|
6
6
|
buildzr/dsl/expression.py,sha256=UinOUL3nJytZR8ylnVtVkJ0YoWoWspU9DQeDpg0nIEQ,6927
|
7
|
-
buildzr/dsl/relations.py,sha256=
|
7
|
+
buildzr/dsl/relations.py,sha256=SajN7beDhPFYnJ-4RXgJ4YGY5g-7Uw9n8IDlysGMmNg,13978
|
8
8
|
buildzr/dsl/factory/__init__.py,sha256=niaYqvNPUWJejoPyRyABUtzVsoxaV8eSjzS9dta4bMI,30
|
9
9
|
buildzr/dsl/factory/gen_id.py,sha256=LnaeOCMngSvYkcGnuARjQYoUVWdcOoNHO2EHe6PMGco,538
|
10
|
-
buildzr/dsl/interfaces/__init__.py,sha256=
|
11
|
-
buildzr/dsl/interfaces/interfaces.py,sha256=
|
10
|
+
buildzr/dsl/interfaces/__init__.py,sha256=z8d8HzL64m8aT_HHM3mCVZoNwh_QhsYv0apGz-EX9Us,268
|
11
|
+
buildzr/dsl/interfaces/interfaces.py,sha256=UfysJ1X0RQiPAEl_kBlcoxuWEO-kmg3c3gveN6klUG8,5885
|
12
12
|
buildzr/encoders/__init__.py,sha256=suID63Ay-023T0uKD25EAoGYmAMTa9AKxIjioccpiPM,32
|
13
13
|
buildzr/encoders/encoder.py,sha256=9_FlQ3aYvz0EcN_G9A3bPdqxCTkLhc2OrYXSYti95f8,2237
|
14
14
|
buildzr/models/__init__.py,sha256=SRfF7oDVlOOAi6nGKiJIUK6B_arqYLO9iSMp-2IZZps,21
|
15
15
|
buildzr/models/generate.sh,sha256=924UoEXr5WBZ926TZfRgEQGHwBqtLGU5k0G2UfExLEg,1061
|
16
16
|
buildzr/models/models.py,sha256=0LhLG1wmbt4dvROV5MEBZLLoxPbMpkUsOqNz525cynE,42489
|
17
|
-
buildzr
|
18
|
-
buildzr
|
19
|
-
buildzr
|
20
|
-
buildzr-0.0.
|
17
|
+
buildzr/sinks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
18
|
+
buildzr/sinks/interfaces.py,sha256=LOZekP4WNjomD5J5f3FnZTwGj0aXMr6RbrvyFV5zn0E,383
|
19
|
+
buildzr/sinks/json_sink.py,sha256=onKOZTpwOQfeMEj1ONkuIEHBAQhx4yQSqqI_lgZBaP8,777
|
20
|
+
buildzr-0.0.7.dist-info/METADATA,sha256=eVaFO4ZV4LROB8GVPIYxjSqeuXZw3RVNP0eSOnOKoTA,6237
|
21
|
+
buildzr-0.0.7.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
|
22
|
+
buildzr-0.0.7.dist-info/licenses/LICENSE.md,sha256=e8e6W6tL4MbBY-c-gXMgDbaMf_BnaQDQv4Yoy42b-CI,1070
|
23
|
+
buildzr-0.0.7.dist-info/RECORD,,
|
File without changes
|