Reputation: 18227
class TestSpeedRetrieval(webapp.RequestHandler):
"""
Test retrieval times of various important records in the BigTable database
"""
def get(self):
commandValidated = True
beginTime = time()
itemList = Subscriber.all().fetch(1000)
for item in itemList:
pass
endTime = time()
self.response.out.write("<br/>Subscribers count=" + str(len(itemList)) +
" Duration=" + duration(beginTime,endTime))
How can I turn the above into a function where I pass the name of the class? In the above example, Subscriber (in the Subscriber.all().fetch statement) is a class name, which is how you define data tables in Google BigTable with Python.
I want to do something like this:
TestRetrievalOfClass(Subscriber)
or TestRetrievalOfClass("Subscriber")
Thanks, Neal Walters
Upvotes: 33
Views: 85756
Reputation: 18227
A slight variation of Ned's code that I used. This is a web application, so I start it by running the get routine via a URL: http://localhost:8080/TestSpeedRetrieval. I didn't see the need of the init.
class TestSpeedRetrieval(webapp.RequestHandler):
"""
Test retrieval times of various important records in the BigTable database
"""
def speedTestForRecordType(self, recordTypeClassname):
beginTime = time()
itemList = recordTypeClassname.all().fetch(1000)
for item in itemList:
pass # just because we almost always loop through the records to put them somewhere
endTime = time()
self.response.out.write("<br/>%s count=%d Duration=%s" %
(recordTypeClassname.__name__, len(itemList), duration(beginTime,endTime)))
def get(self):
self.speedTestForRecordType(Subscriber)
self.speedTestForRecordType(_AppEngineUtilities_SessionData)
self.speedTestForRecordType(CustomLog)
Output:
Subscriber count=11 Duration=0:2
_AppEngineUtilities_SessionData count=14 Duration=0:1
CustomLog count=5 Duration=0:2
Upvotes: 3
Reputation: 882841
If you pass the class object directly, as in your code between "like this" and "or",
you can get its name as the __name__
attribute.
Starting with the name (as in your code after "or") makes it REALLY hard (and not unambiguous) to retrieve the class object unless you have some indication about where the class object may be contained -- so why not pass the class object instead?!
Upvotes: 12
Reputation: 376052
class TestSpeedRetrieval(webapp.RequestHandler):
"""
Test retrieval times of various important records in the BigTable database
"""
def __init__(self, cls):
self.cls = cls
def get(self):
commandValidated = True
beginTime = time()
itemList = self.cls.all().fetch(1000)
for item in itemList:
pass
endTime = time()
self.response.out.write("<br/>%s count=%d Duration=%s" % (self.cls.__name__, len(itemList), duration(beginTime,endTime))
TestRetrievalOfClass(Subscriber)
Upvotes: 30