Simple Async wrapper for FrappeClient
⚠️ Warning: This project is still not complete and some testing is required. If you can help that will be great. For now all methods work but test are not yet converted
git clone https://github.com/itskanny/async-frappe-client
pip install -e async-frappe-client
FrappeClient has a frappe like API
framework
it is used if you have customized the frappe framework
Login to the Frappe HTTP Server by creating a new FrappeClient object
import asyncio
from frappeclient import FrappeClient
async def main():
conn = FrappeClient("example.com")
await conn.login("user@example.com", "password")
asyncio.run(main())
from frappeclient import FrappeClient
client = FrappeClient("https://example.com")
client.authenticate("my_api_key", "my_api_secret")
For demonstration purposes only! Never store any credentials in your source code. Instead, you could set them as environment variables and fetch them with os.getenv()
.
Get a list of documents from the server
Arguments:
doctype
fields
: List of fields to fetchfilters
: Dict of filterslimit_start
: Start at row ID (default 0)limit_page_length
: Page lengthorder_by
: sort key and order (default ismodified desc
)
users = await conn.get_list('User', fields = ['name', 'first_name', 'last_name'], , filters = {'user_type':'System User'})
Example of filters:
{ "user_type": ("!=", "System User") }
{ "creation": (">", "2020-01-01") }
{ "name": "test@example.com" }
Insert a new document to the server
Arguments:
doc
: Document object
doc = await conn.insert({
"doctype": "Customer",
"customer_name": "Example Co",
"customer_type": "Company",
"website": "example.net"
})
Fetch a document from the server
Arguments
doctype
name
doc = await conn.get_doc('Customer', 'Example Co')
Fetch a single value from the server
Arguments:
doctype
fieldname
filters
customer_name = await conn.get_value("Customer", "name", {"website": "example.net"})
Update a document (if permitted)
Arguments:
doc
: JSON document object
doc = await conn.get_doc('Customer', 'Example Co')
doc['phone'] = '000000000'
await conn.update(doc)
Delete a document (if permitted)
Arguments:
doctype
name
await conn.delete('Customer', 'Example Co')
from frappeclient import FrappeClient
async def main():
conn = FrappeClient("example.com", "user@example.com", "password")
new_notes = [
{"doctype": "Note", "title": "Sing", "public": True},
{"doctype": "Note", "title": "a", "public": True},
{"doctype": "Note", "title": "Song", "public": True},
{"doctype": "Note", "title": "of", "public": True},
{"doctype": "Note", "title": "sixpence", "public": True}
]
for note in new_notes:
print(conn.insert(note))
# get note starting with s
notes = conn.get_list('Note',
filters={'title': ('like', 's')},
fields=["title", "public"]
)
asyncio.run(main())
See example.py for more info
MIT