Skip to content

Commit 078d046

Browse files
committed
normalize resource id
1 parent 7582e7d commit 078d046

File tree

1 file changed

+20
-9
lines changed

1 file changed

+20
-9
lines changed

eval_protocol/platform_api.py

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,16 @@ def __str__(self) -> str:
5353
return f"{super().__str__()} (Status: {self.status_code}, Response: {self.response_text or 'N/A'})"
5454

5555

56+
def _normalize_secret_resource_id(key_name: str) -> str:
57+
"""
58+
Normalize a secret's resource ID for Fireworks paths:
59+
- Lowercase
60+
- Replace underscores with hyphens
61+
- Leave other characters as-is (server enforces allowed set)
62+
"""
63+
return key_name.lower().replace("_", "-")
64+
65+
5666
def create_or_update_fireworks_secret(
5767
account_id: str,
5868
key_name: str, # This is the identifier for the secret, e.g., "my-eval-api-key"
@@ -95,8 +105,9 @@ def create_or_update_fireworks_secret(
95105
# Let's assume for POST, we send 'keyName' and 'value'.
96106
# For PATCH, the path contains {secret_id} which is the key_name. The body is also gatewaySecret.
97107

98-
# Check if secret exists using GET (path uses secret_id which is our key_name)
99-
get_url = f"{resolved_api_base.rstrip('/')}/v1/accounts/{resolved_account_id}/secrets/{key_name}"
108+
# Check if secret exists using GET (path uses normalized resource id)
109+
resource_id = _normalize_secret_resource_id(key_name)
110+
get_url = f"{resolved_api_base.rstrip('/')}/v1/accounts/{resolved_account_id}/secrets/{resource_id}"
100111
secret_exists = False
101112
try:
102113
response = requests.get(get_url, headers=headers, timeout=10)
@@ -120,7 +131,7 @@ def create_or_update_fireworks_secret(
120131

121132
if secret_exists:
122133
# Update existing secret (PATCH)
123-
patch_url = f"{resolved_api_base.rstrip('/')}/v1/accounts/{resolved_account_id}/secrets/{key_name}"
134+
patch_url = f"{resolved_api_base.rstrip('/')}/v1/accounts/{resolved_account_id}/secrets/{resource_id}"
124135
# Body for PATCH requires 'keyName' and 'value'.
125136
# Transform key_name for payload: uppercase and underscores
126137
payload_key_name = key_name.upper().replace("-", "_")
@@ -148,16 +159,14 @@ def create_or_update_fireworks_secret(
148159
else:
149160
# Create new secret (POST)
150161
post_url = f"{resolved_api_base.rstrip('/')}/v1/accounts/{resolved_account_id}/secrets"
151-
# Body for POST is gatewaySecret. 'name' field in payload is tricky.
162+
# Body for POST is gatewaySecret. 'name' field in payload is the resource path.
152163
# Let's assume for POST, the 'name' in payload can be omitted or is the key_name.
153164
# The API should ideally use 'keyName' from URL or a specific 'secretId' in payload for creation if 'name' is server-assigned.
154165
# Given the Swagger, 'name' is required in gatewaySecret.
155166
# Let's try with 'name' being the 'key_name' for the payload, as the full path is not known yet.
156167
# This might need adjustment based on actual API behavior.
157168
# Construct the full 'name' path for the POST payload as per Swagger's title for 'name'
158-
full_resource_name_for_payload = (
159-
f"accounts/{resolved_account_id}/secrets/{key_name}" # Path uses lowercase-hyphenated key_name
160-
)
169+
full_resource_name_for_payload = f"accounts/{resolved_account_id}/secrets/{resource_id}"
161170

162171
# Transform key_name for payload "keyName" field: uppercase and underscores
163172
payload_key_name = key_name.upper().replace("-", "_")
@@ -209,7 +218,8 @@ def get_fireworks_secret(
209218
return None
210219

211220
headers = {"Authorization": f"Bearer {resolved_api_key}"}
212-
url = f"{resolved_api_base.rstrip('/')}/v1/accounts/{resolved_account_id}/secrets/{key_name}"
221+
resource_id = _normalize_secret_resource_id(key_name)
222+
url = f"{resolved_api_base.rstrip('/')}/v1/accounts/{resolved_account_id}/secrets/{resource_id}"
213223

214224
try:
215225
response = requests.get(url, headers=headers, timeout=10)
@@ -245,7 +255,8 @@ def delete_fireworks_secret(
245255
return False
246256

247257
headers = {"Authorization": f"Bearer {resolved_api_key}"}
248-
url = f"{resolved_api_base.rstrip('/')}/v1/accounts/{resolved_account_id}/secrets/{key_name}"
258+
resource_id = _normalize_secret_resource_id(key_name)
259+
url = f"{resolved_api_base.rstrip('/')}/v1/accounts/{resolved_account_id}/secrets/{resource_id}"
249260

250261
try:
251262
response = requests.delete(url, headers=headers, timeout=30)

0 commit comments

Comments
 (0)