def main(): parser = commandline_parser( 'Get ofgem certificates for a given month & year') parser.add_argument('--generator', action='store', help='Generator ID to search for') args = parser.parse_args() setup_logging(args.debug, request_logging=args.request_debug) print("Contacting Ofgem and preparing to search.\n") ocs = CertificateSearch() ocs.start() print("Filtering search:") if args.station: print(" - cannot filter results based on station name") if args.scheme: if ocs.filter_scheme(args.scheme): print(" - scheme {}".format(args.scheme)) else: print("\nFailed to filter for scheme.") sys.exit(0) if args.generator: if ocs.filter_generator_id(args.generator.upper()): print(" - generator id {}".format(args.generator.upper())) else: print("\nFailed to filter by generator") sys.exit(0) if args.period: if ocs.set_period(args.period): print(' - period should be {}'.format(args.period)) else: print("\nFailed to set period") sys.exit(0) if ocs.get_data() is False: print("No data was returned from the Ofgem server") sys.exit(0) print("Total of %d records returned" % len(ocs)) fmt = StdoutFormatter("10s", "8s", "35s", "6s", "10s", "12d") print( fmt.titles("Issue Date", "Period", "Station Name", "Scheme", "Status", "Certificates")) for cert in ocs.certificates(): print( fmt.row(cert.issue_dt.strftime("%Y-%m-%d"), cert.period, cert.name, cert.scheme, cert.status, cert.certificates))
def main(): parser = commandline_parser('Get ofgem certificates for a given month & year') parser.add_argument('--generator', action='store', help='Generator ID to search for') args = parser.parse_args() setup_logging(args.debug, request_logging=args.request_debug) print("Contacting Ofgem and preparing to search.\n") ocs = CertificateSearch() ocs.start() print("Filtering search:") if args.station: print(" - cannot filter results based on station name") if args.scheme: if ocs.filter_scheme(args.scheme): print(" - scheme {}".format(args.scheme)) else: print("\nFailed to filter for scheme.") sys.exit(0) if args.generator: if ocs.filter_generator_id(args.generator.upper()): print(" - generator id {}".format(args.generator.upper())) else: print("\nFailed to filter by generator") sys.exit(0) if args.period: if ocs.set_period(args.period): print(' - period should be {}'.format(args.period)) else: print("\nFailed to set period") sys.exit(0) if ocs.get_data() is False: print("No data was returned from the Ofgem server") sys.exit(0) print("Total of %d records returned" % len(ocs)) fmt = StdoutFormatter("10s", "8s", "35s", "6s", "10s", "12d") print(fmt.titles("Issue Date", "Period", "Station Name", "Scheme", "Status", "Certificates")) for cert in ocs.certificates(): print(fmt.row(cert.issue_dt.strftime("%Y-%m-%d"), cert.period, cert.name, cert.scheme, cert.status, cert.certificates))
def main(): """ Main command line function. """ build_command_names() parser = commandline_parser( "pywind command line app, version {}".format(__version__), epilog=commands_help()) parser.add_argument('command', nargs='?', help='Command to execute (see below for list)') args = parser.parse_args() if args.version: print("pywind version {}".format(__version__)) sys.exit(0) if args.apikey is not None and os.path.exists(args.apikey): print("Reading API Key from {}".format(args.apikey)) with open(args.apikey, 'r') as apifh: args.apikey = apifh.read().strip() cmd = COMMAND_NAMES.get(args.command, None) if cmd is None: if args.command is not None: print("Invalid command specified: {}".format(args.command)) print(commands_help()) sys.exit(0) setup_logging(args.debug, request_logging=args.request_debug, filename=args.log_filename) print("\n{}\n{}\n".format(cmd['name'], "=" * len(cmd['name']))) obj = cmd['function'](args) if args.save: filename = args.original or args.command if hasattr(obj, 'save_original'): if obj.save_original(filename) is False: print("Unable to save the downloaded data :-(") else: print("Downloaded data saved to {}".format(filename)) else: print("Saving data is not supported for this command.") if args.export is not None: export_to_file(args, obj)
def main(): """ Main command line function. """ build_command_names() parser = commandline_parser("pywind command line app, version {}".format(__version__), epilog=commands_help()) parser.add_argument('command', nargs='?', help='Command to execute (see below for list)') args = parser.parse_args() if args.version: print("pywind version {}".format(__version__)) sys.exit(0) cmd = COMMAND_NAMES.get(args.command, None) if cmd is None: if args.command is not None: print("Invalid command specified: {}".format(args.command)) print(commands_help()) sys.exit(0) setup_logging(args.debug, request_logging=args.request_debug, filename=args.log_filename) print("\n{}\n{}\n".format(cmd['name'], "=" * len(cmd['name']))) obj = cmd['function'](args) if args.save: filename = args.original or args.command if hasattr(obj, 'save_original'): if obj.save_original(filename) is False: print("Unable to save the downloaded data :-(") else: print("Downloaded data saved to {}".format(filename)) else: print("Saving data is not supported for this command.") if args.export is not None: export_to_file(args, obj)
def main(): """ Function that actually does the work :-) """ parser = commandline_parser('Download bulk information from Ofgem to produce an Excel spreadsheet') parser.add_argument('start', type=int, help='Period to start (YYYYMM)') parser.add_argument('end', type=int, help='Period to finish (YYYYMM)') parser.add_argument('--filename', default='certificates.xls', help='Filename to export to') parser.add_argument('--stations', nargs='*', help='Stations to search for') args = parser.parse_args() print(args) if not args.filename.endswith('.xls'): args.filename += '.xls' periods = [] start_dt = _convert_type(args.start, 'period') end_dt = _convert_type(args.end, 'period') for yyy in range(start_dt.year, end_dt.year + 1): mmm = start_dt.month if start_dt.year == yyy else 1 mm2 = end_dt.month if end_dt.year == yyy else 12 for mon in range(mmm, mm2+1): periods.append(date(yyy, mon, 1)) print("Period covered will be {} to {}. A total of {} periods". format(start_dt.strftime("%b-%Y"), end_dt.strftime("%b-%Y"), len(periods))) stations = [] station_names = args.stations or [] if args.input is not None: with open(args.input) as fh: for line in fh.readlines(): station = line.strip() if '#' in station: (station, dummy_junk) = station.split('#', 1) station_names.append(station) if len(station_names) > 0: print("Station names to be searched for:") for stat in station_names: print(" - {}".format(stat)) while True: station = raw_input("Enter a station name (or blank to finish)") if station.strip() == '': break if ',' in station: for s in station.strip().split(','): station_names.append(s) else: station_names.append(station) if len(station_names) == 0: print("No stations to process. Exiting...") sys.exit(0) print("\nSearching for stations...") for name in station_names: print(" - {}".format(name)) sss = StationSearch() sss.start() if sss.filter_name(name) and sss.get_data(): stations.extend(sss.stations) print(" found") else: print(" no stations found") print("A total of {} stations will be recorded".format(len(stations))) wbb = Workbook() add_station_sheet(wbb, stations) print("\nGetting certificate data (this is quicker)...") certificates = {} for station in stations: print(" - {}".format(station.name)) ocs = CertificateSearch() ocs.start() if ocs.filter_generator_id(station.generator_id) and \ ocs.set_start_month(start_dt.month) and \ ocs.set_start_year(start_dt.year) and \ ocs.set_finish_month(end_dt.month) and \ ocs.set_finish_year(end_dt.year) and \ ocs.get_data(): certificates[station.name] = ocs.cert_list add_certificate_sheet(wbb, station, ocs.certificates) print(" added to spreadsheet") else: print(" nothing to add") wbb.save(args.filename) print("\nData saved to {}".format(args.filename))
def main(): """ Function that actually does the work :-) """ parser = commandline_parser( 'Download bulk information from Ofgem to produce an Excel spreadsheet') parser.add_argument('start', type=int, help='Period to start (YYYYMM)') parser.add_argument('end', type=int, help='Period to finish (YYYYMM)') parser.add_argument('--filename', default='certificates.xls', help='Filename to export to') parser.add_argument('--stations', nargs='*', help='Stations to search for') args = parser.parse_args() print(args) if not args.filename.endswith('.xls'): args.filename += '.xls' periods = [] start_dt = _convert_type(args.start, 'period') end_dt = _convert_type(args.end, 'period') for yyy in range(start_dt.year, end_dt.year + 1): mmm = start_dt.month if start_dt.year == yyy else 1 mm2 = end_dt.month if end_dt.year == yyy else 12 for mon in range(mmm, mm2 + 1): periods.append(date(yyy, mon, 1)) print("Period covered will be {} to {}. A total of {} periods".format( start_dt.strftime("%b-%Y"), end_dt.strftime("%b-%Y"), len(periods))) stations = [] station_names = args.stations or [] if args.input is not None: with open(args.input) as fh: for line in fh.readlines(): station = line.strip() if '#' in station: (station, dummy_junk) = station.split('#', 1) station_names.append(station) if len(station_names) > 0: print("Station names to be searched for:") for stat in station_names: print(" - {}".format(stat)) while True: station = raw_input("Enter a station name (or blank to finish)") if station.strip() == '': break if ',' in station: for s in station.strip().split(','): station_names.append(s) else: station_names.append(station) if len(station_names) == 0: print("No stations to process. Exiting...") sys.exit(0) print("\nSearching for stations...") for name in station_names: print(" - {}".format(name)) sss = StationSearch() sss.start() if sss.filter_name(name) and sss.get_data(): stations.extend(sss.stations) print(" found") else: print(" no stations found") print("A total of {} stations will be recorded".format(len(stations))) wbb = Workbook() add_station_sheet(wbb, stations) print("\nGetting certificate data (this is quicker)...") certificates = {} for station in stations: print(" - {}".format(station.name)) ocs = CertificateSearch() ocs.start() if ocs.filter_generator_id(station.generator_id) and \ ocs.set_start_month(start_dt.month) and \ ocs.set_start_year(start_dt.year) and \ ocs.set_finish_month(end_dt.month) and \ ocs.set_finish_year(end_dt.year) and \ ocs.get_data(): certificates[station.name] = ocs.cert_list add_certificate_sheet(wbb, station, ocs.certificates) print(" added to spreadsheet") else: print(" nothing to add") wbb.save(args.filename) print("\nData saved to {}".format(args.filename))
def main(): parser = commandline_parser('Search ofgem database for matching stations') parser.add_argument('--generator', action='store', help='Generator ID to search for') parser.add_argument('--organisation', action='store', help='Organisation to search for') args = parser.parse_args() if args.station is None and \ args.generator is None and \ args.organisation is None: print("You must specify either a name, generator id or organisation") sys.exit(0) setup_logging(args.debug, request_logging=args.request_debug) print("Connecting with Ofgem website and preparing the search...") osd = StationSearch() osd.start() print("Setting up filters:") if args.station is not None: osd.filter_name(args.station) print(" - station name contains {}".format(args.station)) if args.organisation: osd.filter_organisation(args.organisation) print(" - organisation contains {}".format(args.organisation)) if args.generator: if args.generator.upper()[0] in ['R', 'P']: osd.filter_scheme('RO') elif args.generator.upper()[0] == 'G': osd.filter_scheme('REGO') osd.filter_generator_id(args.generator.upper()) print(" - generator ID is {}".format(args.generator.upper())) print("\nGetting results from Ofgem...\n") if osd.get_data() is False: print("Search returned no data") sys.exit(0) print("Query returned {} result{}".format(len(osd), '' if len(osd) == 0 else 's')) fmt = StdoutFormatter("35s", "13s", "12.2f", "20s", "20s", "15s") print( fmt.titles("Station Name", "Commission Dt", "Capacity", "Technology", "Country", "Generator ID")) for stat in osd.rows(): # The rows() output is intended for exporting, so fields will have '@' prepended # if they are attributes. # This could also be done by using osd.stations station = stat.get('Station') if station is None: continue cdt = station.get('@commission_dt') print( fmt.row(station.get('@name'), cdt.strftime("%Y-%m-%d") if cdt else 'n/a', station.get('@capacity'), station.get('@technology'), station.get('@country'), station.get('@generator_id')))
def main(): parser = commandline_parser('Search ofgem database for matching stations') parser.add_argument('--generator', action='store', help='Generator ID to search for') parser.add_argument('--organisation', action='store', help='Organisation to search for') args = parser.parse_args() if args.station is None and \ args.generator is None and \ args.organisation is None: print("You must specify either a name, generator id or organisation") sys.exit(0) setup_logging(args.debug, request_logging=args.request_debug) print("Connecting with Ofgem website and preparing the search...") osd = StationSearch() osd.start() print("Setting up filters:") if args.station is not None: osd.filter_name(args.station) print(" - station name contains {}".format(args.station)) if args.organisation: osd.filter_organisation(args.organisation) print(" - organisation contains {}".format(args.organisation)) if args.generator: if args.generator.upper()[0] in ['R', 'P']: osd.filter_scheme('RO') elif args.generator.upper()[0] == 'G': osd.filter_scheme('REGO') osd.filter_generator_id(args.generator.upper()) print(" - generator ID is {}".format(args.generator.upper())) print("\nGetting results from Ofgem...\n") if osd.get_data() is False: print("Search returned no data") sys.exit(0) print("Query returned {} result{}".format(len(osd), '' if len(osd) == 0 else 's')) fmt = StdoutFormatter("35s", "13s", "12.2f", "20s", "20s", "15s") print(fmt.titles("Station Name", "Commission Dt", "Capacity", "Technology", "Country", "Generator ID")) for stat in osd.rows(): # The rows() output is intended for exporting, so fields will have '@' prepended # if they are attributes. # This could also be done by using osd.stations station = stat.get('Station') if station is None: continue cdt = station.get('@commission_dt') print(fmt.row(station.get('@name'), cdt.strftime("%Y-%m-%d") if cdt else 'n/a', station.get('@capacity'), station.get('@technology'), station.get('@country'), station.get('@generator_id')))