diff --git a/doublethink/orm.py b/doublethink/orm.py index d796e09..a7e9630 100644 --- a/doublethink/orm.py +++ b/doublethink/orm.py @@ -162,9 +162,14 @@ class Document(dict, object): ''' Retrieves a document from the database, by primary key. ''' + if pk is None: + return None doc = cls(rr) doc[doc.pk_field] = pk - doc.refresh() + try: + doc.refresh() + except KeyError: + return None return doc @classmethod diff --git a/setup.py b/setup.py index d4b98cb..3a5bfbc 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ import codecs setuptools.setup( name='doublethink', - version='0.2.0.dev68', + version='0.2.0.dev69', packages=['doublethink'], classifiers=[ 'Programming Language :: Python :: 2.7', diff --git a/tests/test_orm.py b/tests/test_orm.py index 4fa37d3..6d43270 100644 --- a/tests/test_orm.py +++ b/tests/test_orm.py @@ -232,11 +232,16 @@ def test_orm_pk(rr): def table_create(cls, rethinker): rethinker.table_create(cls.table, primary_key='not_id').run() + with pytest.raises(Exception): + NonstandardPrimaryKey.load(rr, 'no_such_thing') with pytest.raises(Exception): NonstandardPrimaryKey.load(rr, 'no_such_thing') NonstandardPrimaryKey.table_ensure(rr) + assert NonstandardPrimaryKey.load(rr, None) is None + assert NonstandardPrimaryKey.load(rr, 'no_such_thing') is None + # new empty doc f = NonstandardPrimaryKey(rr, {}) f.save() @@ -245,8 +250,7 @@ def test_orm_pk(rr): assert f.not_id == f.pk_value assert len(f.keys()) == 1 - with pytest.raises(KeyError): - NonstandardPrimaryKey.load(rr, 'no_such_thing') + assert NonstandardPrimaryKey.load(rr, 'no_such_thing') is None # new doc with (only) primary key d = NonstandardPrimaryKey(rr, {'not_id': 1})