dara-core 1.20.1a1__py3-none-any.whl → 1.20.1a2__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.
Files changed (82) hide show
  1. dara/core/__init__.py +3 -0
  2. dara/core/actions.py +1 -2
  3. dara/core/auth/basic.py +22 -16
  4. dara/core/auth/definitions.py +2 -2
  5. dara/core/auth/routes.py +5 -5
  6. dara/core/auth/utils.py +5 -5
  7. dara/core/base_definitions.py +22 -64
  8. dara/core/cli.py +8 -7
  9. dara/core/configuration.py +5 -2
  10. dara/core/css.py +1 -2
  11. dara/core/data_utils.py +18 -19
  12. dara/core/defaults.py +6 -7
  13. dara/core/definitions.py +50 -19
  14. dara/core/http.py +7 -3
  15. dara/core/interactivity/__init__.py +6 -0
  16. dara/core/interactivity/actions.py +52 -50
  17. dara/core/interactivity/any_data_variable.py +7 -134
  18. dara/core/interactivity/any_variable.py +5 -8
  19. dara/core/interactivity/client_variable.py +71 -0
  20. dara/core/interactivity/data_variable.py +8 -266
  21. dara/core/interactivity/derived_data_variable.py +7 -290
  22. dara/core/interactivity/derived_variable.py +416 -176
  23. dara/core/interactivity/filtering.py +46 -27
  24. dara/core/interactivity/loop_variable.py +2 -2
  25. dara/core/interactivity/non_data_variable.py +5 -68
  26. dara/core/interactivity/plain_variable.py +89 -15
  27. dara/core/interactivity/server_variable.py +325 -0
  28. dara/core/interactivity/state_variable.py +69 -0
  29. dara/core/interactivity/switch_variable.py +19 -19
  30. dara/core/interactivity/tabular_variable.py +94 -0
  31. dara/core/interactivity/url_variable.py +10 -90
  32. dara/core/internal/cache_store/base_impl.py +2 -1
  33. dara/core/internal/cache_store/cache_store.py +22 -25
  34. dara/core/internal/cache_store/keep_all.py +4 -1
  35. dara/core/internal/cache_store/lru.py +5 -1
  36. dara/core/internal/cache_store/ttl.py +4 -1
  37. dara/core/internal/cgroup.py +1 -1
  38. dara/core/internal/dependency_resolution.py +60 -66
  39. dara/core/internal/devtools.py +12 -5
  40. dara/core/internal/download.py +13 -4
  41. dara/core/internal/encoder_registry.py +7 -7
  42. dara/core/internal/execute_action.py +13 -13
  43. dara/core/internal/hashing.py +1 -3
  44. dara/core/internal/import_discovery.py +3 -4
  45. dara/core/internal/multi_resource_lock.py +70 -0
  46. dara/core/internal/normalization.py +9 -18
  47. dara/core/internal/pandas_utils.py +107 -5
  48. dara/core/internal/pool/definitions.py +1 -1
  49. dara/core/internal/pool/task_pool.py +25 -16
  50. dara/core/internal/pool/utils.py +21 -18
  51. dara/core/internal/pool/worker.py +3 -2
  52. dara/core/internal/port_utils.py +1 -1
  53. dara/core/internal/registries.py +12 -6
  54. dara/core/internal/registry.py +4 -2
  55. dara/core/internal/registry_lookup.py +11 -5
  56. dara/core/internal/routing.py +109 -145
  57. dara/core/internal/scheduler.py +13 -8
  58. dara/core/internal/settings.py +2 -2
  59. dara/core/internal/store.py +2 -29
  60. dara/core/internal/tasks.py +379 -195
  61. dara/core/internal/utils.py +36 -13
  62. dara/core/internal/websocket.py +21 -20
  63. dara/core/js_tooling/js_utils.py +28 -26
  64. dara/core/js_tooling/templates/vite.config.template.ts +12 -3
  65. dara/core/logging.py +13 -12
  66. dara/core/main.py +14 -11
  67. dara/core/metrics/cache.py +1 -1
  68. dara/core/metrics/utils.py +3 -3
  69. dara/core/persistence.py +27 -5
  70. dara/core/umd/dara.core.umd.js +68291 -64718
  71. dara/core/visual/components/__init__.py +2 -2
  72. dara/core/visual/components/fallback.py +30 -4
  73. dara/core/visual/components/for_cmp.py +4 -1
  74. dara/core/visual/css/__init__.py +30 -31
  75. dara/core/visual/dynamic_component.py +31 -28
  76. dara/core/visual/progress_updater.py +4 -3
  77. {dara_core-1.20.1a1.dist-info → dara_core-1.20.1a2.dist-info}/METADATA +12 -11
  78. dara_core-1.20.1a2.dist-info/RECORD +119 -0
  79. dara_core-1.20.1a1.dist-info/RECORD +0 -114
  80. {dara_core-1.20.1a1.dist-info → dara_core-1.20.1a2.dist-info}/LICENSE +0 -0
  81. {dara_core-1.20.1a1.dist-info → dara_core-1.20.1a2.dist-info}/WHEEL +0 -0
  82. {dara_core-1.20.1a1.dist-info → dara_core-1.20.1a2.dist-info}/entry_points.txt +0 -0
@@ -16,11 +16,11 @@ limitations under the License.
16
16
  """
17
17
 
18
18
  from inspect import isclass
19
- from typing import Optional # needed for model_rebuild
19
+ from typing import Optional # needed for model_rebuild # noqa: F401
20
20
 
21
21
  from pydantic import BaseModel
22
22
 
23
- from dara.core.interactivity import Variable # needed for model_rebuild
23
+ from dara.core.interactivity import Variable # needed for model_rebuild # noqa: F401
24
24
  from dara.core.visual.components.dynamic_component import (
25
25
  DynamicComponent,
26
26
  DynamicComponentDef,
@@ -15,12 +15,13 @@ See the License for the specific language governing permissions and
15
15
  limitations under the License.
16
16
  """
17
17
 
18
- from typing import ClassVar
18
+ from typing import ClassVar, Optional, Union # noqa: F401
19
19
 
20
- from dara.core.definitions import BaseFallback, JsComponentDef
20
+ from dara.core.definitions import BaseFallback, ComponentInstance, JsComponentDef, StyledComponentInstance # noqa: F401
21
21
 
22
22
  DefaultFallbackDef = JsComponentDef(name='DefaultFallback', js_module='@darajs/core', py_module='dara.core')
23
23
  RowFallbackDef = JsComponentDef(name='RowFallback', js_module='@darajs/core', py_module='dara.core')
24
+ CustomFallbackDef = JsComponentDef(name='CustomFallback', js_module='@darajs/core', py_module='dara.core')
24
25
 
25
26
 
26
27
  class Fallback:
@@ -47,7 +48,7 @@ class Fallback:
47
48
  but will suspend and show a fallback UI after the given timeout if the new state is not ready.
48
49
  """
49
50
 
50
- py_component: ClassVar[str] = 'DefaultFallback'
51
+ py_component: ClassVar[Union[str, None]] = 'DefaultFallback'
51
52
 
52
53
  class Row(BaseFallback):
53
54
  """
@@ -72,4 +73,29 @@ class Fallback:
72
73
  but will suspend and show a fallback UI after the given timeout if the new state is not ready.
73
74
  """
74
75
 
75
- py_component: ClassVar[str] = 'RowFallback'
76
+ py_component: ClassVar[Union[str, None]] = 'RowFallback'
77
+
78
+ class Custom(BaseFallback):
79
+ """
80
+ Custom placeholder for a row of content.
81
+ Accepts any other Dara component in `component` prop.
82
+
83
+ :param component: The component to render in place of the actual UI if it has not finished loading.
84
+ :param suspend_render: bool or int, optional
85
+
86
+ Determines the suspense behavior of the component during state updates.
87
+
88
+ - If True, the component will always use suspense during state updates.
89
+ This means the component will suspend rendering and show a fallback UI until the new state is ready.
90
+
91
+ - If False, the component will always show the previous state while loading the new state.
92
+ This means the component will never suspend during state updates. The fallback UI will only
93
+ be shown on the first render.
94
+
95
+ - If a positive integer (default is 200), this denotes the threshold in milliseconds.
96
+ The component will show the previous state while loading the new state,
97
+ but will suspend and show a fallback UI after the given timeout if the new state is not ready.
98
+ """
99
+
100
+ py_component: ClassVar[Union[str, None]] = 'CustomFallback'
101
+ component: StyledComponentInstance
@@ -39,7 +39,8 @@ class For(ComponentInstance):
39
39
  # Renders a list of Text component where each item is the corresponding item in the list
40
40
  For(
41
41
  items=my_list,
42
- renderer=Text(text=my_list.list_item)
42
+ renderer=Text(text=my_list.list_item),
43
+ placeholder=Text('No items') # fallback component to render if the data source is empty
43
44
  )
44
45
  ```
45
46
 
@@ -139,6 +140,7 @@ class For(ComponentInstance):
139
140
 
140
141
  :param items: The data source to render the template component for.
141
142
  :param renderer: The template component to render for each item in the data source.
143
+ :param placeholder: The component to render if the data source is empty, i.e. there are no items.
142
144
  :param key_accessor: The key accessor to use for the data source. If not provided, the key will be the index of the item in the data source.
143
145
  Can be a dotted path to access a nested path in the list item.
144
146
  :param virtualization: The virtualization configuration for the component. If provided, the component will be virtualized.
@@ -146,5 +148,6 @@ class For(ComponentInstance):
146
148
 
147
149
  items: AnyVariable
148
150
  renderer: ComponentInstance
151
+ placeholder: Optional[ComponentInstance] = None
149
152
  key_accessor: Optional[str] = None
150
153
  virtualization: Optional[VirtualizationConfig] = None
@@ -18,7 +18,6 @@ limitations under the License.
18
18
  # generated by datamodel-codegen:
19
19
  # filename: css-schema.json
20
20
  # timestamp: 2022-07-07T11:51:57+00:00
21
- # pylint: disable=line-too-long
22
21
 
23
22
  from __future__ import annotations
24
23
 
@@ -383,11 +382,11 @@ class CSSProperties(DaraBaseModel):
383
382
  default=None,
384
383
  description='The **`animation-name`** CSS property specifies the names of one or more `@keyframes` at-rules describing the animation or animations to apply to the element.\n\n**Syntax**: `[ none | <keyframes-name> ]#`\n\n**Initial value**: `none`\n\n| Chrome | Firefox | Safari | Edge | IE |\n| :-----: | :-----: | :-----: | :----: | :----: |\n| **43** | **16** | **9** | **12** | **10** |\n| 3 _-x-_ | 5 _-x-_ | 4 _-x-_ | | |',
385
384
  )
386
- animationPlayState: Literal[
387
- '-moz-initial', 'inherit', 'initial', 'paused', 'revert', 'running', 'unset', None
388
- ] = Field(
389
- default=None,
390
- description='The **`animation-play-state`** CSS property sets whether an animation is running or paused.\n\n**Syntax**: `<single-animation-play-state>#`\n\n**Initial value**: `running`\n\n| Chrome | Firefox | Safari | Edge | IE |\n| :-----: | :-----: | :-----: | :----: | :----: |\n| **43** | **16** | **9** | **12** | **10** |\n| 3 _-x-_ | 5 _-x-_ | 4 _-x-_ | | |',
385
+ animationPlayState: Literal['-moz-initial', 'inherit', 'initial', 'paused', 'revert', 'running', 'unset', None] = (
386
+ Field(
387
+ default=None,
388
+ description='The **`animation-play-state`** CSS property sets whether an animation is running or paused.\n\n**Syntax**: `<single-animation-play-state>#`\n\n**Initial value**: `running`\n\n| Chrome | Firefox | Safari | Edge | IE |\n| :-----: | :-----: | :-----: | :----: | :----: |\n| **43** | **16** | **9** | **12** | **10** |\n| 3 _-x-_ | 5 _-x-_ | 4 _-x-_ | | |',
389
+ )
391
390
  )
392
391
  animationTimingFunction: Literal[
393
392
  '-moz-initial',
@@ -3507,11 +3506,11 @@ class CSSProperties(DaraBaseModel):
3507
3506
  )
3508
3507
  colorInterpolation: Optional[Property.ColorInterpolation] = None
3509
3508
  colorRendering: Optional[Property.ColorRendering] = None
3510
- colorScheme: Literal[
3511
- '-moz-initial', 'dark', 'inherit', 'initial', 'light', 'normal', 'revert', 'unset', None
3512
- ] = Field(
3513
- default=None,
3514
- description='The **`color-scheme`** CSS property allows an element to indicate which color schemes it can comfortably be rendered in.\n\n**Syntax**: `normal | [ light | dark | <custom-ident> ]+`\n\n**Initial value**: `normal`\n\n| Chrome | Firefox | Safari | Edge | IE |\n| :----: | :-----: | :----: | :----: | :-: |\n| **81** | No | **13** | **81** | No |',
3509
+ colorScheme: Literal['-moz-initial', 'dark', 'inherit', 'initial', 'light', 'normal', 'revert', 'unset', None] = (
3510
+ Field(
3511
+ default=None,
3512
+ description='The **`color-scheme`** CSS property allows an element to indicate which color schemes it can comfortably be rendered in.\n\n**Syntax**: `normal | [ light | dark | <custom-ident> ]+`\n\n**Initial value**: `normal`\n\n| Chrome | Firefox | Safari | Edge | IE |\n| :----: | :-----: | :----: | :----: | :-: |\n| **81** | No | **13** | **81** | No |',
3513
+ )
3515
3514
  )
3516
3515
  columnCount: Literal['-moz-initial', 'auto', 'inherit', 'initial', 'revert', 'unset', None] = Field(
3517
3516
  default=None,
@@ -4422,11 +4421,11 @@ class CSSProperties(DaraBaseModel):
4422
4421
  default=None,
4423
4422
  description='The **`font-stretch`** CSS property selects a normal, condensed, or expanded face from a font.\n\n**Syntax**: `<font-stretch-absolute>`\n\n**Initial value**: `normal`\n\n| Chrome | Firefox | Safari | Edge | IE |\n| :----: | :-----: | :----: | :----: | :---: |\n| **60** | **9** | **11** | **12** | **9** |',
4424
4423
  )
4425
- fontStyle: Literal[
4426
- '-moz-initial', 'inherit', 'initial', 'italic', 'normal', 'oblique', 'revert', 'unset', None
4427
- ] = Field(
4428
- default=None,
4429
- description='The **`font-style`** CSS property sets whether a font should be styled with a normal, italic, or oblique face from its `font-family`.\n\n**Syntax**: `normal | italic | oblique <angle>?`\n\n**Initial value**: `normal`\n\n| Chrome | Firefox | Safari | Edge | IE |\n| :----: | :-----: | :----: | :----: | :---: |\n| **1** | **1** | **1** | **12** | **4** |',
4424
+ fontStyle: Literal['-moz-initial', 'inherit', 'initial', 'italic', 'normal', 'oblique', 'revert', 'unset', None] = (
4425
+ Field(
4426
+ default=None,
4427
+ description='The **`font-style`** CSS property sets whether a font should be styled with a normal, italic, or oblique face from its `font-family`.\n\n**Syntax**: `normal | italic | oblique <angle>?`\n\n**Initial value**: `normal`\n\n| Chrome | Firefox | Safari | Edge | IE |\n| :----: | :-----: | :----: | :----: | :---: |\n| **1** | **1** | **1** | **12** | **4** |',
4428
+ )
4430
4429
  )
4431
4430
  fontSynthesis: Literal[
4432
4431
  '-moz-initial', 'inherit', 'initial', 'none', 'revert', 'small-caps', 'style', 'unset', 'weight', None
@@ -4586,11 +4585,11 @@ class CSSProperties(DaraBaseModel):
4586
4585
  default=None,
4587
4586
  description='The **`grid-auto-columns`** CSS property specifies the size of an implicitly-created grid column track or pattern of tracks.\n\n**Syntax**: `<track-size>+`\n\n**Initial value**: `auto`\n\n| Chrome | Firefox | Safari | Edge | IE |\n| :----: | :-----: | :------: | :----: | :-------------------------: |\n| **57** | **70** | **10.1** | **16** | **10** _(-ms-grid-columns)_ |',
4588
4587
  )
4589
- gridAutoFlow: Literal[
4590
- '-moz-initial', 'column', 'dense', 'inherit', 'initial', 'revert', 'row', 'unset', None
4591
- ] = Field(
4592
- default=None,
4593
- description='The **`grid-auto-flow`** CSS property controls how the auto-placement algorithm works, specifying exactly how auto-placed items get flowed into the grid.\n\n**Syntax**: `[ row | column ] || dense`\n\n**Initial value**: `row`\n\n| Chrome | Firefox | Safari | Edge | IE |\n| :----: | :-----: | :------: | :----: | :-: |\n| **57** | **52** | **10.1** | **16** | No |',
4588
+ gridAutoFlow: Literal['-moz-initial', 'column', 'dense', 'inherit', 'initial', 'revert', 'row', 'unset', None] = (
4589
+ Field(
4590
+ default=None,
4591
+ description='The **`grid-auto-flow`** CSS property controls how the auto-placement algorithm works, specifying exactly how auto-placed items get flowed into the grid.\n\n**Syntax**: `[ row | column ] || dense`\n\n**Initial value**: `row`\n\n| Chrome | Firefox | Safari | Edge | IE |\n| :----: | :-----: | :------: | :----: | :-: |\n| **57** | **52** | **10.1** | **16** | No |',
4592
+ )
4594
4593
  )
4595
4594
  gridAutoRows: Optional[Union[float_, str]] = Field(
4596
4595
  default=None,
@@ -4662,11 +4661,11 @@ class CSSProperties(DaraBaseModel):
4662
4661
  default=None,
4663
4662
  description='The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. It can prevent hyphenation entirely, hyphenate at manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.\n\n**Syntax**: `none | manual | auto`\n\n**Initial value**: `manual`\n\n| Chrome | Firefox | Safari | Edge | IE |\n| :------: | :-----: | :-----------: | :----: | :----------: |\n| **55** | **43** | **5.1** _-x-_ | **79** | **10** _-x-_ |\n| 13 _-x-_ | 6 _-x-_ | | | |',
4664
4663
  )
4665
- imageOrientation: Literal[
4666
- '-moz-initial', 'flip', 'from-image', 'inherit', 'initial', 'revert', 'unset', None
4667
- ] = Field(
4668
- default=None,
4669
- description='The **`image-orientation`** CSS property specifies a layout-independent correction to the orientation of an image. It should _not_ be used for any other orientation adjustments; instead, the `transform` property should be used with the `rotate` `<transform-function>`.\n\n**Syntax**: `from-image | <angle> | [ <angle>? flip ]`\n\n**Initial value**: `from-image`\n\n| Chrome | Firefox | Safari | Edge | IE |\n| :----: | :-----: | :------: | :----: | :-: |\n| **81** | **26** | **13.1** | **81** | No |',
4664
+ imageOrientation: Literal['-moz-initial', 'flip', 'from-image', 'inherit', 'initial', 'revert', 'unset', None] = (
4665
+ Field(
4666
+ default=None,
4667
+ description='The **`image-orientation`** CSS property specifies a layout-independent correction to the orientation of an image. It should _not_ be used for any other orientation adjustments; instead, the `transform` property should be used with the `rotate` `<transform-function>`.\n\n**Syntax**: `from-image | <angle> | [ <angle>? flip ]`\n\n**Initial value**: `from-image`\n\n| Chrome | Firefox | Safari | Edge | IE |\n| :----: | :-----: | :------: | :----: | :-: |\n| **81** | **26** | **13.1** | **81** | No |',
4668
+ )
4670
4669
  )
4671
4670
  imageRendering: Optional[Property.ImageRendering] = Field(
4672
4671
  default=None,
@@ -5024,11 +5023,11 @@ class CSSProperties(DaraBaseModel):
5024
5023
  default=None,
5025
5024
  description='The **`line-height-step`** CSS property sets the step unit for line box heights. When the property is set, line box heights are rounded up to the closest multiple of the unit.\n\n**Syntax**: `<length>`\n\n**Initial value**: `0`\n\n| Chrome | Firefox | Safari | Edge | IE |\n| :----: | :-----: | :----: | :--: | :-: |\n| n/a | No | No | n/a | No |',
5026
5025
  )
5027
- listStyle: Literal[
5028
- '-moz-initial', 'inherit', 'initial', 'inside', 'none', 'outside', 'revert', 'unset', None
5029
- ] = Field(
5030
- default=None,
5031
- description="The **`list-style`** CSS shorthand property allows you set all the list style properties at once.\n\n**Syntax**: `<'list-style-type'> || <'list-style-position'> || <'list-style-image'>`\n\n| Chrome | Firefox | Safari | Edge | IE |\n| :----: | :-----: | :----: | :----: | :---: |\n| **1** | **1** | **1** | **12** | **4** |",
5026
+ listStyle: Literal['-moz-initial', 'inherit', 'initial', 'inside', 'none', 'outside', 'revert', 'unset', None] = (
5027
+ Field(
5028
+ default=None,
5029
+ description="The **`list-style`** CSS shorthand property allows you set all the list style properties at once.\n\n**Syntax**: `<'list-style-type'> || <'list-style-position'> || <'list-style-image'>`\n\n| Chrome | Firefox | Safari | Edge | IE |\n| :----: | :-----: | :----: | :----: | :---: |\n| **1** | **1** | **1** | **12** | **4** |",
5030
+ )
5032
5031
  )
5033
5032
  listStyleImage: Literal['-moz-initial', 'inherit', 'initial', 'none', 'revert', 'unset', None] = Field(
5034
5033
  default=None,
@@ -14,8 +14,12 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
14
  See the License for the specific language governing permissions and
15
15
  limitations under the License.
16
16
  """
17
+
18
+ import contextlib
17
19
  import json
18
20
  import uuid
21
+ from collections import OrderedDict
22
+ from collections.abc import Mapping
19
23
  from contextvars import ContextVar
20
24
  from functools import wraps
21
25
  from inspect import Parameter, Signature, isclass, signature
@@ -24,24 +28,18 @@ from typing import (
24
28
  Callable,
25
29
  ClassVar,
26
30
  Dict,
27
- Mapping,
28
31
  Optional,
29
- OrderedDict,
30
32
  Union,
31
33
  overload,
32
34
  )
33
35
 
36
+ import anyio
34
37
  from fastapi.encoders import jsonable_encoder
35
38
 
36
39
  from dara.core.base_definitions import BaseTask
37
40
  from dara.core.definitions import BaseFallback, ComponentInstance, PyComponentDef
38
- from dara.core.interactivity import (
39
- AnyDataVariable,
40
- AnyVariable,
41
- DerivedVariable,
42
- UrlVariable,
43
- Variable,
44
- )
41
+ from dara.core.interactivity import AnyVariable
42
+ from dara.core.interactivity.state_variable import StateVariable
45
43
  from dara.core.internal.cache_store import CacheStore
46
44
  from dara.core.internal.dependency_resolution import resolve_dependency
47
45
  from dara.core.internal.encoder_registry import deserialize
@@ -63,8 +61,7 @@ class PyComponentInstance(ComponentInstance):
63
61
 
64
62
  # sync/async simple
65
63
  @overload
66
- def py_component(function: Callable) -> Callable[..., PyComponentInstance]:
67
- ...
64
+ def py_component(function: Callable) -> Callable[..., PyComponentInstance]: ...
68
65
 
69
66
 
70
67
  # sync/async with args
@@ -72,19 +69,18 @@ def py_component(function: Callable) -> Callable[..., PyComponentInstance]:
72
69
  def py_component(
73
70
  function: None = None,
74
71
  *,
75
- placeholder: Optional[BaseFallback] = None,
76
- fallback: Optional[BaseFallback] = None,
72
+ placeholder: Optional[Union[BaseFallback, ComponentInstance]] = None,
73
+ fallback: Optional[Union[BaseFallback, ComponentInstance]] = None,
77
74
  track_progress: Optional[bool] = False,
78
75
  polling_interval: Optional[int] = None,
79
- ) -> Callable[[Callable], Callable[..., PyComponentInstance]]:
80
- ...
76
+ ) -> Callable[[Callable], Callable[..., PyComponentInstance]]: ...
81
77
 
82
78
 
83
79
  def py_component(
84
80
  function: Optional[Callable] = None,
85
81
  *,
86
- placeholder: Optional[BaseFallback] = None,
87
- fallback: Optional[BaseFallback] = None,
82
+ placeholder: Optional[Union[BaseFallback, ComponentInstance]] = None,
83
+ fallback: Optional[Union[BaseFallback, ComponentInstance]] = None,
88
84
  track_progress: Optional[bool] = False,
89
85
  polling_interval: Optional[int] = None,
90
86
  ) -> Union[Callable[..., PyComponentInstance], Callable[[Callable], Callable[..., PyComponentInstance]]]:
@@ -160,10 +156,9 @@ def py_component(
160
156
  for key, value in all_kwargs.items():
161
157
  if key in func.__annotations__:
162
158
  valid_value = True
163
- try:
159
+ # The type is either not set or something tricky to verify, e.g. union
160
+ with contextlib.suppress(Exception):
164
161
  valid_value = isinstance(value, (func.__annotations__[key], AnyVariable))
165
- except Exception:
166
- pass # The type is either not set or something tricky to verify, e.g. union
167
162
  if not valid_value:
168
163
  raise TypeError(
169
164
  f'Argument: {key} was passed as a {type(value)}, but it should be '
@@ -174,6 +169,12 @@ def py_component(
174
169
  dynamic_kwargs: Dict[str, AnyVariable] = {}
175
170
  static_kwargs: Dict[str, Any] = {}
176
171
  for key, kwarg in all_kwargs.items():
172
+ if isinstance(kwarg, StateVariable):
173
+ raise ValueError(
174
+ 'StateVariable cannot be used as input to py_component. '
175
+ 'StateVariables are internal variables for tracking DerivedVariable client state and using them as inputs would create complex dependencies that are '
176
+ 'difficult to debug. Consider using the StateVariable with an If component or SwitchVariable.'
177
+ )
177
178
  if isinstance(kwarg, AnyVariable):
178
179
  dynamic_kwargs[key] = kwarg
179
180
  else:
@@ -200,9 +201,7 @@ def py_component(
200
201
  params = OrderedDict()
201
202
  for var_name, typ in func.__annotations__.items():
202
203
  if isclass(typ):
203
- new_type = Union[
204
- typ, Variable[typ], DerivedVariable[typ], UrlVariable[typ], AnyDataVariable # type: ignore
205
- ]
204
+ new_type = Union[typ, AnyVariable]
206
205
  if old_signature.parameters.get(var_name) is not None:
207
206
  params[var_name] = old_signature.parameters[var_name].replace(annotation=new_type)
208
207
  new_annotations[var_name] = new_type
@@ -210,8 +209,8 @@ def py_component(
210
209
  _inner_func.__signature__ = Signature( # type: ignore
211
210
  parameters=list(params.values()), return_annotation=old_signature.return_annotation
212
211
  )
213
- _inner_func.__wrapped_by__ = py_component # type: ignore
214
- return _inner_func # type: ignore
212
+ _inner_func.__wrapped_by__ = py_component # type: ignore
213
+ return _inner_func # type: ignore
215
214
 
216
215
  # If decorator is called with no optional argument then the function is passed as first argument
217
216
  if function:
@@ -251,12 +250,15 @@ async def render_component(
251
250
  annotations = definition.func.__annotations__
252
251
  resolved_dyn_kwargs = {}
253
252
 
254
- for key, value in values.items():
255
- val = await resolve_dependency(value, store, task_mgr)
253
+ async def _resolve_kwarg(val: Any, key: str):
254
+ val = await resolve_dependency(val, store, task_mgr)
256
255
  typ = annotations.get(key)
257
-
258
256
  resolved_dyn_kwargs[key] = deserialize(val, typ)
259
257
 
258
+ async with anyio.create_task_group() as tg:
259
+ for key, value in values.items():
260
+ tg.start_soon(_resolve_kwarg, value, key)
261
+
260
262
  # Merge resolved dynamic kwargs with static kwargs received
261
263
  resolved_kwargs = {**resolved_dyn_kwargs, **static_kwargs}
262
264
 
@@ -290,6 +292,7 @@ async def render_component(
290
292
  eng_logger.info(
291
293
  f'PyComponent {definition.func.__name__} returning task', {'uid': definition.name, 'task_id': task}
292
294
  )
295
+ task_mgr.register_task(task)
293
296
 
294
297
  return task
295
298
 
@@ -16,9 +16,10 @@ limitations under the License.
16
16
  """
17
17
 
18
18
  import inspect
19
+ from collections import OrderedDict
19
20
  from functools import wraps
20
21
  from inspect import Signature, signature
21
- from typing import Callable, OrderedDict
22
+ from typing import Callable
22
23
 
23
24
 
24
25
  class ProgressUpdater:
@@ -145,13 +146,13 @@ def track_progress(func=None):
145
146
 
146
147
  _inner_func = _sync_inner_func
147
148
 
148
- _inner_func.__signature__ = Signature(
149
+ _inner_func.__signature__ = Signature( # type: ignore
149
150
  parameters=list(params.values()),
150
151
  return_annotation=old_signature.return_annotation,
151
152
  )
152
153
 
153
154
  # Store metadata on the wrapped function - keep a reference to the function wrapped and the decorator itself
154
155
  _inner_func.__wrapped__ = func
155
- _inner_func.__wrapped_by__ = track_progress
156
+ _inner_func.__wrapped_by__ = track_progress # type: ignore
156
157
 
157
158
  return _inner_func
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dara-core
3
- Version: 1.20.1a1
3
+ Version: 1.20.1a2
4
4
  Summary: Dara Framework Core
5
5
  Home-page: https://dara.causalens.com/
6
6
  License: Apache-2.0
@@ -17,13 +17,14 @@ Provides-Extra: all
17
17
  Requires-Dist: aiorwlock (>=1.4.0,<2.0.0)
18
18
  Requires-Dist: anyio (>=4.0.0)
19
19
  Requires-Dist: async-asgi-testclient (>=1.4.11,<2.0.0)
20
+ Requires-Dist: cachetools (>=5.0.0,<6.0.0)
20
21
  Requires-Dist: certifi (>=2024.7.4)
21
22
  Requires-Dist: click (==8.1.3)
22
23
  Requires-Dist: colorama (>=0.4.6,<0.5.0)
23
- Requires-Dist: create-dara-app (==1.20.1-alpha.1)
24
+ Requires-Dist: create-dara-app (==1.20.1-alpha.2)
24
25
  Requires-Dist: croniter (>=1.0.15,<3.0.0)
25
26
  Requires-Dist: cryptography (>=42.0.4)
26
- Requires-Dist: dara-components (==1.20.1-alpha.1) ; extra == "all"
27
+ Requires-Dist: dara-components (==1.20.1-alpha.2) ; extra == "all"
27
28
  Requires-Dist: exceptiongroup (>=1.1.3,<2.0.0)
28
29
  Requires-Dist: fastapi (>=0.115.0,<0.116.0)
29
30
  Requires-Dist: fastapi_vite_dara (==0.4.0)
@@ -33,7 +34,7 @@ Requires-Dist: jinja2 (>=2.1.1,<3.2.0)
33
34
  Requires-Dist: jsonpatch (>=1.33)
34
35
  Requires-Dist: odfpy
35
36
  Requires-Dist: openpyxl
36
- Requires-Dist: packaging (>=23.1,<24.0)
37
+ Requires-Dist: packaging (>=23.1)
37
38
  Requires-Dist: pandas (>=1.1.0,<3.0.0)
38
39
  Requires-Dist: prometheus-client (>=0.14.1,<0.15.0)
39
40
  Requires-Dist: pyarrow
@@ -54,7 +55,7 @@ Description-Content-Type: text/markdown
54
55
 
55
56
  # Dara Application Framework
56
57
 
57
- <img src="https://github.com/causalens/dara/blob/v1.20.1-alpha.1/img/dara_light.svg?raw=true">
58
+ <img src="https://github.com/causalens/dara/blob/v1.20.1-alpha.2/img/dara_light.svg?raw=true">
58
59
 
59
60
  ![Master tests](https://github.com/causalens/dara/actions/workflows/tests.yml/badge.svg?branch=master)
60
61
  [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)
@@ -99,7 +100,7 @@ source .venv/bin/activate
99
100
  dara start
100
101
  ```
101
102
 
102
- ![Dara App](https://github.com/causalens/dara/blob/v1.20.1-alpha.1/img/components_gallery.png?raw=true)
103
+ ![Dara App](https://github.com/causalens/dara/blob/v1.20.1-alpha.2/img/components_gallery.png?raw=true)
103
104
 
104
105
  Note: `pip` installation uses [PEP 660](https://peps.python.org/pep-0660/) `pyproject.toml`-based editable installs which require `pip >= 21.3` and `setuptools >= 64.0.0`. You can upgrade both with:
105
106
 
@@ -116,9 +117,9 @@ Explore some of our favorite apps - a great way of getting started and getting t
116
117
 
117
118
  | Dara App | Description |
118
119
  | -------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
119
- | ![Large Language Model](https://github.com/causalens/dara/blob/v1.20.1-alpha.1/img/llm.png?raw=true) | Demonstrates how to use incorporate a LLM chat box into your decision app to understand model insights |
120
- | ![Plot Interactivity](https://github.com/causalens/dara/blob/v1.20.1-alpha.1/img/plot_interactivity.png?raw=true) | Demonstrates how to enable the user to interact with plots, trigger actions based on clicks, mouse movements and other interactions with `Bokeh` or `Plotly` plots |
121
- | ![Graph Editor](https://github.com/causalens/dara/blob/v1.20.1-alpha.1/img/graph_viewer.png?raw=true) | Demonstrates how to use the `CausalGraphViewer` component to display your graphs or networks, customising the displayed information through colors and tooltips, and updating the page based on user interaction. |
120
+ | ![Large Language Model](https://github.com/causalens/dara/blob/v1.20.1-alpha.2/img/llm.png?raw=true) | Demonstrates how to use incorporate a LLM chat box into your decision app to understand model insights |
121
+ | ![Plot Interactivity](https://github.com/causalens/dara/blob/v1.20.1-alpha.2/img/plot_interactivity.png?raw=true) | Demonstrates how to enable the user to interact with plots, trigger actions based on clicks, mouse movements and other interactions with `Bokeh` or `Plotly` plots |
122
+ | ![Graph Editor](https://github.com/causalens/dara/blob/v1.20.1-alpha.2/img/graph_viewer.png?raw=true) | Demonstrates how to use the `CausalGraphViewer` component to display your graphs or networks, customising the displayed information through colors and tooltips, and updating the page based on user interaction. |
122
123
 
123
124
  Check out our [App Gallery](https://dara.causalens.com/gallery) for more inspiration!
124
125
 
@@ -145,9 +146,9 @@ And the supporting UI packages and tools.
145
146
  - `ui-utils` - miscellaneous utility functions
146
147
  - `ui-widgets` - widget components
147
148
 
148
- More information on the repository structure can be found in the [CONTRIBUTING.md](https://github.com/causalens/dara/blob/v1.20.1-alpha.1/CONTRIBUTING.md) file.
149
+ More information on the repository structure can be found in the [CONTRIBUTING.md](https://github.com/causalens/dara/blob/v1.20.1-alpha.2/CONTRIBUTING.md) file.
149
150
 
150
151
  ## License
151
152
 
152
- Dara is open-source and licensed under the [Apache 2.0 License](https://github.com/causalens/dara/blob/v1.20.1-alpha.1/LICENSE).
153
+ Dara is open-source and licensed under the [Apache 2.0 License](https://github.com/causalens/dara/blob/v1.20.1-alpha.2/LICENSE).
153
154
 
@@ -0,0 +1,119 @@
1
+ dara/core/__init__.py,sha256=wcVLfKdziyk6yH50o55A4kAsaJIBoIMGd9RR4igTttw,2159
2
+ dara/core/actions.py,sha256=rC5Tu79AFNWMv0CJuchBnoy6pETIFh_1RTSqxrolArI,947
3
+ dara/core/auth/__init__.py,sha256=H0bJoXff5wIRZmHvvQ3y9p5SXA9lM8OuLCGceYGqfb0,851
4
+ dara/core/auth/base.py,sha256=qxmiIzx-n2g4ZWicgxsYtHjiB14AemOWM_GNxcr98mE,3294
5
+ dara/core/auth/basic.py,sha256=8ebWpHx53ObkuzTHIKSRdtsmKq0R5v8RuQXhZcnpTsA,4933
6
+ dara/core/auth/definitions.py,sha256=wTsFWzX7bGHTU_vxGW50pqcmB_AmhETIIUdGB5UrMBU,3467
7
+ dara/core/auth/routes.py,sha256=0o5KXApRbkL0F5qFsarQk_cq5lbQ3QfIHR_mwLRgBEY,7217
8
+ dara/core/auth/utils.py,sha256=iEWP5qwfH17Mi-5t3sP-DNMUrWN0oSRk96NhieY2Zw4,7334
9
+ dara/core/base_definitions.py,sha256=ptc6OSx-qElWWSuZB4-06kWmnj6hekpKR47eeB36igQ,16915
10
+ dara/core/cli.py,sha256=V__LAK3ozWGsVTEQHqvJwqSfpC3o6R76YGABJ-YVoSE,8185
11
+ dara/core/configuration.py,sha256=gi5AmdxyRSgegcNKFtnHshsMRz8fznswt60JlNZp-3s,22374
12
+ dara/core/css.py,sha256=UkNZ6n7RDBLsHmpZvn_a3K2nAwxVggQJbQMKNbgXONA,1753
13
+ dara/core/data_utils.py,sha256=RD5_GdyGyGr1LVThCo8mpuOMWrd9_c1iyRqjuyoarXM,12578
14
+ dara/core/defaults.py,sha256=Sa7ZU4QvPndaJm-oXrVn9gRfkdUgFtsX8RkSRhf16JQ,4306
15
+ dara/core/definitions.py,sha256=ykxPR4qYXafzsDxN4j3AN-pScSm-1Tx3SS3OWdFJ_k8,18839
16
+ dara/core/http.py,sha256=-OzbCHlYSnfVnw2492C_UmaWOI5oSONfWk03eEGxSRI,4761
17
+ dara/core/interactivity/__init__.py,sha256=ZppwTvxaCsaAdf0qX6j1qTcmbj6wxVcbiaMZfwTVKtU,2679
18
+ dara/core/interactivity/actions.py,sha256=1emp5K18R1DK1b8R_j_8wVrVlNdRlHe7D3mVOTfwb_o,48188
19
+ dara/core/interactivity/any_data_variable.py,sha256=GhT6lzCDRlQtYG2gNNUHq4th7K3RacqDfkjaq7o4mCc,317
20
+ dara/core/interactivity/any_variable.py,sha256=b6aMOZZc9Q4IFPPjuIbFgqYdw52-6QRsxNRj5ohZeL0,13648
21
+ dara/core/interactivity/client_variable.py,sha256=bFc4gmKKVfAvZHmv5Y2ME1VMTxSM_v_0lcmyRNTLOKk,2320
22
+ dara/core/interactivity/condition.py,sha256=69tdxgLqNbU-AlwHTWFdp-hvxGDugNnb_McDrz0mDtE,1575
23
+ dara/core/interactivity/data_variable.py,sha256=cJ7ssuNotvbK01MJFPYJ_0zBAC4PAIOERIVR948G0Dk,2535
24
+ dara/core/interactivity/derived_data_variable.py,sha256=N2cNcFmHxmNixJ_sfF_VGqYrzEA4b90aNL0RUmuMpRA,3696
25
+ dara/core/interactivity/derived_variable.py,sha256=RTessKdELHfKK-ApC4KfhUS8neMADctCE0WXJirqHa4,32393
26
+ dara/core/interactivity/filtering.py,sha256=rXv9ye_HqYFdZCDJ5x22AKSS_gIXB-zJDxxi4FuqAvo,9752
27
+ dara/core/interactivity/loop_variable.py,sha256=eiw9AVYzE7-qkBtww0qxYAGtG5SknKs_MMd6GD1gi8M,2994
28
+ dara/core/interactivity/non_data_variable.py,sha256=I-Nm5nEbt06X62xiUeAZsiutH-nPTY0iGJDurzbQB3M,189
29
+ dara/core/interactivity/plain_variable.py,sha256=MlfQpmI1HBrKI3xOI_BDlvrdXpoTKdqj4sQ0kZOqlr0,12603
30
+ dara/core/interactivity/server_variable.py,sha256=jtE0BqfNXz9W4BaWuaP29hqNRW_LZpYPROV2Xv-JL1E,11223
31
+ dara/core/interactivity/state_variable.py,sha256=1sSQjjjwedR9_IVPIk9h39ywR4hklYoTUMPy3FA6TVU,2487
32
+ dara/core/interactivity/switch_variable.py,sha256=RTFVeB5joWh7-zjx-miP0OjYmDW8GbgkWZHLUsMasiY,14177
33
+ dara/core/interactivity/tabular_variable.py,sha256=aw9wIzhkoWA-YyAfNWTZPmW0OAa-4yOb_dN55jrhu9w,3366
34
+ dara/core/interactivity/url_variable.py,sha256=iJ78QC2J_fCJ1K_hjksMwyzGBHOywBLAHBWdw-PYL1I,2301
35
+ dara/core/internal/__init__.py,sha256=QN0wbG9HPQ_vXh8BO8DnBXeYLIENVTNtRmYzZf1lx7c,577
36
+ dara/core/internal/cache_store/__init__.py,sha256=7JCmQwNIMzfyLZGnsk0BbT1EdDFO_PRZz86E9ATcC6c,139
37
+ dara/core/internal/cache_store/base_impl.py,sha256=LsUht9zS6lU8i6FO8JPTNNQTvMHH0PbFxxW_WjPZ_o4,1367
38
+ dara/core/internal/cache_store/cache_store.py,sha256=MtaPHDMKnN_4O9axU4CO2Q-SmzqpHbDQxVxWGNFhqRc,8617
39
+ dara/core/internal/cache_store/keep_all.py,sha256=gzxDozXTpDInGySQLKB-1BrUsXYsQgzOKoujmwKxbDM,2469
40
+ dara/core/internal/cache_store/lru.py,sha256=YRzmBIG5l5a5_MZxMoa3ajLImmKhA0I8IdCNBsMIV5A,5366
41
+ dara/core/internal/cache_store/ttl.py,sha256=m2w6ElfKemD6uysLyZAfXytnstUdI8oJP8Up4GuWCQY,4985
42
+ dara/core/internal/cgroup.py,sha256=yKCTY8RxyxnNy-Mw4tfzeZew1dL8qw381gHBVE96-OA,3217
43
+ dara/core/internal/custom_response.py,sha256=aSPonh8AdRjioTk1MaPwdaJHkO4R4aG_osGAGCIHbtg,1341
44
+ dara/core/internal/dependency_resolution.py,sha256=7_M1Mrhdb17wuuOHnbKjnCu1a0okAr904HkBiQxo0I8,10326
45
+ dara/core/internal/devtools.py,sha256=kzbmkDd-PHc2epCQ6D-bTm7G_2algxDOiyhzJWK0QlI,2620
46
+ dara/core/internal/download.py,sha256=_AciKp4ZsJxq60LRnvhLsA7KNWMDAXRbSKpin8-vBmU,3589
47
+ dara/core/internal/encoder_registry.py,sha256=KTYBLIGHpJDOLzCp_9899D7EIISK0zxCKbn4Gktllxk,11200
48
+ dara/core/internal/execute_action.py,sha256=luO5mTFj5Pl5H1Pxtsw5qNBnb64kL5fKBLad5tpzT6Q,7018
49
+ dara/core/internal/hashing.py,sha256=Iz3FyiroHc_bC8AEtSUFFAIHh6j4Bq_EvxLqInIkAUM,1124
50
+ dara/core/internal/import_discovery.py,sha256=oyBZayWhfZma4bg-8bamnS4QO1Oba9geGtez_BHut38,8128
51
+ dara/core/internal/multi_resource_lock.py,sha256=mUoc6KKk8mpLGCXfa6nFd60yNuas4b6wsAk8VrvGDxI,2496
52
+ dara/core/internal/normalization.py,sha256=N7NNzrOCIuCHqFBxZ3s5kKBeP57_949FzI-B6onTLAo,6071
53
+ dara/core/internal/pandas_utils.py,sha256=-t7wa7ydPqA_yJlF3ib1awJRfm7m69ULIeZwkWWD_f4,6549
54
+ dara/core/internal/pool/__init__.py,sha256=pBbXE5GR3abVC9Lg3i0QxfdmsrBDMJUYAYb0SiAEBkk,657
55
+ dara/core/internal/pool/channel.py,sha256=TbyIE-PnfzzsQYhl3INOs5UIHHbF_h9bMFne5FjbWlQ,4948
56
+ dara/core/internal/pool/definitions.py,sha256=27dtsyHsztc7zgr2axMWCn1O9pBNI_VKByGxjvKHBGc,4649
57
+ dara/core/internal/pool/task_pool.py,sha256=MqzUtoGEjeXdpCdTmBXQmQt582u0suiL5vwrsj1slhY,17780
58
+ dara/core/internal/pool/utils.py,sha256=HoNlHy2V0VmX5Xm2cqsFbPIOV74E2MslzTFgyNRmiB0,5411
59
+ dara/core/internal/pool/worker.py,sha256=eBi3FS652goZxu9chaRT89eHDvqJW0aHjt8I5UgyESA,6808
60
+ dara/core/internal/port_utils.py,sha256=3NN94CubNrIYQKmPM4SEwstY-UMqsbbe1M_JhyPcncA,1654
61
+ dara/core/internal/registries.py,sha256=1lY9xrggiyUlM32pPyzFEfflW3_37QGOxTDrfWQ4CN4,3659
62
+ dara/core/internal/registry.py,sha256=TJsD6eUQIBvcuTn_x3371pF-gxo6VtHUX5h-haca-00,4372
63
+ dara/core/internal/registry_lookup.py,sha256=RlT6Np658GCykdOXeLA6Gm1BTBcdDbhtOJDwJUB3Tkc,2430
64
+ dara/core/internal/routing.py,sha256=qe0U-gqXnzkm6osvpipJV6DE2ePqhtXBVGD1JSRrTOo,21148
65
+ dara/core/internal/scheduler.py,sha256=rmj-NnHHToWBPuteKlf0RmKcav2Hz0Z9-l4uyrAGKSI,13069
66
+ dara/core/internal/settings.py,sha256=DxRvXcelawaKemTcX6JIVIilibn0XO5Bd98dCXau4zg,3937
67
+ dara/core/internal/store.py,sha256=Z4EUMwHR0DR-TVCL9csSGYE3toxh15iRpBP2c7MUgr8,6442
68
+ dara/core/internal/tasks.py,sha256=WgQcgyChnUe4Dy16dw4LpFAcSECVoxFjVJHkPnfZFaA,34790
69
+ dara/core/internal/utils.py,sha256=nUnwy1BLW9HUQro9ASAYb-AlNJkbaT_bQ1bE2e1q1wo,9088
70
+ dara/core/internal/websocket.py,sha256=rcipt5XY48akMuLHFdvUUIgNLqzJx7ovLeiPsYVMELM,21953
71
+ dara/core/jinja/index.html,sha256=1gkCFiihXOUH7vp7tT5gH8mKeJB4KqNg394xO3a0usI,1208
72
+ dara/core/jinja/index_autojs.html,sha256=u1diDUnRT4djZqN1T6lIE01GhlfL6SJ_yLYcyapruss,1342
73
+ dara/core/js_tooling/custom_js_scaffold/index.tsx,sha256=FEzSV5o5Nyzxw6eXvGLi7BkEBkXf3brV34_7ATLnY7o,68
74
+ dara/core/js_tooling/custom_js_scaffold/local-js-component.tsx,sha256=Ojsyeh9MYJnH_XJXGkSc8PAUZIqJcqcGTu_uRITo_88,709
75
+ dara/core/js_tooling/js_utils.py,sha256=X8KZLGjdrVk7K8SEg-lrGbbT6W-rp81YMq9lHhK60Jo,26948
76
+ dara/core/js_tooling/statics/favicon.ico,sha256=CJP26erMMIwQB8FFmyhoUJ-Cx1cXEopiVGxFwyxcpo0,47068
77
+ dara/core/js_tooling/statics/tsconfig.json,sha256=ubnFjwvPHbx2F7wVWsU2VHLDeEnnOwXkTIk7hLNY8ZM,446
78
+ dara/core/js_tooling/templates/.npmrc,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
+ dara/core/js_tooling/templates/_entry.template.tsx,sha256=oTeiSLDmq4J-2pM7qjA2RgUocT6Rla7BNwyEAJGvdCc,161
80
+ dara/core/js_tooling/templates/_entry_autojs.template.tsx,sha256=c9eNln0iLHUjhxsgXsF67hPcu4coloh0luvrhdM4ETM,202
81
+ dara/core/js_tooling/templates/dara.config.json,sha256=RZG_R_xJv_5rYIoz2QZulcG49wD0JURTzshtAzG_di4,84
82
+ dara/core/js_tooling/templates/vite.config.template.ts,sha256=W-R9LtXPMv7vQkqMawMmeFrjaQ22xrGU0iYyS_nHkh4,1199
83
+ dara/core/log_configs/logging.yaml,sha256=YJyD18psAmSVz6587dcEOyoulLuRFFu1g8yMXl1ylM0,706
84
+ dara/core/logging.py,sha256=8kJPQfRpivxzJXpmsK6-sYnWjR_VBDHzIelD1rstIeM,13260
85
+ dara/core/main.py,sha256=uw1BI4dSN-TowmnIUNLMDqL6I5t-3qeQsnVN9J73nGc,18507
86
+ dara/core/metrics/__init__.py,sha256=2UqpWHv-Ie58QLJIHJ9Szfjq8xifAuwy5FYGUIFwWtI,823
87
+ dara/core/metrics/cache.py,sha256=c1PSst_oZZvuVzBXYWdpf8Sbb97u6q0HS2dlsEVLpQU,2632
88
+ dara/core/metrics/runtime.py,sha256=YP-6Dz0GeI9_Yr7bUk_-OqShyFySGH_AKpDO126l6es,1833
89
+ dara/core/metrics/utils.py,sha256=inR1Ab5hmWZY2lsgGwLCQOEdyhCD9PumU52X2JbwlKY,2251
90
+ dara/core/persistence.py,sha256=10Hrvb2z5c9r0Hof7gpiiWfuKAAu6TLqLKoiZA9KpZo,18901
91
+ dara/core/umd/dara.core.umd.js,sha256=voSCuryS02MgkjGjDiKMaJoLCkNF57SenVbQemapT0I,4722215
92
+ dara/core/umd/style.css,sha256=YQtQ4veiSktnyONl0CU1iU1kKfcQhreH4iASi1MP7Ak,4095007
93
+ dara/core/visual/__init__.py,sha256=QN0wbG9HPQ_vXh8BO8DnBXeYLIENVTNtRmYzZf1lx7c,577
94
+ dara/core/visual/components/__init__.py,sha256=wuGRk8bogiLWPOXAF-Fo4F6_L__0tBrI2p2SqgH2lnE,2385
95
+ dara/core/visual/components/dynamic_component.py,sha256=w7rxrM9ZTNvkHymkAto_s9UKg7EE8VrlpL9QdRe4sgY,692
96
+ dara/core/visual/components/fallback.py,sha256=cnuPcblmQ1gyzZHrwHtrD5C5Bo7-JXeiMO0KZ1ACbPM,4764
97
+ dara/core/visual/components/for_cmp.py,sha256=HykNfue2YzjZjWiWaJakLZmbdd_M7IfUi9kNhG2mLOE,6347
98
+ dara/core/visual/components/invalid_component.py,sha256=Q6O9rAwVUNZXjEmliAKLfWf2lsyYK5JhgQvMM6jVco8,901
99
+ dara/core/visual/components/menu.py,sha256=ied87GzIoZgmEINgX3WahBqofn-WK1PIBZAgMjR-Bxg,928
100
+ dara/core/visual/components/progress_tracker.py,sha256=5p_nEJf7RK2oPimXL4YhAN7v0Jcx2HHQzlLxPr7Co38,1705
101
+ dara/core/visual/components/raw_string.py,sha256=jtG9hDZz3s-sCg__Eg4__XkD80OhnNaWiRo-W88LK4M,921
102
+ dara/core/visual/components/router_content.py,sha256=ZFJBuT-Vpn4yvbzgt5IGQbBqiWFhYfHa6mgB2O8Xt8I,978
103
+ dara/core/visual/components/sidebar_frame.py,sha256=rXkPQF9TORuAgbMMx-BL_XDVE-CKcZHY9XV9-gZr_FI,1242
104
+ dara/core/visual/components/topbar_frame.py,sha256=7L4Bi7Ba_gdfS6yoduXQ3k0-XQaNuahmkumyfzlpzzY,1255
105
+ dara/core/visual/components/types.py,sha256=uH2IGufr4-I8cNbZgnEd3YbqoPFgyqG91rfNXZVG7a0,686
106
+ dara/core/visual/css/Property.py,sha256=XJzlMeASyrquhXmaQZvrsgin3xlVfm94dHRY9aJkhXk,43028
107
+ dara/core/visual/css/__init__.py,sha256=r2W1B5yRQhmxBRoRyldzOopaobb2sgkEh_mUjWUvtko,367328
108
+ dara/core/visual/dynamic_component.py,sha256=hlOBRm3V1DlDAzyi--wWDOqC_bD-ofq5LXa4Mn5hBk0,14302
109
+ dara/core/visual/progress_updater.py,sha256=IdtWihnMYk8hqsHqDd0nzuuHeQu8wjnZT42s0oSq9ro,5895
110
+ dara/core/visual/template.py,sha256=y0KJU2913Q10y1TVMpTVnIxIoUsabzYfpUHEGuX2QyM,5707
111
+ dara/core/visual/themes/__init__.py,sha256=aM4mgoIYo2neBSw5FRzswsht7PUKjLthiHLmFIkyRKw,794
112
+ dara/core/visual/themes/dark.py,sha256=UQGDooOc8ric73eHs9E0ltYP4UCrwqQ3QxqN_fb4PwY,1942
113
+ dara/core/visual/themes/definitions.py,sha256=nS_gQvOzCt5hTmj74d0_siq_9QWuj6wNuir4VCHy0Dk,2779
114
+ dara/core/visual/themes/light.py,sha256=-Tviq8oEwGbdFULoDOqPuHO0UpAZGsBy8qFi0kAGolQ,1944
115
+ dara_core-1.20.1a2.dist-info/LICENSE,sha256=r9u1w2RvpLMV6YjuXHIKXRBKzia3fx_roPwboGcLqCc,10944
116
+ dara_core-1.20.1a2.dist-info/METADATA,sha256=YcKq6aK7cosyCWllUQ-dC6M1z-Obpy6czBvDErgebCM,7608
117
+ dara_core-1.20.1a2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
118
+ dara_core-1.20.1a2.dist-info/entry_points.txt,sha256=H__D5sNIGuPIhVam0DChNL-To5k8Y7nY7TAFz9Mz6cc,139
119
+ dara_core-1.20.1a2.dist-info/RECORD,,