Skip to content

Commit 64c711e

Browse files
committed
Add tests for logic in Entity.__repr__.
Fixes #174.
1 parent 7c55a04 commit 64c711e

2 files changed

Lines changed: 19 additions & 6 deletions

File tree

gcloud/datastore/entity.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121

2222
class NoKey(RuntimeError):
23-
pass
23+
"""Exception raised by Entity methods which require a key."""
2424

2525

2626
class Entity(dict): # pylint: disable=too-many-public-methods
@@ -238,7 +238,6 @@ def delete(self):
238238
dataset_id=dataset.id(), key_pb=key.to_protobuf())
239239

240240
def __repr__(self):
241-
# An entity should have a key all the time (even if it's partial).
242241
if self._key:
243242
return '<Entity%s %s>' % (self._key.path(),
244243
super(Entity, self).__repr__())

gcloud/datastore/test_entity.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ def test_from_protobuf(self):
8888
def test_reload_no_key(self):
8989
from gcloud.datastore.entity import NoKey
9090

91-
dataset = _Dataset()
9291
entity = self._makeOne(None, None)
9392
entity['foo'] = 'Foo'
9493
self.assertRaises(NoKey, entity.reload)
@@ -116,7 +115,6 @@ def test_reload_hit(self):
116115
def test_save_no_key(self):
117116
from gcloud.datastore.entity import NoKey
118117

119-
dataset = _Dataset()
120118
entity = self._makeOne(None, None)
121119
entity['foo'] = 'Foo'
122120
self.assertRaises(NoKey, entity.save)
@@ -186,7 +184,6 @@ def test_save_w_returned_key(self):
186184
def test_delete_no_key(self):
187185
from gcloud.datastore.entity import NoKey
188186

189-
dataset = _Dataset()
190187
entity = self._makeOne(None, None)
191188
entity['foo'] = 'Foo'
192189
self.assertRaises(NoKey, entity.delete)
@@ -201,8 +198,23 @@ def test_delete(self):
201198
self.assertTrue(entity.delete() is None)
202199
self.assertEqual(connection._deleted, (_DATASET_ID, 'KEY'))
203200

201+
def test___repr___no_key_empty(self):
202+
entity = self._makeOne(None, None)
203+
self.assertEqual(repr(entity), '<Entity {}>')
204+
205+
def test___repr___w_key_non_empty(self):
206+
connection = _Connection()
207+
dataset = _Dataset(connection)
208+
key = _Key(dataset)
209+
key.path('/bar/baz')
210+
entity = self._makeOne()
211+
entity.key(key)
212+
entity['foo'] = 'Foo'
213+
self.assertEqual(repr(entity), "<Entity/bar/baz {'foo': 'Foo'}>")
214+
204215

205216
class _Key(object):
217+
_MARKER = object()
206218
_key = 'KEY'
207219
_partial = False
208220
_path = None
@@ -219,7 +231,9 @@ def to_protobuf(self):
219231
def is_partial(self):
220232
return self._partial
221233

222-
def path(self, path):
234+
def path(self, path=_MARKER):
235+
if path is self._MARKER:
236+
return self._path
223237
self._path = path
224238

225239

0 commit comments

Comments
 (0)