optimizely-opal.opal-tools-sdk 0.1.1.dev0__tar.gz → 0.1.3.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.

Potentially problematic release.


This version of optimizely-opal.opal-tools-sdk might be problematic. Click here for more details.

Files changed (16) hide show
  1. {optimizely_opal_opal_tools_sdk-0.1.1.dev0 → optimizely_opal_opal_tools_sdk-0.1.3.dev0}/PKG-INFO +1 -1
  2. {optimizely_opal_opal_tools_sdk-0.1.1.dev0 → optimizely_opal_opal_tools_sdk-0.1.3.dev0}/opal_tools_sdk/decorators.py +8 -4
  3. {optimizely_opal_opal_tools_sdk-0.1.1.dev0 → optimizely_opal_opal_tools_sdk-0.1.3.dev0}/opal_tools_sdk/models.py +6 -6
  4. {optimizely_opal_opal_tools_sdk-0.1.1.dev0 → optimizely_opal_opal_tools_sdk-0.1.3.dev0}/opal_tools_sdk/service.py +20 -12
  5. {optimizely_opal_opal_tools_sdk-0.1.1.dev0 → optimizely_opal_opal_tools_sdk-0.1.3.dev0}/optimizely_opal.opal_tools_sdk.egg-info/PKG-INFO +1 -1
  6. {optimizely_opal_opal_tools_sdk-0.1.1.dev0 → optimizely_opal_opal_tools_sdk-0.1.3.dev0}/pyproject.toml +1 -1
  7. {optimizely_opal_opal_tools_sdk-0.1.1.dev0 → optimizely_opal_opal_tools_sdk-0.1.3.dev0}/setup.py +1 -1
  8. {optimizely_opal_opal_tools_sdk-0.1.1.dev0 → optimizely_opal_opal_tools_sdk-0.1.3.dev0}/README.md +0 -0
  9. {optimizely_opal_opal_tools_sdk-0.1.1.dev0 → optimizely_opal_opal_tools_sdk-0.1.3.dev0}/opal_tools_sdk/__init__.py +0 -0
  10. {optimizely_opal_opal_tools_sdk-0.1.1.dev0 → optimizely_opal_opal_tools_sdk-0.1.3.dev0}/opal_tools_sdk/_registry.py +0 -0
  11. {optimizely_opal_opal_tools_sdk-0.1.1.dev0 → optimizely_opal_opal_tools_sdk-0.1.3.dev0}/opal_tools_sdk/auth.py +0 -0
  12. {optimizely_opal_opal_tools_sdk-0.1.1.dev0 → optimizely_opal_opal_tools_sdk-0.1.3.dev0}/optimizely_opal.opal_tools_sdk.egg-info/SOURCES.txt +0 -0
  13. {optimizely_opal_opal_tools_sdk-0.1.1.dev0 → optimizely_opal_opal_tools_sdk-0.1.3.dev0}/optimizely_opal.opal_tools_sdk.egg-info/dependency_links.txt +0 -0
  14. {optimizely_opal_opal_tools_sdk-0.1.1.dev0 → optimizely_opal_opal_tools_sdk-0.1.3.dev0}/optimizely_opal.opal_tools_sdk.egg-info/requires.txt +0 -0
  15. {optimizely_opal_opal_tools_sdk-0.1.1.dev0 → optimizely_opal_opal_tools_sdk-0.1.3.dev0}/optimizely_opal.opal_tools_sdk.egg-info/top_level.txt +0 -0
  16. {optimizely_opal_opal_tools_sdk-0.1.1.dev0 → optimizely_opal_opal_tools_sdk-0.1.3.dev0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: optimizely-opal.opal-tools-sdk
3
- Version: 0.1.1.dev0
3
+ Version: 0.1.3.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,7 +1,7 @@
1
1
  import inspect
2
2
  import re
3
3
  import logging
4
- from typing import Callable, Any, List, Dict, Type, get_type_hints, Optional, Union
4
+ from typing import Callable, Any, List, Dict, Type, get_origin, get_type_hints, Optional, Union
5
5
  from fastapi import APIRouter, Depends, Header, HTTPException
6
6
  from pydantic import BaseModel
7
7
 
@@ -69,13 +69,17 @@ def tool(name: str, description: str, auth_requirements: Optional[List[Dict[str,
69
69
  param_type = ParameterType.number
70
70
  elif field_type == bool:
71
71
  param_type = ParameterType.boolean
72
- elif field_type == list or field_type == List:
72
+ elif get_origin(field_type) is list:
73
73
  param_type = ParameterType.list
74
- elif field_type == dict or field_type == Dict:
74
+ elif get_origin(field_type) is dict:
75
75
  param_type = ParameterType.dictionary
76
76
 
77
77
  # Determine if required
78
- required = field_info.default is ... if hasattr(field_info, 'default') else True
78
+ field_info_extra = getattr(field_info, "json_schema_extra") or {}
79
+ if "required" in field_info_extra:
80
+ required = field_info_extra["required"]
81
+ else:
82
+ required = field_info.default is ... if hasattr(field_info, 'default') else True
79
83
 
80
84
  # Get description
81
85
  description_text = ""
@@ -8,7 +8,7 @@ class ParameterType(str, Enum):
8
8
  integer = "integer"
9
9
  number = "number"
10
10
  boolean = "boolean"
11
- list = "list" # Changed to match main service expectation
11
+ list = "array" # Changed to match main service expectation
12
12
  dictionary = "object" # Standard JSON schema type
13
13
 
14
14
  @dataclass
@@ -18,7 +18,7 @@ class Parameter:
18
18
  param_type: ParameterType
19
19
  description: str
20
20
  required: bool
21
-
21
+
22
22
  def to_dict(self) -> Dict[str, Any]:
23
23
  """Convert to dictionary for the discovery endpoint."""
24
24
  return {
@@ -34,7 +34,7 @@ class AuthRequirement:
34
34
  provider: str # e.g., "google", "microsoft"
35
35
  scope_bundle: str # e.g., "calendar", "drive"
36
36
  required: bool = True
37
-
37
+
38
38
  def to_dict(self) -> Dict[str, Any]:
39
39
  """Convert to dictionary for the discovery endpoint."""
40
40
  return {
@@ -52,7 +52,7 @@ class Function:
52
52
  endpoint: str
53
53
  auth_requirements: Optional[List[AuthRequirement]] = None
54
54
  http_method: str = "POST"
55
-
55
+
56
56
  def to_dict(self) -> Dict[str, Any]:
57
57
  """Convert to dictionary for the discovery endpoint."""
58
58
  result = {
@@ -62,8 +62,8 @@ class Function:
62
62
  "endpoint": self.endpoint,
63
63
  "http_method": self.http_method
64
64
  }
65
-
65
+
66
66
  if self.auth_requirements:
67
67
  result["auth_requirements"] = [auth.to_dict() for auth in self.auth_requirements]
68
-
68
+
69
69
  return result
@@ -132,6 +132,11 @@ class ToolsService:
132
132
  if auth_data:
133
133
  print(f"Auth data provided for provider: {auth_data.get('provider', 'unknown')}")
134
134
 
135
+ # Extract environment data if available
136
+ environment = body.get("environment", {})
137
+ if environment:
138
+ print(f"Environment data provided: {environment}")
139
+
135
140
  print(f"Extracted parameters: {params}")
136
141
 
137
142
  # Get the parameter model from handler's signature
@@ -139,24 +144,27 @@ class ToolsService:
139
144
  param_name = list(sig.parameters.keys())[0]
140
145
  param_type = get_type_hints(handler).get(param_name)
141
146
 
142
- # Check signature to see if it accepts auth data
143
- accepts_auth = len(sig.parameters) > 1
144
147
 
148
+ args = []
149
+ kwargs = {}
145
150
  if param_type:
146
151
  # Create instance of param model
147
152
  model_instance = param_type(**params)
148
- if accepts_auth:
149
- # Call with auth data if the handler accepts it
150
- result = await handler(model_instance, auth_data)
151
- else:
152
- # Call without auth data
153
- result = await handler(model_instance)
153
+ args.append(model_instance)
154
154
  else:
155
155
  # Fall back if type hints not available
156
- if accepts_auth:
157
- result = await handler(BaseModel(**params), auth_data)
158
- else:
159
- result = await handler(BaseModel(**params))
156
+ args.append(BaseModel(**params))
157
+
158
+ # Check signature to see if it accepts other values
159
+
160
+ # TODO: Change this to "auth"
161
+ if auth_param := sig.parameters.get("auth_data"):
162
+ kwargs[auth_param.name] = auth_data
163
+
164
+ if environment_param := sig.parameters.get("environment"):
165
+ kwargs[environment_param.name] = environment
166
+
167
+ result = await handler(*args, **kwargs)
160
168
 
161
169
  print(f"Tool {name} returned: {result}")
162
170
  return result
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: optimizely-opal.opal-tools-sdk
3
- Version: 0.1.1.dev0
3
+ Version: 0.1.3.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.1-dev"
7
+ version = "0.1.3-dev"
8
8
  description = "SDK for creating Opal-compatible tools services"
9
9
  authors = [
10
10
  {name = "Optimizely", email = "opal-team@optimizely.com"}
@@ -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.1-dev",
5
+ version="0.1.3-dev",
6
6
  packages=find_packages(),
7
7
  install_requires=[
8
8
  "fastapi>=0.100.0",