Ejemplo n.º 1
0
 def testShort(self):
     k0 = key.Key('Kind', None)
     self.assertEqual(k0.flat(), ['Kind', None])
     k1 = key.Key('Kind', 1)
     self.assertEqual(k1.flat(), ['Kind', 1])
     k2 = key.Key('Parent', 42, 'Kind', 1)
     self.assertEqual(k2.flat(), ['Parent', 42, 'Kind', 1])
Ejemplo n.º 2
0
 def testUnicode(self):
     flat_input = [u'Kind\u1234', 1, 'Subkind', u'foobar\u4321']
     flat = [
         flat_input[0].encode('utf8'), flat_input[1], flat_input[2],
         flat_input[3].encode('utf8')
     ]
     pairs = [(flat[i], flat[i + 1]) for i in xrange(0, len(flat), 2)]
     k = key.Key(flat=flat_input)
     self.assertEqual(k.pairs(), pairs)
     self.assertEqual(k.flat(), flat)
     # TODO: test these more thoroughly
     r = k.reference()
     serialized = k.serialized()
     urlsafe = k.urlsafe()
     key.Key(urlsafe=urlsafe.decode('utf8'))
     key.Key(serialized=serialized.decode('utf8'))
     key.Key(reference=r)
     # TODO: this may not make sense -- the protobuf utf8-encodes values
     r = entity_pb.Reference()
     r.set_app('_')
     e = r.mutable_path().add_element()
     e.set_type(flat_input[0])
     e.set_name(flat_input[3])
     k = key.Key(reference=r)
     self.assertEqual(k.reference(), r)
Ejemplo n.º 3
0
def bench1(n):
  """Benchmark Key comparison and hashing."""
  a = key.Key('Foo', 42, 'Bar', 1, 'Hopla', 'lala')
  b = key.Key('Foo', 42, 'Bar', 1, 'Hopla', 'lala')
  assert a is not b
  assert a == b
  for _ in xrange(n):
    a == b
    hash(a)
Ejemplo n.º 4
0
    def testIntegerId(self):
        k1 = key.Key('Kind', 42, app='app1', namespace='ns1')
        self.assertEqual(k1.integer_id(), 42)

        k2 = key.Key('Subkind', 43, parent=k1)
        self.assertEqual(k2.integer_id(), 43)

        k3 = key.Key('Subkind', 'foobar', parent=k2)
        self.assertEqual(k3.integer_id(), None)

        # incomplete key
        k4 = key.Key('Subkind', None, parent=k3)
        self.assertEqual(k4.integer_id(), None)
Ejemplo n.º 5
0
    def testStringId(self):
        k1 = key.Key('Kind', 'foo', app='app1', namespace='ns1')
        self.assertEqual(k1.string_id(), 'foo')

        k2 = key.Key('Subkind', 'bar', parent=k1)
        self.assertEqual(k2.string_id(), 'bar')

        k3 = key.Key('Subkind', 42, parent=k2)
        self.assertEqual(k3.string_id(), None)

        # incomplete key
        k4 = key.Key('Subkind', None, parent=k3)
        self.assertEqual(k4.string_id(), None)
Ejemplo n.º 6
0
    def testKindFromModel(self):
        from ndb import model

        class M(model.Model):
            pass

        class N(model.Model):
            @classmethod
            def _get_kind(cls):
                return 'NN'

        k = key.Key(M, 1)
        self.assertEqual(k, key.Key('M', 1))
        k = key.Key('X', 1, N, 2, 'Y', 3)
        self.assertEqual(k, key.Key('X', 1, 'NN', 2, 'Y', 3))
Ejemplo n.º 7
0
    def testParent(self):
        p = key.Key('Kind', 1, app='app1', namespace='ns1')
        self.assertEqual(p.parent(), None)

        k = key.Key('Subkind', 'foobar', parent=p)
        self.assertEqual(k.flat(), ['Kind', 1, 'Subkind', 'foobar'])
        self.assertEqual(k.parent(), p)

        k = key.Key('Subkind',
                    'foobar',
                    parent=p,
                    app=p.app(),
                    namespace=p.namespace())
        self.assertEqual(k.flat(), ['Kind', 1, 'Subkind', 'foobar'])
        self.assertEqual(k.parent(), p)
Ejemplo n.º 8
0
 def testFlatLong(self):
     flat = ['Kind', 1, 'Subkind', 'foobar']
     pairs = [(flat[i], flat[i + 1]) for i in xrange(0, len(flat), 2)]
     k = key.Key(flat=flat)
     self.assertEqual(k.pairs(), pairs)
     self.assertEqual(k.flat(), flat)
     self.assertEqual(k.kind(), 'Subkind')
Ejemplo n.º 9
0
    def testRoot(self):
        p = key.Key('Kind', 1, app='app1', namespace='ns1')
        self.assertEqual(p.root(), p)

        k = key.Key('Subkind', 'foobar', parent=p)
        self.assertEqual(k.flat(), ['Kind', 1, 'Subkind', 'foobar'])
        self.assertEqual(k.root(), p)

        k2 = key.Key('Subsubkind',
                     42,
                     parent=k,
                     app=p.app(),
                     namespace=p.namespace())
        self.assertEqual(k2.flat(),
                         ['Kind', 1, 'Subkind', 'foobar', 'Subsubkind', 42])
        self.assertEqual(k2.root(), p)
Ejemplo n.º 10
0
 def testPickling(self):
     flat = ['Kind', 1, 'Subkind', 'foobar']
     pairs = [(flat[i], flat[i + 1]) for i in xrange(0, len(flat), 2)]
     k = key.Key(flat=flat)
     for proto in range(pickle.HIGHEST_PROTOCOL + 1):
         s = pickle.dumps(k, protocol=proto)
         kk = pickle.loads(s)
         self.assertEqual(k, kk)
Ejemplo n.º 11
0
    def testSerialized(self):
        flat = ['Kind', 1, 'Subkind', 'foobar']
        r = entity_pb.Reference()
        r.set_app('_')
        e = r.mutable_path().add_element()
        e.set_type(flat[0])
        e.set_id(flat[1])
        e = r.mutable_path().add_element()
        e.set_type(flat[2])
        e.set_name(flat[3])
        serialized = r.Encode()
        urlsafe = base64.urlsafe_b64encode(r.Encode()).rstrip('=')

        k = key.Key(flat=flat)
        self.assertEqual(k.serialized(), serialized)
        self.assertEqual(k.urlsafe(), urlsafe)
        self.assertEqual(k.reference(), r)

        k = key.Key(urlsafe=urlsafe)
        self.assertEqual(k.serialized(), serialized)
        self.assertEqual(k.urlsafe(), urlsafe)
        self.assertEqual(k.reference(), r)

        k = key.Key(serialized=serialized)
        self.assertEqual(k.serialized(), serialized)
        self.assertEqual(k.urlsafe(), urlsafe)
        self.assertEqual(k.reference(), r)

        k = key.Key(reference=r)
        self.assertTrue(k._reference() is not r)
        self.assertEqual(k.serialized(), serialized)
        self.assertEqual(k.urlsafe(), urlsafe)
        self.assertEqual(k.reference(), r)

        k = key.Key(reference=r, app=r.app(), namespace='')
        self.assertTrue(k._reference() is not r)
        self.assertEqual(k.serialized(), serialized)
        self.assertEqual(k.urlsafe(), urlsafe)
        self.assertEqual(k.reference(), r)
Ejemplo n.º 12
0
 def testIncomplete(self):
     k = key.Key(flat=['Kind', None])
     self.assertRaises(datastore_errors.BadArgumentError,
                       key.Key,
                       flat=['Kind', None, 'Subkind', 1])
     self.assertRaises(AssertionError, key.Key, flat=['Kind', ()])
Ejemplo n.º 13
0
 def testHash(self):
     flat = ['Kind', 1, 'Subkind', 'foobar']
     pairs = [(flat[i], flat[i + 1]) for i in xrange(0, len(flat), 2)]
     k = key.Key(flat=flat)
     self.assertEqual(hash(k), hash(tuple(pairs)))
Ejemplo n.º 14
0
def bench3(n):
  """Benchmark Key creation with parent."""
  p = key.Key('Foo', 42, 'Bar', 1)
  for _ in xrange(n):
    key.Key('Hopla', 'lala', parent=p)
Ejemplo n.º 15
0
 def testIncomplete(self):
     k = key.Key(flat=['Kind', None])
     self.assertRaises(AssertionError,
                       key.Key,
                       flat=['Kind', None, 'Subkind', 1])
     self.assertRaises(AssertionError, key.Key, flat=['Kind', ()])
Ejemplo n.º 16
0
 def testRepr_App(self):
     k = key.Key('Kind', 1, app='foo')
     self.assertEqual(repr(k), "Key('Kind', 1, app='foo')")
Ejemplo n.º 17
0
def bench2(n):
  """Benchmark Key creation."""
  for _ in xrange(n):
    key.Key('Foo', 42, 'Bar', 1, 'Hopla', 'lala')
Ejemplo n.º 18
0
 def testRepr_UnicodeKind(self):
     k = key.Key(u'\u1234', 1)
     self.assertEqual(repr(k), "Key('\\xe1\\x88\\xb4', 1)")
Ejemplo n.º 19
0
 def testRepr_Incomplete(self):
     k = key.Key('Kind', None)
     self.assertEqual(repr(k), "Key('Kind', None)")
Ejemplo n.º 20
0
 def testRepr_Toplevel(self):
     k = key.Key('Kind', 1)
     self.assertEqual(repr(k), "Key('Kind', 1)")
Ejemplo n.º 21
0
 def testRepr_UnicodeId(self):
     k = key.Key('Kind', u'\u1234')
     self.assertEqual(repr(k), "Key('Kind', '\\xe1\\x88\\xb4')")
Ejemplo n.º 22
0
 def testRepr_Namespace(self):
     k = key.Key('Kind', 1, namespace='foo')
     self.assertEqual(repr(k), "Key('Kind', 1, namespace='foo')")