def format_element(bfo, format='%Y-%m-%d', date_format='%Y-%m-%d'): ''' Get the record creation date. <b>Note:</b> parameter <code>format</code> is deprecated @param date_format: The date format in MySQL syntax ''' recID = bfo.recID # Let's be gentle and backward compatible while "format" is here: if date_format == '%Y-%m-%d' and format != '%Y-%m-%d': date_format = format out = get_creation_date(recID, date_format) return out
def setUp(self): """ webalert - prepare test alerts """ from invenio import alert_engine from invenio.legacy.search_engine import get_creation_date # TODO: test alerts for baskets too self.added_query_ids = [] q_query = """INSERT INTO query (type, urlargs) VALUES (%s,%s)""" q_user_query = """INSERT INTO user_query (id_user, id_query, date) VALUES (%%s,%(id_query)s,NOW())""" q_user_query_basket = """INSERT INTO user_query_basket (id_user, id_query, id_basket, frequency, date_creation, alert_name, notification, alert_recipient) VALUES (%%s,%(id_query)s,%%s,%%s,DATE(NOW()),%%s,%%s,%%s)""" parameters = {'romeo 1': {'query_params': ('r', 'c=Theses&c=Poetry',), 'user_query_params': (5,), 'user_query_basket_params': (5, 0, 'day', 'Romeo alert 1', 'y', '',)}, 'juliet 1': {'query_params': ('r', 'c=Theses&c=Poetry',), 'user_query_params': (6,), 'user_query_basket_params': (6, 0, 'day', 'Juliet alert 1', 'y', '',)}, 'mailing list 1': {'query_params': ('r', 'c=Theses&c=Poetry',), 'user_query_params': (6,), 'user_query_basket_params': (6, 0, 'day', 'Mailing list alert 1', 'y', CFG_SITE_ADMIN_EMAIL,)}, 'juliet 2': {'query_params': ('r', 'c=Theses',), 'user_query_params': (6,), 'user_query_basket_params': (6, 0, 'day', 'Juliet alert 2', 'y', '',)}, } for params in parameters.values(): row_id = run_sql(q_query, params['query_params']) self.added_query_ids.append(row_id) run_sql(q_user_query % {'id_query': row_id}, params['user_query_params']) run_sql(q_user_query_basket % {'id_query': row_id}, params['user_query_basket_params']) # Run the alert for a date when we expect some result, and # record output for later analysis. # First get creation date of demo records: alert_date = datetime.datetime(*(time.strptime(get_creation_date(41, fmt="%Y-%m-%d"), '%Y-%m-%d')[:6])).date() + datetime.timedelta(days=1) # Prevent emails to be sent, raise verbosity: previous_cfg_webalert_debug_level = alert_engine.CFG_WEBALERT_DEBUG_LEVEL alert_engine.CFG_WEBALERT_DEBUG_LEVEL = 3 # Re-route standard output: previous_stdout = sys.stdout # Re-route standard output sys.stdout = alert_output = StringIO() # Run the alert alert_engine.run_alerts(date=alert_date) # Restore standard output and alert debug level sys.stdout = previous_stdout alert_engine.CFG_WEBALERT_DEBUG_LEVEL = previous_cfg_webalert_debug_level # Remove test alerts for query_id in self.added_query_ids: run_sql('DELETE FROM user_query_basket WHERE id_query=%s', (query_id,)) run_sql('DELETE FROM user_query WHERE id_query=%s', (query_id,)) run_sql('DELETE FROM query WHERE id=%s', (query_id,)) # Identify alerts, organize by name (hopefully unique for # these tests) self.alerts = {} for alert_message in alert_output.getvalue().split("+" * 80 + '\n'): if 'alert name: ' in alert_message: alert_name = alert_message.split('alert name: ')[1].split('\n')[0] self.alerts[alert_name] = alert_message