This document describes the Personis access, ask and tell calls in terms of the Python method calls.
access:
personis.client.Access(uri = personis_uri, credentials = cred, http=http)
The POST URL is then /access and the body is (for example):
{"password": "", "modelname": "bob", "user": "bob", "version": "11.2"}
The password and user are now vestigal. These are taken care of at the http level. A user may still have multiple models in a server, so modelname can be used. The default is the main user model.
the return data is:
{"result": "ok", "val": true} -- on success
{"result": "fail", "val": false} -- on failure
I might change this to include a diagnostic string as the value of val.
tell:
def tell(modelname=string, version="11.2",
context=list-of-strings, componentid=string, evidence=dict)
The URL is /tell
Body example:
{"modelname": "bob",
"user": "bob",
"password": "",
"version": "11.2",
"evidence": {"comment": null, "evidence_type": "explicit", "value": "Bob",
"objectType": "Evidence", "source": "demoex2", "flags": [],
"time": null, "exp_time": 0},
"context": ["Personal"],
"componentid": "firstname"}
Note that the evidence dictionary should be extensible, ie not just the fields shown. Keys are strings, values can be strings/None/integer/list-of-strings
The return data is:
{"result": "ok", "val": true} -- on success
{"result": "fail", "val": false} -- on failure
I might change this to include a diagnostic string as the value of val.[a]
ask:
def ask(modelname=string, version="11.2",
context=list-of-strings,
resolve=dict,
showcontexts=true-or-false,[b]
view=list-of-(string-or-list-of-string) )
The resolver dictionary is extensible, keys and values are strings, view is a list of strings or (list of strings)
The URL is /ask
Body example:
{"modelname": "bob",
"user": "bob",
"password": "",
"version": "11.2",
"context": ["Preferences", "Music", "Jazz", "Artists"],
"showcontexts": null,
"resolver": {"evidence_filter": "all"},
"view": ["Miles_Davis", ["Personal", "firstname"]]}
The return data is a dictionary containing a result and val entries like the Access function. The value for “val” is a list of dictionaries, one per component value being returned.
example:
{"result": "ok", "val":
[ {"Description": "First name",
"component_type": "attribute",
"evidencelist": null,
"value_list": null,
"value": "Bob",
"value_type": "string",
"goals": [],
"resolver": null,
"Identifier": "firstname",
"objectType": "Component"},
{"Description": "Last name",
"component_type": "attribute",
"evidencelist": null,
"value_list": null,
"value": "Kummerfeld",
"value_type": "string",
"goals": [],
"resolver": null,
"Identifier": "lastname",
"objectType": "Component"}
]
}
The POST requests should be over HTTPS. Also, a future stage of development will involve more crypto with signed, encrypted JSON.