def DefaultCitation(pmid=1, status='MEDLINE', title='title', journal='journal', pub_date='1990 published', created=date.today()): return Citation(pmid, status, title, journal, pub_date, created)
def MedlineCitation(self, element): options = {} for name, key in (('DateCompleted', 'completed'), ('DateCreated', 'created'), ('DateRevised', 'revised')): e = element.find(name) if e is not None: options[key] = ParseDate(e) created = options['created'] del options['created'] status = element.get('Status') journal = element.find('MedlineJournalInfo').find( 'MedlineTA').text.strip() article = element.find('Article') title = article.find('ArticleTitle').text # ArticleTitle element tags should never be empty when in fact they are sometimes, # in violation of the MEDLINE DTD; For example, while PMID 22536004 has a # VernacularTitle, its ArticleTitle element is empty. if title is None and article.find('VernacularTitle') is not None: logging.info( 'PMID %d had no ArticleTitle; using VernacularTitle instead' % self.pmid) title = article.find('VernacularTitle').text if title is None: logging.warning('could not find any title for PMID %d' % self.pmid) title = 'UNKNOWN' # NB: a DB constraint ensures titles are never empty! title = title.strip() pub_date = self.parsePubDate( article.find('Journal/JournalIssue/PubDate')) issue = self.parseIssue(article.find('Journal/JournalIssue')) pagination = self.parsePagination( article.find('Pagination/MedlinePgn')) if issue: options['issue'] = issue if pagination: options['pagination'] = pagination return Citation(self.pmid, status, title, journal, pub_date, created, **options)
def testToString(self): d = date.today() r = Citation(1, 'MEDLINE', 'title', 'journal\\.', '1990 PubDate', d) line = "1\tMEDLINE\t1990\ttitle\tjournal\\\\.\t1990 PubDate\t\\N\t\\N\t{}\t\\N\t\\N\t{}\n".format( d.isoformat(), d.isoformat()) self.assertEqual(line, str(r))
def testRequireModifiedDateOrNone(self): m = Citation(*self.defaults) m.modified = '' self.sess.add(m) self.assertRaises(StatementError, self.sess.commit)
DATA = [ Abstract(1, 'NLM'), Section(1, 'NLM', 1, 'Abstract', 'The Abstract 1'), Section(1, 'NLM', 2, 'Abstract', 'The Abstract 2'), Descriptor(1, 1, 'd_name', True), Descriptor(1, 2, 'd_name'), Qualifier(1, 1, 1, 'q_name', True), Author(1, 1, 'first'), Author(1, 2, 'last'), Identifier(1, 'ns', 'id'), Database(1, 'name', 'accession'), PublicationType(1, 'some'), PublicationType(1, 'another'), Chemical(1, 1, 'name', 'uid'), Keyword(1, 'NOTNLM', 1, 'name', True), Citation(1, 'MEDLINE', 'title', 'journal', '1990 pub_date', date.today()), ] class ParserMock: def __init__(self, instances): self.instances = instances def parse(self, _): for i in self.instances: yield i class TestDump(unittest.TestCase): def setUp(self): self.out = {