optimizely-opal.opal-tools-sdk 0.1.6.dev0__py3-none-any.whl → 0.1.10.dev0__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.
@@ -62,25 +62,48 @@ def tool(name: str, description: str, auth_requirements: Optional[List[Dict[str,
62
62
  else:
63
63
  field_type = str
64
64
 
65
+ # Check if the field is Optional (Union with None)
66
+ # Optional[X] is equivalent to Union[X, None]
67
+ type_args = getattr(field_type, '__args__', ())
68
+ is_optional = get_origin(field_type) is Union and type(None) in type_args
69
+
70
+ # Extract the actual type from Optional[T]
71
+ if is_optional and type_args:
72
+ # Get the non-None type from Union[T, None]
73
+ field_type = next(
74
+ (arg for arg in type_args if arg is not type(None)),
75
+ field_type,
76
+ )
77
+
65
78
  # Map Python type to Parameter type
66
79
  param_type = ParameterType.string
67
- if field_type == int:
80
+ if field_type is int:
68
81
  param_type = ParameterType.integer
69
- elif field_type == float:
82
+ elif field_type is float:
70
83
  param_type = ParameterType.number
71
- elif field_type == bool:
84
+ elif field_type is bool:
72
85
  param_type = ParameterType.boolean
73
- elif get_origin(field_type) is list:
86
+ elif field_type is list or get_origin(field_type) is list:
74
87
  param_type = ParameterType.list
75
- elif get_origin(field_type) is dict:
88
+ elif field_type is dict or get_origin(field_type) is dict:
76
89
  param_type = ParameterType.dictionary
77
90
 
78
91
  # Determine if required
79
92
  field_info_extra = getattr(field_info, "json_schema_extra") or {}
80
93
  if "required" in field_info_extra:
81
94
  required = field_info_extra["required"]
95
+ # If the field is typed as Optional, it's not required (check this FIRST)
96
+ elif is_optional:
97
+ required = False
98
+ # Check for Pydantic v2 is_required() method
99
+ elif hasattr(field_info, 'is_required'):
100
+ required = field_info.is_required()
101
+ # Fall back to checking if default is ... (Pydantic v1/v2 compatibility)
102
+ elif hasattr(field_info, 'default'):
103
+ required = field_info.default is ...
82
104
  else:
83
- required = field_info.default is ... if hasattr(field_info, 'default') else True
105
+ # If no default attribute at all, assume required
106
+ required = True
84
107
 
85
108
  # Get description
86
109
  description_text = ""
opal_tools_sdk/models.py CHANGED
@@ -112,6 +112,8 @@ class IslandConfig(BaseModel):
112
112
 
113
113
  fields: list[Field]
114
114
  actions: list[Action]
115
+ type: Optional[str] = None
116
+ icon: Optional[str] = None
115
117
 
116
118
 
117
119
  class IslandResponse(BaseModel):
@@ -120,7 +122,8 @@ class IslandResponse(BaseModel):
120
122
 
121
123
  type: Literal["island"]
122
124
  config: ResponseConfig
125
+ message: Optional[str] = None
123
126
 
124
127
  @classmethod
125
- def create(cls, islands: list[IslandConfig]):
126
- return cls(type="island", config=cls.ResponseConfig(islands=islands))
128
+ def create(cls, islands: list[IslandConfig], message: Optional[str] = None):
129
+ return cls(type="island", config=cls.ResponseConfig(islands=islands), message=message)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: optimizely-opal.opal-tools-sdk
3
- Version: 0.1.6.dev0
3
+ Version: 0.1.10.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
@@ -223,6 +223,8 @@ Actions represent buttons or operations:
223
223
  Contains the complete island configuration:
224
224
  - `fields`: List of IslandConfig.Field objects
225
225
  - `actions`: List of IslandConfig.Action objects
226
+ - `type`: Island type for UI rendering (optional, default: `None`)
227
+ - `icon`: Icon to display in the island (optional, default: `None`)
226
228
 
227
229
  #### IslandResponse
228
230
  The response wrapper for islands:
@@ -0,0 +1,11 @@
1
+ opal_tools_sdk/__init__.py,sha256=0B0c53fyCRMuI_zOfwiePzQk5ion1BSKCqGLVsY0TVk,495
2
+ opal_tools_sdk/_registry.py,sha256=YE3eD4kcS09QDe4RccBYAzXPo9znEU7fblrsB-g3o-Y,67
3
+ opal_tools_sdk/auth.py,sha256=9aMiZv6n6_iu7hQA0sKg4hgNr5DzYFFuP0SWUoZf_Vw,1520
4
+ opal_tools_sdk/decorators.py,sha256=DuSDb1Dd1DSIlOC0ZBS4iE8Go3O93xqtPS43S5HwKBw,6526
5
+ opal_tools_sdk/logging.py,sha256=krvkhdql2GWh0aCWj5gfqyn5plsyLJ773WzIirK7tkU,1325
6
+ opal_tools_sdk/models.py,sha256=X25qtorUkQKQAd2zHBJjlBSGeIo0gIJVJ7d0QJsPPko,3546
7
+ opal_tools_sdk/service.py,sha256=a5ZC-J1GF5y1-FdWCXdilCy7p5hG63MTTn6frBBCo4Y,6939
8
+ optimizely_opal_opal_tools_sdk-0.1.10.dev0.dist-info/METADATA,sha256=AJEYAccTQUy-Tk9YgB_iZuJmp5LpqvCf0-ZkeiVPIBo,8221
9
+ optimizely_opal_opal_tools_sdk-0.1.10.dev0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
10
+ optimizely_opal_opal_tools_sdk-0.1.10.dev0.dist-info/top_level.txt,sha256=nCJ5PxF0rgoV6yNJvvuUaZPx4D3EWkl7gpu-6xafH1E,15
11
+ optimizely_opal_opal_tools_sdk-0.1.10.dev0.dist-info/RECORD,,
@@ -1,11 +0,0 @@
1
- opal_tools_sdk/__init__.py,sha256=0B0c53fyCRMuI_zOfwiePzQk5ion1BSKCqGLVsY0TVk,495
2
- opal_tools_sdk/_registry.py,sha256=YE3eD4kcS09QDe4RccBYAzXPo9znEU7fblrsB-g3o-Y,67
3
- opal_tools_sdk/auth.py,sha256=9aMiZv6n6_iu7hQA0sKg4hgNr5DzYFFuP0SWUoZf_Vw,1520
4
- opal_tools_sdk/decorators.py,sha256=iHal7RElOSCWjqKHIK-Hc4GKOsjuGyUg0_lsQKVQShg,5315
5
- opal_tools_sdk/logging.py,sha256=krvkhdql2GWh0aCWj5gfqyn5plsyLJ773WzIirK7tkU,1325
6
- opal_tools_sdk/models.py,sha256=YESFXdIPIFoVqP6OXtswXzHQ1tYMFVSnb8rFVe9cFj4,3403
7
- opal_tools_sdk/service.py,sha256=a5ZC-J1GF5y1-FdWCXdilCy7p5hG63MTTn6frBBCo4Y,6939
8
- optimizely_opal_opal_tools_sdk-0.1.6.dev0.dist-info/METADATA,sha256=dY_LreIH84jGIXPLzpdL3MSUnzn3L5b4fRRTfKd5jvM,8085
9
- optimizely_opal_opal_tools_sdk-0.1.6.dev0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
10
- optimizely_opal_opal_tools_sdk-0.1.6.dev0.dist-info/top_level.txt,sha256=nCJ5PxF0rgoV6yNJvvuUaZPx4D3EWkl7gpu-6xafH1E,15
11
- optimizely_opal_opal_tools_sdk-0.1.6.dev0.dist-info/RECORD,,