def generate_ticket(ticket, record): """ Generates a ticket to be created, filling subject, body and queue values of the passed BibCatalogTicket object. The enriched object is returned. @param ticket: a ticket object as created by BibCatalogTicket() containing the subject, body and queue to create a ticket in. @type ticket: record object of BibCatalogTicket. @param record: a recstruct object as created by bibrecord.create_record() @type record: record object of BibRecord. @return: the modified ticket object to create. @rtype: BibCatalogTicket """ recid = record_id_from_record(record) subject = [] # Add report number in the subjecet report_number = "" for report_tag in record_get_field_instances(record, "037"): for report_number in field_get_subfield_values(report_tag, 'a'): subject.append(report_number) break subject.append("(#%s)" % (recid, )) text = 'Curate record here: %s/record/edit/#state=edit&recid=%s' % \ (CFG_SITE_SECURE_URL, recid) ticket.subject = " ".join(subject) ticket.body = text.replace('%', '%%') ticket.queue = "HEP_curation" return ticket
def generate_ticket(ticket, record): """ Generates a ticket to be created, filling subject, body and queue values of the passed BibCatalogTicket object. The enriched object is returned. @param ticket: a ticket object as created by BibCatalogTicket() containing the subject, body and queue to create a ticket in. @type ticket: record object of BibCatalogTicket. @param record: a recstruct object as created by bibrecord.create_record() @type record: record object of BibRecord. @return: the modified ticket object to create. @rtype: BibCatalogTicket """ recid = record_id_from_record(record) subject = [] # Add report number in the subjecet report_number = "" for report_tag in record_get_field_instances(record, "037"): for report_number in field_get_subfield_values(report_tag, 'a'): subject.append(report_number) break subject.append("(#%s)" % (recid,)) text = 'Curate record here: %s/record/edit/#state=edit&recid=%s' % \ (CFG_SITE_SECURE_URL, recid) ticket.subject = " ".join(subject) ticket.body = text.replace('%', '%%') ticket.queue = "HEP_curation" return ticket
def task_run_core(): """ Main daemon task. Returns True when run successfully. False otherwise. """ # Dictionary of "plugin_name" -> func tickets_to_apply = task_get_option('tickets') write_message("Ticket plugins found: %s" % (str(tickets_to_apply), ), verbose=9) task_update_progress("Loading records") records_concerned = get_recids_to_load() write_message("%i record(s) found" % (len(records_concerned), )) records_processed = 0 for record, last_date in load_records_from_id(records_concerned): records_processed += 1 recid = record_id_from_record(record) task_update_progress( "Processing records %s/%s (%i%%)" % (records_processed, len(records_concerned), int(float(records_processed) / len(records_concerned) * 100))) task_sleep_now_if_required(can_stop_too=True) for ticket_name, plugin in tickets_to_apply.items(): if plugin: write_message("Running template %s for %s" % (ticket_name, recid), verbose=5) try: ticket = BibCatalogTicket(recid=int(recid)) if plugin['check_record'](ticket, record): ticket = plugin['generate_ticket'](ticket, record) write_message("Ticket to be generated: %s" % (ticket, ), verbose=5) res = ticket.submit() if res: write_message("Ticket #%s created for %s" % (ticket.ticketid, recid)) else: write_message("Ticket already exists for %s" % (recid, )) else: write_message("Skipping record %s", (recid, )) except Exception, e: write_message("Error submitting ticket for record %s:" % (recid, )) write_message(traceback.format_exc()) raise e else: raise BibCatalogPluginException("Plugin not valid in %s" % (ticket_name, )) if last_date: store_last_updated(recid, last_date, name="bibcatalog")
def task_run_core(): """ Main daemon task. Returns True when run successfully. False otherwise. """ # Dictionary of "plugin_name" -> func tickets_to_apply = task_get_option('tickets') write_message("Ticket plugins found: %s" % (str(tickets_to_apply),), verbose=9) task_update_progress("Loading records") records_concerned = get_recids_to_load() write_message("%i record(s) found" % (len(records_concerned),)) records_processed = 0 for record, last_date in load_records_from_id(records_concerned): records_processed += 1 recid = record_id_from_record(record) task_update_progress("Processing records %s/%s (%i%%)" % (records_processed, len(records_concerned), int(float(records_processed) / len(records_concerned) * 100))) task_sleep_now_if_required(can_stop_too=True) for ticket_name, plugin in tickets_to_apply.items(): if plugin: write_message("Running template %s for %s" % (ticket_name, recid), verbose=5) try: ticket = BibCatalogTicket(recid=int(recid)) if plugin['check_record'](ticket, record): ticket = plugin['generate_ticket'](ticket, record) write_message("Ticket to be generated: %s" % (ticket,), verbose=5) res = ticket.submit() if res: write_message("Ticket #%s created for %s" % (ticket.ticketid, recid)) else: write_message("Ticket already exists for %s" % (recid,)) else: write_message("Skipping record %s", (recid,)) except Exception, e: write_message("Error submitting ticket for record %s:" % (recid,)) write_message(traceback.format_exc()) raise e else: raise BibCatalogPluginException("Plugin not valid in %s" % (ticket_name,)) if last_date: store_last_updated(recid, last_date, name="bibcatalog")
def test_record_id_from_record(self): """Tests function bibcatalog_utils.record_id_from_record""" self.assertEqual("1", record_id_from_record(self.record))
def generate_ticket(ticket, record): """ Generates a ticket to be created, filling subject, body and queue values of the passed BibCatalogTicket object. The enriched object is returned. @param ticket: a ticket object as created by BibCatalogTicket() containing the subject, body and queue to create a ticket in. @type ticket: record object of BibCatalogTicket. @param record: a recstruct object as created by bibrecord.create_record() @type record: record object of BibRecord. @return: the modified ticket object to create. @rtype: BibCatalogTicket """ title_code = load_tag_code_from_name("title") abstract_code = load_tag_code_from_name("abstract") try: date_code = load_tag_code_from_name("date") except BibCatalogTagNotFound: date_code = load_tag_code_from_name("year") category_code = load_tag_code_from_name("subject") try: notes_code = load_tag_code_from_name("note") except BibCatalogTagNotFound: notes_code = load_tag_code_from_name("comment") first_author_code = load_tag_code_from_name("first author name") additional_author_code = load_tag_code_from_name("additional author name") try: external_id_code = load_tag_code_from_name("ext system ID") except BibCatalogTagNotFound: external_id_code = load_tag_code_from_name("primary report number") # List of extra info to print in the ticket. extra_info = [] recid = record_id_from_record(record) arxiv_id = _get_minimal_arxiv_id(record, external_id_code) if arxiv_id: # We have an arxiv id - we can add special info: extra_info.append("ABSTRACT: http://arxiv.org/abs/%s" % (arxiv_id,)) extra_info.append("PDF: http://arxiv.org/pdf/%s" % (arxiv_id,)) categories = record_get_value_with_provenence(record=record, provenence_code="2", provenence_value="arXiv", **split_tag_code(category_code)) comments = record_get_value_with_provenence(record=record, provenence_code="9", provenence_value="arXiv", **split_tag_code(notes_code)) external_ids = arxiv_id subject = "ARXIV:" + arxiv_id else: # Not an arxiv record - Lets get generic info categories = record_get_value_with_provenence(record=record, provenence_code="2", provenence_value="SzGeCERN", **split_tag_code(category_code)) comments = record_get_field_values(rec=record, **split_tag_code(notes_code)) external_id_list = record_get_field_values(rec=record, **split_tag_code(external_id_code)) external_ids = ", ".join(external_id_list) subject = "Record #%s %s" % (recid, external_ids) authors = record_get_field_values(record, **split_tag_code(first_author_code)) + \ record_get_field_values(record, **split_tag_code(additional_author_code)) text = """ %(submitdate)s External IDs: %(external_ids)s Title: %(title)s Authors: %(authors)s Categories: %(categories)s Comments: %(comments)s %(abstract)s %(extra_info)s Edit the record now: %(editurl)s """ \ % { 'external_ids': external_ids, 'submitdate': record_get_field_value(record, **split_tag_code(date_code)), 'extra_info': "\n".join(extra_info), 'title': record_get_field_value(record, **split_tag_code(title_code)), 'comments': "; ".join(comments), 'categories': " ".join(categories), 'authors': " / ".join(authors[:10]), 'abstract': record_get_field_value(record, **split_tag_code(abstract_code)), 'editurl': "%s/record/edit/%s" % (CFG_SITE_URL, recid), } # To avoid errors with string formatting later, we are escaping %'s ticket.subject = subject ticket.body = text.replace('%', '%%') ticket.queue = "Test" return ticket