import asyncio import datetime import json import os import pathlib import re as regex import typing import click from travelogues_extraction.controller.main import FromAlmaOutputToExcel @click.command() @click.option('--input-file', help='Use .xlsx file as input', type=click.File()) @click.option('--ac-column', type=click.STRING, help= 'The column of the input file, where the ac numbers are. The column name is the string in the first row of the column', ) @click.option('--start', default=0, type=click.INT, help='The first record of the input file to extract the data') @click.option('--stop', default=None, type=click.INT, help='The last record of the input file to extract the data') @click.option('--output-file', help='Generate this .xlsx file', type=click.File()) @click.option('--log-file', default=None, help='If given, write a csv log that that file', type=click.File()) @click.option('--deep-log-file', default=None, help='If given, write a deep json log that that file', type=click.File()) def extract_data(input_file: str, output_file: str, ac_column: str, start: typing.Optional[int] = 0, stop: typing.Optional[int] = None, log_file: typing.Optional[str] = None, deep_log_file: typing.Optional[str] = None ): """ Takes an excel file with a column of ac numbers, gets data from alma, brings the data in excel like shape, and generates an excel file with this data """ loop = asyncio.new_event_loop() loop.run_until_complete(_extract_data(input_file, output_file, ac_column, start, stop, log_file, deep_log_file)) async def _extract_data(input_file: str, output_file: str, ac_column: str, start: typing.Optional[int] = 0, stop: typing.Optional[int] = None, log_file: typing.Optional[str] = None, deep_log_file: typing.Optional[str] = None) -> typing.NoReturn: input_file = pathlib.Path(input_file) output_path = pathlib.Path(output_file) converter = FromAlmaOutputToExcel(input_file, output_path.absolute(), slice(start, stop, 1), ac_column) await converter.runasync() await converter.close() converter.write() if log_file: converter.log.to_csv(log_file) # to do unblock if deep_log_file: with open(deep_log_file, 'w') as file: json.dump(converter.sub_log, file) if __name__ == '__main__': extract_data()