diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..fd9abfc --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +.github +.git +forgejo +Industrial_Nikolaev_AA_9381 +reports \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index cf66b92..68ffeff 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,13 @@ -FROM python:3.10-slim +FROM python:3.12-slim +ENV GIT_PYTHON_GIT_EXECUTABLE=/usr/bin/git WORKDIR /app RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/* -COPY . /app - +COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt -ENV GIT_PYTHON_GIT_EXECUTABLE=/usr/bin/git +COPY . /app ENTRYPOINT ["python", "main.py"] diff --git a/main.py b/main.py index 4f068a5..e40f62c 100644 --- a/main.py +++ b/main.py @@ -41,7 +41,7 @@ def parse_args(): type=str, required=False, help='Starting cell for Google Sheets export (e.g., "A1", "B3")', - default=None + default="A1" ) parser.add_argument( @@ -117,11 +117,17 @@ def parse_args(): help='Specify Google sheet document id (can find in url)', ) parser.add_argument( - '--sheet_id', + '--sheet_name', type=str, required=False, help='Specify title for a sheet in a document in which data will be printed', ) + parser.add_argument( + "--clear_sheet", + action="store_true", + required=False, + help="Specify to clear sheet content before printing", + ) args = parser.parse_args() if args.export_google_sheets: @@ -130,7 +136,7 @@ def parse_args(): action.required = True if action.dest == 'table_id': action.required = True - if action.dest == 'sheet_id': + if action.dest == 'sheet_name': action.required = True return parser.parse_args() @@ -170,25 +176,24 @@ def run(args, binded_repos, repos_for_wiki=None): if args.wikis: wikipars.wikiparser(repos_for_wiki, args.download_repos, args.out) if args.export_google_sheets: - if args.start_cell: - export_sheets.write_data_to_table( - args.out, args.google_token, args.table_id, args.sheet_id, args.start_cell - ) - else: - export_sheets.write_data_to_table( - args.out, args.google_token, args.table_id, args.sheet_id - ) + export_sheets.write_data_to_table( + csv_path=args.out, + google_token=args.google_token, + table_id=args.table_id, + sheet_name=args.sheet_name, + start_cell=args.start_cell, + clear_content=args.clear_sheet, + ) def main(): args = parse_args() - if args.start_cell is not None: - try: - args.start_cell = validate_and_normalize_cell(args.start_cell) - except ValueError as e: - print(f"Error in start_cell argument: {e}") - sys.exit(1) + try: + args.start_cell = validate_and_normalize_cell(args.start_cell) + except ValueError as e: + print(f"Error in start_cell argument: {e}") + sys.exit(1) if args.token: tokens = [args.token] diff --git a/src/export_sheets.py b/src/export_sheets.py index 7e2c921..2d0d162 100644 --- a/src/export_sheets.py +++ b/src/export_sheets.py @@ -4,17 +4,17 @@ INT_MASS = [{"one": 1, "two": 2, "what?": 3}] -def write_data_to_table(csv_path, google_token, table_id, sheet_id, start_cell="A1"): - if google_token and sheet_id and table_id: +def write_data_to_table(csv_path, google_token, table_id, sheet_name, start_cell="A1", clear_content=False): + if google_token and sheet_name and table_id: gc = pygsheets.authorize(service_file=google_token) sh = gc.open_by_key(table_id) try: - sh.worksheets('title', sheet_id) + sh.worksheets('title', sheet_name) except Exception: - sh.add_worksheet(sheet_id) + sh.add_worksheet(sheet_name) - wk_content = sh.worksheet_by_title(sheet_id) + wk_content = sh.worksheet_by_title(sheet_name) if csv_path: df = pd.read_csv(csv_path, delimiter=',', encoding='utf-8') @@ -22,7 +22,8 @@ def write_data_to_table(csv_path, google_token, table_id, sheet_id, start_cell=" df = pd.DataFrame(INT_MASS) # Очистка существующих данных - wk_content.clear() + if clear_content: + wk_content.clear() # Запись новых данных - wk_content.set_dataframe(df, start_cell, copy_head=True) + wk_content.set_dataframe(df=df, start=start_cell, copy_head=True, nan='')