optimizely-opal.opal-tools-sdk 0.1.25.dev0__tar.gz → 0.1.27.dev0__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 (22) hide show
  1. {optimizely_opal_opal_tools_sdk-0.1.25.dev0 → optimizely_opal_opal_tools_sdk-0.1.27.dev0}/PKG-INFO +1 -1
  2. {optimizely_opal_opal_tools_sdk-0.1.25.dev0 → optimizely_opal_opal_tools_sdk-0.1.27.dev0}/opal_tools_sdk/proteus.py +54 -33
  3. {optimizely_opal_opal_tools_sdk-0.1.25.dev0 → optimizely_opal_opal_tools_sdk-0.1.27.dev0}/optimizely_opal.opal_tools_sdk.egg-info/PKG-INFO +1 -1
  4. {optimizely_opal_opal_tools_sdk-0.1.25.dev0 → optimizely_opal_opal_tools_sdk-0.1.27.dev0}/pyproject.toml +1 -1
  5. {optimizely_opal_opal_tools_sdk-0.1.25.dev0 → optimizely_opal_opal_tools_sdk-0.1.27.dev0}/setup.py +1 -1
  6. {optimizely_opal_opal_tools_sdk-0.1.25.dev0 → optimizely_opal_opal_tools_sdk-0.1.27.dev0}/tests/test_integration.py +0 -2
  7. {optimizely_opal_opal_tools_sdk-0.1.25.dev0 → optimizely_opal_opal_tools_sdk-0.1.27.dev0}/README.md +0 -0
  8. {optimizely_opal_opal_tools_sdk-0.1.25.dev0 → optimizely_opal_opal_tools_sdk-0.1.27.dev0}/opal_tools_sdk/__init__.py +0 -0
  9. {optimizely_opal_opal_tools_sdk-0.1.25.dev0 → optimizely_opal_opal_tools_sdk-0.1.27.dev0}/opal_tools_sdk/_registry.py +0 -0
  10. {optimizely_opal_opal_tools_sdk-0.1.25.dev0 → optimizely_opal_opal_tools_sdk-0.1.27.dev0}/opal_tools_sdk/auth.py +0 -0
  11. {optimizely_opal_opal_tools_sdk-0.1.25.dev0 → optimizely_opal_opal_tools_sdk-0.1.27.dev0}/opal_tools_sdk/decorators.py +0 -0
  12. {optimizely_opal_opal_tools_sdk-0.1.25.dev0 → optimizely_opal_opal_tools_sdk-0.1.27.dev0}/opal_tools_sdk/logging.py +0 -0
  13. {optimizely_opal_opal_tools_sdk-0.1.25.dev0 → optimizely_opal_opal_tools_sdk-0.1.27.dev0}/opal_tools_sdk/models.py +0 -0
  14. {optimizely_opal_opal_tools_sdk-0.1.25.dev0 → optimizely_opal_opal_tools_sdk-0.1.27.dev0}/opal_tools_sdk/service.py +0 -0
  15. {optimizely_opal_opal_tools_sdk-0.1.25.dev0 → optimizely_opal_opal_tools_sdk-0.1.27.dev0}/opal_tools_sdk/ui.py +0 -0
  16. {optimizely_opal_opal_tools_sdk-0.1.25.dev0 → optimizely_opal_opal_tools_sdk-0.1.27.dev0}/optimizely_opal.opal_tools_sdk.egg-info/SOURCES.txt +0 -0
  17. {optimizely_opal_opal_tools_sdk-0.1.25.dev0 → optimizely_opal_opal_tools_sdk-0.1.27.dev0}/optimizely_opal.opal_tools_sdk.egg-info/dependency_links.txt +0 -0
  18. {optimizely_opal_opal_tools_sdk-0.1.25.dev0 → optimizely_opal_opal_tools_sdk-0.1.27.dev0}/optimizely_opal.opal_tools_sdk.egg-info/requires.txt +0 -0
  19. {optimizely_opal_opal_tools_sdk-0.1.25.dev0 → optimizely_opal_opal_tools_sdk-0.1.27.dev0}/optimizely_opal.opal_tools_sdk.egg-info/top_level.txt +0 -0
  20. {optimizely_opal_opal_tools_sdk-0.1.25.dev0 → optimizely_opal_opal_tools_sdk-0.1.27.dev0}/setup.cfg +0 -0
  21. {optimizely_opal_opal_tools_sdk-0.1.25.dev0 → optimizely_opal_opal_tools_sdk-0.1.27.dev0}/tests/test_nested_schema.py +0 -0
  22. {optimizely_opal_opal_tools_sdk-0.1.25.dev0 → optimizely_opal_opal_tools_sdk-0.1.27.dev0}/tests/test_proteus.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: optimizely-opal.opal-tools-sdk
3
- Version: 0.1.25.dev0
3
+ Version: 0.1.27.dev0
4
4
  Summary: SDK for creating Opal-compatible tools services
5
5
  Home-page: https://github.com/optimizely/opal-tools-sdk
6
6
  Author: Optimizely
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: proteus-document-spec.json
3
- # timestamp: 2026-04-13T17:59:58+00:00
3
+ # timestamp: 2026-04-20T19:00:23+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -276,6 +276,10 @@ class ProteusDocument(BaseModel):
276
276
  description='If true, hides chat prompt and forces user interaction with document. User can press ESC or close to abandon.',
277
277
  )
278
278
  body: ProteusNode | None = Field(..., description='The main content of the document.')
279
+ compact: bool | None = Field(
280
+ default=None,
281
+ description='If true, constrains the body to a max height and makes it scrollable when content overflows.',
282
+ )
279
283
  subtitle: ProteusNode | None = Field(
280
284
  default=None,
281
285
  description="A brief description or tagline that provides additional context about the Proteus document's purpose.",
@@ -588,14 +592,29 @@ class ProteusBadge(BaseModel):
588
592
  z: SprinklePropZ | None = None
589
593
 
590
594
 
591
- class ProteusCancelAction(BaseModel):
595
+ class ProteusButton(BaseModel):
592
596
  model_config = ConfigDict(
593
597
  extra='forbid',
594
598
  )
595
- field_type: Literal['CancelAction'] = Field(default='CancelAction', alias='$type')
599
+ field_type: Literal['Button'] = Field(default='Button', alias='$type')
596
600
  alignItems: SprinklePropAlignItems | None = None
597
601
  alignSelf: SprinklePropAlignSelf | None = None
598
602
  animation: SprinklePropAnimation | None = None
603
+ appearance: (
604
+ Literal['default']
605
+ | Literal['danger']
606
+ | Literal['primary']
607
+ | Literal['subtle']
608
+ | Literal['danger-outline']
609
+ | Literal['default-opal']
610
+ | Literal['inverse']
611
+ | Literal['primary-opal']
612
+ | ProteusExpression
613
+ | None
614
+ ) = Field(
615
+ default=None,
616
+ description='Control the appearance by selecting between the different button types.',
617
+ )
599
618
  backgroundImage: SprinklePropBackgroundImage | None = None
600
619
  bg: SprinklePropBg | None = None
601
620
  border: SprinklePropBorder | None = None
@@ -648,11 +667,14 @@ class ProteusCancelAction(BaseModel):
648
667
  textAlign: SprinklePropTextAlign | None = None
649
668
  textTransform: SprinklePropTextTransform | None = None
650
669
  transition: SprinklePropTransition | None = None
670
+ type: Literal['button'] | Literal['reset'] | Literal['submit'] | ProteusExpression | None = (
671
+ Field(default=None, description='The default behavior of the button.')
672
+ )
651
673
  w: SprinklePropW | None = None
652
674
  whiteSpace: SprinklePropWhiteSpace | None = None
653
675
  z: SprinklePropZ | None = None
654
- placeholder: str | None = Field(
655
- default=None, description='Placeholder text for the text input field'
676
+ onClick: ProteusEventHandler | None = Field(
677
+ default=None, description='Action triggered when button is clicked'
656
678
  )
657
679
 
658
680
 
@@ -876,6 +898,9 @@ class ProteusChart(BaseModel):
876
898
  default=None,
877
899
  description='Chart data records, either inline, a ProteusExpression, or a ProteusZip transformation',
878
900
  )
901
+ layout: Literal['horizontal', 'vertical'] | None = Field(
902
+ default=None, description='Chart layout direction'
903
+ )
879
904
  series: list[Series] | None = Field(default=None, description='Data series configuration')
880
905
  type: Literal['bar', 'line'] | None = Field(default=None, description='Chart type')
881
906
  xAxisKey: str | None = Field(default=None, description='Key in data records for x-axis labels')
@@ -983,11 +1008,11 @@ class ProteusGroup(BaseModel):
983
1008
  )
984
1009
  field_type: Literal['Group'] = Field(default='Group', alias='$type')
985
1010
  alignItems: (
986
- Literal['normal']
987
- | Literal['stretch']
1011
+ Literal['stretch']
988
1012
  | Literal['center']
989
1013
  | Literal['end']
990
1014
  | Literal['start']
1015
+ | Literal['normal']
991
1016
  | ProteusExpression
992
1017
  | None
993
1018
  ) = Field(
@@ -1275,10 +1300,6 @@ class ProteusImageCarousel(BaseModel):
1275
1300
  extra='forbid',
1276
1301
  )
1277
1302
  field_type: Literal['ImageCarousel'] = Field(default='ImageCarousel', alias='$type')
1278
- downloadAll: ProteusExpression | str | None = Field(
1279
- default=None,
1280
- description='URL to download all images (e.g. as a zip file). Falls back to downloading each image individually.',
1281
- )
1282
1303
  images: list[Image] | ProteusExpression = Field(
1283
1304
  ..., description='Array of image data to display in the carousel'
1284
1305
  )
@@ -2149,7 +2170,7 @@ class ProteusElement(
2149
2170
  ProteusAction
2150
2171
  | ProteusAvatar
2151
2172
  | ProteusBadge
2152
- | ProteusCancelAction
2173
+ | ProteusButton
2153
2174
  | ProteusCard
2154
2175
  | ProteusCardHeader
2155
2176
  | ProteusCardLink
@@ -2184,7 +2205,7 @@ class ProteusElement(
2184
2205
  ProteusAction
2185
2206
  | ProteusAvatar
2186
2207
  | ProteusBadge
2187
- | ProteusCancelAction
2208
+ | ProteusButton
2188
2209
  | ProteusCard
2189
2210
  | ProteusCardHeader
2190
2211
  | ProteusCardLink
@@ -2221,40 +2242,40 @@ class ProteusElement(
2221
2242
 
2222
2243
  class SprinklePropAlignItems(
2223
2244
  RootModel[
2224
- Literal['normal']
2225
- | Literal['stretch']
2245
+ Literal['stretch']
2226
2246
  | Literal['center']
2227
2247
  | Literal['end']
2228
2248
  | Literal['start']
2249
+ | Literal['normal']
2229
2250
  | ProteusExpression
2230
2251
  ]
2231
2252
  ):
2232
2253
  root: (
2233
- Literal['normal']
2234
- | Literal['stretch']
2254
+ Literal['stretch']
2235
2255
  | Literal['center']
2236
2256
  | Literal['end']
2237
2257
  | Literal['start']
2258
+ | Literal['normal']
2238
2259
  | ProteusExpression
2239
2260
  ) = Field(..., description="Set the element's `align-items` CSS property")
2240
2261
 
2241
2262
 
2242
2263
  class SprinklePropAlignSelf(
2243
2264
  RootModel[
2244
- Literal['normal']
2245
- | Literal['stretch']
2265
+ Literal['stretch']
2246
2266
  | Literal['center']
2247
2267
  | Literal['end']
2248
2268
  | Literal['start']
2269
+ | Literal['normal']
2249
2270
  | ProteusExpression
2250
2271
  ]
2251
2272
  ):
2252
2273
  root: (
2253
- Literal['normal']
2254
- | Literal['stretch']
2274
+ Literal['stretch']
2255
2275
  | Literal['center']
2256
2276
  | Literal['end']
2257
2277
  | Literal['start']
2278
+ | Literal['normal']
2258
2279
  | ProteusExpression
2259
2280
  ) = Field(..., description="Set the element's `align-self` CSS property")
2260
2281
 
@@ -2531,9 +2552,9 @@ class SprinklePropColor(
2531
2552
 
2532
2553
 
2533
2554
  class SprinklePropCursor(
2534
- RootModel[Literal['default'] | Literal['pointer'] | Literal['text'] | ProteusExpression]
2555
+ RootModel[Literal['text'] | Literal['default'] | Literal['pointer'] | ProteusExpression]
2535
2556
  ):
2536
- root: Literal['default'] | Literal['pointer'] | Literal['text'] | ProteusExpression = Field(
2557
+ root: Literal['text'] | Literal['default'] | Literal['pointer'] | ProteusExpression = Field(
2537
2558
  ..., description="Set the element's `cursor` CSS property"
2538
2559
  )
2539
2560
 
@@ -2795,8 +2816,7 @@ class SprinklePropH(
2795
2816
 
2796
2817
  class SprinklePropJustifyContent(
2797
2818
  RootModel[
2798
- Literal['normal']
2799
- | Literal['space-around']
2819
+ Literal['space-around']
2800
2820
  | Literal['space-between']
2801
2821
  | Literal['space-evenly']
2802
2822
  | Literal['stretch']
@@ -2805,12 +2825,12 @@ class SprinklePropJustifyContent(
2805
2825
  | Literal['flex-end']
2806
2826
  | Literal['flex-start']
2807
2827
  | Literal['start']
2828
+ | Literal['normal']
2808
2829
  | ProteusExpression
2809
2830
  ]
2810
2831
  ):
2811
2832
  root: (
2812
- Literal['normal']
2813
- | Literal['space-around']
2833
+ Literal['space-around']
2814
2834
  | Literal['space-between']
2815
2835
  | Literal['space-evenly']
2816
2836
  | Literal['stretch']
@@ -2819,26 +2839,27 @@ class SprinklePropJustifyContent(
2819
2839
  | Literal['flex-end']
2820
2840
  | Literal['flex-start']
2821
2841
  | Literal['start']
2842
+ | Literal['normal']
2822
2843
  | ProteusExpression
2823
2844
  ) = Field(..., description="Set the element's `justify-content` CSS property")
2824
2845
 
2825
2846
 
2826
2847
  class SprinklePropJustifyItems(
2827
2848
  RootModel[
2828
- Literal['normal']
2829
- | Literal['stretch']
2849
+ Literal['stretch']
2830
2850
  | Literal['center']
2831
2851
  | Literal['end']
2832
2852
  | Literal['start']
2853
+ | Literal['normal']
2833
2854
  | ProteusExpression
2834
2855
  ]
2835
2856
  ):
2836
2857
  root: (
2837
- Literal['normal']
2838
- | Literal['stretch']
2858
+ Literal['stretch']
2839
2859
  | Literal['center']
2840
2860
  | Literal['end']
2841
2861
  | Literal['start']
2862
+ | Literal['normal']
2842
2863
  | ProteusExpression
2843
2864
  ) = Field(..., description="Set the element's `justify-items` CSS property")
2844
2865
 
@@ -3860,7 +3881,7 @@ ProteusZip.model_rebuild()
3860
3881
  ProteusAction.model_rebuild()
3861
3882
  ProteusAvatar.model_rebuild()
3862
3883
  ProteusBadge.model_rebuild()
3863
- ProteusCancelAction.model_rebuild()
3884
+ ProteusButton.model_rebuild()
3864
3885
  ProteusCard.model_rebuild()
3865
3886
  ProteusCardHeader.model_rebuild()
3866
3887
  ProteusCardLink.model_rebuild()
@@ -3904,7 +3925,7 @@ class UI:
3904
3925
  Action = ProteusAction
3905
3926
  Avatar = ProteusAvatar
3906
3927
  Badge = ProteusBadge
3907
- CancelAction = ProteusCancelAction
3928
+ Button = ProteusButton
3908
3929
  Card = ProteusCard
3909
3930
  CardHeader = ProteusCardHeader
3910
3931
  CardLink = ProteusCardLink
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: optimizely-opal.opal-tools-sdk
3
- Version: 0.1.25.dev0
3
+ Version: 0.1.27.dev0
4
4
  Summary: SDK for creating Opal-compatible tools services
5
5
  Home-page: https://github.com/optimizely/opal-tools-sdk
6
6
  Author: Optimizely
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "optimizely-opal.opal-tools-sdk"
7
- version = "0.1.25-dev"
7
+ version = "0.1.27-dev"
8
8
  description = "SDK for creating Opal-compatible tools services"
9
9
  authors = [{ name = "Optimizely", email = "opal-team@optimizely.com" }]
10
10
  readme = "README.md"
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name="optimizely-opal.opal-tools-sdk",
5
- version="0.1.25-dev",
5
+ version="0.1.27-dev",
6
6
  packages=find_packages(),
7
7
  install_requires=[
8
8
  "fastapi>=0.100.0",
@@ -303,7 +303,6 @@ def test_resource_with_proteus_document_return():
303
303
  ],
304
304
  actions=[
305
305
  UI.Action(children="Save", appearance="primary"),
306
- UI.CancelAction(children="Cancel"),
307
306
  ],
308
307
  )
309
308
 
@@ -331,7 +330,6 @@ def test_resource_with_proteus_document_return():
331
330
  assert parsed_doc["body"][1]["label"] == "Item Name"
332
331
  assert len(parsed_doc["actions"]) == 2
333
332
  assert parsed_doc["actions"][0]["$type"] == "Action"
334
- assert parsed_doc["actions"][1]["$type"] == "CancelAction"
335
333
 
336
334
 
337
335
  def test_resource_with_proteus_document_and_explicit_mime_type():