diff --git a/.github/workflows/audit.yml b/.github/workflows/audit.yml index 5b3509fc..c1637284 100644 --- a/.github/workflows/audit.yml +++ b/.github/workflows/audit.yml @@ -141,7 +141,7 @@ jobs: sdk: stable - uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: - go-version: "1.26.5" + go-version: "1.26.6" - name: Install OSV Scanner run: go install github.com/google/osv-scanner/v2/cmd/osv-scanner@${{ env.OSV_SCANNER_VERSION }} - name: Audit Dart templates @@ -167,7 +167,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: - go-version: "1.26.5" + go-version: "1.26.6" cache: false - name: Install govulncheck run: go install golang.org/x/vuln/cmd/govulncheck@v1.1.4 @@ -247,7 +247,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: - go-version: "1.26.5" + go-version: "1.26.6" - name: Install OSV Scanner run: go install github.com/google/osv-scanner/v2/cmd/osv-scanner@${{ env.OSV_SCANNER_VERSION }} - name: Audit Maven coordinates in deps.gradle diff --git a/python-ml/starter/requirements.txt b/python-ml/starter/requirements.txt index c6db8b33..37e088f6 100644 --- a/python-ml/starter/requirements.txt +++ b/python-ml/starter/requirements.txt @@ -1,2 +1,2 @@ -appwrite +appwrite==23.0.0 numpy \ No newline at end of file diff --git a/python-ml/starter/src/main.py b/python-ml/starter/src/main.py index ef59b4e3..a7aa894b 100644 --- a/python-ml/starter/src/main.py +++ b/python-ml/starter/src/main.py @@ -12,7 +12,7 @@ def main(context): Client() .set_endpoint(os.environ["APPWRITE_FUNCTION_API_ENDPOINT"]) .set_project(os.environ["APPWRITE_FUNCTION_PROJECT_ID"]) - .set_key(context.req.headers["x-appwrite-key"]) + .set_key(context.req.headers.get("x-appwrite-key", "")) ) users = Users(client) @@ -20,7 +20,7 @@ def main(context): response = users.list() # Log messages and errors to the Appwrite Console # These logs won't be seen by your end users - context.log("Total users: " + str(response["total"])) + context.log("Total users: " + str(response.total)) except AppwriteException as err: context.error("Could not list users: " + repr(err)) diff --git a/python/starter/requirements.txt b/python/starter/requirements.txt index 3217f138..0d370b0b 100644 --- a/python/starter/requirements.txt +++ b/python/starter/requirements.txt @@ -1 +1 @@ -appwrite +appwrite==23.0.0 diff --git a/python/starter/src/main.py b/python/starter/src/main.py index c2472439..94816573 100644 --- a/python/starter/src/main.py +++ b/python/starter/src/main.py @@ -11,7 +11,7 @@ def main(context): Client() .set_endpoint(os.environ["APPWRITE_FUNCTION_API_ENDPOINT"]) .set_project(os.environ["APPWRITE_FUNCTION_PROJECT_ID"]) - .set_key(context.req.headers["x-appwrite-key"]) + .set_key(context.req.headers.get("x-appwrite-key", "")) ) users = Users(client) @@ -19,7 +19,7 @@ def main(context): response = users.list() # Log messages and errors to the Appwrite Console # These logs won't be seen by your end users - context.log("Total users: " + str(response["total"])) + context.log("Total users: " + str(response.total)) except AppwriteException as err: context.error("Could not list users: " + repr(err)) diff --git a/python/storage-cleaner/requirements.txt b/python/storage-cleaner/requirements.txt index 7a6977ed..b0d9f6db 100644 --- a/python/storage-cleaner/requirements.txt +++ b/python/storage-cleaner/requirements.txt @@ -1 +1 @@ -appwrite \ No newline at end of file +appwrite==23.0.0 \ No newline at end of file diff --git a/python/storage-cleaner/src/appwrite_service.py b/python/storage-cleaner/src/appwrite_service.py index 8a22b573..26d1553b 100644 --- a/python/storage-cleaner/src/appwrite_service.py +++ b/python/storage-cleaner/src/appwrite_service.py @@ -46,7 +46,7 @@ def clean_bucket(self, bucket_id: str): raise RuntimeError( f"Failed to list files from bucket {bucket_id}: {str(e)}" ) from e - files = response.get("files", []) + files = response.files if not files: break @@ -54,14 +54,14 @@ def clean_bucket(self, bucket_id: str): batch_failed = False with ThreadPoolExecutor() as executor: future_to_file = { - executor.submit(self.storage.delete_file, bucket_id, f.get("$id")): f + executor.submit(self.storage.delete_file, bucket_id, f.id): f for f in files - if f.get("$id") + if f.id } for future in as_completed(future_to_file): file_info = future_to_file[future] - file_id = file_info.get("$id") + file_id = file_info.id try: future.result() deleted_files_count += 1 diff --git a/python/sync_with_algolia/requirements.txt b/python/sync_with_algolia/requirements.txt index dc70171f..ad66ca26 100644 --- a/python/sync_with_algolia/requirements.txt +++ b/python/sync_with_algolia/requirements.txt @@ -1,2 +1,2 @@ -appwrite +appwrite==23.0.0 algoliasearch \ No newline at end of file diff --git a/python/sync_with_algolia/src/main.py b/python/sync_with_algolia/src/main.py index d2af74ee..21d35bc0 100644 --- a/python/sync_with_algolia/src/main.py +++ b/python/sync_with_algolia/src/main.py @@ -1,6 +1,7 @@ import os from algoliasearch.search_client import SearchClient from appwrite.client import Client +from appwrite.models import Document from appwrite.services.databases import Databases from appwrite.query import Query from .utils import get_static_file, throw_if_missing, interpolate @@ -55,16 +56,19 @@ def main(context): queries, ) - if len(response.documents) > 0: - cursor = response.documents[len(response.documents) - 1]["$id"] + documents: list[Document] = response.documents + + if len(documents) > 0: + cursor = documents[-1].id else: context.log("No more documents found.") cursor = None break - context.log(f"Syncing chunk of {len(response.documents)} documents...") + context.log(f"Syncing chunk of {len(documents)} documents...") documents_with_object_ids = [ - {"objectID": document["$id"], **document} for document in response.documents + {"objectID": document.id, "$id": document.id, **document.data} + for document in documents ] index.save_objects(documents_with_object_ids) diff --git a/python/sync_with_meilisearch/requirements.txt b/python/sync_with_meilisearch/requirements.txt index a4e76ddd..2ba2bf3b 100644 --- a/python/sync_with_meilisearch/requirements.txt +++ b/python/sync_with_meilisearch/requirements.txt @@ -1,2 +1,2 @@ -appwrite +appwrite==23.0.0 meilisearch \ No newline at end of file diff --git a/python/sync_with_meilisearch/src/main.py b/python/sync_with_meilisearch/src/main.py index 3179ac18..3a7d7018 100644 --- a/python/sync_with_meilisearch/src/main.py +++ b/python/sync_with_meilisearch/src/main.py @@ -1,5 +1,6 @@ import os from appwrite.client import Client +from appwrite.models import Document from appwrite.services.databases import Databases from meilisearch import Client as MeiliClient from .utils import get_static_file, interpolate, throw_if_missing @@ -47,17 +48,20 @@ def main(context): queries ) - documents = response['documents'] + documents: list[Document] = response.documents if len(documents) > 0: - cursor = documents[-1]['$id'] + cursor = documents[-1].id else: context.log('No more documents found.') cursor = None break context.log(f'Syncing chunk of {len(documents)} documents...') - index.add_documents(documents, {'primaryKey': '$id'}) + index.add_documents( + [{"$id": document.id, **document.data} for document in documents], + {'primaryKey': '$id'}, + ) context.log('Sync finished.') diff --git a/python/sync_with_qdrant/requirements.txt b/python/sync_with_qdrant/requirements.txt index b11720c6..3fb23c0b 100644 --- a/python/sync_with_qdrant/requirements.txt +++ b/python/sync_with_qdrant/requirements.txt @@ -1,3 +1,3 @@ -appwrite +appwrite==23.0.0 qdrant-client openai \ No newline at end of file diff --git a/python/sync_with_qdrant/src/appwrite.py b/python/sync_with_qdrant/src/appwrite.py index d283696d..152ba3d3 100644 --- a/python/sync_with_qdrant/src/appwrite.py +++ b/python/sync_with_qdrant/src/appwrite.py @@ -1,9 +1,10 @@ import os from appwrite.client import Client +from appwrite.models import Document from appwrite.services.databases import Databases from appwrite.query import Query -def get_all_documents(api_key): +def get_all_documents(api_key) -> list[Document]: client = Client() client.set_endpoint(os.environ.get("APPWRITE_FUNCTION_API_ENDPOINT")) client.set_project(os.environ["APPWRITE_FUNCTION_PROJECT_ID"]) @@ -12,7 +13,7 @@ def get_all_documents(api_key): databases = Databases(client) cursor = None - cumulative = [] + cumulative: list[Document] = [] while True: queries = [Query.limit(1000)] @@ -25,10 +26,10 @@ def get_all_documents(api_key): queries, ) - documents = response["documents"] + documents: list[Document] = response.documents if len(documents) > 0: - cursor = documents[-1]["$id"] + cursor = documents[-1].id else: break cumulative.extend(documents) diff --git a/python/sync_with_qdrant/src/main.py b/python/sync_with_qdrant/src/main.py index ac3d09ed..49cbb6e7 100644 --- a/python/sync_with_qdrant/src/main.py +++ b/python/sync_with_qdrant/src/main.py @@ -59,12 +59,13 @@ def main(context): documents = get_all_documents(context.req.headers['x-appwrite-key']) points = [] for index, document in enumerate(documents): + payload = {"$id": document.id, **document.data} response = openai.embeddings.create( - input=json.dumps(document), model="text-embedding-3-small" + input=json.dumps(payload), model="text-embedding-3-small" ) point = models.PointStruct( - id=index, vector=response.data[0].embedding, payload=dict(document) + id=index, vector=response.data[0].embedding, payload=payload ) points.append(point)