def populate_cnums(): """Populate table seqSTORE with the cnums present in CONFERENCE records.""" # First get all records from conference collection conf_records = perform_request_search(cc="Conferences", p="111__g:C*", rg=0) for recid in conf_records: cnum = record_get_field_value( get_bibrecord(recid), tag="111", ind1="", ind2="", code="g") if cnum: if not _cnum_exists(cnum): _insert_cnum(cnum) print("cnum %s from record %s inserted" % (cnum, recid))
def _create_ticket(recid, bibcatalog_system, queue): subject = "Refs for #%s" % recid if CFG_INSPIRE_SITE: # Add report number in the subjecet report_number = "" record = get_bibrecord(recid) in_core = False for collection_tag in record_get_field_instances(record, "980"): for collection in field_get_subfield_values(collection_tag, 'a'): if collection == 'CORE': in_core = True if collection == 'arXiv': # Do not create tickets for arxiv papers # Tickets for arxiv papers are created in bibcatelog write_message("arXiv paper", verbose=1) return # Only create tickets for HEP if not in_core: write_message("not in hep", verbose=1) return # Do not create tickets for old records creation_date = run_sql( """SELECT creation_date FROM bibrec WHERE id = %s""", [recid])[0][0] if creation_date < datetime.now() - timedelta(days=30 * 4): return for report_tag in record_get_field_instances(record, "037"): for category in field_get_subfield_values(report_tag, 'c'): if category.startswith('astro-ph'): write_message("astro-ph", verbose=1) # We do not curate astro-ph return for report_number in field_get_subfield_values(report_tag, 'a'): subject += " " + report_number break text = '%s/record/edit/#state=edit&recid=%s' % (CFG_SITE_SECURE_URL, recid) bibcatalog_system.ticket_submit(subject=subject, queue=queue, text=text, recordid=recid)
def load_records_from_id(records): """ Given a record tuple of record id and last updated/created date, this function will yield a tuple with the record id replaced with a record structure iterativly. @param record: tuple of (recid, date-string) Ex: (1, 2012-12-12 12:12:12) @type record: tuple @yield: tuple of (record structure (dict), date-string) """ for recid, date in records: record = get_bibrecord(int(recid)) if not record: write_message("Error: could not load record %s" % (recid,)) continue yield record, date
def load_records_from_id(records): """ Given a record tuple of record id and last updated/created date, this function will yield a tuple with the record id replaced with a record structure iterativly. @param record: tuple of (recid, date-string) Ex: (1, 2012-12-12 12:12:12) @type record: tuple @yield: tuple of (record structure (dict), date-string) """ for recid, date in records: record = get_bibrecord(int(recid)) if not record: write_message("Error: could not load record %s" % (recid, )) continue yield record, date
def _create_ticket(recid, bibcatalog_system, queue): subject = "Refs for #%s" % recid if CFG_INSPIRE_SITE: # Add report number in the subjecet report_number = "" record = get_bibrecord(recid) in_core = False for collection_tag in record_get_field_instances(record, "980"): for collection in field_get_subfield_values(collection_tag, "a"): if collection == "CORE": in_core = True if collection == "arXiv": # Do not create tickets for arxiv papers # Tickets for arxiv papers are created in bibcatelog write_message("arXiv paper", verbose=1) return # Only create tickets for HEP if not in_core: write_message("not in hep", verbose=1) return # Do not create tickets for old records creation_date = run_sql( """SELECT creation_date FROM bibrec WHERE id = %s""", [recid], )[0][0] if creation_date < datetime.now() - timedelta(days=30 * 4): return for report_tag in record_get_field_instances(record, "037"): for category in field_get_subfield_values(report_tag, "c"): if category.startswith("astro-ph"): write_message("astro-ph", verbose=1) # We do not curate astro-ph return for report_number in field_get_subfield_values(report_tag, "a"): subject += " " + report_number break text = "%s/record/edit/#state=edit&recid=%s" % (CFG_SITE_SECURE_URL, recid) bibcatalog_system.ticket_submit(subject=subject, queue=queue, text=text, recordid=recid)
def _next_value(self, recid=None, xml_record=None, start_date=None): """Return the next cnum for the given recid. :param recid: id of the record where the cnum will be generated :type recid: int :param xml_record: record in xml format :type xml_record: string :param start_date: use given start date :type start_date: string :return: next cnum for the given recid. Format is Cyy-mm-dd.[.1n] :rtype: string :raises ConferenceNoStartDateError: No date information found in the given recid """ bibrecord = None if recid is None and xml_record is not None: bibrecord = create_record(xml_record)[0] elif recid is not None: bibrecord = get_bibrecord(recid) if start_date is None and bibrecord is not None: start_date = record_get_field_value(bibrecord, tag="111", ind1="", ind2="", code="x") if not start_date: raise ConferenceNoStartDateError base_cnum = "C" + start_date[2:] record_cnums = self._get_record_cnums(base_cnum) if not record_cnums: new_cnum = base_cnum else: # Get the max current revision, cnums are in format Cyy-mm-dd, # Cyy-mm-dd.1, Cyy-mm-dd.2 highest_revision = max([0] + [int(rev[0].split('.')[1]) for rev in record_cnums if '.' in rev[0]]) new_cnum = base_cnum + '.' + str(highest_revision + 1) return new_cnum
def _next_value(self, recid=None, xml_record=None, bibrecord=None): """Return the next texkey for the given recid. :param recid: id of the record where the texkey will be generated :type recid: int :param xml_record: record in xml format :type xml_record: string :return: next texkey for the given recid. :rtype: string :raises TexkeyNoAuthorError: No main author (100__a) or collaboration (710__g) in the given recid """ if recid is None and xml_record is not None: bibrecord = create_record(xml_record)[0] elif bibrecord is None: bibrecord = get_bibrecord(recid) main_author = record_get_field_value(bibrecord, tag="100", ind1="", ind2="", code="a") if not main_author: # Try with collaboration name main_author = record_get_field_value(bibrecord, tag="710", ind1="", ind2="", code="g") main_author = "".join([p for p in main_author.split() if p.lower() != "collaboration"]) if not main_author: # Try with corporate author main_author = record_get_field_value(bibrecord, tag="100", ind1="", ind2="", code="a") if not main_author: raise TexkeyNoAuthorError # Remove utf-8 special characters main_author = unidecode(main_author.decode('utf-8')) try: texkey_first_part = main_author.split(',')[0].replace(" ", "") except KeyError: texkey_first_part = "" year = record_get_field_value(bibrecord, tag="269", ind1="", ind2="", code="c") if not year: year = record_get_field_value(bibrecord, tag="260", ind1="", ind2="", code="c") if not year: year = record_get_field_value(bibrecord, tag="773", ind1="", ind2="", code="y") if not year: year = record_get_field_value(bibrecord, tag="502", ind1="", ind2="", code="d") if not year: raise TexkeyNoYearError try: texkey_second_part = year.split("-")[0] except KeyError: texkey_second_part = "" texkey_third_part = _texkey_random_chars(recid) texkey = texkey_first_part + ":" + \ texkey_second_part + texkey_third_part tries = 0 while self._value_exists(texkey) and tries < TEXKEY_MAXTRIES: # Key is already in the DB, generate a new one texkey_third_part = _texkey_random_chars(recid, use_random=True) texkey = texkey_first_part + ":" + \ texkey_second_part + texkey_third_part tries += 1 return texkey