def main(argv=sys.argv): # Configure argument parsing parser = ArgumentParser(description='''Report number of images imported in a date range''') parser.add_argument('-q', '--quiet', action='store_const', const=True, default=False, help='Do not print output') parser.add_argument('-f', '--file', metavar='file', help='Destination CSV file') parser.add_argument('-s', '--start', metavar='start', help='Start timestamp') parser.add_argument('-e', '--end', metavar='end', help='End timestamp') parser.add_argument('-a', '--all', action='store_const', const=True, default=False, help='Complete report. Ignores start/end') parser.add_argument('-p', '--period', choices=['year', 'month', 'day'], default='month', help='Period for use in conjunction with -a') args = parser.parse_args() # Create an OMERO Connection with our basic connection manager conn_manager = OMEROConnectionManager() if args.all: q = ''' SELECT grp.name, experimenter.omeName, TO_CHAR(event.time, '{period}') AS cal_period, count(event.time) FROM Image image JOIN image.details.creationEvent event JOIN image.details.owner experimenter JOIN image.details.group grp GROUP BY grp.name, experimenter.omeName, TO_CHAR(event.time, '{period}') ORDER BY grp.name, experimenter.omeName, TO_CHAR(event.time, '{period}') DESC ''' q = q.format(period=periods[args.period]) # Run the query rows = conn_manager.hql_query(q) header = ['Group', 'Username', 'Period', 'Count'] else: params = ParametersI() params.map = {} start_date = None end_date = None try: if args.start: start_date = dateutil.parser.parse(args.start) if args.end: end_date = dateutil.parser.parse(args.end) except ValueError: sys.stderr.write('Start and/or end dates have to be parseable!') sys.exit(1) q = ''' SELECT grp.name, experimenter.omeName, count(event.time) FROM Image image JOIN image.details.creationEvent event JOIN image.details.owner experimenter JOIN image.details.group grp ''' if start_date or end_date: q += ' WHERE ' if start_date: q += ' event.time >= :dstart ' params.map['dstart'] = rtime(unix_time_millis(start_date)) if start_date and end_date: q += ' AND ' if end_date: q += ' event.time <= :dend' params.map['dend'] = rtime(unix_time_millis(end_date)) q += ''' GROUP BY grp.name, experimenter.omeName ''' # Run the query rows = conn_manager.hql_query(q, params) header = ['Group', 'Username', 'Count'] # Print results (if not quieted) if args.quiet is False: print(', '.join(header)) for row in rows: print(', '.join([str(item) for item in row])) # Output CSV file (if specified) if args.file is not None: write_csv(rows, args.file, header)
def main(argv=sys.argv): # Configure argument parsing parser = ArgumentParser(description='''Report number of images imported in a date range''') parser.add_argument('-q', '--quiet', action='store_const', const=True, default=False, help='Do not print output') parser.add_argument('-f', '--file', metavar='file', help='Destination CSV file') parser.add_argument('-s', '--start', metavar='start', help='Start timestamp') parser.add_argument('-e', '--end', metavar='end', help='End timestamp') parser.add_argument('-a', '--all', action='store_const', const=True, default=False, help='Complete report. Ignores start/end') parser.add_argument('-p', '--period', choices=['year', 'month', 'day'], default='month', help='Period for use in conjunction with -a') args = parser.parse_args() # Create an OMERO Connection with our basic connection manager conn_manager = OMEROConnectionManager() if args.all: q = ''' SELECT grp.name, experimenter.omeName, TO_CHAR(event.time, '{period}') AS cal_period, count(event.time) FROM Image image JOIN image.details.creationEvent event JOIN image.details.owner experimenter JOIN image.details.group grp GROUP BY grp.name, experimenter.omeName, TO_CHAR(event.time, '{period}') ORDER BY grp.name, experimenter.omeName, TO_CHAR(event.time, '{period}') DESC ''' q = q.format(period=periods[args.period]) # Run the query rows = conn_manager.hql_query(q) header = ['Group', 'Username', 'Period', 'Count'] else: params = ParametersI() params.map = {} start_date = None end_date = None try: if args.start: start_date = dateutil.parser.parse(args.start) if args.end: end_date = dateutil.parser.parse(args.end) except ValueError: sys.stderr.write('Start and/or end dates have to be parseable!') sys.exit(1) q = ''' SELECT grp.name, experimenter.omeName, count(event.time) FROM Image image JOIN image.details.creationEvent event JOIN image.details.owner experimenter JOIN image.details.group grp ''' if start_date or end_date: q += ' WHERE ' if start_date: q += ' event.time >= :dstart ' params.map['dstart'] = rtime(unix_time_millis(start_date)) if start_date and end_date: q += ' AND ' if end_date: q += ' event.time <= :dend' params.map['dend'] = rtime(unix_time_millis(end_date)) q += ''' GROUP BY grp.name, experimenter.omeName ''' # Run the query rows = conn_manager.hql_query(q, params) header = ['Group', 'Username', 'Count'] # Print results (if not quieted) if args.quiet is False: print ', '.join(header) for row in rows: print ', '.join([str(item) for item in row]) # Output CSV file (if specified) if args.file is not None: write_csv(rows, args.file, header)