diff --git a/mongs.py b/mongs.py index 6e59415..54922d8 100644 --- a/mongs.py +++ b/mongs.py @@ -24,6 +24,19 @@ def commaize(n, places=1): return out +def get_single_document_filter(_id): + filter = {"_id": {"$in": [_id]}} + try: + # Under some combination of MongoDB/PyMongo versions, this is + # necessary. + object_id = ObjectId(_id) + except InvalidId: + pass + else: + filter['_id']['$in'].append(object_id) + return filter + + def get_value(request): """Given a request object, return a value. Use for *.txt and *.json. """ @@ -34,12 +47,8 @@ def get_value(request): key = request.line.uri.path['value'] # derp db = pymongo.MongoClient(server)[database][collection] - - try: - _id = ObjectId(_id) - except InvalidId: - pass - document = db.find_one(_id) + filter = get_single_document_filter(_id) + document = db.find_one(filter) return document[key] diff --git a/www/%server/%database/%collection/%filter/index.html.spt b/www/%server/%database/%collection/%filter/index.html.spt index 338ad79..4d07c1a 100644 --- a/www/%server/%database/%collection/%filter/index.html.spt +++ b/www/%server/%database/%collection/%filter/index.html.spt @@ -104,12 +104,7 @@ else: # /server/database/collection/_id/ # Convert a request for a specific _id into a filter with one page. page = 1 base = '..' - _id = filter - try: - _id = ObjectId(_id) - except InvalidId: - pass - filter = {"_id": _id} + filter = mongs.get_single_document_filter(filter) # Sort.