Merge remote-tracking branch 'origin/1.6.x' into fix-dead-connections

# Conflicts:
#	composer.json
#	composer.lock
This commit is contained in:
Jake Barnby
2025-01-21 21:38:55 +13:00
296 changed files with 446 additions and 47 deletions
+3 -1
View File
@@ -237,6 +237,7 @@ jobs:
path: benchmark.json
retention-days: 7
- name: Find Comment
if: github.event.pull_request.head.repo.full_name == github.repository
uses: peter-evans/find-comment@v3
id: fc
with:
@@ -244,9 +245,10 @@ jobs:
comment-author: 'github-actions[bot]'
body-includes: Benchmark results
- name: Comment on PR
if: github.event.pull_request.head.repo.full_name == github.repository
uses: peter-evans/create-or-update-comment@v4
with:
comment-id: ${{ steps.fc.outputs.comment-id }}
issue-number: ${{ github.event.pull_request.number }}
body-path: benchmark.txt
edit-mode: replace
edit-mode: replace
+5
View File
@@ -726,6 +726,11 @@ return [
'description' => 'Index invalid.',
'code' => 400,
],
Exception::INDEX_DEPENDENCY => [
'name' => Exception::INDEX_DEPENDENCY,
'description' => 'Attribute cannot be renamed or deleted. Please remove the associated index first.',
'code' => 409,
],
/** Project Errors */
Exception::PROJECT_NOT_FOUND => [
+1 -1
View File
@@ -217,7 +217,7 @@ return [
[
'key' => 'cli',
'name' => 'Command Line',
'version' => '6.0.0',
'version' => '6.2.0',
'url' => 'https://github.com/appwrite/sdk-for-cli',
'package' => 'https://www.npmjs.com/package/appwrite-cli',
'enabled' => true,
+13
View File
@@ -36,6 +36,7 @@ use Utopia\Database\Query;
use Utopia\Database\Validator\Authorization;
use Utopia\Database\Validator\Datetime as DatetimeValidator;
use Utopia\Database\Validator\Index as IndexValidator;
use Utopia\Database\Validator\IndexDependency as IndexDependencyValidator;
use Utopia\Database\Validator\Key;
use Utopia\Database\Validator\Permissions;
use Utopia\Database\Validator\Queries;
@@ -2421,6 +2422,18 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/attributes/:key
throw new Exception(Exception::ATTRIBUTE_NOT_FOUND);
}
/**
* Check index dependency
*/
$validator = new IndexDependencyValidator(
$collection->getAttribute('indexes'),
$dbForProject->getAdapter()->getSupportForCastIndexArray(),
);
if (! $validator->isValid($attribute)) {
throw new Exception(Exception::INDEX_DEPENDENCY);
}
// Only update status if removing available attribute
if ($attribute->getAttribute('status') === 'available') {
$attribute = $dbForProject->updateDocument('attributes', $attribute->getId(), $attribute->setAttribute('status', 'deleting'));
+4
View File
@@ -820,6 +820,10 @@ App::error()
break;
case 'Utopia\Database\Exception\NotFound':
$error = new AppwriteException(AppwriteException::COLLECTION_NOT_FOUND, $error->getMessage(), previous: $error);
break;
case 'Utopia\Database\Exception\Dependency':
$error = new AppwriteException(AppwriteException::INDEX_DEPENDENCY, null, previous: $error);
break;
}
$code = $error->getCode();
+42 -6
View File
@@ -188,13 +188,14 @@ App::init()
->inject('request')
->inject('dbForPlatform')
->inject('dbForProject')
->inject('queueForAudits')
->inject('project')
->inject('user')
->inject('session')
->inject('servers')
->inject('mode')
->inject('team')
->action(function (App $utopia, Request $request, Database $dbForPlatform, Database $dbForProject, Document $project, Document $user, ?Document $session, array $servers, string $mode, Document $team) {
->action(function (App $utopia, Request $request, Database $dbForPlatform, Database $dbForProject, Audit $queueForAudits, Document $project, Document $user, ?Document $session, array $servers, string $mode, Document $team) {
$route = $utopia->getRoute();
if ($project->isEmpty()) {
@@ -246,9 +247,10 @@ App::init()
$user = new Document([
'$id' => '',
'status' => true,
'type' => Auth::ACTIVITY_TYPE_APP,
'email' => 'app.' . $project->getId() . '@service.' . $request->getHostname(),
'password' => '',
'name' => $project->getAttribute('name', 'Untitled'),
'name' => 'Dynamic Key',
]);
$role = Auth::USER_ROLE_APPS;
@@ -256,6 +258,8 @@ App::init()
Authorization::setRole(Auth::USER_ROLE_APPS);
Authorization::setDefaultStatus(false); // Cancel security segmentation for API keys.
$queueForAudits->setUser($user);
}
} elseif ($keyType === API_KEY_STANDARD) {
// No underline means no prefix. Backwards compatibility.
@@ -267,9 +271,10 @@ App::init()
$user = new Document([
'$id' => '',
'status' => true,
'type' => Auth::ACTIVITY_TYPE_APP,
'email' => 'app.' . $project->getId() . '@service.' . $request->getHostname(),
'password' => '',
'name' => $project->getAttribute('name', 'Untitled'),
'name' => $key->getAttribute('name', 'UNKNOWN'),
]);
$role = Auth::USER_ROLE_APPS;
@@ -304,6 +309,8 @@ App::init()
$dbForPlatform->purgeCachedDocument('projects', $project->getId());
}
}
$queueForAudits->setUser($user);
}
}
}
@@ -511,8 +518,15 @@ App::init()
->setIP($request->getIP())
->setHostname($request->getHostname())
->setEvent($route->getLabel('audits.event', ''))
->setProject($project)
->setUser($user);
->setProject($project);
/* If a session exists, use the user associated with the session */
if (!$user->isEmpty()) {
$userClone = clone $user;
// $user doesn't support `type` and can cause unintended effects.
$userClone->setAttribute('type', Auth::ACTIVITY_TYPE_USER);
$queueForAudits->setUser($userClone);
}
$queueForDeletes->setProject($project);
$queueForDatabase->setProject($project);
@@ -720,10 +734,32 @@ App::shutdown()
}
if (!$user->isEmpty()) {
$userClone = clone $user;
// $user doesn't support `type` and can cause unintended effects.
$userClone->setAttribute('type', Auth::ACTIVITY_TYPE_USER);
$queueForAudits->setUser($userClone);
} elseif ($queueForAudits->getUser() === null || $queueForAudits->getUser()->isEmpty()) {
/**
* User in the request is empty, and no user was set for auditing previously.
* This indicates:
* - No API Key was used.
* - No active session exists.
*
* Therefore, we consider this an anonymous request and create a relevant user.
*/
$user = new Document([
'$id' => '',
'status' => true,
'type' => Auth::ACTIVITY_TYPE_GUEST,
'email' => 'guest.' . $project->getId() . '@service.' . $request->getHostname(),
'password' => '',
'name' => 'Guest',
]);
$queueForAudits->setUser($user);
}
if (!empty($queueForAudits->getResource()) && !empty($queueForAudits->getUser()->getId())) {
if (!empty($queueForAudits->getResource()) && !$queueForAudits->getUser()->isEmpty()) {
/**
* audits.payload is switched to default true
* in order to auto audit payload for all endpoints
+1 -1
View File
@@ -771,7 +771,7 @@ Structure::addFormat(APP_DATABASE_ATTRIBUTE_DATETIME, function () {
}, Database::VAR_DATETIME);
Structure::addFormat(APP_DATABASE_ATTRIBUTE_ENUM, function ($attribute) {
$elements = $attribute['formatOptions']['elements'];
$elements = $attribute['formatOptions']['elements'] ?? [];
return new WhiteList($elements, true);
}, Database::VAR_STRING);
+1 -1
View File
@@ -84,7 +84,7 @@
},
"require-dev": {
"ext-fileinfo": "*",
"appwrite/sdk-generator": "0.39.28",
"appwrite/sdk-generator": "0.39.30",
"phpunit/phpunit": "9.5.20",
"swoole/ide-helper": "5.1.2",
"textalk/websocket": "1.5.7",
Generated
+13 -13
View File
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "c38847e7d2bb4ebe529962b4b345b1d6",
"content-hash": "5bdba72c5e9d3003d63df8bcec53c299",
"packages": [
{
"name": "adhocore/jwt",
@@ -3476,16 +3476,16 @@
},
{
"name": "utopia-php/database",
"version": "0.56.3",
"version": "0.56.4",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/database.git",
"reference": "b53f7018fd9c9feff4e2235a0011f2f48609f19c"
"reference": "240478a60797124a885ceac40046fe47c22415b7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/database/zipball/b53f7018fd9c9feff4e2235a0011f2f48609f19c",
"reference": "b53f7018fd9c9feff4e2235a0011f2f48609f19c",
"url": "https://api.github.com/repos/utopia-php/database/zipball/240478a60797124a885ceac40046fe47c22415b7",
"reference": "240478a60797124a885ceac40046fe47c22415b7",
"shasum": ""
},
"require": {
@@ -3526,9 +3526,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/database/issues",
"source": "https://github.com/utopia-php/database/tree/0.56.3"
"source": "https://github.com/utopia-php/database/tree/0.56.4"
},
"time": "2025-01-17T04:04:20+00:00"
"time": "2025-01-20T09:22:08+00:00"
},
{
"name": "utopia-php/domains",
@@ -4807,16 +4807,16 @@
"packages-dev": [
{
"name": "appwrite/sdk-generator",
"version": "0.39.28",
"version": "0.39.30",
"source": {
"type": "git",
"url": "https://github.com/appwrite/sdk-generator.git",
"reference": "6ff467858fe418e364460da905139216570a5d5e"
"reference": "830198d501f51163514305befefb775106a7198b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/6ff467858fe418e364460da905139216570a5d5e",
"reference": "6ff467858fe418e364460da905139216570a5d5e",
"url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/830198d501f51163514305befefb775106a7198b",
"reference": "830198d501f51163514305befefb775106a7198b",
"shasum": ""
},
"require": {
@@ -4852,9 +4852,9 @@
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
"support": {
"issues": "https://github.com/appwrite/sdk-generator/issues",
"source": "https://github.com/appwrite/sdk-generator/tree/0.39.28"
"source": "https://github.com/appwrite/sdk-generator/tree/0.39.30"
},
"time": "2024-12-30T11:17:25+00:00"
"time": "2025-01-20T06:10:03+00:00"
},
{
"name": "doctrine/annotations",
@@ -3,4 +3,5 @@ appwrite databases updateBooleanAttribute \
--collectionId <COLLECTION_ID> \
--key '' \
--required false \
--default false
--default false \
@@ -3,4 +3,5 @@ appwrite databases updateDatetimeAttribute \
--collectionId <COLLECTION_ID> \
--key '' \
--required false \
--default ''
--default '' \
@@ -3,4 +3,5 @@ appwrite databases updateEmailAttribute \
--collectionId <COLLECTION_ID> \
--key '' \
--required false \
--default email@example.com
--default email@example.com \
@@ -4,4 +4,5 @@ appwrite databases updateEnumAttribute \
--key '' \
--elements one two three \
--required false \
--default <DEFAULT>
--default <DEFAULT> \
@@ -5,4 +5,5 @@ appwrite databases updateFloatAttribute \
--required false \
--min null \
--max null \
--default null
--default null \
@@ -5,4 +5,5 @@ appwrite databases updateIntegerAttribute \
--required false \
--min null \
--max null \
--default null
--default null \
@@ -3,4 +3,5 @@ appwrite databases updateIpAttribute \
--collectionId <COLLECTION_ID> \
--key '' \
--required false \
--default ''
--default '' \
@@ -3,3 +3,4 @@ appwrite databases updateRelationshipAttribute \
--collectionId <COLLECTION_ID> \
--key '' \
@@ -3,4 +3,6 @@ appwrite databases updateStringAttribute \
--collectionId <COLLECTION_ID> \
--key '' \
--required false \
--default <DEFAULT>
--default <DEFAULT> \
@@ -3,4 +3,5 @@ appwrite databases updateUrlAttribute \
--collectionId <COLLECTION_ID> \
--key '' \
--required false \
--default https://example.com
--default https://example.com \
@@ -1,7 +1,10 @@
appwrite messaging createPush \
--messageId <MESSAGE_ID> \
--title <TITLE> \
--body <BODY> \
@@ -15,3 +15,6 @@ appwrite messaging updatePush \
@@ -0,0 +1,5 @@
appwrite projects updateMembershipsPrivacy \
--projectId <PROJECT_ID> \
--userName false \
--userEmail false \
--mfa false
@@ -12,7 +12,7 @@ const result = await databases.updateStringAttribute(
'', // key
false, // required
'<DEFAULT>', // default
null, // size (optional)
1, // size (optional)
'' // newKey (optional)
);
@@ -1,4 +1,4 @@
import { Client, Messaging } from "@appwrite.io/console";
import { Client, Messaging, MessagePriority } from "@appwrite.io/console";
const client = new Client()
.setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
@@ -8,8 +8,8 @@ const messaging = new Messaging(client);
const result = await messaging.createPush(
'<MESSAGE_ID>', // messageId
'<TITLE>', // title
'<BODY>', // body
'<TITLE>', // title (optional)
'<BODY>', // body (optional)
[], // topics (optional)
[], // users (optional)
[], // targets (optional)
@@ -20,9 +20,12 @@ const result = await messaging.createPush(
'<SOUND>', // sound (optional)
'<COLOR>', // color (optional)
'<TAG>', // tag (optional)
'<BADGE>', // badge (optional)
null, // badge (optional)
false, // draft (optional)
'' // scheduledAt (optional)
'', // scheduledAt (optional)
false, // contentAvailable (optional)
false, // critical (optional)
MessagePriority.Normal // priority (optional)
);
console.log(result);
@@ -1,4 +1,4 @@
import { Client, Messaging } from "@appwrite.io/console";
import { Client, Messaging, MessagePriority } from "@appwrite.io/console";
const client = new Client()
.setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
@@ -22,7 +22,10 @@ const result = await messaging.updatePush(
'<TAG>', // tag (optional)
null, // badge (optional)
false, // draft (optional)
'' // scheduledAt (optional)
'', // scheduledAt (optional)
false, // contentAvailable (optional)
false, // critical (optional)
MessagePriority.Normal // priority (optional)
);
console.log(result);
@@ -0,0 +1,16 @@
import { Client, Projects } from "@appwrite.io/console";
const client = new Client()
.setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
const projects = new Projects(client);
const result = await projects.updateMembershipsPrivacy(
'<PROJECT_ID>', // projectId
false, // userName
false, // userEmail
false // mfa
);
console.log(result);
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
from appwrite.enums import AuthenticatorType
client = Client()
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
from appwrite.enums import AuthenticationFactor
client = Client()
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
from appwrite.enums import OAuthProvider
client = Client()
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
from appwrite.enums import AuthenticatorType
client = Client()
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
from appwrite.enums import AuthenticatorType
client = Client()
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.account import Account
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.avatars import Avatars
from appwrite.enums import Browser
client = Client()
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.avatars import Avatars
from appwrite.enums import CreditCard
client = Client()
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.avatars import Avatars
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.avatars import Avatars
from appwrite.enums import Flag
client = Client()
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.avatars import Avatars
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.avatars import Avatars
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.avatars import Avatars
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
from appwrite.enums import IndexType
client = Client()
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
from appwrite.enums import RelationshipType
client = Client()
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint
@@ -1,4 +1,5 @@
from appwrite.client import Client
from appwrite.services.databases import Databases
client = Client()
client.set_endpoint('https://cloud.appwrite.io/v1') # Your API Endpoint

Some files were not shown because too many files have changed in this diff Show More