Many thanks to Jan Lehnardt for helping me out via IM to understand some concepts that I was having problems wrapping my mind around.
Rallyhat is for the most part a programming experiment for me, designed to learn Python *and* produce an web application that is actually usable by someone other than me. One of the technologies I'm using is CouchDB to store things. I was having some problems getting both couchdb-python working with permanent views (meaning views stored in CouchDB itself) as opposed to temporary views (meaning views generated in the code).
Now, couchdb-python looks to be a nice, simple interface to use. The problem I found was the documentation is, what's the word I'm looking for? Lacking. Since Jan is an amazing teacher, he was patient with me and showed me that I could look at the documentation for couchdb-python via the Python REPL (aka the Python shell). So, armed with this "how the hell could I not realize this" knowledge I figured out how to use it. Yet another reason why I'm warming up to Python.
It was as simple as starting up the Python shell and then doing the following:
-
import couchdb
-
help(couchdb.client)
In there you will find code examples for each method, and then explanations of the parameters for each method. All you really need in this case. So I take back what I said about the documentation for couchdb-python being lacking. I was just looking in the wrong place.
So, task #1 was to create the view I needed. I decided to use Futon, the built-in interface to create my permanent view:
-
{
-
"_id": "_design/searches",
-
"_rev": "3-e7f43cfdd5a8ef62ae338bd1f19b3e95",
-
"views": {
-
"by_user": {
-
"map": "function (doc) { emit(doc.user, {'date': doc.date, 'locations': doc.loations});}"
-
}
-
}
-
}
This view would then live at http://couchdb.server//rallyhat/_design/searches/_view/by_user is you want to get every doc for every user. To get just the docs belong to a specific user, you append ?key=
-
def get_by_user(self, username):
-
my_searches = []
-
-
if username:
-
for row in db.view('searches/by_user', None, key=username):
-
info = db.get(row.id)
-
locations = json.loads(info['locations'])
-
my_search = {'date': info['date'], 'locations': locations}
-
my_searches.append({'id': row.id, 'date': info['date'],
-
'locations': locations})
-
-
return my_searches
With *any* Python library that you use, make sure to see if the author added help files to the package. You'd be surprised to see what's in there...
Tags: CouchDB, Python, Rallyhat

I'm looking to dive into CouchDB myself - this is very useful information. Thanks for sharing!