def get_coversheet_info(project_id): project_id = clean_project_id(project_id) coversheets = coversheet.parse('coversheet/%s.xml' % project_id) if len(coversheets) > 1: print >>sys.stderr, '%s has more than one proposal' % project_id elif len(coversheets) == 0: return {} else: return coversheets[0]
def build(filenames): """Build a dict of dicts given filenames of xml files from PST. Assume: coversheet/ and author/ are local directories w/file named filename """ need0_re = re.compile('^([A|B][A-Z])(\d\d\d)$') megadict = {} for filename in filenames: try: coversheet_info = coversheet.parse('coversheet/' + filename)[0] except: continue try: authors_info = authors.parse('author/' + filename) except: continue relevant = {} for key in relevant_coversheet_keys: relevant[rename(key)] = coversheet_info[key] pi = None pi_id = coversheet_info.get('pi', '-1') maybe_pi = [author for author in authors_info if author.get('astronomer_id', '-2') == pi_id] if len(maybe_pi) > 0: pi = maybe_pi[0] investigators = [] investigator_details = [] for author_info in authors_info: author_relevant = {} for key in relevant_author_keys: author_relevant[rename(key)] = author_info[key] investigator_details.append(author_relevant) investigators.append('%s, %s (%s)' % (author_relevant['last_name'], author_relevant['first_name'], author_relevant['affiliation'], )) if author_info == pi: relevant['pi_details'] = author_relevant relevant['investigators'] = sorted(investigators) relevant['investigator_details'] = sorted(investigator_details) alt_id = relevant['proposal_id'].replace('/', '').replace('-', '_') megadict[relevant['proposal_id']] = relevant megadict[relevant['legacy_id']] = relevant megadict[alt_id] = relevant megadict[filename.replace('.xml', '')] = relevant if relevant['proposal_id'].startswith('GBT'): print relevant['proposal_id'] else: leg_id = relevant['legacy_id'] need0_match = need0_re.match(leg_id) if need0_match is not None: leg_id = '0'.join(need0_match.groups()) megadict[leg_id] = relevant print leg_id return megadict