yeref 0.24.97__py3-none-any.whl → 0.24.98__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
yeref/yeref.py CHANGED
@@ -16019,14 +16019,13 @@ async def calc_metrics(bot, PROJECT_USERNAME, dataroom_folder_id, EXTRA_D, BASE_
16019
16019
  http_auth = credentials.authorize(httplib2.Http())
16020
16020
  sheets_service = build('sheets', 'v4', http=http_auth, cache_discovery=False)
16021
16021
 
16022
- # 2) Получаем metadata всей таблицы, чтобы увидеть, какие листы есть сейчас
16022
+ # 2) Получаем metadata всей таблицы и ищем лист «Лист1»/«Sheet1» для переименования
16023
16023
  spreadsheet = sheets_service.spreadsheets().get(spreadsheetId=dataroom_folder_id).execute()
16024
16024
  logger.info(f"До переименования. Найдено листов: {len(spreadsheet.get('sheets', []))}")
16025
16025
  for sheet in spreadsheet.get('sheets', []):
16026
16026
  props = sheet.get('properties', {})
16027
16027
  logger.info(f" • sheetId={props.get('sheetId')} title='{props.get('title')}'")
16028
16028
 
16029
- # 3) Ищем лист с названием «Лист1» или «Sheet1»
16030
16029
  sheet_id_to_rename = None
16031
16030
  original_title = None
16032
16031
  for sheet in spreadsheet.get('sheets', []):
@@ -16038,7 +16037,6 @@ async def calc_metrics(bot, PROJECT_USERNAME, dataroom_folder_id, EXTRA_D, BASE_
16038
16037
  logger.info(f"Найден лист для переименования: sheetId={sheet_id_to_rename}, title='{title}'")
16039
16038
  break
16040
16039
 
16041
- # 4) Если нашли, то переименовываем в PROJECT_USERNAME
16042
16040
  if sheet_id_to_rename is not None:
16043
16041
  rename_request = {
16044
16042
  'requests': [
@@ -16059,7 +16057,7 @@ async def calc_metrics(bot, PROJECT_USERNAME, dataroom_folder_id, EXTRA_D, BASE_
16059
16057
  ).execute()
16060
16058
  logger.info(f"Запрос на переименование отправлен: '{original_title}' → '{PROJECT_USERNAME}'")
16061
16059
 
16062
- # 5) Подтягиваем снова metadata, чтобы убедиться, что название поменялось
16060
+ # Проверим изменения
16063
16061
  spreadsheet_after = sheets_service.spreadsheets().get(spreadsheetId=dataroom_folder_id).execute()
16064
16062
  logger.info("После переименования. Список листов теперь:")
16065
16063
  for sheet in spreadsheet_after.get('sheets', []):
@@ -16068,42 +16066,77 @@ async def calc_metrics(bot, PROJECT_USERNAME, dataroom_folder_id, EXTRA_D, BASE_
16068
16066
  else:
16069
16067
  logger.warning("Не найден лист с названием 'Лист1' или 'Sheet1' — пропускаем переименование.")
16070
16068
 
16071
- # 6) Читаем CSV-файл (r1) целиком
16072
- with open(r1, newline='', encoding='utf-8') as csvfile:
16073
- reader = csv.reader(csvfile)
16074
- all_rows = list(reader)
16075
- logger.info(f"Прочитано {len(all_rows)} строк из файла {r1}.")
16076
-
16077
- # 7) Составляем диапазон для записи: используем PROJECT_USERNAME
16078
- # Если название листа может содержать пробелы или спецсимволы, оборачиваем в одинарные кавычки:
16079
- safe_title = PROJECT_USERNAME.replace("'", "\\'")
16080
- range_str = f"'{safe_title}'!A1"
16081
- logger.info(f"Будем записывать в диапазон: {range_str}")
16082
-
16083
- # 8) Формируем тело запроса на запись
16084
- write_body = {
16085
- 'valueInputOption': 'USER_ENTERED',
16086
- 'data': [
16087
- {
16088
- 'range': range_str,
16089
- 'majorDimension': 'ROWS',
16090
- 'values': all_rows
16091
- }
16092
- ]
16093
- }
16069
+ # 3) Подготовим список «таблиц» (r1–r5). Пробежимся по каждому r и, если файл существует, прочитаем его
16070
+ table_paths = [
16071
+ r1,
16072
+ r2 if 'r2' in locals() else None,
16073
+ r3 if 'r3' in locals() else None,
16074
+ r4 if 'r4' in locals() else None,
16075
+ r5 if 'r5' in locals() else None,
16076
+ ]
16077
+ tables = [] # будет список словарей { 'name': basename, 'rows': [[...], ...] }
16078
+ for idx, path in enumerate(table_paths, start=1):
16079
+ if path and os.path.isfile(path):
16080
+ basename = os.path.basename(path)
16081
+ with open(path, newline='', encoding='utf-8') as csvfile:
16082
+ reader = csv.reader(csvfile)
16083
+ rows = list(reader)
16084
+ logger.info(f"Для таблицы #{idx}: найден файл '{basename}', строк = {len(rows)}.")
16085
+ tables.append({'name': basename, 'rows': rows})
16086
+ else:
16087
+ logger.warning(f"Таблица #{idx}: файл не найден или не существует: {path}")
16094
16088
 
16095
- # 9) Делаем batchUpdate, чтобы записать всё из all_rows
16096
- try:
16097
- response = sheets_service.spreadsheets().values().batchUpdate(
16098
- spreadsheetId=dataroom_folder_id,
16099
- body=write_body
16100
- ).execute()
16101
- updated_cells = response.get('totalUpdatedCells', 0)
16102
- logger.info(f"Успешно записано в Google Sheets: обновлено ячеек = {updated_cells}.")
16103
- except Exception as e:
16104
- logger.error(f"Ошибка при записи в Google Sheets: {e}")
16089
+ if not tables:
16090
+ logger.warning("Ни один CSV-файл (r1–r5) не найден. Прерываем запись.")
16091
+ else:
16092
+ # 4) Вычисляем, куда вставлять каждый блок: начинаем с 1-й строки
16093
+ # и гарантируем между таблицами минимум 2 пустые строки
16094
+ safe_title = PROJECT_USERNAME.replace("'", "\\'")
16095
+ offset = 1 # строка, с которой вставляем следующий блок
16096
+ data_requests = []
16097
+
16098
+ for tbl in tables:
16099
+ # 4.1) Вставляем название файла (одна строка)
16100
+ header_range = f"'{safe_title}'!A{offset}"
16101
+ data_requests.append({
16102
+ 'range': header_range,
16103
+ 'majorDimension': 'ROWS',
16104
+ 'values': [[tbl['name']]]
16105
+ })
16106
+ logger.info(f"Добавили запрос на запись заголовка '{tbl['name']}' в A{offset}.")
16107
+ offset += 1
16108
+
16109
+ # 4.2) Вставляем саму таблицу (все строки CSV) сразу под названием
16110
+ data_range = f"'{safe_title}'!A{offset}"
16111
+ data_requests.append({
16112
+ 'range': data_range,
16113
+ 'majorDimension': 'ROWS',
16114
+ 'values': tbl['rows']
16115
+ })
16116
+ logger.info(
16117
+ f"Добавили запрос на запись {len(tbl['rows'])} строк таблицы '{tbl['name']}' в A{offset}.")
16118
+ offset += len(tbl['rows'])
16119
+
16120
+ # 4.3) Оставляем минимум 2 пустые строки перед следующей таблицей
16121
+ offset += 2
16122
+
16123
+ # 5) Выполняем единственный batchUpdate с all data_requests
16124
+ write_body = {
16125
+ 'valueInputOption': 'USER_ENTERED',
16126
+ 'data': data_requests
16127
+ }
16128
+ try:
16129
+ response = sheets_service.spreadsheets().values().batchUpdate(
16130
+ spreadsheetId=dataroom_folder_id,
16131
+ body=write_body
16132
+ ).execute()
16133
+ total_cells = response.get('totalUpdatedCells', 0)
16134
+ logger.info(f"Успешно записано в Google Sheets: всего обновлено ячеек = {total_cells}.")
16135
+ except Exception as e:
16136
+ logger.error(f"Ошибка при записи всех таблиц в Google Sheets: {e}")
16105
16137
  else:
16106
- logger.warning(f"Файл с метриками не найден или не существует: {r1}")
16138
+ logger.warning(f"Файл r1 не найден или не существует: {r1}")
16139
+
16107
16140
 
16108
16141
  except Exception as e:
16109
16142
  logger.info(log_ % str(e))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: yeref
3
- Version: 0.24.97
3
+ Version: 0.24.98
4
4
  Summary: desc-f
5
5
  Author: john smith
6
6
  Dynamic: author
@@ -0,0 +1,8 @@
1
+ yeref/__init__.py,sha256=Qpv3o6Xa78VdLcsSRmctGtpnYE9btpAkCekgGhgJyXM,49
2
+ yeref/l_.py,sha256=LMX_olmJwq-tgoALJCnhV_fGrL_i_43yBLkLIcEVqGo,1176743
3
+ yeref/tonweb.js,sha256=Jf6aFOQ1OIY4q7fINYz-m5LsI3seMus124M5SYYZmtE,443659
4
+ yeref/yeref.py,sha256=p6g9zw-LRJx_rpHe7tTAR2BA7Rdsuz5PAtKwlNKf_nI,1057610
5
+ yeref-0.24.98.dist-info/METADATA,sha256=EIc6Ur84xwVbYbNOYxbr5B7cwkQTgtLwMLmfOQFQl2s,119
6
+ yeref-0.24.98.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
7
+ yeref-0.24.98.dist-info/top_level.txt,sha256=yCQKchWHbfV-3OuQPYRdi2loypD-nmbDJbtt3OuKKkY,6
8
+ yeref-0.24.98.dist-info/RECORD,,
@@ -1,8 +0,0 @@
1
- yeref/__init__.py,sha256=Qpv3o6Xa78VdLcsSRmctGtpnYE9btpAkCekgGhgJyXM,49
2
- yeref/l_.py,sha256=LMX_olmJwq-tgoALJCnhV_fGrL_i_43yBLkLIcEVqGo,1176743
3
- yeref/tonweb.js,sha256=Jf6aFOQ1OIY4q7fINYz-m5LsI3seMus124M5SYYZmtE,443659
4
- yeref/yeref.py,sha256=jdG1SO9WRV8e0o8HjviTOMG-m4rxya1lcClakmVDVZc,1055625
5
- yeref-0.24.97.dist-info/METADATA,sha256=MNCnHGJUW1SZaDvGSRhQClVxHOkxpX0KrrOI50o-aDM,119
6
- yeref-0.24.97.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
7
- yeref-0.24.97.dist-info/top_level.txt,sha256=yCQKchWHbfV-3OuQPYRdi2loypD-nmbDJbtt3OuKKkY,6
8
- yeref-0.24.97.dist-info/RECORD,,