diff -r 000000000000 -r 0b061d58aea3 testappproj/testapp/helpers/bulkuploader.py~ --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testappproj/testapp/helpers/bulkuploader.py~ Mon May 17 22:33:59 2010 +0530 @@ -0,0 +1,97 @@ +# UploadFormat Parser -- test version +# -- ideamonk + +class Submission(): + """ + A helper class for bulk uploads. It parses the given chunk of bulk + upload and tries to submit them to PyKata + """ + def __init__(self, bulk_text): + # initialize everything as default/blank as some things might not be + # present in submission + self.data_dict = dict() + self.bulk_text = bulk_text + self.multiline_fields = ('description', 'examples') + self.data_dict['user_id'] = '' + + def __getitem__(self, key): + try: + return self.data_dict[key] + except : + return None + + def __setitem__(self, key, item): + # mapping to match form submission for code reuse + if key=='pubTests': + key = 'tests' + if key=='privTests': + key='other_tests' + if key=='userID': + key='user_id' + + self.data_dict[key] = item + + def __str__(self): + return str(self.bulk_text) + + def parse(self): + """ Parses a problem submission into data fillable in the submission + form + """ + chunks = self.bulk_text.split('#-') + for chunk in chunks[1:]: + # ^^ ignores the first comment line of the problem + chunk_key, chunk_data = chunk.split(':',1) + chunk_key = chunk_key.strip() + if chunk_key in self.multiline_fields: + # these are data surrounded in triple quotes, single or double + chunk_data = eval(chunk_data).strip('\r\n') + else: + chunk_data = chunk_data.strip().strip('\r\n') + self[chunk_key] = chunk_data + + def talk(self): + """ Just a testing function, a submission talks about itself to everyone + """ + print "Hi I am a submission problem on PyKata," + print "Let me tell you something about myself - " + print "I was created by -", self['userID'] + print "My name is -", self['name'] + print "I belong to these categories -", self['categories'] + print "Here, something more about myself --" + print self['description'] + print "---------------------------------------" + print "My solution --" + print self['solution'] + print "----------------------------------------" + print "My skeleton --" + print self['skeleton'] + print "----------------------------------------" + print "Public Tests --" + print self['pubTests'] + print "----------------------------------------" + print "Private Tests --" + print self['privTests'] + print "----------------------------------------" + print "\n So tell me something about you too?" + + +def test_submission_parse(): + import urllib2 +# example_file = urllib2.urlopen('http://ideamonk.in/code/foo.py').read() + example_file = open('/home/amit/Downloads/foo.py').read() + example_submissions = example_file.split('#---')[1:-1] + # ^^ ignore the first null string and last __main__ test code + print example_submissions + example_submissions = [ Submission(x) for x in example_submissions ] + + for key, a_submission in enumerate(example_submissions): + print "Problem #", key, "parsed as --" + print "*************************************************************" + a_submission.parse() + a_submission.talk() + +if __name__=='__main__': + # testing + test_submission_parse() +