<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body bgcolor="#ffffff" text="#000000">
<i>Note: My questions are at the very end of this mail.<br>
<br>
</i>According to the documentation the URI for setting the schema is as
follows :<br>
<br>
<p><strong><code>PUT /jiak/Bucket</code></strong>
</p>
<p>Set the schema for Bucket according to the request body.<br>
</p>
<p><i>However I couldn't find the reference to how the body of the POST
to that URI should be constructed. When I try to insert a few records
using the python client using the following code, I get a 503 error<br>
</i></p>
<p>Code:</p>
<p>    JC = JiakClient("127.0.0.1",8098)<br>
    JO = JiakObject("jiak_example", "doctestkey")<br>
    JO = JiakObject("jiak_example", "doctestkey")<br>
    JO.object["foo"] = 2<br>
    JC.store(JO)<br>
</p>
<p>Error:<br>
Traceback (most recent call last):<br>
  File "jiak.py", line 183, in <module><br>
    JC.store(JO)<br>
  File "jiak.py", line 101, in store<br>
    {"Content-Type": "application/json"}))<br>
  File "jiak.py", line 71, in _expect<br>
    raise JiakException(Resp.status, Resp.reason, Resp.read())<br>
__main__.JiakException: (<b>503, 'Service Unavailable',</b>
'<html><head><title>503 Service
Unavailable</title></head><body><h1>Service
Unavailable</h1>The server is currently unable to handle the
request due to a temporary overloading or maintenance of the
server.<br><P><HR><ADDRESS>mochiweb+webmachine
web server</ADDRESS></body></html>')<br>
</p>
<p><i>Since this seems to be a problem with setting the default schema
(not entirely sure of that , I explicitly invoked set_bucket schema as
follows )</i><br>
</p>
<p>Code :<br>
</p>
<p>    JC = JiakClient("127.0.0.1",8098)<br>
    <b>JC.set_bucket_schema("jiak_example",None)</b><br>
    JO = JiakObject("jiak_example", "doctestkey")<br>
    JO = JiakObject("jiak_example", "doctestkey")<br>
    JO.object["foo"] = 2<br>
    JC.store(JO)<br>
</p>
<p>In return, I get the following error :<br>
</p>
<p>Error :<br>
</p>
<p>Traceback (most recent call last):<br>
  File "jiak.py", line 183, in <module><br>
    JC.store(JO)<br>
  File "jiak.py", line 101, in store<br>
    {"Content-Type": "application/json"}))<br>
  File "jiak.py", line 71, in _expect<br>
    raise JiakException(Resp.status, Resp.reason, Resp.read())<br>
__main__.JiakException: (<b>500, 'Internal Server Error',</b>
'<html><head><title>500 Internal Server
Error</title></head><body><h1>Internal Server
Error</h1>The server encountered an error while processing this
request:<br><pre>{badarg,[{lists,member,[<<"foo">>,null]},\n        
{jiak_resource,\<b>'-check_write_mask</b>/2-lc$^0/1-0-\',2},\n        
{jiak_resource,check_write_mask,2},\n        
{jiak_resource,object_forbidden,2},\n        
{webmachine_resource,resource_call,3},\n        
{webmachine_resource,do,3},\n        
{webmachine_decision_core,resource_call,1},\n        
{webmachine_decision_core,decision,1}]}</pre><P><HR><ADDRESS>mochiweb+webmachine
web server</ADDRESS></body></html>')<br>
</p>
<p><i>There's clearly some issue most likely with the second argument I
pass to set_bucket_schema. However couldn't find any specific reference
to what these parameters should be (allowed_fields, write_mask,
read_mask etc.)<br>
</i></p>
<p><i>So I further modified it to pass an empty list<br>
</i></p>
<p>Code :<br>
</p>
<p>    JC = JiakClient("127.0.0.1",8098)<br>
    JC.set_bucket_schema("jiak_example"<b>,[]</b>)<br>
    JO = JiakObject("jiak_example", "doctestkey")<br>
    JO.object["foo"] = 2<br>
    JC.store(JO)<br>
<br>
Error :<br>
</p>
<p>Traceback (most recent call last):<br>
  File "jiak.py", line 182, in <module><br>
    JC.store(JO)<br>
  File "jiak.py", line 101, in store<br>
    {"Content-Type": "application/json"}))<br>
  File "jiak.py", line 71, in _expect<br>
    raise JiakException(Resp.status, Resp.reason, Resp.read())<br>
__main__.JiakException: (403, 'Forbidden', '<b>Write disallowed, some
of [<<"foo">>] not writable.</b>\n')</p>
<p><br>
<i>Finally I explicitly made "foo" an allowed attribute - and all
worked fine.</i><br>
</p>
<p>Code :<br>
    JC = JiakClient("127.0.0.1",8098)<br>
    JC.set_bucket_schema("jiak_example",<b>["foo"]</b>)<br>
    JO = JiakObject("jiak_example", "doctestkey")<br>
    JO.object["foo"] = 2<br>
    JC.store(JO)<br>
</p>
<p>Error : <b>No Error. Seemed to work fine.<br>
</b></p>
<p>So - my questions are :<br>
</p>
<p>(a) Am I on the right track / approach ?<br>
(b) Is calling set_bucket_schema mandatory ?<br>
(c) How can I find what values should I be setting allowed_fields,
read_mask, write_mask etc.<br>
</p>
<p><br>
</p>
</body>
</html>