Skip to content

Commit ba74ca7

Browse files
committed
fix: Update CloudProjectCreateResponse schema to match API response
The /proxy/projects/projects POST endpoint returns a ProjectStatusResponse with fields: message, status, default, old_project, new_project. Updated CloudProjectCreateResponse schema to match this format instead of expecting name, path, message fields. Also updated all related tests to use the correct response format: - tests/cli/test_cloud_utils.py (3 tests) - tests/cli/test_bisync_commands.py (1 test) Fixes the validation error when creating cloud projects via upload command: "bm cloud upload --project test --create-project specs" Signed-off-by: Pablo Hernandez <pablo@basicmachines.co> Signed-off-by: phernandez <paul@basicmachines.co>
1 parent 5258f45 commit ba74ca7

4 files changed

Lines changed: 28 additions & 19 deletions

File tree

src/basic_memory/mcp/async_client.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ async def get_client() -> AsyncIterator[AsyncClient]:
8787
# Auth header set ONCE at client creation
8888
proxy_base_url = f"{config.cloud_host}/proxy"
8989
logger.info(f"Creating HTTP client for cloud proxy at: {proxy_base_url}")
90-
print(f"proxy_base_url: {proxy_base_url}")
9190
async with AsyncClient(
9291
base_url=proxy_base_url,
9392
headers={"Authorization": f"Bearer {token}"},

src/basic_memory/schemas/cloud.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ class CloudProjectCreateRequest(BaseModel):
4141
class CloudProjectCreateResponse(BaseModel):
4242
"""Response from creating a cloud project."""
4343

44-
name: str = Field(..., description="Created project name")
45-
path: str = Field(..., description="Created project path")
46-
message: str = Field(default="", description="Success message")
44+
message: str = Field(..., description="Status message about the project creation")
45+
status: str = Field(..., description="Status of the creation (success or error)")
46+
default: bool = Field(..., description="True if the project was set as the default")
47+
old_project: dict | None = Field(None, description="Information about the previous project")
48+
new_project: dict | None = Field(None, description="Information about the newly created project")

tests/cli/test_bisync_commands.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -442,9 +442,11 @@ async def test_create_cloud_project_generates_permalink(self):
442442
mock_permalink.return_value = "my-new-project"
443443
mock_response = Mock()
444444
mock_response.json.return_value = {
445-
"name": "My New Project",
446-
"path": "my-new-project",
447-
"message": "Created",
445+
"message": "Project 'My New Project' added successfully",
446+
"status": "success",
447+
"default": False,
448+
"old_project": None,
449+
"new_project": {"name": "My New Project", "path": "my-new-project"},
448450
}
449451
mock_request.return_value = mock_response
450452

tests/cli/test_cloud_utils.py

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -110,18 +110,20 @@ async def test_creates_project_successfully(self):
110110

111111
mock_response = Mock()
112112
mock_response.json.return_value = {
113-
"name": "My Project",
114-
"path": "my-project",
115-
"message": "Created successfully",
113+
"message": "Project 'My Project' added successfully",
114+
"status": "success",
115+
"default": False,
116+
"old_project": None,
117+
"new_project": {"name": "My Project", "path": "my-project"},
116118
}
117119
mock_request.return_value = mock_response
118120

119121
result = await create_cloud_project("My Project")
120122

121123
# Verify result
122-
assert result.name == "My Project"
123-
assert result.path == "my-project"
124-
assert result.message == "Created successfully"
124+
assert result.message == "Project 'My Project' added successfully"
125+
assert result.status == "success"
126+
assert result.default is False
125127

126128
# Verify permalink was generated
127129
mock_permalink.assert_called_once_with("My Project")
@@ -150,9 +152,11 @@ async def test_generates_permalink_from_name(self):
150152

151153
mock_response = Mock()
152154
mock_response.json.return_value = {
153-
"name": "Test Project 123",
154-
"path": "test-project-123",
155-
"message": "Created",
155+
"message": "Project 'Test Project 123' added successfully",
156+
"status": "success",
157+
"default": False,
158+
"old_project": None,
159+
"new_project": {"name": "Test Project 123", "path": "test-project-123"},
156160
}
157161
mock_request.return_value = mock_response
158162

@@ -191,9 +195,11 @@ async def test_strips_trailing_slash_from_host(self):
191195

192196
mock_response = Mock()
193197
mock_response.json.return_value = {
194-
"name": "Project",
195-
"path": "project",
196-
"message": "Created",
198+
"message": "Project 'Project' added successfully",
199+
"status": "success",
200+
"default": False,
201+
"old_project": None,
202+
"new_project": {"name": "Project", "path": "project"},
197203
}
198204
mock_request.return_value = mock_response
199205

0 commit comments

Comments
 (0)