def update_gdoc_spec(doc=None, spec=None): log.info("Updating test specs with latest CentralNotice changes... {url}". format(url=doc)) # FIXME: currently, the spec must have been read with read_gdoc_spec in order to get row numbers if not spec: spec = read_gdoc_spec(doc=doc) spec.update_from_logs() doc = Spreadsheet(doc=doc) for index, test in enumerate(spec.spec, 0): api_rownum = index + 1 rownum = index + 2 if api_rownum < doc.num_rows(): if not hasattr(test, 'modified') or not test.modified: continue log.debug("updating spec end time in row {rownum}: {spec}".format( rownum=rownum, spec=test)) if test.end_time: doc.update_row({'end': test.end_time}, index=api_rownum) else: log.debug("appending spec row {rownum}: {spec}".format( rownum=rownum, spec=test)) doc.append_row({ 'label': test.label, 'type': "banner", 'start': test.start_time, 'end': test.end_time, 'campaign': test.campaign['name'], 'banners': ", ".join(test.banners), })
def execute(self, sql, params=None, timeout = 0): cursor = self.db_conn.cursor(cursorclass=Dbi.cursors.DictCursor) deathClock = None if self.debug: if params: log.debug(str(sql) + " % " + repr(params)) else: log.debug(str(sql)) if timeout > 0: deathClock = threading.Timer(timeout, self.kill_connection) deathClock.start() try: if params: cursor.execute(sql, params) elif hasattr(sql, 'uninterpolated_sql') and sql.params: cursor.execute(sql.uninterpolated_sql(), sql.params) else: cursor.execute(str(sql)) #for row in cursor.fetchall(): # yield row out = cursor.fetchall() cursor.close() return out finally: if deathClock is not None: deathClock.cancel()
def update_gdoc_spec(doc=None, spec=None): log.info("Updating test specs with latest CentralNotice changes... {url}".format(url=doc)) # FIXME: currently, the spec must have been read with read_gdoc_spec in order to get row numbers if not spec: spec = read_gdoc_spec(doc=doc) spec.update_from_logs() doc = Spreadsheet(doc=doc) for index, test in enumerate(spec.spec, 0): api_rownum = index + 1 rownum = index + 2 if api_rownum < doc.num_rows(): if not hasattr(test, 'modified') or not test.modified: continue log.debug("updating spec end time in row {rownum}: {spec}".format(rownum=rownum, spec=test)) if test.end_time: doc.update_row({'end': test.end_time}, index=api_rownum) else: log.debug("appending spec row {rownum}: {spec}".format(rownum=rownum, spec=test)) doc.append_row({ 'label': test.label, 'type': "banner", 'start': test.start_time, 'end': test.end_time, 'campaign': test.campaign['name'], 'banners': ", ".join(test.banners), })
def is_fr_test(test): if test.label and test.banners and test.campaign: is_chapter = re.search(config.fr_chapter_test, test.banners[0]) if is_chapter: log.debug("Determined test {title} belongs to a chapter".format(title=test.label)) else: log.debug("Determined test {title} belongs to Fundraising".format(title=test.label)) return not is_chapter log.warn("missing data for test {title}".format(title=test.label))
def is_fr_test(test): if test.label and test.banners and test.campaign: is_chapter = re.search(config.fr_chapter_test, test.banners[0]) if is_chapter: log.debug("Determined test {title} belongs to a chapter".format( title=test.label)) else: log.debug("Determined test {title} belongs to Fundraising".format( title=test.label)) return not is_chapter log.warn("missing data for test {title}".format(title=test.label))
def update_gdoc_results(doc=None, results=[]): log.info("Updating results in {url}".format(url=doc)) doc = Spreadsheet(doc=doc) existing = list(doc.get_all_rows()) def find_matching_cases(criteria): matching = [] def fuzzy_compare_row(row, criteria): if not row: return False if criteria['banner'] == row['banner'] and criteria[ 'campaign'] == row['campaign'] and criteria[ 'start'] == row['start']: return True for n, row in enumerate(existing, 1): if fuzzy_compare_row(row, criteria): matching.append(n) return matching for result in results: if not result: continue matching = find_matching_cases(result['criteria']) props = {} props.update(result['results']) props.update(result['criteria']) if len(matching) == 0: doc.append_row(props) else: if len(matching) > 1: log.warn( "more than one result row {match} matches criteria: {criteria}" .format(match=matching, criteria=result['criteria'])) index = matching[-1] log.debug("updating row {rownum} with {banner}".format( rownum=index, banner=result['criteria']['banner'])) doc.update_row(props, index=index)
def execute(self, sql, params=None): cursor = self.db_conn.cursor(cursorclass=Dbi.cursors.DictCursor) if self.debug: if params: log.debug(str(sql) + " % " + repr(params)) else: log.debug(str(sql)) if params: cursor.execute(sql, params) elif hasattr(sql, 'uninterpolated_sql') and sql.params: cursor.execute(sql.uninterpolated_sql(), sql.params) else: cursor.execute(str(sql)) #for row in cursor.fetchall(): # yield row out = cursor.fetchall() cursor.close() return out
def update_gdoc_results(doc=None, results=[]): log.info("Updating results in {url}".format(url=doc)) doc = Spreadsheet(doc=doc) existing = list(doc.get_all_rows()) def find_matching_cases(criteria): matching = [] def fuzzy_compare_row(row, criteria): if not row: return False if criteria['banner'] == row['banner'] and criteria['campaign'] == row['campaign'] and criteria['start'] == row['start']: return True for n, row in enumerate(existing, 1): if fuzzy_compare_row(row, criteria): matching.append(n) return matching for result in results: if not result: continue matching = find_matching_cases(result['criteria']) props = {} props.update(result['results']) props.update(result['criteria']) if len(matching) == 0: doc.append_row(props) else: if len(matching) > 1: log.warn("more than one result row {match} matches criteria: {criteria}".format(match=matching, criteria=result['criteria'])) index = matching[-1] log.debug("updating row {rownum} with {banner}".format(rownum=index, banner=result['criteria']['banner'])) doc.update_row(props, index=index)