"""SubmissionCheck
Checks that each submission is listed in the appropriate story
Checks that each story's submission record is in the submission file
"""


from IMS import *


subfile = SubFiler()
storyfile = StoryFiler()

sublist = []
subdict = {}
storylist = []
storydict = {}

### Set up the sublist, subdict, storylist, and storydict objects

for key in subfile.keys():
	subnode = subfile.getXML(key)
	subobj = NodeToSubmission(subnode)
	sublist.append(subobj)
	subdict[subobj.code]=subobj
	
for key in storyfile.keys():
	storynode = storyfile.getXML(key)
	storyobj = NodeToStory(storynode)
	storylist.append(storyobj)
	storydict[storyobj.code]=storyobj

### Report how many things we've found
print "Submissions:",len(sublist)
print "Stories:",len(storylist)

### Search for submission objects whose story does not have the submission linked
badsubcodes = []
for sub in sublist:
	#print sub.code,sub.storycode
	thisstory = storydict[str(sub.storycode)]
	if sub.code not in thisstory.submissions:
		badsubcodes.append(sub.code)

if badsubcodes:
	print "The following submissions have bad story codes"
	for bsc in badsubcodes: print bsc,subdict[bsc].storycode
else:
	print "All submission objects match story code submissions"


### Search for story objects whose submissions are not in the submission list
badstorycodes = []
for story in storylist:
	#print story.code,story.submissions
	for subcode in story.submissions:
		if not subdict.has_key(subcode):
			badstorycodes.append((subcode,story.code))

if badstorycodes:
	print "The following stories have bad submission codes:"
	for bsc in badstorycodes: 
		print "Bad submission code %s in story %s" % (bsc)
else:
	print "All story objects submission codes match submissions"
	