Skip to content

Commit d6f0830

Browse files
committed
Add dict style SystemJS item access PYTHON-190
1 parent 59a666c commit d6f0830

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

pymongo/database.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -705,13 +705,22 @@ def __init__(self, database):
705705
def __setattr__(self, name, code):
706706
self._db.system.js.save({"_id": name, "value": Code(code)}, safe=True)
707707

708+
def __setitem__(self, name, code):
709+
self.__setattr__(name, code)
710+
708711
def __delattr__(self, name):
709712
self._db.system.js.remove({"_id": name}, safe=True)
710713

714+
def __delitem__(self, name):
715+
self.__delattr__(name)
716+
711717
def __getattr__(self, name):
712718
return lambda *args: self._db.eval("function() { return %s.apply(this,"
713719
"arguments); }" % name, *args)
714720

721+
def __getitem__(self, name):
722+
return self.__getattr__(name)
723+
715724
def list(self):
716725
"""Get a list of the names of the functions stored in this database.
717726

test/test_database.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -494,9 +494,16 @@ def test_system_js(self):
494494
self.assertEqual('add', db.system.js.find_one()['_id'])
495495
self.assertEqual(1, db.system.js.count())
496496
self.assertEqual(6, db.system_js.add(1, 5))
497-
498497
del db.system_js.add
499498
self.assertEqual(0, db.system.js.count())
499+
500+
db.system_js['add'] = "function(a, b) { return a + b; }"
501+
self.assertEqual('add', db.system.js.find_one()['_id'])
502+
self.assertEqual(1, db.system.js.count())
503+
self.assertEqual(6, db.system_js['add'](1, 5))
504+
del db.system_js['add']
505+
self.assertEqual(0, db.system.js.count())
506+
500507
if version.at_least(db.connection, (1, 3, 2, -1)):
501508
self.assertRaises(OperationFailure, db.system_js.add, 1, 5)
502509

0 commit comments

Comments
 (0)