def get_estimated_size_bytes(project, namespace, query, datastore): """Get the estimated size of the data returned by the given query. Cloud Datastore provides no way to get a good estimate of how large the result of a query is going to be. Hence we use the __Stat_Kind__ system table to get size of the entire kind as an approximate estimate, assuming exactly 1 kind is specified in the query. See https://cloud.google.com/datastore/docs/concepts/stats. """ kind = query.kind[0].name latest_timestamp = ReadFromDatastore.query_latest_statistics_timestamp( project, namespace, datastore) logging.info('Latest stats timestamp for kind %s is %s', kind, latest_timestamp) kind_stats_query = (helper.make_kind_stats_query( namespace, kind, latest_timestamp)) req = helper.make_request(project, namespace, kind_stats_query) resp = datastore.run_query(req) if not resp.batch.entity_results: raise RuntimeError("Datastore statistics for kind %s unavailable" % kind) entity = resp.batch.entity_results[0].entity return datastore_helper.get_value(entity.properties['entity_bytes'])
def get_estimated_size_bytes(project, namespace, query, datastore): """Get the estimated size of the data returned by the given query. Cloud Datastore provides no way to get a good estimate of how large the result of a query is going to be. Hence we use the __Stat_Kind__ system table to get size of the entire kind as an approximate estimate, assuming exactly 1 kind is specified in the query. See https://cloud.google.com/datastore/docs/concepts/stats. """ kind = query.kind[0].name latest_timestamp = ReadFromDatastore.query_latest_statistics_timestamp( project, namespace, datastore) logging.info('Latest stats timestamp for kind %s is %s', kind, latest_timestamp) kind_stats_query = ( helper.make_kind_stats_query(namespace, kind, latest_timestamp)) req = helper.make_request(project, namespace, kind_stats_query) resp = datastore.run_query(req) if not resp.batch.entity_results: raise RuntimeError("Datastore statistics for kind %s unavailable" % kind) entity = resp.batch.entity_results[0].entity return datastore_helper.get_value(entity.properties['entity_bytes'])
def testPropertyValues(self): blob_key = datastore.Value() blob_key.blob_key_value = 'blob-key' property_dict = collections.OrderedDict( a_string=u'a', a_blob='b', a_boolean=True, a_integer=1, a_long=2L, a_double=1.0, a_timestamp_microseconds=datetime.datetime.now(), a_key=datastore.Key(), a_entity=datastore.Entity(), a_blob_key=blob_key, many_integer=[1, 2, 3]) entity = datastore.Entity() helper.add_properties(entity, property_dict) d = dict((prop.name, helper.get_value(prop.value)) for prop in entity.property) self.assertDictEqual(d, property_dict)
def testEmptyValues(self): v = datastore.Value() self.assertEquals(None, helper.get_value(v))
def testSetPropertyOverwrite(self): property = datastore.Property() helper.set_property(property, 'a', 1, indexed=False) helper.set_property(property, 'a', 'a') self.assertEquals('a', helper.get_value(property.value)) self.assertEquals(True, property.value.indexed)