Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/norbix_python/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

DEFAULT_BASE_URL_API = "https://api.norbix.ai"
DEFAULT_BASE_URL_HUB = "https://hub.norbix.ai"
DEFAULT_VERSION = "v2"
DEFAULT_VERSION = "v3"
DEFAULT_TIMEOUT = 30.0


Expand Down
32 changes: 16 additions & 16 deletions tests/api/test_ai.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def test_api_ai_get_end_user_chat_availability_request_shape() -> None:
client.api.ai.get_end_user_chat_availability()
assert transport.last_request is not None
assert transport.last_request['method'] == 'GET'
assert transport.last_request['url'].endswith('/v2/ai/chat/availability')
assert transport.last_request['url'].endswith('/v3/ai/chat/availability')
assert transport.last_request['headers']['authorization'] == 'Bearer test-token'
assert transport.last_request['headers']['x-cm-projectid'] == 'test-project'

Expand All @@ -37,7 +37,7 @@ def test_api_ai_list_end_user_chat_sessions_request_shape() -> None:
client.api.ai.list_end_user_chat_sessions()
assert transport.last_request is not None
assert transport.last_request['method'] == 'GET'
assert transport.last_request['url'].endswith('/v2/ai/chat/sessions')
assert transport.last_request['url'].endswith('/v3/ai/chat/sessions')
assert transport.last_request['headers']['authorization'] == 'Bearer test-token'
assert transport.last_request['headers']['x-cm-projectid'] == 'test-project'

Expand All @@ -47,7 +47,7 @@ def test_api_ai_create_end_user_chat_session_request_shape() -> None:
client.api.ai.create_end_user_chat_session()
assert transport.last_request is not None
assert transport.last_request['method'] == 'POST'
assert transport.last_request['url'].endswith('/v2/ai/chat/sessions')
assert transport.last_request['url'].endswith('/v3/ai/chat/sessions')
assert transport.last_request['headers']['authorization'] == 'Bearer test-token'
assert transport.last_request['headers']['x-cm-projectid'] == 'test-project'

Expand All @@ -57,7 +57,7 @@ def test_api_ai_get_end_user_chat_session_request_shape() -> None:
client.api.ai.get_end_user_chat_session(session_id="stub-SessionId")
assert transport.last_request is not None
assert transport.last_request['method'] == 'GET'
assert transport.last_request['url'].endswith('/v2/ai/chat/sessions/stub-SessionId')
assert transport.last_request['url'].endswith('/v3/ai/chat/sessions/stub-SessionId')
assert transport.last_request['headers']['authorization'] == 'Bearer test-token'
assert transport.last_request['headers']['x-cm-projectid'] == 'test-project'

Expand All @@ -67,7 +67,7 @@ def test_api_ai_rename_end_user_chat_session_request_shape() -> None:
client.api.ai.rename_end_user_chat_session(session_id="stub-SessionId")
assert transport.last_request is not None
assert transport.last_request['method'] == 'PATCH'
assert transport.last_request['url'].endswith('/v2/ai/chat/sessions/stub-SessionId')
assert transport.last_request['url'].endswith('/v3/ai/chat/sessions/stub-SessionId')
assert transport.last_request['headers']['authorization'] == 'Bearer test-token'
assert transport.last_request['headers']['x-cm-projectid'] == 'test-project'

Expand All @@ -77,7 +77,7 @@ def test_api_ai_delete_end_user_chat_session_request_shape() -> None:
client.api.ai.delete_end_user_chat_session(session_id="stub-SessionId")
assert transport.last_request is not None
assert transport.last_request['method'] == 'DELETE'
assert transport.last_request['url'].endswith('/v2/ai/chat/sessions/stub-SessionId')
assert transport.last_request['url'].endswith('/v3/ai/chat/sessions/stub-SessionId')
assert transport.last_request['headers']['authorization'] == 'Bearer test-token'
assert transport.last_request['headers']['x-cm-projectid'] == 'test-project'

Expand All @@ -87,7 +87,7 @@ def test_api_ai_pin_end_user_chat_session_request_shape() -> None:
client.api.ai.pin_end_user_chat_session(session_id="stub-SessionId")
assert transport.last_request is not None
assert transport.last_request['method'] == 'PUT'
assert transport.last_request['url'].endswith('/v2/ai/chat/sessions/stub-SessionId/pin')
assert transport.last_request['url'].endswith('/v3/ai/chat/sessions/stub-SessionId/pin')
assert transport.last_request['headers']['authorization'] == 'Bearer test-token'
assert transport.last_request['headers']['x-cm-projectid'] == 'test-project'

Expand All @@ -97,7 +97,7 @@ def test_api_ai_archive_end_user_chat_session_request_shape() -> None:
client.api.ai.archive_end_user_chat_session(session_id="stub-SessionId")
assert transport.last_request is not None
assert transport.last_request['method'] == 'PUT'
assert transport.last_request['url'].endswith('/v2/ai/chat/sessions/stub-SessionId/archive')
assert transport.last_request['url'].endswith('/v3/ai/chat/sessions/stub-SessionId/archive')
assert transport.last_request['headers']['authorization'] == 'Bearer test-token'
assert transport.last_request['headers']['x-cm-projectid'] == 'test-project'

Expand All @@ -107,7 +107,7 @@ def test_api_ai_get_end_user_chat_entries_request_shape() -> None:
client.api.ai.get_end_user_chat_entries(session_id="stub-SessionId")
assert transport.last_request is not None
assert transport.last_request['method'] == 'GET'
assert transport.last_request['url'].endswith('/v2/ai/chat/sessions/stub-SessionId/entries')
assert transport.last_request['url'].endswith('/v3/ai/chat/sessions/stub-SessionId/entries')
assert transport.last_request['headers']['authorization'] == 'Bearer test-token'
assert transport.last_request['headers']['x-cm-projectid'] == 'test-project'

Expand All @@ -117,7 +117,7 @@ def test_api_ai_set_end_user_chat_entry_feedback_request_shape() -> None:
client.api.ai.set_end_user_chat_entry_feedback(session_id="stub-SessionId", entry_id="stub-EntryId")
assert transport.last_request is not None
assert transport.last_request['method'] == 'PUT'
assert transport.last_request['url'].endswith('/v2/ai/chat/sessions/stub-SessionId/entries/stub-EntryId/feedback')
assert transport.last_request['url'].endswith('/v3/ai/chat/sessions/stub-SessionId/entries/stub-EntryId/feedback')
assert transport.last_request['headers']['authorization'] == 'Bearer test-token'
assert transport.last_request['headers']['x-cm-projectid'] == 'test-project'

Expand All @@ -127,7 +127,7 @@ def test_api_ai_list_end_user_chat_attachments_request_shape() -> None:
client.api.ai.list_end_user_chat_attachments(session_id="stub-SessionId")
assert transport.last_request is not None
assert transport.last_request['method'] == 'GET'
assert transport.last_request['url'].endswith('/v2/ai/chat/sessions/stub-SessionId/attachments')
assert transport.last_request['url'].endswith('/v3/ai/chat/sessions/stub-SessionId/attachments')
assert transport.last_request['headers']['authorization'] == 'Bearer test-token'
assert transport.last_request['headers']['x-cm-projectid'] == 'test-project'

Expand All @@ -137,7 +137,7 @@ def test_api_ai_upload_end_user_chat_attachment_request_shape() -> None:
client.api.ai.upload_end_user_chat_attachment(session_id="stub-SessionId")
assert transport.last_request is not None
assert transport.last_request['method'] == 'POST'
assert transport.last_request['url'].endswith('/v2/ai/chat/sessions/stub-SessionId/attachments')
assert transport.last_request['url'].endswith('/v3/ai/chat/sessions/stub-SessionId/attachments')
assert transport.last_request['headers']['authorization'] == 'Bearer test-token'
assert transport.last_request['headers']['x-cm-projectid'] == 'test-project'

Expand All @@ -147,7 +147,7 @@ def test_api_ai_delete_end_user_chat_attachment_request_shape() -> None:
client.api.ai.delete_end_user_chat_attachment(attachment_id="stub-AttachmentId")
assert transport.last_request is not None
assert transport.last_request['method'] == 'DELETE'
assert transport.last_request['url'].endswith('/v2/ai/chat/attachments/stub-AttachmentId')
assert transport.last_request['url'].endswith('/v3/ai/chat/attachments/stub-AttachmentId')
assert transport.last_request['headers']['authorization'] == 'Bearer test-token'
assert transport.last_request['headers']['x-cm-projectid'] == 'test-project'

Expand All @@ -157,7 +157,7 @@ def test_api_ai_list_end_user_chat_memory_request_shape() -> None:
client.api.ai.list_end_user_chat_memory()
assert transport.last_request is not None
assert transport.last_request['method'] == 'GET'
assert transport.last_request['url'].endswith('/v2/ai/chat/memory')
assert transport.last_request['url'].endswith('/v3/ai/chat/memory')
assert transport.last_request['headers']['authorization'] == 'Bearer test-token'
assert transport.last_request['headers']['x-cm-projectid'] == 'test-project'

Expand All @@ -167,7 +167,7 @@ def test_api_ai_forget_end_user_chat_memory_request_shape() -> None:
client.api.ai.forget_end_user_chat_memory(note_id="stub-NoteId")
assert transport.last_request is not None
assert transport.last_request['method'] == 'DELETE'
assert transport.last_request['url'].endswith('/v2/ai/chat/memory/stub-NoteId')
assert transport.last_request['url'].endswith('/v3/ai/chat/memory/stub-NoteId')
assert transport.last_request['headers']['authorization'] == 'Bearer test-token'
assert transport.last_request['headers']['x-cm-projectid'] == 'test-project'

Expand All @@ -177,7 +177,7 @@ def test_api_ai_start_end_user_chat_turn_request_shape() -> None:
client.api.ai.start_end_user_chat_turn()
assert transport.last_request is not None
assert transport.last_request['method'] == 'POST'
assert transport.last_request['url'].endswith('/v2/ai/chat/turn')
assert transport.last_request['url'].endswith('/v3/ai/chat/turn')
assert transport.last_request['headers']['authorization'] == 'Bearer test-token'
assert transport.last_request['headers']['x-cm-projectid'] == 'test-project'

8 changes: 4 additions & 4 deletions tests/api/test_database.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ def test_api_database_find_own_hits_the_own_route_with_query_values() -> None:
assert transport.last_request["method"] == "GET"
url = urlparse(transport.last_request["url"])
assert url.netloc == "api.norbix.ai"
assert url.path == "/v2/database/collections/products/own"
assert url.path == "/v3/database/collections/products/own"
assert parse_qs(url.query) == {"pageSize": ["10"]}


Expand All @@ -182,7 +182,7 @@ def test_api_database_find_merged_term_tree_hits_the_merged_tree_route() -> None
assert transport.last_request["method"] == "GET"
url = urlparse(transport.last_request["url"])
assert url.netloc == "api.norbix.ai"
assert url.path == "/v2/database/taxonomies/services/merged-tree"
assert url.path == "/v3/database/taxonomies/services/merged-tree"


def test_api_database_audit_methods_exist_on_the_async_module() -> None:
Expand All @@ -207,6 +207,6 @@ async def run() -> None:
asyncio.run(run())

assert [(r.method, urlparse(str(r.url)).path) for r in seen] == [
("GET", "/v2/database/collections/products/own"),
("GET", "/v2/database/taxonomies/services/merged-tree"),
("GET", "/v3/database/collections/products/own"),
("GET", "/v3/database/taxonomies/services/merged-tree"),
]
4 changes: 2 additions & 2 deletions tests/api/test_database_last_wave.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ def test_every_api_database_method_sends_its_documented_verb_and_path() -> None:
assert transport.last_request is not None
assert transport.last_request["method"] == verb, name
sent = urlparse(transport.last_request["url"]).path
pattern = "^" + _TOKEN.sub("[^/]+", path.replace("{version}", "v2")) + "$"
pattern = "^" + _TOKEN.sub("[^/]+", path.replace("{version}", "v3")) + "$"
assert re.match(pattern, sent), (name, sent)


Expand All @@ -128,7 +128,7 @@ def test_update_many_sends_all_records_in_the_body() -> None:
client.api.database.update_many("products", filter="{}", update='{"seen": true}', allRecords=True)
assert transport.last_request is not None
assert transport.last_request["method"] == "PUT"
assert urlparse(transport.last_request["url"]).path == "/v2/database/collections/products/many"
assert urlparse(transport.last_request["url"]).path == "/v3/database/collections/products/many"
assert json.loads(transport.last_request["body"]) == {
"filter": "{}",
"update": '{"seen": true}',
Expand Down
10 changes: 5 additions & 5 deletions tests/api/test_database_schema_content.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,23 +94,23 @@ def test_find_sends_expand_references_in_the_query() -> None:
client, transport = _client()
client.api.database.find("articles", expand_references=True, pageSize=10)
assert transport.last_request is not None
assert urlparse(transport.last_request["url"]).path == "/v2/database/collections/articles"
assert urlparse(transport.last_request["url"]).path == "/v3/database/collections/articles"
assert _query(transport) == {"expandReferences": ["true"], "pageSize": ["10"]}


def test_find_one_sends_expand_references_in_the_query() -> None:
client, transport = _client()
client.api.database.find_one("articles", "rec_1", expand_references=True)
assert transport.last_request is not None
assert urlparse(transport.last_request["url"]).path == "/v2/database/collections/articles/rec_1"
assert urlparse(transport.last_request["url"]).path == "/v3/database/collections/articles/rec_1"
assert _query(transport) == {"expandReferences": ["true"]}


def test_find_own_sends_expand_references_in_the_query() -> None:
client, transport = _client()
client.api.database.find_own("articles", expand_references=True)
assert transport.last_request is not None
assert urlparse(transport.last_request["url"]).path == "/v2/database/collections/articles/own"
assert urlparse(transport.last_request["url"]).path == "/v3/database/collections/articles/own"
assert _query(transport) == {"expandReferences": ["true"]}


Expand Down Expand Up @@ -204,7 +204,7 @@ def test_update_one_sends_array_filters_string_as_given() -> None:
)
assert transport.last_request is not None
assert transport.last_request["method"] == "PUT"
assert urlparse(transport.last_request["url"]).path == "/v2/database/collections/orders/rec_1"
assert urlparse(transport.last_request["url"]).path == "/v3/database/collections/orders/rec_1"
assert _body(transport) == {
"update": '{"lines.$[line].qty": 3, "meta.words": 130}',
"arrayFilters": '[{"line.sku": "A-1"}]',
Expand Down Expand Up @@ -232,7 +232,7 @@ def test_update_many_sends_array_filters_in_the_body() -> None:
array_filters="[]",
)
assert transport.last_request is not None
assert urlparse(transport.last_request["url"]).path == "/v2/database/collections/orders/many"
assert urlparse(transport.last_request["url"]).path == "/v3/database/collections/orders/many"
assert _body(transport) == {"filter": '{"status": "open"}', "update": '{"lines.$[].qty": 1}', "arrayFilters": "[]"}


Expand Down
8 changes: 4 additions & 4 deletions tests/api/test_public.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ def test_public_project_config_goes_to_the_api_host_without_auth(bearer_token: s
assert result == {"displayName": "Shop"}
assert seen[0].method == "GET"
assert seen[0].url.host == "api.norbix.ai"
assert seen[0].url.path == "/v2/public/projects/pr_1/config"
assert seen[0].url.path == "/v3/public/projects/pr_1/config"
assert "authorization" not in seen[0].headers


Expand All @@ -57,7 +57,7 @@ def test_public_project_legal_puts_project_and_kind_in_the_path() -> None:

assert result == LEGAL
assert seen[0].method == "GET"
assert seen[0].url.path == "/v2/public/projects/pr_1/legal/terms"
assert seen[0].url.path == "/v3/public/projects/pr_1/legal/terms"
assert "authorization" not in seen[0].headers
assert client.Public is client.public

Expand All @@ -80,7 +80,7 @@ async def run() -> None:
asyncio.run(run())

assert [r.url.path for r in seen] == [
"/v2/public/projects/pr_1/config",
"/v2/public/projects/pr_1/legal/privacy",
"/v3/public/projects/pr_1/config",
"/v3/public/projects/pr_1/legal/privacy",
]
assert all("authorization" not in r.headers for r in seen)
Loading
Loading