def migrate_journals(source): # read in the content f = open(source) xml = etree.parse(f) f.close() journals = xml.getroot() print "migrating", str(len(journals)), "journal records" clusters = _get_journal_clusters(journals) # make a journal object, and map the main and historic records to it for canon, rest in clusters: j = Journal() cb = _to_journal_bibjson(canon) j.set_bibjson(cb) j.set_in_doaj(_is_in_doaj(canon)) j.set_created(_created_date(canon)) for p in rest: replaces = _get_replaces(p) isreplacedby = _get_isreplacedby(p) j.add_history(_to_journal_bibjson(p), replaces=replaces, isreplacedby=isreplacedby) j.save()
def add_journal_metadata(self, j=None, reg=None): """ this function makes sure the article is populated with all the relevant info from its owning parent object :param j: Pass in a Journal to bypass the (slow) locating step. MAKE SURE IT'S THE RIGHT ONE! """ # Record the data that is copied into the article into the "reg"ister, in case the # caller needs to know exactly and only which information was copied if reg is None: reg = Journal() rbj = reg.bibjson() if j is None: journal = self.get_journal() else: journal = j # we were unable to find a journal if journal is None: raise NoJournalException( "Unable to find a journal associated with this article") # if we get to here, we have a journal record we want to pull data from jbib = journal.bibjson() bibjson = self.bibjson() # tripwire to be tripped if the journal makes changes to the article trip = False if bibjson.subjects() != jbib.subjects(): trip = True bibjson.set_subjects(jbib.subjects()) rbj.set_subjects(jbib.subjects()) if jbib.title is not None: if bibjson.journal_title != jbib.title: trip = True bibjson.journal_title = jbib.title rbj.title = jbib.title if jbib.get_license() is not None: lic = jbib.get_license() alic = bibjson.get_journal_license() if lic is not None and ( alic is None or (lic.get("title") != alic.get("title") or lic.get("type") != alic.get("type") or lic.get("url") != alic.get("url") or lic.get("version") != alic.get("version") or lic.get("open_access") != alic.get("open_access"))): bibjson.set_journal_license(lic.get("title"), lic.get("type"), lic.get("url"), lic.get("version"), lic.get("open_access")) trip = True rbj.set_license(lic.get("title"), lic.get("type"), lic.get("url"), lic.get("version"), lic.get("open_access")) if len(jbib.language) > 0: jlang = jbib.language alang = bibjson.journal_language jlang.sort() alang.sort() if jlang != alang: bibjson.journal_language = jbib.language trip = True rbj.set_language(jbib.language) if jbib.country is not None: if jbib.country != bibjson.journal_country: bibjson.journal_country = jbib.country trip = True rbj.country = jbib.country if jbib.publisher: if jbib.publisher != bibjson.publisher: bibjson.publisher = jbib.publisher trip = True rbj.publisher = jbib.publisher # Copy the seal info, in_doaj status and the journal's ISSNs if journal.is_in_doaj() != self.is_in_doaj(): self.set_in_doaj(journal.is_in_doaj()) trip = True reg.set_in_doaj(journal.is_in_doaj()) if journal.has_seal() != self.has_seal(): self.set_seal(journal.has_seal()) trip = True reg.set_seal(journal.has_seal()) try: aissns = bibjson.journal_issns jissns = jbib.issns() aissns.sort() jissns.sort() if aissns != jissns: bibjson.journal_issns = jbib.issns() trip = True eissns = jbib.get_identifiers(jbib.E_ISSN) pissns = jbib.get_identifiers(jbib.P_ISSN) if eissns is not None and len(eissns) > 0: rbj.add_identifier(rbj.E_ISSN, eissns[0]) if pissns is not None and len(pissns) > 0: rbj.add_identifier(rbj.P_ISSN, pissns[0]) except KeyError: # No issns, don't worry about it for now pass return trip
def add_journal_metadata(self, j=None, reg=None): """ this function makes sure the article is populated with all the relevant info from its owning parent object :param j: Pass in a Journal to bypass the (slow) locating step. MAKE SURE IT'S THE RIGHT ONE! """ # Record the data that is copied into the article into the "reg"ister, in case the # caller needs to know exactly and only which information was copied if reg is None: reg = Journal() rbj = reg.bibjson() if j is None: journal = self.get_journal() else: journal = j # we were unable to find a journal if journal is None: raise NoJournalException("Unable to find a journal associated with this article") # if we get to here, we have a journal record we want to pull data from jbib = journal.bibjson() bibjson = self.bibjson() # tripwire to be tripped if the journal makes changes to the article trip = False if bibjson.subjects() != jbib.subjects(): trip = True bibjson.set_subjects(jbib.subjects()) rbj.set_subjects(jbib.subjects()) if jbib.title is not None: if bibjson.journal_title != jbib.title: trip = True bibjson.journal_title = jbib.title rbj.title = jbib.title if jbib.get_license() is not None: lic = jbib.get_license() alic = bibjson.get_journal_license() if lic is not None and (alic is None or (lic.get("title") != alic.get("title") or lic.get("type") != alic.get("type") or lic.get("url") != alic.get("url") or lic.get("version") != alic.get("version") or lic.get("open_access") != alic.get("open_access"))): bibjson.set_journal_license(lic.get("title"), lic.get("type"), lic.get("url"), lic.get("version"), lic.get("open_access")) trip = True rbj.set_license(lic.get("title"), lic.get("type"), lic.get("url"), lic.get("version"), lic.get("open_access")) if len(jbib.language) > 0: jlang = jbib.language alang = bibjson.journal_language jlang.sort() alang.sort() if jlang != alang: bibjson.journal_language = jbib.language trip = True rbj.set_language(jbib.language) if jbib.country is not None: if jbib.country != bibjson.journal_country: bibjson.journal_country = jbib.country trip = True rbj.country = jbib.country if jbib.publisher: if jbib.publisher != bibjson.publisher: bibjson.publisher = jbib.publisher trip = True rbj.publisher = jbib.publisher # Copy the seal info, in_doaj status and the journal's ISSNs if journal.is_in_doaj() != self.is_in_doaj(): self.set_in_doaj(journal.is_in_doaj()) trip = True reg.set_in_doaj(journal.is_in_doaj()) if journal.has_seal() != self.has_seal(): self.set_seal(journal.has_seal()) trip = True reg.set_seal(journal.has_seal()) try: aissns = bibjson.journal_issns jissns = jbib.issns() aissns.sort() jissns.sort() if aissns != jissns: bibjson.journal_issns = jbib.issns() trip = True eissns = jbib.get_identifiers(jbib.E_ISSN) pissns = jbib.get_identifiers(jbib.P_ISSN) if eissns is not None and len(eissns) > 0: rbj.add_identifier(rbj.E_ISSN, eissns[0]) if pissns is not None and len(pissns) > 0: rbj.add_identifier(rbj.P_ISSN, pissns[0]) except KeyError: # No issns, don't worry about it for now pass return trip