Updated Python SDK
This commit is contained in:
parent
571f7fb8b8
commit
9f6080ae7b
|
@ -1,9 +1,9 @@
|
||||||
# Appwrite Python SDK
|
# Appwrite Python SDK
|
||||||
|
|
||||||
![License](https://img.shields.io/github/license/appwrite/sdk-for-python.svg?v=1)
|
![License](https://img.shields.io/github/license/appwrite/sdk-for-python.svg?v=1)
|
||||||
![Version](https://img.shields.io/badge/api%20version-0.6.1-blue.svg?v=1)
|
![Version](https://img.shields.io/badge/api%20version-0.6.2-blue.svg?v=1)
|
||||||
|
|
||||||
**This SDK is compatible with Appwrite server version 0.6.1. For older versions, please check previous releases.**
|
**This SDK is compatible with Appwrite server version 0.6.2. For older versions, please check previous releases.**
|
||||||
|
|
||||||
Appwrite is an open-source backend as a service server that abstract and simplify complex and repetitive development tasks behind a very simple to use REST API. Appwrite aims to help you develop your apps faster and in a more secure way.
|
Appwrite is an open-source backend as a service server that abstract and simplify complex and repetitive development tasks behind a very simple to use REST API. Appwrite aims to help you develop your apps faster and in a more secure way.
|
||||||
Use the Python SDK to integrate your app with the Appwrite server to easily start interacting with all of Appwrite backend APIs and tools.
|
Use the Python SDK to integrate your app with the Appwrite server to easily start interacting with all of Appwrite backend APIs and tools.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
import io
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
|
|
||||||
class Client:
|
class Client:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._self_signed = False
|
self._self_signed = False
|
||||||
|
@ -47,24 +47,34 @@ class Client:
|
||||||
|
|
||||||
data = {}
|
data = {}
|
||||||
json = {}
|
json = {}
|
||||||
|
files = {}
|
||||||
|
|
||||||
self._global_headers.update(headers)
|
headers = {**self._global_headers, **headers}
|
||||||
|
|
||||||
if method != 'get':
|
if method != 'get':
|
||||||
data = params
|
data = params
|
||||||
params = {}
|
params = {}
|
||||||
|
|
||||||
if headers['content-type'] == 'application/json':
|
if headers['content-type'].startswith('application/json'):
|
||||||
json = data
|
json = data
|
||||||
data = {}
|
data = {}
|
||||||
|
|
||||||
|
if headers['content-type'].startswith('multipart/form-data'):
|
||||||
|
del headers['content-type']
|
||||||
|
|
||||||
|
for key in data.copy():
|
||||||
|
if isinstance(data[key], io.BufferedIOBase):
|
||||||
|
files[key] = data[key]
|
||||||
|
del data[key]
|
||||||
|
|
||||||
response = requests.request( # call method dynamically https://stackoverflow.com/a/4246075/2299554
|
response = requests.request( # call method dynamically https://stackoverflow.com/a/4246075/2299554
|
||||||
method=method,
|
method=method,
|
||||||
url=self._endpoint + path,
|
url=self._endpoint + path,
|
||||||
params=params,
|
params=self.flatten(params),
|
||||||
data=data,
|
data=self.flatten(data),
|
||||||
json=json,
|
json=json,
|
||||||
headers=self._global_headers,
|
files=files,
|
||||||
|
headers=headers,
|
||||||
verify=self._self_signed,
|
verify=self._self_signed,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -77,3 +87,20 @@ class Client:
|
||||||
|
|
||||||
return response._content
|
return response._content
|
||||||
|
|
||||||
|
def flatten(self, data, prefix=''):
|
||||||
|
output = {}
|
||||||
|
i = 0
|
||||||
|
|
||||||
|
for key in data:
|
||||||
|
value = data[key] if isinstance(data, dict) else key
|
||||||
|
finalKey = prefix + '[' + key +']' if prefix else key
|
||||||
|
finalKey = prefix + '[' + str(i) +']' if isinstance(data, list) else finalKey
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
if isinstance(value, list) or isinstance(value, dict):
|
||||||
|
output = {**output, **self.flatten(value, finalKey)}
|
||||||
|
else:
|
||||||
|
output[finalKey] = value
|
||||||
|
|
||||||
|
return output
|
||||||
|
|
||||||
|
|
|
@ -11,4 +11,4 @@ client = Client()
|
||||||
|
|
||||||
database = Database(client)
|
database = Database(client)
|
||||||
|
|
||||||
result = database.create_collection('[NAME]', {}, {}, {})
|
result = database.create_collection('[NAME]', [], [], [])
|
||||||
|
|
|
@ -11,4 +11,4 @@ client = Client()
|
||||||
|
|
||||||
database = Database(client)
|
database = Database(client)
|
||||||
|
|
||||||
result = database.create_document('[COLLECTION_ID]', {}, {}, {})
|
result = database.create_document('[COLLECTION_ID]', {}, [], [])
|
||||||
|
|
|
@ -11,4 +11,4 @@ client = Client()
|
||||||
|
|
||||||
database = Database(client)
|
database = Database(client)
|
||||||
|
|
||||||
result = database.update_collection('[COLLECTION_ID]', '[NAME]', {}, {})
|
result = database.update_collection('[COLLECTION_ID]', '[NAME]', [], [])
|
||||||
|
|
|
@ -11,4 +11,4 @@ client = Client()
|
||||||
|
|
||||||
database = Database(client)
|
database = Database(client)
|
||||||
|
|
||||||
result = database.update_document('[COLLECTION_ID]', '[DOCUMENT_ID]', {}, {}, {})
|
result = database.update_document('[COLLECTION_ID]', '[DOCUMENT_ID]', {}, [], [])
|
||||||
|
|
|
@ -11,4 +11,4 @@ client = Client()
|
||||||
|
|
||||||
storage = Storage(client)
|
storage = Storage(client)
|
||||||
|
|
||||||
result = storage.create_file(document.getElementById('uploader').files[0], {}, {})
|
result = storage.create_file(open('/path/to/file.png', 'rb'), [], [])
|
||||||
|
|
|
@ -11,4 +11,4 @@ client = Client()
|
||||||
|
|
||||||
storage = Storage(client)
|
storage = Storage(client)
|
||||||
|
|
||||||
result = storage.update_file('[FILE_ID]', {}, {})
|
result = storage.update_file('[FILE_ID]', [], [])
|
||||||
|
|
|
@ -11,4 +11,4 @@ client = Client()
|
||||||
|
|
||||||
teams = Teams(client)
|
teams = Teams(client)
|
||||||
|
|
||||||
result = teams.create_membership('[TEAM_ID]', 'email@example.com', {}, 'https://example.com')
|
result = teams.create_membership('[TEAM_ID]', 'email@example.com', [], 'https://example.com')
|
||||||
|
|
|
@ -23,7 +23,6 @@ setuptools.setup(
|
||||||
'Topic :: Software Development',
|
'Topic :: Software Development',
|
||||||
'License :: OSI Approved :: BSD License',
|
'License :: OSI Approved :: BSD License',
|
||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
'Programming Language :: Python :: 3.4',
|
|
||||||
'Programming Language :: Python :: 3.5',
|
'Programming Language :: Python :: 3.5',
|
||||||
'Programming Language :: Python :: 3.6',
|
'Programming Language :: Python :: 3.6',
|
||||||
'Programming Language :: Python :: 3.7',
|
'Programming Language :: Python :: 3.7',
|
||||||
|
|
568
composer.lock
generated
568
composer.lock
generated
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue