seitime-frappe/webnotes/utils/webclient.py
2012-12-19 17:05:50 +05:30

102 lines
No EOL
2.5 KiB
Python

# Simple Web service client for wnframework (ERPNext)
# License MIT
#
# Uses: requests (http://docs.python-requests.org/en/v1.0.0/)
#
# Usage:
# 1. set the server settings, user, password in this file
# 2. user the "insert", "update", "delete" methods to push data
#
# Help:
# Data is sent as JSON objects called "doclist". A doclist is a list of records that represent one transaction (document)
# in ERPNext, both parent (header) and child records.
#
# For what fields to set in the doclist, please check the table columns of the table you want to update
import requests
import unittest
import json
server = "http://localhost/webnotes/erpnext_master/public/server.py"
user = "Administrator"
password = "test"
sid = None
debug = True
class AuthError(Exception): pass
def login(usr=None, pwd=None):
response = requests.get(server, params = {
"cmd": "login",
"usr": usr or user,
"pwd": pwd or password
})
if response.json.get("message")=="Logged In":
global sid
sid = response.cookies["sid"]
return response
else:
raise AuthError
def insert(doclist):
if not sid: login()
response = requests.post(server, params = {
"cmd": "webnotes.client.insert",
"doclist": json.dumps(doclist)
}, cookies = {"sid": sid})
if debug and "exc" in response.json:
print response.json["exc"]
return response
def update(doclist):
if not sid: login()
response = requests.post(server, params = {
"cmd": "webnotes.client.save",
"doclist": json.dumps(doclist)
}, cookies = {"sid": sid})
if debug and "exc" in response.json:
print response.json["exc"]
return response
def delete(doctype, name):
if not sid: login()
response = requests.post(server, params = {
"cmd": "webnotes.model.delete_doc",
"doctype": doctype,
"name": name
}, cookies = {"sid": sid})
if debug and "exc" in response.json:
print response.json["exc"]
return response
class TestAPI(unittest.TestCase):
def test_login(self):
global sid
response = login()
self.assertTrue(response.json.get("message")=="Logged In")
self.assertTrue(sid)
self.assertRaises(AuthError, login, {"pwd":"--"})
sid = None
def test_insert(self):
login()
response = insert([{
"doctype":"Customer",
"customer_name": "Import Test Customer",
"customer_type": "Company",
"customer_group": "Standard Group",
"territory": "Default",
"company": "Alpha"
}])
self.assertTrue(response.json["message"][0]["name"]=="Import Test Customer")
self.assertTrue(delete("Customer", "Import Test Customer").json["message"]=="okay")
if __name__=="__main__":
unittest.main()