ziyualexanderwang / couchdb-python

Automatically exported from code.google.com/p/couchdb-python
0 stars 0 forks source link

Can't create a named document #26

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
What steps will reproduce the problem?
1.  db.create({'_id': 'hi', 'contents':'ho'})
u'f37d8d5594fa8dd9b0c4642269275343'
>>> db["hi"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File
"/usr/lib/python2.5/site-packages/CouchDB-0.4-py2.5.egg/couchdb/client.py",
line 253, in __getitem__
  File
"/usr/lib/python2.5/site-packages/CouchDB-0.4-py2.5.egg/couchdb/client.py",
line 646, in get
  File
"/usr/lib/python2.5/site-packages/CouchDB-0.4-py2.5.egg/couchdb/client.py",
line 688, in _request
couchdb.client.ResourceNotFound: (u'not_found', u'missing')

What is the expected output? What do you see instead?
Personally (and tied w/ a previous comment) I'd expect to be able to create
documenta via;
db["new_doc"] = { 'contents': 'foo', 'bar' : True }
but I could understand if that needed to be;
db.create( '_id': "new_doc", 'contents': 'foo', 'bar' : True)

What version of the product are you using? On what operating system?
>>> couchdb.__version__
'0.4'

Please provide any additional information below.
BTW though I love the library! I'm not the code guy I'd like to be but it's
been helpful to actually be able to read your code (it's taught me about
couchdb's REST API and python too).

Thanks for the work!

Original issue reported on code.google.com by wjh...@gmail.com on 14 Oct 2008 at 1:25

GoogleCodeExporter commented 8 years ago
This works for me. Please note that the database (represented by the `db` 
variable in your example) does need 
to exist. If it does, you should be able to create a document using either 
method. In fact `db.create` is intended 
for use when you want CouchDB to generate the ID for you.

Original comment by cmlenz on 5 Nov 2008 at 5:02

GoogleCodeExporter commented 8 years ago
In this example the Database "files" exists... 

>>> s = couchdb.Server("http://192.168.1.99:5984/")
>>> db = s['files']
>>> f = db['foo'] = "{'_id': 'hi', 'contents':'ho'}"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.5/site-packages/CouchDB-0.4-py2.5.egg/couchdb/client.py",
line 263, in __setitem__
  File "/usr/lib/python2.5/site-packages/CouchDB-0.4-py2.5.egg/couchdb/client.py",
line 657, in put
  File "/usr/lib/python2.5/site-packages/CouchDB-0.4-py2.5.egg/couchdb/client.py",
line 694, in _request
couchdb.client.ServerError: (500, (u'EXIT', 
u'{function_clause,[{cjson,tokenize,\n  
                      ["\'_id\': \'hi\', \'contents\':\'ho\'}",\n                   
      {decoder,unicode,null,1,2,key}]},\n                  {cjson,decode_object,3},\n
                 {cjson,json_decode,2},\n                 
{couch_httpd,handle_doc_request,5},\n                 
{couch_httpd,handle_request,2},\n                  {mochiweb_http,headers,4},\n 

            {proc_lib,init_p,5}]}'))
>>> 

Original comment by wjh...@gmail.com on 5 Nov 2008 at 6:26

GoogleCodeExporter commented 8 years ago
The document needs to be a dict, not a JSON string. (I may need to add a check 
for this).

Also, when you use the item assignment syntax (instead of the create method), 
you must leave out the `_id` 
member.

So:

f = db['hi'] = {'contents': 'ho'}

Original comment by cmlenz on 5 Nov 2008 at 9:52

GoogleCodeExporter commented 8 years ago
Fabtabulous! 
Thanks so much! I think a check on a string input would be good but clearly I 
was
just doing it wrong! Also it makes sense I should have left off the "_id" part I
think I must have tried it from a .create() sample where I was trying to get 
the name
set.

Thanks again for build this library! I like couchdb but all the REST URLs are
confounding to me (especially when getting into views!).

Original comment by wjh...@gmail.com on 6 Nov 2008 at 2:28